?? internaleeprom_test.c
字號:
/*************************************************
*文件名 :InternalEEprom_Test.C
*版權: 廣州周立功單片機發展有限公司
*功能: P89LPC932內部EEPROM操作演示程序
*日期: 10:44 04-2-18
*************************************************/
#include "reg932.h"
#define uchar unsigned char
sbit LED=P2^6; //定義運行指示燈
sbit BEEP=P2^7; //定義蜂鳴器
sbit KEY1=P0^0; //定義按鍵
sbit KEY2=P0^1;
sbit KEY3=P0^2;
sbit KEY4=P0^3;
/* 74HC595控制管腳定義 */
sbit HC595_CS = P2^4; //片選線
sbit HC595_CLK = P2^5; //時鐘線
sbit HC595_DAT = P2^2; //數據線
void SendHC595(uchar dat);
main()
{
uchar Temp;
uchar Count;
uchar Data;
uchar Addr;
P0M1=0x00; //定義IO口工作模式
P0M2=0x00;
P2M1=0xC0;
P2M2=0xC0;
while(1)
{
if(KEY1==0) //當KEY1按下,向 地址為0-->0xff的區域寫入數據0->0xff.
{
LED=0; //點亮運行指示燈
Addr=0x00; //地址初始值
Data=0x00; //待寫入數據初始值
Count=0xFF; //循環次數
EA=0; //寫操作前關閉中斷功能,避免干擾
while(Count>0)
{
DEECON=0x00; //初始化DEECON
DEEDAT=Data; //賦值DEEDAT
DEEADR=Addr; //賦值DEEADR
while((DEECON&0x80)==0); //等待寫完成
DEECON=DEECON&0x7F; //清0寫完成標志位
Data++; //待寫入數據遞增
Addr++; //地址遞增
Count--; //循環次數遞減
if(Count==0)
{
LED=1; //最后一次循環,熄滅運行指示燈
}
}
EA=1; //開中斷
}
//read--------------------------
if(KEY2==0) //當KEY2按下時,校驗地址0-->0xff區域間的數據,不對則BEEP
{
LED=0;
Addr=0x00; //首地址
Data=0x00; //首數據
Count=0xFF; //循環次數
while(Count>0)
{
DEECON=0x00; //初始化DEECON
DEEADR=Addr; //賦值DEEADR
while((DEECON&0x80)==0); //等待
Temp=DEEDAT; //將讀出的值賦給Temp
if(Temp!=Data) //判斷
{
BEEP=0; //BEEP鳴叫
SendHC595(~Temp); //顯示時的數據(可以判斷出操作第?位EEPROM出錯)
break;
}
Data++; //待校驗數據遞增
Addr++; //地址遞增
Count--; //循環次數遞減
}
SendHC595(~Data); //若循環結束,顯示最后一次操作的數據
}
//----------------100~~~~1FFH--------------
if(KEY3==0) //KEY3按下,對地址為100-->1FF的區域進行寫操作
{
LED=0; //點亮運行指示燈
Addr=0x00; //地址低8位初值
Data=0x00;
Count=0xFF; //循環次數
EA=0; //關中斷,避免干擾
while(Count>0)
{
DEECON=0x01; //初始化DEECON,并置地址最高位為1
DEEDAT=Data; //賦值DEEDAT
DEEADR=Addr; //賦值DEEADR
while((DEECON&0x80)==0); //等待寫完成
DEECON=DEECON&0x7F; //清0寫完成標志位
Data++; //待寫入數據遞增
Addr++; //待寫入地址遞增
Count--; //循環次數遞減
if(Count==0)
{
LED=1; //循環結束關閉運行指示燈
}
}
EA=1; //恢復中斷
}
//read--------------------------
if(KEY4==0) //KEY4按下,對地址100-->1FF進行校驗
{
LED=0; //點亮運行指示燈
Addr=0x00; //初始化地址低8位: x 0000 0000
Data=0x00; //循環次數
Count=0xFF;
while(Count>0)
{
DEECON=0x01; //初始化DEECON,并置位地址最高位
DEEADR=Addr; //賦值DEEADR
while((DEECON&0x80)==0); //等待讀完成
Temp=DEEDAT; //將讀出的值賦給DEEDAT
if(Temp!=Data)
{
BEEP=0; //如果讀出不正確,則BEEP
SendHC595(~Temp); //并顯示出錯數據(可以判斷出錯地址)
break;
}
Data++; //數據遞增
Addr++; //地址遞增
Count--; //循環嫡減
}
SendHC595(~Data); //循環結束,顯示最后一次的數據
}
}
}
/*******************************************************
* 名稱:SendHC595()
* 功能:向74HC595發送數據,以驅動LED顯示
* 入口參數:data 要發送的數據
* 出口參數:無
*******************************************************/
void SendHC595(uchar dat)
{ uchar i;
HC595_CS=0; //片選
for(i=0; i<8; i++)
{ HC595_CLK=0; //CLK置低
if( (dat&0x80)!=0 )HC595_DAT=1; //賦值
else HC595_DAT=0;
HC595_CLK=1; //CLK置高
dat=dat<<1; //循環移位
}
HC595_CS=1; //關閉
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -