|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
版主,請(qǐng)看看P89LPC922 i2c從機(jī)通訊方式接收數(shù)據(jù)是否正確。 |
| 作者:wujb18 欄目:MCU技術(shù) |
請(qǐng)問(wèn)高人,我現(xiàn)在把單片機(jī)用在I2C的從方式的情況下與另一處理器通訊,請(qǐng)幫我分析一下,是否正確, void main() { WDCON = 0xE1; P0M1 = 0x00;//i/o P0M2 = 0x00; P1M1 = 0x1c;//i/o P1M2 = 0x0c; P3M1 = 0x00;//i/o P3M2 = 0x00; TRIM = 0x40; DIVM = 0x02; EI2C = 1;/* 開(kāi)I2C中斷 */ EA = 1; P0 = 0xff; SetBus(); while(1) { if(Int_Flag == 1) { temp1 = Motion_rd_asic(0xfc); Int_Flag = 0; } if(Pre_Flag == 1) { Byte_wr_asic(data_adr,EEPROM[data_adr]); //單字節(jié)數(shù)據(jù)寫(xiě)操作 Pre_Flag = 0; } if(Mot_Flag == 1) { Motion_wr_asic(data_adr,EEPROM[data_adr],(EEPROM[data_adr]+1)); //雙字節(jié)數(shù)據(jù)寫(xiě)操作 Mot_Flag = 0; } } } bit RcvByte(uCHAR *c) { I2CON = RELEASE_BUS_ACK; while( SI==0 ); if( I2STAT==0xA0 ) { I2CON = RELEASE_BUS_ACK; return(0); } *c = I2DAT; return(1); } bit SendByte(uCHAR c) { if( I2STAT==0xC0 ) { I2CON = RELEASE_BUS_ACK; return(0); } I2DAT = c; I2CON = RELEASE_BUS_ACK; while( SI==0 ); return(1); } void SetBus() { I2ADR = 0xfe; I2CON = RELEASE_BUS_ACK; } /**************************************************************** * I2C 中斷服務(wù)函數(shù) * 功能:用于監(jiān)控總線上的信號(hào),并對(duì)主機(jī)作出響應(yīng)。 ****************************************************************/ void I2c_Int(void) interrupt 6 { unsigned CHAR indata; SWITCH(I2STAT) { case RDSLA: SendByte(temp1);break; case WRSLA: if( RcvByte(&indata)==0 ) break; data_adr = indata; if( data_adr>0xdf ) while(1) { if( RcvByte(&indata)==0 ) break; EEPROM[data_adr] = indata; Pre_Flag = 1; if( data_adr>0xdf ) data_adr = 0; } break; // 接收地址小于0xdf單字節(jié)數(shù)據(jù),接收到就發(fā)送出去,通過(guò)并行操作寫(xiě)出去。 if( data_adr>0xfd ) data_adr = 0; while(1) { if( RcvByte(&indata)==0 ) break; EEPROM[data_adr] = indata; data_adr++; Mot_Flag = 1; if( data_adr>0xfd ) data_adr = 0; } break; //接收地址大于0xdf雙字節(jié)數(shù)據(jù),接收到就發(fā)送出去,通過(guò)并行操作寫(xiě)出去。 default: break; } I2CON = 0x44; } 請(qǐng)幫我看看有什么地方不對(duì)的請(qǐng)高手發(fā)表意見(jiàn)。我沒(méi)有用P89LPC922 i2c從機(jī)通訊方式。 |
| 2樓: | >>參與討論 |
| 作者: zlgmcu 于 2006/8/22 14:36:00 發(fā)布:
您可以與銷售聯(lián)系,索要范例程序. * - 本貼最后修改時(shí)間:2006-8-22 14:37:21 修改者:zlgmcu |
|
| 3樓: | >>參與討論 |
| 作者: wujb18 于 2006/8/22 14:42:00 發(fā)布:
沒(méi)有人能給分析一下嗎? 沒(méi)有人能給分析一下嗎? |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |