www.pudn.com > DDS485.rar > iic.c
#include#include #include #include //-----***-IIC延时-***-----// void wait(void) { _nop_();//01 _nop_();//02 _nop_();//03 _nop_();//04 _nop_();//05 _nop_();//06 _nop_();//07 _nop_();//08 _nop_();//09 _nop_();//10 } void iicstart(void)//总线开始 { iicsda=1; wait(); iicscl=1; wait(); iicsda=0; wait(); iicscl=0; wait(); } void iicstop(void)//总线结束 { iicsda=0; wait(); iicscl=1; wait(); iicsda=1; wait(); } bit ack(void)//检测 { bit t; iicsda=1; wait(); iicscl=1; wait(); t=iicsda; iicscl=0; wait(); return t; } void noack(bit ack)//非检测 { iicsda=ack; wait(); iicscl=1; wait(); iicscl=0; wait(); } bit w8bitiic(unsigned char templ) { unsigned char i; bit t; for(i=0;i<8;i++) { if(templ&0x80) iicsda=1; else iicsda=0; wait(); iicscl=1; wait(); iicscl=0; templ<<=1; } t=ack(); return t; } unsigned char r8bitiic(void) { unsigned char i; unsigned char byte=0; iicsda=1; for(i=0;i<8;i++) {iicscl=1; byte<<=1; if(iicsda)byte|=0x01; else byte|=0x00; iicscl=0; } return byte; } void wbyteiic(unsigned char deviceaddress,unsigned char dateaddress,unsigned char byte) { iicwp=0; Delay(500); EA=0; iicstart(); w8bitiic(deviceaddress); w8bitiic(dateaddress); w8bitiic(byte); iicstop(); EA=1; iicwp=1; Delay(500); } unsigned char rbyteiic(unsigned char deviceaddress,unsigned char dateaddress) { unsigned char c; EA=0; iicstart(); w8bitiic(deviceaddress); w8bitiic(dateaddress); iicstart(); w8bitiic(deviceaddress|0x01); c=r8bitiic(); noack(1); iicstop(); EA=1; return(c); } //-----***-无扇区读---多字节-***-----// //读取指定器件无扇区指定地址多字节数据到指定地址 //Device=器件地址---单字节 //DataAdd=字节地址---单字节 void IicMByteRead(unsigned char deviceaddress,unsigned char dateaddress,unsigned char *DataDptr,unsigned char DataLend) { unsigned char i; EA=0; iicstart(); w8bitiic(deviceaddress); w8bitiic(dateaddress); iicstart(); w8bitiic(deviceaddress|0x01); for(i=0;i