c51写的24c02的读写程序
#include <reg51.h>
%A
%A // 对24C02的读、写
%A // extern void DelayMs(unsigned int);
%A // extern void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes);
%A // extern void Write24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes);
%A
%A /***************************************************************************/
%A #define WriteDeviceAddress 0xa0
%A #define ReadDviceAddress 0xa1
%A
%A /***************************************************************************/
%A sbit SCL=P1^4;
%A sbit SDA=P1^3;
%A sbit DOG=P3^7;
%A
%A /***************************************************************************/
%A void DelayMs(unsigned int number) {
%A unsigned char temp;
%A for(;number!=0;number--,DOG=!DOG) {
%A for(temp=112;temp!=0;temp--) {
%A }
%A }
%A }
%A
%A /***************************************************************************/
%A void Start() {
%A SDA=1;
%A SCL=1;
%A SDA=0;
%A SCL=0;
%A }
%A
%A /***************************************************************************/
%A void Stop() {
%A SCL=0;
%A SDA=0;
%A SCL=1;
%A SDA=1;
%A }
%A
%A /***************************************************************************/
%A void Ack() {
%A SDA=0;
%A SCL=1;
%A SCL=0;
%A SDA=1;
%A }
%A
%A /***************************************************************************/
%A void NoAck() {
%A SDA=1;
%A SCL=1;
%A SCL=0;
%A }
%A
%A /***************************************************************************/
%A bit TestAck() {
%A bit ErrorBit;
%A SDA=1;
%A SCL=1;
%A ErrorBit=SDA;
%A SCL=0;
%A return(ErrorBit);
%A }
%A
%A /***************************************************************************/
%A bit Write8Bit(unsigned char input) {
%A unsigned char temp;
%A for(temp=8;temp!=0;temp--) {
%A SDA=(bit)(input&0x80);
%A SCL=1;
%A SCL=0;
%A input=input<<1;
%A }
%A }
%A
%A /***************************************************************************/
%A void Write24c02(unsigned char *Wdata,unsigned char RomAddress,unsigned char number) {
%A Start();
%A Write8Bit(WriteDeviceAddress);
%A TestAck();
%A Write8Bit(RomAddress);
%A TestAck();
%A for(;number!=0;number--) {
%A Write8Bit(*Wdata);
%A TestAck();
%A Wdata++;
%A }
%A Stop();
%A DelayMs(10);
%A }
%A
%A /***************************************************************************/
%A unsigned char Read8Bit() {
%A unsigned char temp,rbyte=0;
%A for(temp=8;temp!=0;temp--) {
%A SCL=1;
%A rbyte=rbyte<<1;
%A rbyte=rbyte|((unsigned char)(SDA));
%A SCL=0;
%A }
%A return(rbyte);
%A }
%A
%A /***************************************************************************/
%A void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes) {
%A unsigned char temp,rbyte;
%A Start();
%A Write8Bit(WriteDeviceAddress);
%A TestAck();
%A Write8Bit(RomAddress);
%A TestAck();
%A Start();
%A Write8Bit(ReadDviceAddress);
%A TestAck();
%A while(bytes!=1) {
%A *RamAddress=Read8Bit();
%A Ack();
%A RamAddress++;
%A bytes--;
%A }
%A *RamAddress=Read8Bit();
%A NoAck();
%A Stop();
%A }
%A
%A /***************************************************************************/
%A
%A%A
%A
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
新手一个小问题, 大家帮帮忙阿:)
RE
江苏大学:基于 FPGA 的 LCD 显示的远程更新
USB接口技术实际应用5篇
薄膜冷却器使固态制冷效率翻倍
高度集成的PMIC为人工智能应用带来关键优势
Technology of High Speed PCB Design
现代的两级电机系统:全球电动汽车的游戏规则改变者?
请教DSP与AVR MCU结合的数据采集处理
日本或将全面停止向中国出口光刻胶
RE
TMS320LF2407原理图下载
PLL频率合成器电路
蓝牙核心规范6.2正式发布
库克被爆出存在健康问题,硬件出身技术大佬或将成为苹果接班人
山东大学:基于FPGA的车牌识别系统
Gartner预测2026年全球在用电动汽车数量将达到1.16亿辆
用CD4013组成的脉冲二倍频电路
山东大学:植物识别
770亿美元市场引爆:中国具身智能机器人从“秀肌肉”到“真干活”
SMT之基础课程
在vmware上安装VXWORKS问题
山东大学:LED里的三维世界
中国大陆IC设计年市占率正式超越台湾地区
Tutoril of high speed PCB
他激式频率变换电路
广东工业大学:基于Microblaze Linux的三轴数控系统
自激式频率变换电路
大模型双雄之争:AI教父押谷歌会赢得最终胜利
频率合成器电路