IIC应用--24c02(C语言)

时间:2015-02-25 13:00:50
【文件属性】:

文件名称:IIC应用--24c02(C语言)

文件大小:23KB

文件格式:RAR

更新时间:2015-02-25 13:00:50

IIC应用--24c02(C语言)

/*********************************************************** 实验名称:24C02储存开机次数实验 程序说明:该试验功能是单片机复位一次,自动从24C02中读取数据 然后加1,最终数码管中的数据就是开机的次数,具有一定的实用意义 烧写后用手按复位键可以看到数码管每按一下加一,也可以断电再开机 **********************************************************/ #include "STC89C51RC_RD_PLUS.H" #include #define uchar unsigned char #define uint unsigned int code unsigned char seg7code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0xff}; //共阳数码管段码 sbit SDA=P1^5; //定义数据线 sbit SCL=P1^4; //定义时钟线 bit flag; uint idata ucSendBuffer[1]=0; uint idata ucReceData; void delay(void); void delay_10ms(void); void ACK(); void NoACK(); /******************************************/ /* 延时子程序 */ /******************************************/ void delay(void) { uint i; for(i=100;i>0;i--) _nop_(); } void delay1ms() { uchar i; for(i=124;i>0;i--); //延时124*8+10=1002us } /********************************************************* **名称:I2C_Start **功能:启动I2C **输入:无 **返回:无 *********************************************************/ void I2C_Start() { SDA=1; delay(); SCL=1; delay(); SDA=0; delay(); SCL=0; //钳位I2C总线,准备发送数据 } /********************************************************** **名称:I2C_Stop **功能:停止I2C **输入:无 **返回:无 **********************************************************/ void I2C_Stop() { SDA=0; delay(); SCL=1; delay(); SDA=1; delay(); } /********************************************************** **名称:Ack **功能:应答信号 **输入:无 **返回:无 **********************************************************/ void Ack() { SDA=0; delay(); SCL=1; delay(); SCL=0; delay(); SDA=1; delay(); } /******************************************************** **名称:NoAck **功能:发送非应答信号 **输入:无 **返回:无 ********************************************************/ void NoAck() { SDA=1; delay(); SCL=1; delay(); SCL=0; delay(); SDA=0; delay(); } /******************************************************** **名称:Test_Ack() **功能:检测应答位 **输入:无 **返回:flag,有应答时flag为0,无应答时flag为1 *********************************************************/ bit Test_Ack() { SCL=0; SDA=1;//读入数据 _nop_();_nop_();_nop_();_nop_(); SCL=1; _nop_();_nop_();_nop_();_nop_(); if(SDA==0) flag=1; else flag=0; SCL=0; return(flag); } /******************************************************** **名称:SendData() **功能:发送一字节数据 **输入:buffer **返回: *******************************************************/ void SendData(uint buffer) { uint BitCnt=8;//一字节8位 uint temp=0; do { temp=buffer; SCL=0; delay(); if((temp&0x80;)==0) //判断最高位是0还是1 SDA=0; else SDA=1; delay(); SCL=1; temp=_crol_(buffer,1);//将buffer中的数据左移一位 buffer=temp; BitCnt--; } while(BitCnt); SCL=0; } /************************************************************** **名称:uint ReceiveData() **功能:接收一字节数据 **输入: **返回:ucReceData **说明:将接收的数据存放在ucReceData中 **************************************************************/ uint ReceiveData() { uint BitCnt=8; uint temp=0; SDA=1;//读入数据 do { SCL=0; delay(); SCL=1; delay(); if(SDA==1) ucReceData=ucReceData|0x01; //低位置1 else ucReceData=ucReceData&0x0fe; //低位清0 if(BitCnt-1) { temp=_crol_(ucReceData,1); //数据左移一位 ucReceData=temp; } BitCnt--; } while(BitCnt); SCL=0; return(ucReceData); } /************************************************************* **名称:bit WriteNByte() **功能:主机向24C02中写入多字节数据 **输入: **返回: **说明:sla-器件地址 suba-数据地址,*s-写入的数据,n-写入的字节数(n<=8) **************************************************************/ bit WriteNByte(uint sla,uint suba,uint *s,uint n) { uint i; I2C_Start();//启动I2C SendData(sla);//发送器件地址 Test_Ack(); // if(flag==0) return(0); SendData(suba); Test_Ack(); //if(flag==0) return(0); for(i=0;i


【文件预览】:
IIC应用--24c02(C语言)
----I2C_24C02.LST(13KB)
----I2C_24C02.M51(16KB)
----I2C_24C02_Opt.Bak(835B)
----I2C_24C02(11KB)
----I2C_24C02.lnp(50B)
----I2C_24C02.hex(3KB)
----I2C_24C02.C(7KB)
----I2C_24C02.plg(232B)
----I2C_24C02.Opt(836B)
----STC89C51RC_RD_PLUS.H(3KB)
----I2C_24C02_Uv2.Bak(2KB)
----I2C_24C02.OBJ(13KB)
----I2C_24C02.Uv2(2KB)

网友评论