2049: unsigned char I2CReadWrite(unsigned char val) 2050: { 2051: unsigned char i; 2052: ACC = val;//取写入数据 C:0x18D3 EF MOV A,R7 2053: for (i = 8; i > 0; i --) {//收发8位数据 C:0x18D4 7F08 MOV R7,#0x08 2054: SCL = 0;//拉低I2C时钟 C:0x18D6 C286 CLR SCL(0x80.6) 2055: _rlca_();//左移1位数据(取出1位写入数据) C:0x18D8 33 RLC A 2056: SDA = CY;//写入1位I2C数据 C:0x18D9 9287 MOV SDA(0x80.7),C 2057: _rrca_();//右移1位还原数据 2058: // _nop_();_nop_();_nop_();_nop_();_nop_();//延时4.7uS 2059: //如果不追求高速,可在此加入一些总线冲突裁决程序 2060: //即SDA=1时,读回若为0则为总线冲突 C:0x18DB 13 RRC A 2061: SCL = 1;//拉高I2C时钟 C:0x18DC D286 SETB SCL(0x80.6) 2062: CY = SDA;//读回1位I2C数据 C:0x18DE A287 MOV C,SDA(0x80.7) 2063: _rlca_();//左移最后1位数据 C:0x18E0 33 RLC A 2064: } C:0x18E1 DFF3 DJNZ R7,C:18D6 2065: SCL = 0;//拉低I2C时钟 C:0x18E3 C286 CLR SCL(0x80.6) 2066: return ACC;//返回读回数据 C:0x18E5 FF MOV R7,A 2067: } C:0x18E6 22 RET |
文章评论(0条评论)
登录后参与讨论