【文件属性】:
文件名称: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)