0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机STC12C5A60S2控制AT24C04的程序(C语言)

算法&编程学院 来源:网络整理 2018-02-03 03:12 次阅读

/**************************************

芯片:STC12C5A60S2(1T)
工作频率:12.000MHz
**************************************/

#include"REG51.H"
#include"INTRINS.H"

typedefunsignedcharBYTE;
typedefunsignedshortWORD;

sbitSCL=P3^4;//AT24C04时钟
sbitSDA=P3^5;//AT24C04的数据

BYTEBUF[16];//数据缓存区

BYTEcodeTESTDATA[]=
{
0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,
0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF
};

voidDelay5us();
voidDelay5ms();
voidAT24C04_Start();
voidAT24C04_Stop();
voidAT24C04_SenDACK(bitack);
bitAT24C04_RecvACK();
voidAT24C04_SendByte(BYTEdat);
BYTEAT24C04_RecvByte();
voidAT24C04_ReadPage();
voidAT24C04_WritePage();

voidmain()
{
AT24C04_WritePage();
Delay5ms();
AT24C04_ReadPage();

while(1);

}

/**************************************
向AT24C04写1页(16字节)数据
将TESTDATA开始的16个测试数据写如设备的00~0F地址中
**************************************/
voidAT24C04_WritePage()
{
BYTEi;

AT24C04_Start();//起始信号
AT24C04_SendByte(0xa0);//发送设备地址+写信号
AT24C04_SendByte(0x00);//发送存储单元地址

for (i=0; i《16; i++)

{

BUF[i] = AT24C04_RecvByte();

if (i == 15)

{

AT24C04_SendACK(1); //最后一个数据需要会NAK

}

else

{

AT24C04_SendACK(0); //回应ACK

}

}

AT24C04_Stop(); //停止信号

}

/**************************************

延时5微秒(STC12C5A60S2@12M)

不同的工作环境,需要调整此函数

此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同

**************************************/

void Delay5us()

{

BYTE n = 4;

while (n--)

{

_nop_();

_nop_();

}

}

/**************************************

延时5毫秒(STC12C5A60S2@12M)

不同的工作环境,需要调整此函数

此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同

**************************************/

void Delay5ms()

{

WORD n = 2500;

while (n--)

{

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}

}

/**************************************

起始信号

**************************************/

void AT24C04_Start()

{

SDA = 1; //拉高数据线

SCL = 1; //拉高时钟线

Delay5us(); //延时

SDA = 0; //产生下降沿

Delay5us(); //延时

SCL = 0; //拉低时钟线

}

/**************************************

停止信号

**************************************/

void AT24C04_Stop()

{

SDA = 0; //拉低数据线

SCL = 1; //拉高时钟线

Delay5us(); //延时

SDA = 1; //产生上升沿

Delay5us(); //延时

}

/**************************************

发送应答信号

入口参数:ack (0:ACK 1:NAK)

**************************************/

void AT24C04_SendACK(bit ack)

{

SDA = ack; //写应答信号

SCL = 1; //拉高时钟线

Delay5us(); //延时

SCL = 0; //拉低时钟线

Delay5us(); //延时

}

/**************************************

接收应答信号

**************************************/

bit AT24C04_RecvACK()

{

SCL = 1; //拉高时钟线

Delay5us(); //延时

CY = SDA; //读应答信号

SCL = 0; //拉低时钟线

Delay5us(); //延时

return CY;

}

/**************************************

向IIC总线发送一个字节数据

**************************************/

void AT24C04_SendByte(BYTE dat)

{

BYTE i;

for (i=0; i<8; i++) //8位计数器

{

dat <<= 1; //移出数据的最高位

SDA = CY; //送数据口

SCL = 1; //拉高时钟线

Delay5us(); //延时

SCL = 0; //拉低时钟线

Delay5us(); //延时

}

AT24C04_RecvACK();

}

/**************************************

从IIC总线接收一个字节数据

**************************************/

BYTE AT24C04_RecvByte()

