精品文档
unsigned char I2C_write_byte(unsigned char indata) {
unsigned char i, ack;
// I2C 发送8 位数据 for (i=0; i<8; i++) {
// 高在前低在后 if (indata & 0x80) SDA = 1; else SDA = 0;
// 发送左移一位 indata <<= 1; delayNOP(); SCL = 1; delayNOP(); SCL = 0; }
// 设置SDA为输入 SDA =1;; delayNOP();
// 读取从机应答状态 SCL = 1;
delayNOP();
if(SDA) {
ack = I2C_NACK; }
收集于网络,如有侵权请联系管理员删除
精品文档
else {
ack = I2C_ACK; } SCL = 0;
return ack; }
读一个字节子程序
unsigned char I2C_read_byte(unsigned char ack) {
unsigned char i, data1 = 0;
// SDA 设置输入方向 SDA = 1;
// I2C 接收8位数据 for(i = 8; i > 0; i--) {
data1 <<= 1; SCL = 1; delayNOP();
// 高在前低在后 if (SDA) {
data1++;
}
SCL = 0; delayNOP(); }
// 主机发送应答状态 if(ack == I2C_ACK)
收集于网络,如有侵权请联系管理员删除
精品文档
SDA = 0; else SDA = 1;
delayNOP(); SCL = 1; delayNOP(); SCL = 0;
return data1; }
Delay延迟程序 #include %us延时子程序 void delayNOP() {
_nop_();_nop_();_nop_();_nop_(); }
ms延时子程序
void delayms( unsigned int ms) {
unsigned char k; while(ms--) {
for(k = 0; k < 120; k++); } }
收集于网络,如有侵权请联系管理员删除