?Function?:???5X7?LED點陣+LCD顯示示例程序???*?
;?MICroProcessor?:?HT48R50A-1/28SKDIP-A??????*?
;?Author:??????????????????????*?
;?Crystal?:???????4MHz???????????????????????*?
;?********************************************?
#INCLUDE????????????????HT48R50A-1.INC?
LCD_DATA????????????????EQU?????PB?
LCD_DATA_CTRL???????????EQU?????PBC?
LCD_CTRL????????????????EQU?????PC?
LCD_CTRL_CTRL???????????EQU?????PCC?
E???????????????????????EQU?????5?
RS??????????????????????EQU?????3?
TIME_OUT????????????????EQU?????11H?
CLR_WDT?????????????????EQU?????22H?
EXE_HALT????????????????EQU?????33H?
CLR_WDT1_WDT2???????????EQU?????44H?
;--------------------------------------------------------------------?
DATA????.SECTION????????AT?60H??’DATA’?
DELAY_COUNTER_1?????????DB??????????????;[60H]?
DELAY_COUNTER_2?????????DB??????????????;[61H]?
DELAY_COUNTER_3?????????DB??????????????;[62H]?
DATA????????????????????DB??????????????;[63H]?
COUNTER?????????????????DB??????????????;[64H]?
WARM_RESET??????????????DB??????????????;[65H]?
DISPLAY_FLAG????????????DB??????????????;[66H]?
;--------------------------------------------------------------------?
CODE????.SECTION????????AT?00H??’CODE’?
????????????????ORG?????00H?
????????????????JMP?????START?
START:?
????????????????CLR?????PAC?
????????????????CLR?????LCD_DATA_CTRL?
????????????????CLR?????LCD_CTRL_CTRL?
????????????????CLR?????LCD_DATA?
????????????????CLR?????LCD_CTRL?
;--------------------------------------------------------------------?
???????????????? MOV ?????A,07H???????;?set?watch?dog?time?out?
???????????????? MOV ?????WDTS,A??????;?2.6?sec?
????????????????CLR?????WDT?????????;?clear?watch?dog?timer?
;--------------------------------------------------------------------?
???????????????? MOV ?????A,WARM_RESET?
???????????????? MOV ?????DISPLAY_FLAG,A?
????????????????SUB?????A,TIME_OUT?
????????????????SZ??????ACC?
????????????????JMP?????CHK_CLR_WDT?
????????????????JMP?????GO_TIME_OUT?
CHK_CLR_WDT:?
???????????????? MOV ?????A,WARM_RESET?
???????????????? MOV ?????DISPLAY_FLAG,A?
????????????????SUB?????A,CLR_WDT?
????????????????SZ??????ACC?
????????????????JMP?????CHK_EXE_HALT?
????????????????JMP?????GO_CLR_WDT?
CHK_EXE_HALT:?
???????????????? MOV ?????A,WARM_RESET?
???????????????? MOV ?????DISPLAY_FLAG,A?
????????????????SUB?????A,EXE_HALT?
????????????????SZ??????ACC?
????????????????JMP?????CHK_CLR_WDT_12?
????????????????JMP?????GO_EXE_HALT?
CHK_CLR_WDT_12:?
???????????????? MOV ?????A,WARM_RESET?
???????????????? MOV ?????DISPLAY_FLAG,A?
????????????????SUB?????A,CLR_WDT1_WDT2?
????????????????SZ??????ACC?
????????????????JMP?????BEGIN?
????????????????JMP?????GO_CLR_WDT_12?
BEGIN:?
????????????????CALL????LCD_RESET?
????????????????CLR?????WDT?????????;?clear?watch?dog?timer?
;--------------------------------------------------------------------?
GO_TIME_OUT:?
???????????????? MOV ?????A,CLR_WDT?
???????????????? MOV ?????WARM_RESET,A?
???????????????? MOV ?????A,OFFSET?LCD_MESSAGE_1?
???????????????? MOV ?????TBLP,A?
????????????????CALL????LCD_DISPLAY?
TIME_OUT_LOOP:?
????????????????CALL????LED_DISPLAY?
????????????????JMP?????TIME_OUT_LOOP?
????????????????RET?
;--------------------------------------------------------------------?
GO_CLR_WDT:?
???????????????? MOV ?????A,EXE_HALT?
???????????????? MOV ?????WARM_RESET,A?
???????????????? MOV ?????A,OFFSET?LCD_MESSAGE_2?
???????????????? MOV ?????TBLP,A?
????????????????CALL????LCD_DISPLAY?
CLR_WDT_LOOP:?
????????????????CALL????LED_DISPLAY?
????????????????JMP?????CLR_WDT_LOOP?
????????????????RET?
;--------------------------------------------------------------------?
GO_EXE_HALT:?
???????????????? MOV ?????A,CLR_WDT1_WDT2?
???????????????? MOV ?????WARM_RESET,A?
???????????????? MOV ?????A,OFFSET?LCD_MESSAGE_3?
???????????????? MOV ?????TBLP,A?
????????????????CALL????LCD_DISPLAY?
EXE_HALT_LOOP:?
????????????????CALL????LED_DISPLAY?
????????????????JMP?????EXE_HALT_LOOP?
????????????????RET?
;--------------------------------------------------------------------?
GO_CLR_WDT_12:?
???????????????? MOV ?????A,TIME_OUT?
???????????????? MOV ?????WARM_RESET,A?
???????????????? MOV ?????A,OFFSET?LCD_MESSAGE_4?
???????????????? MOV ?????TBLP,A?
????????????????CALL????LCD_DISPLAY?
CLR_WDT_12_LOOP:?
????????????????CALL????LED_DISPLAY?
????????????????JMP?????CLR_WDT_12_LOOP?
????????????????RET?
;--------------------------------------------------------------------?
LED_DISPLAY?????PROC?
????????????????SET?????PA?
????????????????CALL????DELAY?
???????????????? MOV ?????A,OFFSET?SEGMENT_DATA?
???????????????? MOV ?????TBLP,A?
???????????????? MOV ?????A,10H?
???????????????? MOV ?????COUNTER,A?
DISPLAY_START:?
????????????????TABRDL??DATA?
???????????????? MOV ?????A,DATA?
???????????????? MOV ?????PA,A?
????????????????CALL????DELAY?
????????????????INC?????TBLP?
???????????????? MOV ?????A,DISPLAY_FLAG?
????????????????SUB?????A,CLR_WDT?
????????????????SZ??????ACC?
????????????????JMP?????LED_CLR_WDT12?
????????????????CLR?????WDT?
????????????????JMP?????DISPLAY_END?
LED_CLR_WDT12:?
???????????????? MOV ?????A,DISPLAY_FLAG?
????????????????SUB?????A,CLR_WDT1_WDT2?
????????????????SZ??????ACC?
????????????????JMP?????LED_EXE_HALT?
????????????????CLR?????WDT1?
????????????????CLR?????WDT2?
????????????????JMP?????DISPLAY_END?
LED_EXE_HALT:?
???????????????? MOV ?????A,DISPLAY_FLAG?
????????????????SUB?????A,EXE_HALT?
????????????????SZ??????ACC?
????????????????JMP?????DISPLAY_END?
????????????????HALT?
DISPLAY_END:?
????????????????SDZ?????COUNTER?
????????????????JMP?????DISPLAY_START?
????????????????RET?
LED_DISPLAY?????ENDP?
;--------------------------------------------------------------------?
LCD_RESET???????PROC?
???????????????? MOV ?????A,30H???????;?LCD?reset?,?step?1?
???????????????? MOV ?????LCD_DATA,A??;?
????????????????CALL????WRITE???????;?
????????????????CALL????DELAY???????;?LCD?reset?,?step?2?
???????????????? MOV ?????A,30H???????;?LCD?reset?,?step?3?
???????????????? MOV ?????LCD_DATA,A??;?
????????????????CALL????WRITE???????;?
????????????????CALL????DELAY???????;?LCD?reset?,?step?4?
???????????????? MOV ?????A,30H???????;?LCD?reset?,?step?5?
???????????????? MOV ?????LCD_DATA,A??;?
????????????????CALL????WRITE???????;?
???????????????? MOV ?????A,38H???????;?LCD?setting?,?step?1?
???????????????? MOV ?????LCD_DATA,A??;?function?set?
????????????????CALL????WRITE???????;?
???????????????? MOV ?????A,06H???????;?LCD?setting?,?step?2?
???????????????? MOV ?????LCD_DATA,A??;?entry?mode?set?
????????????????CALL????WRITE???????;?
???????????????? MOV ?????A,01H???????;?LCD?setting?,?step?3?
???????????????? MOV ?????LCD_DATA,A??;?display?clear?
????????????????CALL????WRITE???????;?
????????????????CALL????DELAY???????;?
???????????????? MOV ?????A,0EH???????;?LCD?setting?,?step?4?
???????????????? MOV ?????LCD_DATA,A??;?display?turn?on?
????????????????CALL????WRITE???????;?
????????????????RET?
LCD_RESET???????ENDP?
;--------------------------------------------------------------------?
LCD_DISPLAY?????PROC?
???????????????? MOV ?????A,01H???????;?LCD?setting?,?step?5?
???????????????? MOV ?????LCD_DATA,A??;?display?clear?
????????????????CALL????WRITE???????;?
????????????????CALL????DELAY???????;?
???????????????? MOV ?????A,80H???????;?LCD?setting?,?setp?6?
???????????????? MOV ?????LCD_DATA,A??;?DD?RAM?address?setting?
????????????????CALL????WRITE???????;?address?=?00h?(first?line)?
????????????????SET?????LCD_CTRL.RS?;?LCD?setting?,?step?7?
???????????????? MOV ?????A,10H???????;?write?data?to?DD?RAM?
???????????????? MOV ?????COUNTER,A?
DISPLAY1:?
????????????????TABRDL??DATA?
???????????????? MOV ?????A,DATA?
???????????????? MOV ?????LCD_DATA,A?
????????????????CALL????WRITE?
????????????????INC?????TBLP?
????????????????SDZ?????COUNTER?
????????????????JMP?????DISPLAY1?
????????????????CLR?????LCD_CTRL.RS?
???????????????? MOV ?????A,0C0H??????;?LCD?setting?,?step?8?
???????????????? MOV ?????LCD_DATA,A??;?DD?RAM?address?setting?
????????????????CALL????WRITE???????;?address?=?40h?(second?line)?
????????????????SET?????LCD_CTRL.RS?;?LCD?setting?,?step?9?
???????????????? MOV ?????A,10H???????;?write?data?to?DD?RAM?
???????????????? MOV ?????COUNTER,A?
DISPLAY2:?
????????????????TABRDL??DATA?
???????????????? MOV ?????A,DATA?
???????????????? MOV ?????LCD_DATA,A?
????????????????CALL????WRITE?
????????????????INC?????TBLP?
????????????????SDZ?????COUNTER?
????????????????JMP?????DISPLAY2?
????????????????RET?
LCD_DISPLAY?????ENDP?
;--------------------------------------------------------------------?
WRITE???????????PROC?
????????????????SET?????LCD_CTRL.E?
????????????????CLR?????LCD_CTRL.E?
???????????????? MOV ?????A,0FFH?
???????????????? MOV ?????DELAY_COUNTER_1,A?
WAIT:?
????????????????SDZ?????DELAY_COUNTER_1?
????????????????JMP?????WAIT?
????????????????RET?
WRITE???????????ENDP?
;--------------------------------------------------------------------?
DELAY???????????PROC?
???????????????? MOV ?????A,003H?
???????????????? MOV ?????DELAY_COUNTER_1,A?
???????????????? MOV ?????DELAY_COUNTER_2,A?
???????????????? MOV ?????DELAY_COUNTER_3,A?
DELAY_WAIT:?
????????????????SDZ?????DELAY_COUNTER_3?
????????????????JMP?????DELAY_WAIT?
????????????????SDZ?????DELAY_COUNTER_2?
????????????????JMP?????DELAY_WAIT?
????????????????SDZ?????DELAY_COUNTER_1?
????????????????JMP?????DELAY_WAIT?
????????????????RET?
DELAY???????????ENDP?
;--------------------------------------------------------------------?
????????????????ORG?????0F00H?
LCD_MESSAGE_1:??????????;[Now?,?watch?dog?]?
????????????????????????;[will?be?time?out]?
????????????????DC??????4EH,6FH,77H,20H,2CH,20H,77H,61H?
????????????????DC??????74H,63H,68H,20H,64H,6FH,67H,20H?
????????????????DC??????77H,69H,6CH,6CH,20H,62H,65H,20H?
????????????????DC??????74H,69H,6DH,65H,20H,6FH,75H,74H?
LCD_MESSAGE_2:??????????;[Without?time?out]?
????????????????????????;[Because?CLR?WDT?]?
????????????????DC??????57H,69H,74H,68H,6FH,75H,74H,20H?
????????????????DC??????74H,69H,6DH,65H,20H,6FH,75H,74H?
????????????????DC??????42H,65H,63H,61H,75H,73H,65H,20H?
????????????????DC??????43H,4CH,52H,20H,57H,44H,54H,20H?
LCD_MESSAGE_3:??????????;[Executing?the???]?
????????????????????????;[HALT?instruction]?
????????????????DC??????45H,78H,65H,63H,75H,74H,69H,6EH?
????????????????DC??????67H,20H,74H,68H,65H,20H,20H,20H?
????????????????DC??????48H,41H,4CH,54H,20H,69H,6EH,73H?
????????????????DC??????74H,72H,75H,63H,74H,69H,6FH,6EH?
LCD_MESSAGE_4:??????????;[Without?time?out]?
????????????????????????;[CLR?WDT1?&?WDT2?]?
????????????????DC??????57H,69H,74H,68H,6FH,75H,74H,20H?
????????????????DC??????74H,69H,6DH,65H,20H,6FH,75H,74H?
????????????????DC??????43H,4CH,52H,20H,57H,44H,54H,31H?
????????????????DC??????20H,26H,20H,57H,44H,54H,32H,20H?
SEGMENT_DATA:???;7?SEGMENT?DISPLAY?DATA?(COMMON?ANODE)?
????????????????DC??????081H,0CFH,092H,086H?????;0123?
????????????????DC??????0CCH,0A4H,0A0H,08FH?????;4567?
????????????????DC??????080H,084H,088H,0E0H?????;89AB?
????????????????DC??????0B1H,0C2H,0B0H,0B8H?????;CDEF?
;--------------------------------------------------------------------?
????????????????END?
評論
查看更多