关于外部存储器24C02的C程序
#include
#include
//*********************** sbit SDA=P2^0;
sbit SCL=P2^1;
//************************ //************************ unsigned char Address; unsigned char I2CData; //************************ /********************************************************************
*********/
//定义累加器A中的各位
sbit a0 = ACC ^ 0;
= ACC ^ 1; sbit a1
sbit a2 = ACC ^ 2;
= ACC ^ 3; sbit a3
sbit a4 = ACC ^ 4; sbit a5 = ACC ^ 5; sbit a6 = ACC ^ 6; sbit a7 = ACC ^ 7; /********************************************************************
********/
bit ack=0; //应答信号标志位。
//*********************************
void delay()
{
unsigned char i,j,k; k=15;
do{
i=255;
do{j=255;
do{j--;}
while(j);
i--;
}while(i);
k--;
}while(k);
}
//****************************** //****************************** //发送开始信号
//I2C总线的起始信号的程序。
void I2C_START()
{
SCL=1;
SDA=1;
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
SCL=0;
}
//******************************
//****************************** //送八位数据
//主器件送从器件8位数据。
void I2C_SEND8BIT(unsigned char send_data) {
ACC=send_data;
SDA=a7; SCL=1; _nop_(); _nop_(); SCL=0; SDA=a6; SCL=1; _nop_(); _nop_(); SCL=0; SDA=a5; SCL=1; _nop_(); _nop_(); SCL=0; SDA=a4; SCL=1; _nop_(); _nop_(); SCL=0; SDA=a3; SCL=1; _nop_(); _nop_(); SCL=0; SDA=a2; SCL=1; _nop_(); _nop_(); SCL=0; SDA=a1; SCL=1; _nop_(); _nop_(); SCL=0; SDA=a0; SCL=1; _nop_(); _nop_(); SCL=0; }
//******************************
//****************************** //接收八位数据
//主器件接收从器件指定地址的8位数据。
unsigned char I2C_RECEIVE8BIT() {
SDA=1;
SCL=1; _nop_(); _nop_(); a7=SDA; SCL=0; SCL=1; _nop_(); _nop_(); a6=SDA; SCL=0; SCL=1; _nop_(); _nop_(); a5=SDA; SCL=0; SCL=1; _nop_(); _nop_(); a4=SDA; SCL=0; SCL=1; _nop_(); _nop_(); a3=SDA; SCL=0; SCL=1; _nop_(); _nop_(); a2=SDA; SCL=0; SCL=1; _nop_(); _nop_(); a1=SDA; SCL=0; SCL=1; _nop_(); _nop_(); a0=SDA; SCL=0; return(ACC);
}
//********************************************* //****************************** //发送接收确认信号
void I2C_ACK()
{
SDA=1;
SCL=1;
_nop_();
_nop_();
if(SDA==1)
ack=1;
else
ack=0;
SCL=0;
}
//*****************************
//*****************************
//发送结束信号
void I2C_STOP()
{
SDA=0;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
SDA=1;
}
//******************************
//*******************************
/*------------------------------------------------------
写一个字节 Address地址 I2CDatata写入的数据
------------------------------------------------------*/
void I2C_WRITE()
{
do{
I2C_START();
I2C_SEND8BIT(0XA0); //从器件地址位是000,并且对从器件进行写操作。
I2C_ACK();
}while(ack==1); //=1,表示无确认,再次发送。 C为1转移。
I2C_SEND8BIT(Address);
I2C_ACK();
I2C_SEND8BIT(I2CData);
I2C_ACK();
I2C_STOP();
}
//******************************************************
//******************************************* /*------------------------------------------------------
读一个字节 Address地址 Data读出的数据
------------------------------------------------------*/
void I2C_READ()
{
do{
I2C_START();
I2C_SEND8BIT(0XA0); //从器件地址位是000,并且对从器件进行写操作。
I2C_ACK();
}while(ack==1); //=1,表示无确认,再次发送。 C为1转移。
I2C_SEND8BIT(Address);
I2C_ACK();
do{
I2C_START();
I2C_SEND8BIT(0XA1); //从器件地址位是000,并且对从器件进行读操作。 I2C_ACK();
}while(ack==1); //=1,表示无确认,再次发送。 C为1转移。 I2CData=I2C_RECEIVE8BIT();
I2C_ACK();
I2C_STOP();
}
//***********************************************
//******************************* //主函数。
void main()
{
SP=0x60;
Address=0x00;
I2CData=0x55;
P0=I2CData;
delay();
I2C_WRITE(); //对外部存储器进行写操作.在指定地址00H写入数据0x55. P0=0x0f;
delay();
I2C_READ(); //对外部存储器进行读操作,在指定地址00h读出数据0x55. P0=I2CData;
delay();
}
总结:这个程序是对24C02的指定地址写数据,并且只能一次写一个字节的数据.然后在对24C02的这个指定地址读出这个数据
本文档为【关于外部存储器24C02的C程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。