2011-09-17 嵌入式栏目 I2C串口总线驱动程序(汇编语言) 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182;I2C串口总线驱动程序;作者:龙昌;博客:http://www.xefan.com;请根据自己的实际情况定义SCL和SDA;延时4.7us以上,我的是12MHz的晶振,请根据自己的晶振频率相应增删NOP条数_NOP: NOP NOP NOP NOP NOP RET;发送开始信号I2CB: SETB SDA NOP SETB SCL ACALL _NOP CLR SDA ACALL _NOP CLR SCL RET;发送结束信号I2CE: CLR SDA NOP SETB SCL ACALL _NOP SETB SDA ACALL _NOP CLR SCL RET;发送应答(ACK)MACK: CLR SDA NOP SETB SCL ACALL _NOP CLR SCL RET;发送非应答(/ACK)MNACK: SETB SDA NOP SETB SCL ACALL _NOP CLR SCL RET;发送一个字节数据,要发送的数据存放在A寄存器中SendB: MOV R5,#8SendB1: RLC A MOV SDA,C NOP SETB SCL ACALL _NOP CLR SCL DJNZ R5,SendB1 ;接收ACK SETB SDA NOP SETB SCL NOP NOP MOV C,SDA MOV ACK,C CLR SCL RET;接收一个字节的数据,接收完后存放在A寄存器中RecvB: MOV R5,#8RecvB1: SETB SDA NOP SETB SCL NOP NOP MOV C,SDA RLC A CLR SCL DJNZ R5,RecvB1 RET Newer Ubuntu 10.10 crosstool ARM交叉编译 Older I2C协议说明