//89c52rc 11.0592晶振,學(xué)習(xí)使用EEPROM功能 #include <STC89.H> //STC89系列單片機(jī)頭文件 #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define RdCmd 0x01 //定義ISP的操作命令 讀 #define WrCmd 0x02 //定義ISP的操作命令 寫 #define EsCmd 0x03 //定義ISP的操作命令 刪除 #define Error 1 #define Ok 0 #define WaitTime 0x01 //定義CPU的等待時(shí)間
sbit dula=P2^6; //申明U1鎖存器的鎖存端 sbit wela=P2^7; //申明U2鎖存器的鎖存端 uchar code duan[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar code wei[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar lssj[9],num; //uchar uint dz; ulong numl; //=============== void delayms(uint xms); //毫秒延時(shí) void display(uchar du,uchar we); //在指定的位置顯示指定的字符 void ISPenb(void); //ISP_IAP 使能 void ISPdsb(void); //ISP_IAP 關(guān)閉 void ISPgo(void); //ISP_IAP 觸發(fā) uchar readb(uint byte_addr); //讀字節(jié) void escEra(uint sector_addr); //扇區(qū)刪除 void writeb(uint byte_addr, uchar original_data); //寫字節(jié) void xlongd(uint addr,ulong ldat);//寫ulong型數(shù)據(jù) void ledxs1();//數(shù)碼顯示 //=============================================== void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) //i=xms即延時(shí)約xms毫秒 for(j=110;j>0;j--); } //=============================================== void display(uchar du,uchar we) //顯示子函數(shù) { dula=1; P0=duan[du]; //送段碼 dula=0; P0=0xff; //送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí) wela=1; //原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=wei[we]; //送位選數(shù)據(jù) wela=0; delayms(3); //延時(shí) } //================ 打開 ISP,IAP 功能 ================= void ISPenb(void) { EA = 0; // 關(guān)中斷 // ISP_CONTR =ISP_CONTR & 0x18; // 0001,1000 // ISP_CONTR =ISP_CONTR | WaitTime; // 寫入硬件延時(shí) // ISP_CONTR =ISP_CONTR | 0x80; // ISPEN=1 // } //=============== 關(guān)閉 ISP,IAP 功能 ================== void ISPdsb(void) { ISP_CONTR =ISP_CONTR & 0x7f; // ISPEN = 0 //ISP_CONTR &=0x7f; ISP_TRIG =0x00; EA =1; // 開中斷 // } // ================ 公用的觸發(fā)代碼 ==================== void ISPgo(void) { // ISPenb(); // 打開 ISP,IAP 功能 // ISP_TRIG = 0x46; // 觸發(fā)ISP_IAP命令字節(jié)1 // ISP_TRIG = 0xb9; // 觸發(fā)ISP_IAP命令字節(jié)2 // _nop_(); } // ==================== 字節(jié)讀 ======================== // uchar readb(uint byte_addr) { ISP_ADDRH = (uchar)(byte_addr >> 8);// 地址賦值 // ISP_ADDRL = (uchar)(byte_addr & 0x00ff); ISP_CMD = ISP_CMD & 0xf8; // 清除低3位 // ISP_CMD = ISP_CMD | RdCmd; // 寫入讀命令 // ISPgo(); // 觸發(fā)執(zhí)行 // //ISPdsb(); // 關(guān)閉ISP,IAP功能 // return (ISP_DATA); // 返回讀到的數(shù)據(jù) // } // ================== 扇區(qū)擦除 ======================== // void escEra(uint sector_addr) { unsigned int iSectorAddr; iSectorAddr = (sector_addr & 0xfe00); // 取扇區(qū)地址 // ISP_ADDRH = (uchar)(iSectorAddr >> 8); ISP_ADDRL = 0x00; ISP_CMD = ISP_CMD & 0xf8; // 清空低3位 // ISP_CMD = ISP_CMD | EsCmd; // 擦除命令3 // ISPgo(); // 觸發(fā)執(zhí)行 // //ISPdsb(); // 關(guān)閉ISP,IAP功能 // } // ==================== 字節(jié)寫 ======================== // void writeb(uint byte_addr, uchar original_data) { ISP_ADDRH =(uchar)(byte_addr >> 8); // 取地址 // ISP_ADDRL =(uchar)(byte_addr & 0x00ff); ISP_CMD =ISP_CMD & 0xf8; // 清低3位 // ISP_CMD =ISP_CMD | WrCmd; // 寫命令2 // ISP_DATA =original_data; // 寫入數(shù)據(jù)準(zhǔn)備 // ISPgo(); // 觸發(fā)執(zhí)行 // //ISPdsb(); // 關(guān)閉IAP功能 // } //========================= void xlongd(uint addr,ulong ldat) //寫long型數(shù)據(jù) { uchar i,ucdat; uint dz=addr; ISPenb(); // 打開 ISP,IAP 功能 escEra(addr);//擦除扇區(qū) for (i=0;i<4;i++) {ucdat=ldat; writeb(addr,ucdat);//寫一個(gè)字節(jié)數(shù)據(jù) ldat>>=8;//右移8位 addr++; //地址加1 } ISPdsb(); // 關(guān)閉IAP功能 } //========================== void ledxs1() { lssj[1]=num1/100000%10; lssj[2]=num1/10000%10; lssj[3]=num1/1000%10; lssj[4]=num1/100%10; lssj[5]=num1/10%10; lssj[6]=num1%10; lssj[0]=0; lssj[0]+=lssj[1]; if (lssj[0]) display(lssj[1],1); //十萬 lssj[0]+=lssj[2]; if (lssj[0]) display(lssj[2],2); //萬 lssj[0]+=lssj[3]; if (lssj[0]) display(lssj[3],3); //千 lssj[0]+=lssj[4]; if (lssj[0]) display(lssj[4],4); //百 lssj[0]+=lssj[5]; if (lssj[0]) display(lssj[5],5); //十個(gè) lssj[0]+=lssj[6]; if (lssj[0]) display(lssj[6],6); //個(gè) } //=============================================== void main() { uchar i; TMOD=0x01; //設(shè)置定時(shí)器0為工作方式1(0000 0001) TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; EX0=1; //外部中斷0使能 //IE0=1;//下降沿觸發(fā) ISPenb(); // 打開 ISP,IAP 功能 dz=0x2000; //初始地址 for (i=0;i<4;i++){ num1<<=8;//左移8位 num1+=readb(dz);//程序開始時(shí)讀取EEPROM中數(shù)據(jù) dz++;} //地址加1 ISPdsb(); // 關(guān)閉IAP功能 while(1) { if(num>9){num=0; num1++;} ledxs1(); } } //=============================================== void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++; } void int0() interrupt 0 {xlongd(0x2000,numl);} // 保存ulong數(shù)據(jù)
編譯時(shí)顯示的信息:
Build target 'Target 1' compiling text2.c... TEXT2.C(128): error C202: 'num1': undefined identifier TEXT2.C(129): error C202: 'num1': undefined identifier TEXT2.C(130): error C202: 'num1': undefined identifier TEXT2.C(131): error C202: 'num1': undefined identifier TEXT2.C(132): error C202: 'num1': undefined identifier TEXT2.C(133): error C202: 'num1': undefined identifier TEXT2.C(163): error C202: 'num1': undefined identifier TEXT2.C(164): error C202: 'num1': undefined identifier TEXT2.C(170): error C202: 'num1': undefined identifier Target not created
|