?? internaleeprom_test.asm
字號:
/*************************************************
*文件名 :InternalEEprom_Test.asm
*版權: 廣州周立功單片機發展有限公司
*功能: P89LPC932內部EEPROM操作演示程序
*日期: 10:44 04-2-18
*************************************************/
$NOMOD51
$INCLUDE(reg932.inc)
LED BIT P2^6 ;定義運行指示燈
BEEP BIT P2^7 ;定義蜂鳴器
KEY1 BIT P0^0 ;定義按鍵
KEY2 BIT P0^1
KEY3 BIT P0^2
KEY4 BIT P0^3
Count DATA 0x30
Dat DATA 0x31
Addr DATA 0x32
/* 74HC595控制管腳定義 */
HC595_CS BIT P2^4 ;片選線
HC595_CLK BIT P2^5 ;時鐘線
HC595_DAT BIT P2^2 ;數據線
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN:
MOV P0M1,#0x00 ;定義IO口工作模式
MOV P0M2,#0x00
MOV P2M1,#0xC0
MOV P2M2,#0xC0
;-------------write---------------------------
WRITE1:
JB KEY1,Read1 ;當KEY1按下,向 地址為0-->0xff的區域寫入數據0->0xff.
CLR LED ;點亮運行指示燈
CLR EA ;寫操作前關閉中斷功能,避免干擾
MOV Addr,#0x00 ;地址初始值
MOV Dat,#0x00 ;待寫入數據初始值
MOV Count,#0xFF ;循環次數
MOV R7,#0xFF
WRITE_LOOP:
MOV DEECON,#0x00 ;初始化DEECON
MOV DEEDAT,Dat ;賦值DEEDAT
MOV DEEADR,Addr ;賦值DEEADR
WRITE_complete: ;等待寫完成
MOV A,DEECON
ANL A,#0x80
JZ WRITE_complete
MOV DEECON,#0x00 ;清0寫完成標志位
INC Dat ;待寫入數據遞增
INC Addr ;地址遞增
DJNZ R7,WRITE_LOOP ;循環次數遞減
SETB LED ;最后一次循環,熄滅運行指示燈
SETB EA ;開中斷
;-------------------Verify---------------------
Read1:
JB KEY2,WRITE2 ;當KEY2按下時,校驗地址0-->0xff區域間的數據,不對則BEEP
CLR LED
MOV Addr,#0x00 ;首地址
MOV Dat,#0x00 ;首數據
MOV Count,#0xFF ;循環次數
MOV R7,#0xFF
READ_LOOP:
MOV DEECON,#0x00 ;初始化DEECON
MOV DEEADR,Addr ;賦值DEEADR
READ_complete:
MOV A,DEECON ;等待
ANL A,#0x80
JZ READ_complete
MOV A,DEEDAT ;將讀出的值賦給Temp
XRL A,DAT ;將A與DAT比較
JNZ SKIP1 ;不等則跳
AJMP SKIP2
SKIP1:
CLR BEEP ;BEEP鳴叫
MOV A,DAT
LCALL SendHC595 ;顯示時的數據(可以判斷出操作第?位EEPROM出錯)
SKIP2:
INC Dat ;待校驗數據遞增
INC Addr ;地址遞增
DJNZ R7,READ_LOOP ;循環次數遞減
MOV A,Dat
LCALL SendHC595 ;若循環結束,顯示最后一次操作的數據
;----------------100~~~~1FFH--------------
WRITE2:
JB KEY1,Read2 ;當KEY1按下,向 地址為0x100-->0x1ff的區域寫入相應數據
CLR LED ;點亮運行指示燈
CLR EA ;寫操作前關閉中斷功能,避免干擾
MOV Addr,#0x00 ;地址低8位初值
MOV Dat,#0x00 ;待寫入數據初始值
MOV Count,#0xFF ;循環次數
MOV R7,#0xFF
WRITE_LOOP1:
MOV DEECON,#0x01 ;初始化DEECON,并置位地址最高位
MOV DEEDAT,Dat ;賦值DEEDAT
MOV DEEADR,Addr ;賦值DEEADR
WRITE_complete1: ;等待寫完成
MOV A,DEECON
ANL A,#0x80
JZ WRITE_complete1
MOV DEECON,#0x00 ;清0寫完成標志位
INC Dat ;待寫入數據遞增
INC Addr ;地址遞增
DJNZ R7,WRITE_LOOP1 ;循環次數遞減
SETB LED; ;最后一次循環,熄滅運行指示燈
SETB EA ;開中斷
;-------------Verify--------------------------
Read2:
JB KEY2,Over ;當KEY2按下時,校驗地址0x100-->0x1ff區域間的數據,不對則BEEP
CLR LED
MOV Addr,#0x00 ;首地址低8位
MOV Dat,#0x00 ;首數據
MOV Count,#0xFF ;循環次數
MOV R7,#0xFF
READ_LOOP1:
MOV DEECON,#0x01 ;初始化DEECON,并置位地址最高位
MOV DEEADR,Addr ;賦值DEEADR
READ_complete1:
MOV A,DEECON ;等待
ANL A,#0x80
JZ READ_complete1
MOV A,DEEDAT ;將讀出的值賦給A
XRL A,DAT ;將A與DAT比較
JNZ SKIP_1 ;不等則跳
AJMP SKIP_2
SKIP_1:
CLR BEEP ;BEEP鳴叫
MOV A,DAT
LCALL SendHC595 ;顯示時的數據(可以判斷出操作第?位EEPROM出錯)
SKIP_2:
INC Dat ;待校驗數據遞增
INC Addr ;地址遞增
DJNZ R7,READ_LOOP1 ;循環次數遞減
MOV A,Dat
LCALL SendHC595 ;若循環結束,顯示最后一次操作的數據
;---------------
Over:
JMP WRITE1
RET
;***********************************************
; 名稱:SENDHC595
; 功能:向74HC595發送數據
; 入口參數:ACC 待發送的數據
; 占用資源:R7、CY
;***********************************************
SENDHC595:
CLR HC595_CS
MOV R7,#8
HC595_SDL1: CLR HC595_CLK
RLC A ; 將要發送的數據最高位移入CY
MOV HC595_DAT,C ; 設置數據線
NOP
HC595_SDL2: SETB HC595_CLK
NOP
DJNZ R7,HC595_SDL1 ; 若數據未發送完畢,再次發送
SETB HC595_CS ; 輸出顯示數據
CLR HC595_CS ; 關閉74HC595
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -