完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
当时设计者和经理还牛气哄哄的,要我学习和参考这个程序,还好我没听他们的,自己先整了个,然后才接手。
接手后就被要求修改。那可真叫吐血,改得胃都疼,而且只有1000元工资啊。 注意,没有仿真器。我只能是改一点烧一次芯片,然后安装一次外壳,从三楼跑到一楼,去测试,测试结果都由售后人员评判。碰上想象力丰富一点的售后人员,我就改惨了。 这个是对24C16的执行数据写入和读出的代码,代码量只有全部总量的三十分之一。 另外,这里面有错误。还好我自己写过,所以看到现象就感觉可能出错的地方。现象就是对不同的24C16有时可以存入有时不行。 那个装逼的经理根本想不明白是怎么回事。当时设计者已经走人了,经理把我叫过去,怀疑是我烧写芯片时把程序弄错了,或者是擅自修改程序,或者是偷梁换柱。反正他脑子里净是些乱七八糟的念头。最后他的结论就是24C16质量怎么这么差。 void wit16(uint suba,uint *s,uchar no)//EEPROM存函数16位,suba为要存的地址,*s为存的数据,no要存的个数 { uchar i,i1,i2; uchar a; uint *s1; s1=s; i2=0; EA=0; loop4: Start_I2c1(); /*启动总线*/ i1=suba>>8; i1<<=1; SendByte1(0xa0+i1); /*发送器件地址*/ if(ack1==0) goto loop2; i=suba&0xff; SendByte1(i); /*发送器件子地址*/ if(ack1==0) goto loop2; for(i=0;i {if(i1==0) {a=*s; SendByte1(a); /*发送数据*/ if(ack1==0) goto loop2; } if(i1==1) {a=*s>>8; SendByte1(a); /*发送数据*/ if(ack1==0) goto loop2; } } s++; } loop2: Stop_I2c1(); /*结束总线*/ if(ack1==0&&i2<4) {s=s1; i2++; goto loop4; } EA=1; } void red16(uint suba,uint *s,uchar no) //EEPROM读函数16位,suba为要读的地址,*s为存放读的数据,no要读的个数 { uchar i,i1,i2; uint a; uint *s1; s1=s; i2=0; EA=0; loop4: Start_I2c1(); /*启动总线*/ i1=suba>>8; i1<<=1; SendByte1(0xa0+i1); /*发送器件地址*/ if(ack1==0) goto loop1; i=suba&0xff; SendByte1(i); /*发送器件子地址*/ if(ack1==0) goto loop1; Start_I2c1(); SendByte1(0xa1+i1); if(ack1==0) goto loop1; for(i=0;i { if(i1==0) {*s=RcvByte1(); /*发送数据*/ Ack_I2c1(0); /*发送就答位*/ } if(i1==1) { a=RcvByte1(); /*发送数据*/ *s+=a<<8; if(i+1 else Ack_I2c1(1); /*发送就答位*/ } } s++; } loop1:Stop_I2c1(); /*结束总线*/ if(ack1==0&&i2<4) {s=s1; i2++; goto loop4; } EA=1; } void wit32(uint suba,ulong *s,uchar no)//EEPROM存函数32位,suba为要存的地址,*s为存的数据,no要存的个数 { uchar i,i1,i2; uchar a; ulong *s1; s1=s; i2=0; EA=0; loop4: Start_I2c1(); //启动总线 i1=suba>>8; i1<<=1; SendByte1(0xa0+i1); //发送器件地址 if(ack1==0) goto loop2; i=suba&0xff; SendByte1(i); //发送器件子地址 if(ack1==0) goto loop2; for(i=0;i {if(i1==0) {a=(*s)&0xff; SendByte1(a); //发送数据 if(ack1==0) goto loop2; } if(i1==1) {a=(*s>>8)&0xff; SendByte1(a); //发送数据 if(ack1==0) goto loop2; } if(i1==2) {a=(*s>>16)&0xff; SendByte1(a); //发送数据 if(ack1==0) goto loop2; } if(i1==3) {a=(*s>>24)&0xff; SendByte1(a); //发送数据 if(ack1==0) goto loop2; } } s++; } loop2: Stop_I2c1(); //结束总线 if(ack1==0&&i2<4) {s=s1; i2++; goto loop4; } EA=1; _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); } void red32(uint suba,ulong *s,uchar no) //EEPROM读函数32位,suba为要读的地址,*s为存放读的数据,no要读的个数 { uchar i,i1,i2; ulong a; ulong *s1; s1=s; i2=0; EA=0; loop4: Start_I2c1(); /*启动总线*/ i1=suba>>8; i1<<=1; SendByte1(0xa0+i1); /*发送器件地址*/ if(ack1==0) goto loop1; i=suba&0xff; SendByte1(i); /*发送器件子地址*/ if(ack1==0) goto loop1; Start_I2c1(); SendByte1(0xa1+i1); if(ack1==0) goto loop1; for(i=0;i { if(i1==0) {*s=RcvByte1(); /*发送数据*/ Ack_I2c1(0); /*发送就答位*/ } if(i1==1) { a=RcvByte1(); /*发送数据*/ *s+=a<<8; Ack_I2c1(0); /*发送就答位*/ } if(i1==2) {a=RcvByte1(); /*发送数据*/ *s+=a<<16; Ack_I2c1(0); /*发送就答位*/ } if(i1==3) { a=RcvByte1(); /*发送数据*/ *s+=a<<24; if(i+1 else Ack_I2c1(1); /*发送就答位*/ } } s++; } loop1:Stop_I2c1(); /*结束总线*/ if(ack1==0&&i2<4) {s=s1; i2++; goto loop4; } EA=1; } |
|
相关推荐
2 个讨论
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
203 浏览 0 评论
761 浏览 0 评论
806 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
743 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1195 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11807 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 21:26 , Processed in 0.442110 second(s), Total 36, Slave 30 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号