完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
这是我写的一个有关于EEPROM的一个小程序,用的是24C02。可是问题总是数据存不进去呀!这是肿么回事呢?我刚学习不久,望大神解救!!!
#include #include #define uchar unsigned char #define uint unsigned int #define _Nop() _nop_() //定义空指令 bit write=0; bit ack; ***it en=P2^6; ***it rs=P2^4; ***it s1=P3^0; ***it s2=P3^1; ***it s3=P3^2; ***it SCL=P1^1; ***it SDA=P1^2; uchar i,a,second,munite,hour,num; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void Start_I2c() { SDA=1; //发送起始条件的数据信号 _Nop(); SCL=1; _Nop(); //起始条件建立时间大于4.7us,延时 _Nop(); _Nop(); _Nop(); _Nop(); SDA=0; //发送起始信号 _Nop(); //起始条件锁定时间大于4μ _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; //钳住I2C总线,准备发送或接收数据 _Nop(); _Nop(); } void Stop_I2c() { SDA=0; //发送结束条件的数据信号 _Nop(); //发送结束条件的时钟信号 SCL=1; //结束条件建立时间大于4μ _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SDA=1; //发送I2C总线结束信号 _Nop(); _Nop(); _Nop(); _Nop(); } void SendByte(uchar c) { uchar BitCnt; for(BitCnt=0;BitCnt<8;BitCnt++) //要传送的数据长度为8位 { if((c< _Nop(); SCL=1; //置时钟线为高,通知被控器开始接收数据位 _Nop(); _Nop(); //保证时钟高电平周期大于4μ _Nop(); _Nop(); _Nop(); SCL=0; } _Nop(); _Nop(); SDA=1; //8位发送完后释放数据线,准备接收应答位 _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); if(SDA==1)ack=0; else ack=1; //判断是否接收到应答信号 SCL=0; _Nop(); _Nop(); } unsigned char RcvByte() { uchar retc; uchar BitCnt; retc=0; SDA=1; //置数据线为输入方式 for(BitCnt=0;BitCnt<8;BitCnt++) { _Nop(); SCL=0; //置时钟线为低,准备接收数据位 _Nop(); _Nop(); //时钟低电平周期大于4.7us _Nop(); _Nop(); _Nop(); SCL=1; //置时钟线为高使数据线上数据有效 _Nop(); _Nop(); retc=retc<<1; if(SDA==1)retc=retc+1; //读数据位,接收的数据位放入retc中 _Nop(); _Nop(); } SCL=0; _Nop(); _Nop(); return(retc); } void Ack_I2c(void) { SDA=0; _Nop(); _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); //时钟低电平周期大于4μ _Nop(); _Nop(); _Nop(); SCL=0; //清时钟线,钳住I2C总线以便继续接收 _Nop(); _Nop(); } void NoAck_I2c(void) { SDA=1; _Nop(); _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); //时钟低电平周期大于4μ _Nop(); _Nop(); _Nop(); SCL=0; //清时钟线,钳住I2C总线以便继续接收 _Nop(); _Nop(); } bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no) { uchar i; Start_I2c(); //启动总线 SendByte(sla); //发送器件地址 if(ack==0)return(0); SendByte(suba); //发送器件子地址 if(ack==0)return(0); for(i=0;i SendByte(*s); //发送数据 if(ack==0)return(0); s++; } Stop_I2c(); //结束总线 return(1); } bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no) { uchar i; Start_I2c(); //启动总线 SendByte(sla); //发送器件地址 if(ack==0)return(0); SendByte(suba); //发送器件子地址 if(ack==0)return(0); Start_I2c(); SendByte(sla+1); if(ack==0)return(0); for(i=0;i *s=RcvByte(); //发送数据 Ack_I2c(); //发送就答位 s++; } *s=RcvByte(); NoAck_I2c(); //发送非应位 Stop_I2c(); //结束总线 return(1); } void write_com(uchar com) //写指令 { rs=0; en=0; P0=com; delay(5); en=1; delay(5); en=0; } void write_data(uchar date) //写数据 { rs=1; en=0; P0=date; delay(5); en=1; delay(5); en=0; } void init() { P0=0; P2=0; en=0; second=0; munite=0; hour=0; a=0; write_com(0x38);//显示设置 write_com(0x0c);//不显示光标,不闪烁 write_com(0x06);//指针加一 write_com(0x01);//清屏 write_com(0x80);//数据指针 write_com(0xc0+5); write_data(':'); delay(5); write_com(0xc0+8); write_data(':'); delay(5); TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void write_smh(uchar add,uchar date) { uchar shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_data(0x30+shi); write_data(0x30+ge); } void main() { init(); IRcvStr(0xae,21,&second,1); IRcvStr(0xae,23,&munite,1); IRcvStr(0xae,25,&hour,1); write_smh(9,second); write_smh(6,munite); write_smh(3,hour); while(1) { if(a==20) { a=0; write=1; second++; if(write==1) { write=0; ISendStr(0xae,21,&second,1); } if(second==60) { second=0; munite++; if(write==1) { write=0; ISendStr(0xae,23,&munite,1); } if(munite==60) { munite=0; hour++; if(write==1) { write=0; ISendStr(0xae,25,&hour,1); } if(hour==24) { hour=0; } write_smh(3,hour); } write_smh(6,munite); } write_smh(9,second); } } } void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; a++; } |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十五章 摄像头实验
219 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
574 浏览 0 评论
684 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
1074 浏览 0 评论
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12048 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 20:07 , Processed in 0.512526 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号