IIC讀寫EEPROM的源碼,經(jīng)過(guò)編譯和燒錄,成功在開發(fā)板上實(shí)現(xiàn)。一個(gè)00~99的計(jì)數(shù)器,每秒計(jì)數(shù)一次,具有斷電記憶功能(開機(jī)后,從關(guān)機(jī)前的最新數(shù)值繼續(xù)計(jì)數(shù)),軟件模擬IIC協(xié)議。
源碼以及開發(fā)板上的與本源碼相關(guān)的電路部分如下
image.jpg (96.66 KB)
下載附件
2021-5-10 00:40 上傳
數(shù)碼管
image.jpg (50.16 KB)
下載附件
2021-5-10 00:40 上傳
EEPROM模塊以及受影響的DS1302模塊
image.png (52.94 KB)
下載附件
2021-5-10 00:40 上傳
單片機(jī)源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- bit x=0; //將計(jì)時(shí)值寫入EEPROM的標(biāo)志位
- sbit SCL=P2^1;
- sbit SDA=P2^0;
- sbit X=P2^4; //引腳P2^4為開發(fā)板上DS1302模塊的復(fù)位引腳
- sbit DU=P2^6; //數(shù)碼管模塊段選位
- sbit WE=P2^7; //數(shù)碼管模塊位選位
- unsigned char num=0;
- unsigned char i=0;
- unsigned char LEDS[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共陰數(shù)碼管的段碼
- void LEDS_IO() //數(shù)碼管鎖存
- {
- WE=1;
- P0=1;
- WE=0;
- DU=1;
- P0=0;
- DU=0;
- }
- void Delay5ms()
- {
- unsigned char i,j;
- i=9;
- j=244;
- do
- {
- while(--j);
- }
- while(--i);
- }
- void IIC_Delay()
- {
- _nop_();
- _nop_();
- }
- void IIC_INIT() //IIC初始化
- {
- X=0; //DS1302模塊的復(fù)位電平為低電平,令DS1302模塊一直處于復(fù)位狀態(tài),使其I/O端口(P2^0)不輸出,避免干擾EEPROM模塊的SDA端口(P2^0)
- SDA=1;
- IIC_Delay();
- SCL=1;
- IIC_Delay();
- }
- void IIC_Start() //IIC起始信號(hào)
- {
- SDA=1;
- IIC_Delay();
- SCL=1;
- IIC_Delay();
- SDA=0;
- IIC_Delay();
- }
- void IIC_Stop() //IIC停止信號(hào)
- {
- SDA=0;
- IIC_Delay();
- SCL=1;
- IIC_Delay();
- SDA=1;
- IIC_Delay();
- }
- void IIC_ACK() //等待應(yīng)答信號(hào);“應(yīng)答”信號(hào):SDA=0;“非應(yīng)答”信號(hào):SDA=1
- {
- unsigned char i;
- SCL=1;
- IIC_Delay();
- while((SDA==1)&&(i<256)) //若超時(shí),則視為“非應(yīng)答”
- {
- i++;
- }
- SCL=0;
- IIC_Delay();
- }
- void IIC_Write(unsigned char DATA) //IIC發(fā)送數(shù)據(jù)
- {
- unsigned char i;
- unsigned char temp;
- temp=DATA;
- for(i=0;i<8;i++)
- {
- temp=temp<<1;
- SCL=0;
- IIC_Delay();
- SDA=CY; //IIC數(shù)據(jù)的發(fā)送從高位開始,需要使用左移指令,而C語(yǔ)言的左移和右移指令,CY參與其中(CY并不是只有在進(jìn)位和借位中用到),左移出來(lái)的一位賦給CY
- IIC_Delay();
- SCL=1;
- IIC_Delay();
- }
- SCL=0; //將SCL置低電平,準(zhǔn)備接收應(yīng)答信號(hào)
- IIC_Delay();
- SDA=1; //釋放SDA,準(zhǔn)備接收從器件反饋的應(yīng)答信號(hào)
- IIC_Delay();
- }
- unsigned char IIC_Read() //IIC接收數(shù)據(jù)
- {
- unsigned char i;
- unsigned char DATA;
- SCL=0;
- IIC_Delay();
- SDA=1;
- IIC_Delay();
- for(i=0;i<8;i++)
- {
- SCL=1;
- IIC_Delay();
- DATA=(DATA<<1)|SDA;
- SCL=0;
- IIC_Delay();
- }
- return DATA;
- }
- void EEPROM_Write(unsigned char ADDRESS,unsigned char DATA) //寫入EEPROM
- {
- IIC_Start();
- IIC_Write(0xa0); //發(fā)送IIC從器件(EEPROM)地址,并選擇“寫”操作
- IIC_ACK();
- IIC_Write(ADDRESS); //發(fā)送將要寫入的EEPROM的存儲(chǔ)地址
- IIC_ACK();
- IIC_Write(DATA); //發(fā)送寫入EEPROM的數(shù)據(jù)
- IIC_ACK();
- IIC_Stop();
- }
- unsigned char EEPROM_Read(unsigned char ADDRESS) //讀取EEPROM
- {
- unsigned char DATA;
- IIC_Start();
- IIC_Write(0xa0);
- IIC_ACK();
- IIC_Write(ADDRESS);
- IIC_ACK();
- IIC_Start();
- IIC_Write(0xa1); //發(fā)送IIC從器件(EEPROM)地址,并選擇“讀”操作
- IIC_ACK();
- DATA=IIC_Read();
- IIC_Stop();
- return DATA;
- }
- void LEDS_OUTPUT(unsigned char m,unsigned char n) //數(shù)碼管顯示
- {
- DU=0;
- P0=LEDS[m];
- DU=1;
- DU=0;
- WE=0;
- P0=0x3e;
- WE=1;
- WE=0;
- Delay5ms();
- DU=0;
- P0=LEDS[n];
- DU=1;
- DU=0;
- WE=0;
- P0=0x3d;
- WE=1;
- WE=0;
- Delay5ms();
- }
- void main()
- {
- IIC_INIT();
- LEDS_IO();
- num=EEPROM_Read(0x00);
- TMOD=0x01;
- TH0=0x4c00;
- TL0=0x4c00;
- TR0=1;
- ET0=1;
- EA=1;
- while(1)
- {
- LEDS_OUTPUT(num/10,num%10);
- if(x==1)
- {
- x=0;
- EEPROM_Write(0x00,num);
- }
- }
- }
- void T() interrupt 1 //每0.05秒中斷一次
- {
- TH0=0x4c00;
- TL0=0x4c00;
- i++;
- if(i==20) //中斷20次,即1秒
- {
- i=0;
- num++;
- x=1;
- if(num==100)
- {
- num=0;
- }
- }
- }
復(fù)制代碼
【必讀】版權(quán)免責(zé)聲明
1、本主題所有言論和內(nèi)容純屬會(huì)員個(gè)人意見,與本論壇立場(chǎng)無(wú)關(guān)。2、本站對(duì)所發(fā)內(nèi)容真實(shí)性、客觀性、可用性不做任何保證也不負(fù)任何責(zé)任,網(wǎng)友之間僅出于學(xué)習(xí)目的進(jìn)行交流。3、對(duì)提供的數(shù)字內(nèi)容不擁有任何權(quán)利,其版權(quán)歸原著者擁有。請(qǐng)勿將該數(shù)字內(nèi)容進(jìn)行商業(yè)交易、轉(zhuǎn)載等行為,該內(nèi)容只為學(xué)習(xí)所提供,使用后發(fā)生的一切問(wèn)題與本站無(wú)關(guān)。 4、本網(wǎng)站不保證本站提供的下載資源的準(zhǔn)確性、安全性和完整性;同時(shí)本網(wǎng)站也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的損失或傷害。 5、本網(wǎng)站所有軟件和資料均為網(wǎng)友推薦收集整理而來(lái),僅供學(xué)習(xí)用途使用,請(qǐng)務(wù)必下載后兩小時(shí)內(nèi)刪除,禁止商用。6、如有侵犯你版權(quán)的,請(qǐng)及時(shí)聯(lián)系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|