没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
9页
程序名称:51单片机实现对24C02进行页写、顺序读取并显示验证 编写人:海右愚叟 修改人:海右愚叟 程序目的:熟悉I2C总线协议,实现51模拟I2C时序和24C02通信 功能描述:51单片机将8个字节数据写入24C02的一页中,然后顺序读出,每隔1秒送P0口LED显示 其他说明:本程序是采用某51开发板,若在其他地方验证可更改相关端口及延时程序等。 程序编写前曾参考过多个教程,最终自己编程通过,并详加注释。可供初学者参考,并不对程序的可靠性等作保证。 开发工具:keil 7.50 (C51) 日期:2009-11-21
资源推荐
资源详情
资源评论
51单片机实现对24C02进行页写、顺序读取并显示验证
//*************************************************************************************
//**程序名称:51单片机实现对24C02进行页写、顺序读取并显示验证
//**编写人:海右愚叟 修改人:海右愚叟
//**程序目的:熟悉I2C总线协议,实现51模拟I2C时序和24C02通信
//**功能描述:51单片机将8个字节数据写入24C02的一页中,然后顺序读出,每隔1秒送P0口LED显示
//**其他说明:本程序是采用某51开发板,若在其他地方验证可更改相关端口及延时程序等。
//** 程序编写前曾参考过多个教程,最终自己编程通过,并详加注释。
//** 可供初学者参考,并不对程序的可靠性等作保证。
//**开发工具:keil 7.50 (C51) 日期:2009-11-21
//*************************************************************************************
#include <REGX51.H>
#include <intrins.h> //因为用到_nop_();
typedef unsigned char uchar;
sbit SCL = P3^3; //注意P1、P2、P3口有内部上拉电阻,可直接连SDA和SCL,若想用P0需外接上拉电阻,否则连上无法输出高电平!
sbit SDA = P3^4;
uchar j; //用于计数50ms的个数的全局变量
uchar code ToSDAdataBuffer[8] = {
0xfe,0xfc,0xf8,0xf0,
0xe0,0xc0,0x80,0x00
}; //写入24C02的一组数据,8个字节对应24C02的一页(共32页),这里把这些要验证的常数放到程序存储区
uchar ReceivedData[8];//用于存储接收的8个字节数据(1页)的数组
//本例51为单主机,24C02为从机,不需要总线裁决
//延时5us子程序
void delay5us(void)
//*************************************************************************************
//**程序名称:51单片机实现对24C02进行页写、顺序读取并显示验证
//**编写人:海右愚叟 修改人:海右愚叟
//**程序目的:熟悉I2C总线协议,实现51模拟I2C时序和24C02通信
//**功能描述:51单片机将8个字节数据写入24C02的一页中,然后顺序读出,每隔1秒送P0口LED显示
//**其他说明:本程序是采用某51开发板,若在其他地方验证可更改相关端口及延时程序等。
//** 程序编写前曾参考过多个教程,最终自己编程通过,并详加注释。
//** 可供初学者参考,并不对程序的可靠性等作保证。
//**开发工具:keil 7.50 (C51) 日期:2009-11-21
//*************************************************************************************
#include <REGX51.H>
#include <intrins.h> //因为用到_nop_();
typedef unsigned char uchar;
sbit SCL = P3^3; //注意P1、P2、P3口有内部上拉电阻,可直接连SDA和SCL,若想用P0需外接上拉电阻,否则连上无法输出高电平!
sbit SDA = P3^4;
uchar j; //用于计数50ms的个数的全局变量
uchar code ToSDAdataBuffer[8] = {
0xfe,0xfc,0xf8,0xf0,
0xe0,0xc0,0x80,0x00
}; //写入24C02的一组数据,8个字节对应24C02的一页(共32页),这里把这些要验证的常数放到程序存储区
uchar ReceivedData[8];//用于存储接收的8个字节数据(1页)的数组
//本例51为单主机,24C02为从机,不需要总线裁决
//延时5us子程序
void delay5us(void)
{
_nop_(); //时序图要求开始建立时间tSU.STA大于4.7us,开始保持时间tHD.STA大于4us。51中每个_nop_ ();延时1个CPU cycle,即1us。
_nop_(); //如考虑不同CPU频率不同,可用带参数的延时,参数在前面宏定义。
_nop_();
_nop_();
_nop_();
}
//50ms定时器0中断函数
void timer0() interrupt 1 //j是个全局变量,不是返回值,所以这里还是void。
{
TH0 = (65536-46080)/256; //11.0592MHz时每50ms一次定时器中断
TL0 = (65536-46080)%256;
j++; //也可以把判断j到20,并给P0口送显示数据的程序放在中断里处理
}
//延时1秒的子程序,用于将读取的数据每隔一秒显示在LED上
void delay1s(void)
{
j = 0;
TMOD = 0x01; //方式1的16位计数器
TH0 = (65536-46080)/256;
TL0 = (65536-46080)%256;
EA = 1;
ET0 = 1;
TR0 = 1; //启动定时器0工作
while(j < 20) //j达到20之前空操作,达到20时说明已到1s,下面关中断和定时器0
;
EA = 0;
_nop_(); //时序图要求开始建立时间tSU.STA大于4.7us,开始保持时间tHD.STA大于4us。51中每个_nop_ ();延时1个CPU cycle,即1us。
_nop_(); //如考虑不同CPU频率不同,可用带参数的延时,参数在前面宏定义。
_nop_();
_nop_();
_nop_();
}
//50ms定时器0中断函数
void timer0() interrupt 1 //j是个全局变量,不是返回值,所以这里还是void。
{
TH0 = (65536-46080)/256; //11.0592MHz时每50ms一次定时器中断
TL0 = (65536-46080)%256;
j++; //也可以把判断j到20,并给P0口送显示数据的程序放在中断里处理
}
//延时1秒的子程序,用于将读取的数据每隔一秒显示在LED上
void delay1s(void)
{
j = 0;
TMOD = 0x01; //方式1的16位计数器
TH0 = (65536-46080)/256;
TL0 = (65536-46080)%256;
EA = 1;
ET0 = 1;
TR0 = 1; //启动定时器0工作
while(j < 20) //j达到20之前空操作,达到20时说明已到1s,下面关中断和定时器0
;
EA = 0;
剩余8页未读,继续阅读
资源评论
- 33342192014-06-30很好的资料,有没有汇编的程序?
- 尚文博2018-07-10写的很用心,如果是工程文件就更好了
- shfdownload2014-02-08很好很详细,如果是工程文件,而不是txt,就更好了
- QAQWE2015-01-06还没移植,先谢过了~
- liuyuehi2014-01-15非常有用的程序
pursuing
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功