{

BYTE i;

BYTE dat = 0;

SDA = 1; //使能内部上拉,准备读取数据

for (i=0; i<8; i++) //8位计数器

{

dat <<= 1;

SCL = 1; //拉高时钟线

Delay5us(); //延时

dat |= SDA; //读数据

SCL = 0; //拉低时钟线

Delay5us(); //延时

}

return dat;

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6036

    文章

    44555

    浏览量

    635067
收藏 人收藏

    评论

    相关推荐

    STC12C5A60S2/STC12C5201AD系列单片机

    STC12C5A60S2/STC12C5201AD系列单片机器件手册
    发表于 09-23 23:33 176次下载

    STC12C5A60S2的说明书_PDF

    STC宏晶单片机STC12C5A60S2的说明书
    发表于 11-06 17:01 82次下载

    STC12C5A60S2资料

    STC12C5A60S2的全部中文资料,单片机的器件使用手册。
    发表于 04-11 15:18 73次下载

    STC12C5A60S2单片机ID读取

    STC12C5A60S2 单片机 ID 读取。
    发表于 05-10 15:12 10次下载

    STC12C5A60S2系列单片机EEPROM的应用

    STC12C5A60S2系列单片机EEPROM的应用,感兴趣的小伙伴们可以瞧一瞧。
    发表于 10-26 15:55 0次下载

    stc12c5a60s2工作电压

    stc12c5a60s2在众多的51系列单片机中,要算国内STC 公司的1T增强系列更具有竞争力,因他不但和8051指令、管脚完全兼容,而且其片内的具有大容量程序存储器且是FLASH工
    发表于 10-20 17:06 7985次阅读
    <b class='flag-5'>stc12c5a60s2</b>工作电压

    stc12c5a60s2_spi程序

    单片机STC12C5A60S2,用的是单片机的硬件SPI驱动的nRF24L01+,这个是从(接收
    发表于 10-20 18:08 6192次阅读

    STC12C5A60S2单片机控制流水灯的威廉希尔官方网站 图免费下载

    本文档的主要内容详细介绍的是STC12C5A60S2单片机控制流水灯的威廉希尔官方网站 图免费下载。
    发表于 03-28 13:41 31次下载
    <b class='flag-5'>STC12C5A60S2</b><b class='flag-5'>单片机</b><b class='flag-5'>控制</b>流水灯的威廉希尔官方网站
图免费下载

    STC12C5A60S2系列单片机PCA时钟源设置

    STC12C5A60S2系列单片机PCA时钟源设置
    发表于 11-18 11:36 13次下载
    <b class='flag-5'>STC12C5A60S2</b>系列<b class='flag-5'>单片机</b>PCA时钟源设置

    STC12C5A60S2单片机11.0592晶振实现115200波特率串口通信

    /////////STC12C5A60S2单片机11.0592晶振实现115200波特率串口通/////////////////////////////////STC12C5A60S2或者
    发表于 11-18 11:51 48次下载
    <b class='flag-5'>STC12C5A60S2</b><b class='flag-5'>单片机</b>11.0592晶振实现115200波特率串口通信

    STC12C5A60S2单片机双串口通信,互相发送

    STC12C5A60S2单片机双串口通信,互相发送STC12C5A60S2单片机拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机
    发表于 11-18 12:06 28次下载
    <b class='flag-5'>STC12C5A60S2</b><b class='flag-5'>单片机</b>双串口通信,互相发送

    STC12C5A60S2系列单片机中文手册

    STC12C5A60S2系列单片机中文手册免费下载。
    发表于 05-19 17:03 65次下载

    单片机STC12C5A60S2数据手册

    STC12C5A60S2是一款基于高性能IT架构80C51 CPU的单片机,由STC MCU有限公司生产。通过增强的内核,STC12C5A60S2
    发表于 06-13 16:57 45次下载

    STC12C5A60S2单片机手册

    电子发烧友网站提供《STC12C5A60S2单片机手册.pdf》资料免费下载
    发表于 10-25 14:58 12次下载
    <b class='flag-5'>STC12C5A60S2</b><b class='flag-5'>单片机</b>手册

    STC12C5A60S2单片机英文资料

    电子发烧友网站提供《STC12C5A60S2单片机英文资料.pdf》资料免费下载
    发表于 10-25 15:24 0次下载
    <b class='flag-5'>STC12C5A60S2</b><b class='flag-5'>单片机</b>英文资料