IIC代码

来源:互联网 发布:archlinux vim python 编辑:程序博客网 时间:2024/05/17 23:51
void Delay5us()//@11.0592MHz{unsigned char i;_nop_();i = 11;while (--i);}void Delay10ms()//@11.0592MHz{unsigned char i, j;i = 108;j = 145;do{while (--j);} while (--i);}//起始条件void IIC_Start(void){SDA = 1;SCL = 1;Delay5us();SDA = 0;Delay5us();SCL = 0;}//停止条件void IIC_Stop(void){SDA = 0;SCL = 1;Delay5us();SDA = 1;}//应答void IIC_Ack(unsigned char ackbit){if(ackbit) {SDA = 0;}else {SDA = 1;}Delay5us();SCL = 1;Delay5us();SCL = 0;SDA = 1; Delay5us();}//等待应答 bit IIC_WaitAck(void){SDA = 1;Delay5us();SCL = 1;Delay5us();if(SDA)    {   SCL = 0;IIC_Stop();return 0;}else  { SCL = 0;return 1;}}//向IIC发送一个字节  void IIC_SendByte(unsigned char byt){unsigned char i;for(i=0;i<8;i++){   if(byt&0x80) {SDA = 1;}else {SDA = 0;}Delay5us();SCL = 1;byt <<= 1;Delay5us();SCL = 0;}}//从IIC接收一个字节 unsigned char IIC_RecByte(void){unsigned char da;unsigned char i;for(i=0;i<8;i++){   SCL = 1;Delay5us();da <<= 1;if(SDA) da |= 0x01;SCL = 0;Delay5us();}return da;}/*PCF8591初始化 */void Pcf8591Init(unsigned char channel){IIC_Start();   IIC_SendByte(0x90);IIC_WaitAck();IIC_SendByte(channel);IIC_WaitAck();IIC_Stop();Delay10ms();}/*PCF8591读取数据  */unsigned Pcf8591Reard(void){unsigned char temp;IIC_Start();IIC_SendByte(0x91);IIC_WaitAck();temp = IIC_RecByte();IIC_Ack(0);IIC_Stop();return temp;}/*向AT24C02写数据 */void Write_AT24C02(unsigned char add,unsigned char date){IIC_Start();IIC_SendByte(0xa0); IIC_WaitAck(); IIC_SendByte(add);IIC_WaitAck(); IIC_SendByte(date); IIC_WaitAck(); IIC_Stop();Delay10ms();}/*从AT24C02读数据*/unsigned char Read_AT24C02(unsigned char add){unsigned char temp;IIC_Start();IIC_SendByte(0xa0);IIC_WaitAck();IIC_SendByte(add);IIC_WaitAck();IIC_Start();IIC_SendByte(0xa1);IIC_WaitAck();temp = IIC_RecByte(); IIC_Ack(0);IIC_Stop();return temp;}
0 0
原创粉丝点击