• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
  • slider image 488
  • slider image 491
:::


Browsing this Thread:   1 Anonymous Users






Re: 16f88 從幾 IIC AN734 問題
#3
新會員
新會員


查看用戶資訊
代碼很少,除了初始化就是在中斷函數中判斷SSPSTAT寄存器狀態然後處理,通訊過程是這樣的

第一种過程的問題:
1 主機---start + write + address --->從幾
2 主機--- data --->從幾
3 主機--- restart
4 主機--- read+ address --->從幾
5 從幾--- write byte1 -----> 主機
6 從幾--- write byte2 -----> 主機
7 主機---stop
這樣通訊的話,前兩個過程用上面的從機代碼可以結束,從幾代碼處理完 case(00001001)和case(00101001)之後,示波器上看見了前兩個波形和應答,但是主機發送重啓之後,再發送讀命令和從機地址之後,從機就無法進入case3了,並且對於主機命令在示波器上也看不見ACK。不知道是不是主機restart之後從機是否要特殊處理?

後來我又弄了第二种通訊,就是主機直接向從機請求數據從幾代碼不變
1 主機--- start + read+ address --->從幾
2 從幾--- write byte1 -----> 主機
3 從幾--- write byte2 -----> 主機
4 主機---stop
這樣的話,從幾可以直接進入case3並向主機發送數據,可是也是有問題,從幾的數據發送不對,而且稍微受到干擾,從幾似乎就會把SCL拉低,再也不釋放,只有重啓從機才能工作,

不知道論壇裏的各位大哥是否用過AN734的判斷。這個從機代碼在PIC16f73上是沒問題的。不知道爲什麽在88上就不行呢。鬱悶啊。。。。。。。。。。。。

發表於: 2008/3/26 17:17
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 16f88 從幾 IIC AN734 問題
#2
新會員
新會員


查看用戶資訊
代碼:
#include <pic.h>

__CONFIG(HS & WDTDIS & PWRTEN & BOREN);

void SYS_init(void); //系统初始化函数
void InitIIC(void);

signed int new_heading;
unsigned char jj;

void main()
{
SYS_init(); //系统初始化
InitIIC(); //初始化IIC
new_heading = 222;

while(1)
{
WCOL = 0;
SSPOV = 0;
GIE=0;
InitIIC();
GIE=1;
jj = 0xff;
while(--jj);
}
}

void SYS_init()
{
PORTB = 0x0;// PORTB的输出为RB5为高电平,指示灯灭
TRISB = 0xff;// PORTB的方向:RB<2:输入(开关信号),RB<7:3,0>为输出.1>为

//设置中断
RCIF=0;
TMR1IE=0;
TMR2IE=0;

RBIE=0; //禁止PORTB中断
RCIE=0;
SSPIE=1; //允许IIC中断
TXIE=0; //禁止串口发送中断.
PEIE=1; //允许外设中断

ADFM=1;
ADCS2=0;
ADCS1=0;
ADCS0=0;

GIE=1; //允许中断
}

void InitIIC()
{
SSPIE = 1; //SSP中断开

SSPSTAT &= 0x1F; // power on state
SSPCON = 0x36; //选择从动方式
SSPADD = 0xD0; //器件地址设计为0xD0
SSPEN = 1;
}
//-----------------------------------------------------------------------------
void interrupt ISP()
{
unsigned char ch = 0xff;
unsigned char temp = 0;

if( SSPIF )
{

temp = SSPSTAT & 0b00101101; // Mask out unimportant bits in SSPSTAT
SSPIF = 0;
switch (temp)
{
// State 1:寫地址命令,
// SSPSTAT bits: S = 1, D_A = 0, R_W = 0, BF = 1
case ( 0b00001001 ):
temp = SSPBUF; // Do a dummy read of SSPBUF
SSPOV = 0;
break;

// State 2: 寫數據命令
// SSPSTAT bits: S = 1, D_A = 1, R_W = 0, BF = 1
case ( 0b00101001 ):
temp = SSPBUF;
SSPOV = 0;
break;

// State 3: 讀地址, last byte was an address, buffer is empty.
// SSPSTAT bits: S = 1, D_A = 0, R_W = 1, BF = 0
case ( 0b00001100 ):
{
GIE=0;
//主機向扩從機读取端口数据
new_heading += 1;
// if(new_heading > 255) new_heading = 0;
do{
WCOL = 0;
SSPBUF = 0; //發送低位
}while(WCOL && --ch);
CKP = 1;
ch = 0xff;
while(!SSPIF && --ch) ;
SSPIF=0;

ch = 0xff;
do{
WCOL = 0;
SSPBUF = new_heading & 0xff; //發送高位
}while(WCOL && --ch);
CKP = 1;
ch = 0xff;
while(!SSPIF && --ch) ;
SSPIF=0;
GIE=1;
}
break;

// State 4: 讀數据, last byte was data, buffer is empty.
// SSPSTAT bits: S = 1, D_A = 1, R_W = 1, BF = 0
case ( 0b00101000 ):
CKP = 1;
break;

default:
SSPOV = 0;
SSPIF = 0;
InitIIC();
break;
}
}
}

發表於: 2008/3/26 17:05
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


16f88 從幾 IIC AN734 問題
#1
新會員
新會員


查看用戶資訊
我最近在開發一個iic從幾,使用的是pic16f88。
我根據 an734 上的五個狀態進行主機命令判斷,寫了一個測試程序,主機使用pic18f4620。以前用16f73做從幾,利用5個中斷狀態判斷都沒有問題,可是現在用16f88出問題了,大哥們幫忙看看可能是什麽問題?

代碼和問題如下:

發表於: 2008/3/26 17:01
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------