Re: 16f88 從幾 IIC AN734 問題
|
||||
---|---|---|---|---|
新會員
|
代碼:
#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
|
|||
|
16f88 從幾 IIC AN734 問題
|
||||
---|---|---|---|---|
新會員
|
我最近在開發一個iic從幾,使用的是pic16f88。
我根據 an734 上的五個狀態進行主機命令判斷,寫了一個測試程序,主機使用pic18f4620。以前用16f73做從幾,利用5個中斷狀態判斷都沒有問題,可是現在用16f88出問題了,大哥們幫忙看看可能是什麽問題? 代碼和問題如下:
發表於: 2008/3/26 17:01
|
|||
|