C51 GPIO口模拟IIC读写24CXX
2017-08-08 22:25
639 查看
#include <reg52.h> #define delayNOP() {_nop_(); _nop_(); _nop_(); _nop_();} //IIC 开始信号 void iic_start(void) { SDA = 1; SCL = 1; delayNOP(); SDA = 0; delayNOP(); SCL = 0; } //IIC 停止信号 void iic_stop(void) { SDA = 0; delayNOP(); SCL = 1; delayNOP(); SDA = 1; } //IIC 写字节 bit iic_write(u8 dat) { bit ack; int i=0; SCL = 0; for(i=0; i<8; i++) { SDA = (bit)((dat<<i)& 0x80); _nop_(); SCL = 1; delayNOP(); SCL = 0; } SDA = 1;//释放SDA delayNOP(); SCL = 1; delayNOP(); ack = SDA; //读取应答位 从器件应答 SCL = 0; return ack; } //IIC读字节 u8 iic_read(void) { u8 i, read_dat=0; for (i=0; i<8; i++) { SCL = 1; read_dat <<= 1; read_dat |= SDA; SCL = 0; } return read_dat; } void write_byte(u8 addr, u8 dat) { iic_start(); iic_write(0xa0); iic_write(0x00); //20C64 双地址 H L iic_write(addr); iic_write(dat); iic_stop(); mdelay(10); } u8 read_byte(u8 addr) { u8 dat; iic_start(); iic_write(0xa0); iic_write(0x00); //20C64 双地址 H L iic_write(addr); iic_start(); iic_write(0xa1); dat = iic_read(); iic_stop(); return dat; }
相关文章推荐
- STM32模拟IIC读写24CXX
- msp430g2533之iic(gpio模拟iic)
- GPIO模拟IIC代码模板
- 00025-----GPIO模拟IIC总线程序
- GPIO软件模拟IIC时序--转载
- 用s5pc100的GPIO模拟IIC
- 学习笔记——51通过IO口模拟IIC实现AT24C02的读写
- STM32模拟IIC读写AT24CXX
- 使用GPIO模拟IIC的遇到的N个问题
- GPIO模拟IIC代码模板
- 瑞萨CPU平台的GPIO模拟I2C之二:读数据,基础读写调用
- 瑞萨CPU平台的GPIO模拟I2C之三:SPHE1002读写调用
- Gpio模拟i2c总线对24c02进行读写
- gpio软件模拟IIC与硬件IIC驱动有什么区别
- 关于温湿度SHT20传感器,用普通GPIO口来模拟IIC实现驱动
- AT24Cxx芯片读写--IIC总线
- GPIO模拟IIC接口信号质量分析
- GPIO模拟IIC过程中对IIC的理解
- 防止GPIO模拟IIC驱动被其他线程打断的方法
- 【转载】2440的GPIO模拟IIC程序