; *************************************************
; Function :基于HT48R50A的 AT24C02 IIC 示例程序 *
; MicroProcessor : HT48R50A-1/28SKDIP-A *
; Author: www.picavr.com *
; Crystal : 4MHz *
; *************************************************
#INCLUDE HT48R50A-1.INC
OK EQU 0CCH
ERROR EQU 0DDH
;--------------------------------------------------------------------
PUBLIC HT_DEVICE_ADD
PUBLIC HT_DATA
PUBLIC HT_DATA_ADD
;--------------------------------------------------------------------
EXTERN LCD_RESET:NEAR
EXTERN LCD_CURSOR:NEAR
EXTERN LCD_PUT_A_CHAR:NEAR
EXTERN DELAY_LONG:NEAR
EXTERN KEY_GET:NEAR
EXTERN KEY_IN_ADDRESS:NEAR
EXTERN KEY_IN_DATA:NEAR
EXTERN BYTE_WRITE:NEAR
EXTERN PAGE_WRITE:NEAR
EXTERN CURRENT_READ:NEAR
EXTERN RANDOM_READ:NEAR
EXTERN SEQUENTIAL_READ:NEAR
EXTERN MESSAGE_01:NEAR
EXTERN MESSAGE_02:NEAR
EXTERN MESSAGE_03:NEAR
EXTERN MESSAGE_04:NEAR
EXTERN MESSAGE_05:NEAR
EXTERN MESSAGE_06:NEAR
EXTERN MESSAGE_07:NEAR
EXTERN MESSAGE_08:NEAR
EXTERN MESSAGE_09:NEAR
EXTERN MESSAGE_10:NEAR
EXTERN MESSAGE_11:NEAR
EXTERN MESSAGE_12:NEAR
EXTERN MESSAGE_13:NEAR
EXTERN MESSAGE_14:NEAR
EXTERN MESSAGE_15:NEAR
EXTERN MESSAGE_16:NEAR
EXTERN MESSAGE_17:NEAR
EXTERN BIN_TO_HEX_TABLE:NEAR
EXTERN DEC_TO_HEX_TABLE:NEAR
EXTERN HEX_TO_TEXT_TABLE:NEAR
;--------------------------------------------------------------------
EXTERN KEY_DATA:BYTE
EXTERN KEY_IN_ADD_BUFFER:BYTE
EXTERN KEY_IN_DATA_BUFFER:BYTE
EXTERN SEQUENTIAL_READ_BUFFER:BYTE
;--------------------------------------------------------------------
DATA_9724 .SECTION AT 60H ’DATA’
HT_DEVICE_ADD DB ?
HT_DATA DB ?
HT_DATA_ADD DB ?
COUNTER DB ?
DATA_REGISTER DB ?
ADDRESS_REGISTER DB ?
SEQ_COUNTER DB ?
;--------------------------------------------------------------------
CODE .SECTION AT 00H ’CODE’
ORG 00H
JMP START
START:
SET PBC
SET PB
CALL LCD_RESET
CALL MESSAGE_01
CALL KEY_GET
;--------------------------------------------------------------------
SELECT_12:
CALL MESSAGE_02
MOV A,4FH
CALL LCD_CURSOR
AGAIN_12:
CALL KEY_GET
MOV A,KEY_DATA
SUB A,0DH
SZ ACC
JMP COMPARE_12_1
JMP SELECT_34
COMPARE_12_1:
MOV A,KEY_DATA
SUB A,01H
SZ ACC
JMP COMPARE_12_2
JMP FUNCTION_1
COMPARE_12_2:
MOV A,KEY_DATA
SUB A,02H
SZ ACC
JMP AGAIN_12
JMP FUNCTION_2
RET
;--------------------------------------------------------------------
SELECT_34:
CALL MESSAGE_03
MOV A,4FH
CALL LCD_CURSOR
AGAIN_34:
CALL KEY_GET
MOV A,KEY_DATA
SUB A,0CH
SZ ACC
JMP COMPARE_34_D
JMP SELECT_12
COMPARE_34_D:
MOV A,KEY_DATA
SUB A,0DH
SZ ACC
JMP COMPARE_34_3
JMP SELECT_56
COMPARE_34_3:
MOV A,KEY_DATA
SUB A,03H
SZ ACC
JMP COMPARE_34_4
JMP FUNCTION_3
COMPARE_34_4:
MOV A,KEY_DATA
SUB A,04H
SZ ACC
JMP AGAIN_34
JMP FUNCTION_4
RET
;--------------------------------------------------------------------
SELECT_56:
CALL MESSAGE_04
MOV A,4FH
CALL LCD_CURSOR
AGAIN_56:
CALL KEY_GET
MOV A,KEY_DATA
SUB A,0CH
SZ ACC
JMP COMPARE_56_D
JMP SELECT_34
COMPARE_56_D:
MOV A,KEY_DATA
SUB A,0DH
SZ ACC
JMP COMPARE_56_5
JMP SELECT_7
COMPARE_56_5:
MOV A,KEY_DATA
SUB A,05H
SZ ACC
JMP COMPARE_56_6
JMP FUNCTION_5
COMPARE_56_6:
MOV A,KEY_DATA
SUB A,06H
SZ ACC
JMP AGAIN_56
JMP FUNCTION_6
RET
;--------------------------------------------------------------------
SELECT_7:
CALL MESSAGE_05
MOV A,4FH
CALL LCD_CURSOR
AGAIN_7:
CALL KEY_GET
MOV A,KEY_DATA
SUB A,0CH
SZ ACC
JMP COMPARE_7_7
JMP SELECT_56
COMPARE_7_7:
MOV A,KEY_DATA
SUB A,07H
SZ ACC
JMP AGAIN_7
JMP FUNCTION_7
RET
;--------------------------------------------------------------------
FUNCTION_1:
CALL MESSAGE_08
MOV A,4FH
CALL LCD_CURSOR
F_1_AGAIN:
CALL KEY_GET
MOV A,KEY_DATA
SUB A,01H
SZ ACC
JMP F_1_COMPARE_2
CALL MESSAGE_09
SET PC.4 ;WRITE PROTECT
CALL KEY_GET ;ENABLE
JMP F_1_END
F_1_COMPARE_2:
MOV A,KEY_DATA
SUB A,02H
SZ ACC
JMP F_1_AGAIN
CALL MESSAGE_10
CLR PC.4 ;WRITE PROTECT
CALL KEY_GET ;DISABLE
F_1_END:
JMP SELECT_12
RET
;--------------------------------------------------------------------
FUNCTION_2:
CALL MESSAGE_06
MOV A,41H
CALL LCD_CURSOR
CALL KEY_IN_ADDRESS
CALL BIN_TO_HEX
SUB A,OK
SZ ACC
JMP F_2_ERROR
CALL MESSAGE_07
CALL KEY_GET
JMP F_2_END
F_2_ERROR:
CALL MESSAGE_15
CALL KEY_GET
F_2_END:
JMP SELECT_12
RET
;--------------------------------------------------------------------
FUNCTION_3:
CALL MESSAGE_11
MOV A,41H
CALL LCD_CURSOR
CALL KEY_IN_ADDRESS
CALL DEC_TO_HEX
SUB A,OK
SZ ACC
JMP F_3_ERROR
CALL MESSAGE_12
MOV A,42H
CALL LCD_CURSOR
CALL KEY_IN_DATA
CALL HEX_TO_HEX
CALL BYTE_WRITE
CALL MESSAGE_16
CALL KEY_GET
JMP F_3_END
F_3_ERROR:
CALL MESSAGE_15
CALL KEY_GET
F_3_END:
JMP SELECT_34
RET
;--------------------------------------------------------------------
FUNCTION_4:
CALL MESSAGE_11
MOV A,41H
CALL LCD_CURSOR
CALL KEY_IN_ADDRESS
CALL DEC_TO_HEX
SUB A,OK
SZ ACC
JMP F_4_ERROR
CALL MESSAGE_12
MOV A,42H
CALL LCD_CURSOR
CALL KEY_IN_DATA
CALL HEX_TO_HEX
CALL PAGE_WRITE
CALL MESSAGE_17
CALL KEY_GET
JMP F_4_END
F_4_ERROR:
CALL MESSAGE_15
CALL KEY_GET
F_4_END:
JMP SELECT_34
RET
;--------------------------------------------------------------------
FUNCTION_5:
CALL CURRENT_READ
CALL MESSAGE_13
CALL ADDRESS_DATA_DISPLAY
CALL KEY_GET
JMP SELECT_56
RET
;--------------------------------------------------------------------
FUNCTION_6:
CALL MESSAGE_11
MOV A,41H
CALL LCD_CURSOR
CALL KEY_IN_ADDRESS
CALL DEC_TO_HEX
SUB A,OK
SZ ACC
JMP F_6_ERROR
CALL RANDOM_READ
CALL MESSAGE_13
CALL ADDRESS_DATA_DISPLAY
CALL KEY_GET
JMP F_6_END
F_6_ERROR:
CALL MESSAGE_15
CALL KEY_GET
F_6_END:
JMP SELECT_56
RET
;--------------------------------------------------------------------
FUNCTION_7:
CALL MESSAGE_11
MOV A,41H
CALL LCD_CURSOR
CALL KEY_IN_ADDRESS
CALL DEC_TO_HEX
SUB A,OK
SZ ACC
JMP F_7_ERROR
CALL SEQUENTIAL_READ
CALL MESSAGE_13
CALL SEQ_READ_BUFFER_DISPLAY
JMP F_7_END
F_7_ERROR:
CALL MESSAGE_15
CALL KEY_GET
F_7_END:
JMP SELECT_7
RET
;--------------------------------------------------------------------
BIN_TO_HEX PROC
CLR HT_DEVICE_ADD
MOV A,OFFSET BIN_TO_HEX_TABLE + 2
MOV TBLP,A
MOV A,OFFSET KEY_IN_ADD_BUFFER + 2
MOV MP0,A
MOV A,03H
MOV COUNTER,A
BIN_LOOP:
MOV A,R0
SUB A,01
SZ ACC
JMP BIN_BIT_X_0
TABRDL ACC
ADDM A,HT_DEVICE_ADD
JMP BIN_NEXT
BIN_BIT_X_0:
MOV A,R0
SZ ACC
JMP BIN_ERROR
BIN_NEXT:
DEC TBLP
DEC MP0
SDZ COUNTER
JMP BIN_LOOP
MOV A,OK
JMP BIN_END
BIN_ERROR:
MOV A,ERROR
BIN_END:
RET
BIN_TO_HEX ENDP
;--------------------------------------------------------------------
DEC_TO_HEX PROC
MOV A,HT_DATA_ADD
MOV ADDRESS_REGISTER,A
CLR HT_DATA_ADD
MOV A,OFFSET DEC_TO_HEX_TABLE
MOV TBLP,A
MOV A,OFFSET KEY_IN_ADD_BUFFER + 2
MOV MP0,A
MOV A,R0
ADDM A,HT_DATA_ADD
DEC MP0
MOV A,R0
ADDM A,TBLP
TABRDL ACC
ADDM A,HT_DATA_ADD
DEC MP0
MOV A,R0
SNZ ACC.0
JMP CHECK_ZERO
MOV A,64H
ADDM A,HT_DATA_ADD
JMP CHECK_ERROR
CHECK_ZERO:
MOV A,R0
SZ ACC
JMP DEC_TO_HEX_ERROR
JMP DEC_TO_HEX_OK
CHECK_ERROR:
MOV A,7FH
SUB A,HT_DATA_ADD
SNZ ACC.7
JMP DEC_TO_HEX_OK
DEC_TO_HEX_ERROR:
MOV A,ADDRESS_REGISTER
MOV HT_DATA_ADD,A
MOV A,ERROR
JMP DEC_TO_HEX_END
DEC_TO_HEX_OK:
MOV A,OK
DEC_TO_HEX_END:
RET
DEC_TO_HEX ENDP
;--------------------------------------------------------------------
HEX_TO_HEX PROC
CLR HT_DATA
MOV A,OFFSET KEY_IN_DATA_BUFFER + 1
MOV MP0,A
MOV A,R0
ADDM A,HT_DATA
DEC MP0
MOV A,R0
SWAP ACC
ADDM A,HT_DATA
RET
HEX_TO_HEX ENDP
;--------------------------------------------------------------------
ADDRESS_DATA_DISPLAY PROC
MOV A,OFFSET KEY_IN_ADD_BUFFER + 2
MOV MP0,A
CLR R0
DEC MP0
CLR R0
DEC MP0
CLR R0
MOV A,HT_DATA_ADD
SZ ACC
JMP TRANSFER_BEGIN
JMP ADDRESS_DISPLAY_BEGIN
TRANSFER_BEGIN:
MOV A,HT_DATA_ADD
MOV COUNTER,A
TRANSFER:
MOV A,OFFSET KEY_IN_ADD_BUFFER + 2
MOV MP0,A
MOV A,R0
SUB A,09H
SNZ ACC.7
JMP BYTE_1
INC R0
JMP TRANSFER_END
BYTE_1:
CLR R0
DEC MP0
MOV A,R0
SUB A,09H
SNZ ACC.7
JMP BYTE_2
INC R0
JMP TRANSFER_END
BYTE_2:
CLR R0
DEC MP0
INC R0
TRANSFER_END:
SDZ COUNTER
JMP TRANSFER
ADDRESS_DISPLAY_BEGIN:
MOV A,OFFSET KEY_IN_ADD_BUFFER
MOV MP0,A
MOV A,08H
CALL LCD_CURSOR
MOV A,7FH
DAA ACC
MOV A,03H
MOV COUNTER,A
ADDRESS_DISPLAY:
MOV A,OFFSET HEX_TO_TEXT_TABLE
MOV TBLP,A
MOV A,R0
ADDM A,TBLP
TABRDL ACC
CALL LCD_PUT_A_CHAR
INC MP0
SDZ COUNTER
JMP ADDRESS_DISPLAY
MOV A,OFFSET KEY_IN_DATA_BUFFER + 1
MOV MP0,A
MOV A,HT_DATA
AND A,0FH
MOV R0,A
DEC MP0
MOV A,HT_DATA
SWAP ACC
AND A,0FH
MOV R0,A
MOV A,48H
CALL LCD_CURSOR
MOV A,02H
MOV COUNTER,A
DATA_DISPLAY:
MOV A,OFFSET HEX_TO_TEXT_TABLE
MOV TBLP,A
MOV A,R0
ADDM A,TBLP
TABRDL ACC
CALL LCD_PUT_A_CHAR
INC MP0
SDZ COUNTER
JMP DATA_DISPLAY
MOV A,50H
CALL LCD_CURSOR
RET
ADDRESS_DATA_DISPLAY ENDP
;--------------------------------------------------------------------
SEQ_READ_BUFFER_DISPLAY PROC
MOV A,HT_DATA
MOV DATA_REGISTER,A
MOV A,HT_DATA_ADD
MOV ADDRESS_REGISTER,A
MOV A,HT_DATA_ADD
SUB A,07H
SNZ ACC.7
JMP SEQ_DATA_ADD_CHANGE
MOV A,HT_DATA_ADD
ADD A,80H
SUB A,07H
MOV HT_DATA_ADD,A
JMP SEQ_DISPLAY_BEGIN
SEQ_DATA_ADD_CHANGE:
MOV A,HT_DATA_ADD
SUB A,07H
MOV HT_DATA_ADD,A
SEQ_DISPLAY_BEGIN:
MOV A,OFFSET SEQUENTIAL_READ_BUFFER
MOV MP1,A
MOV A,08H
MOV SEQ_COUNTER,A
SEQ_LOOP:
MOV A,40H
CALL LCD_CURSOR
MOV A,SEQ_COUNTER
ADD A,30H
CALL LCD_PUT_A_CHAR
MOV A,R1
MOV HT_DATA,A
CALL ADDRESS_DATA_DISPLAY
INC MP1
MOV A,HT_DATA_ADD
SUB A,7FH
SZ ACC
JMP SEQ_NOT_ZERO
CLR HT_DATA_ADD
JMP SEQ_END
SEQ_NOT_ZERO:
INC HT_DATA_ADD
SEQ_END:
MOV A,40H
CALL LCD_CURSOR
CALL KEY_GET
CALL DELAY_LONG
SDZ SEQ_COUNTER
JMP SEQ_LOOP
MOV A,DATA_REGISTER
MOV HT_DATA,A
MOV A,ADDRESS_REGISTER
MOV HT_DATA_ADD,A
RET
SEQ_READ_BUFFER_DISPLAY ENDP
;--------------------------------------------------------------------
END
上一篇:HT48R50A的 RS232串口示例程序
下一篇:HT48R50A的 93C46示例程序
推薦閱讀
史海拾趣
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 秋風(fēng)送爽,你來答題我送禮!看Maxim 深入淺出低功耗處理器視頻精彩為您呈現(xiàn)!
- EEWORLD社區(qū)月度獎勵,贈E金幣!
- 一起“充電”,DIY自己專屬應(yīng)急燈
- 為你點贊——我最愛有“干貨”的博文
- 兆易GD32450I-EVAL免費測評試用
- Vicor 白皮書下載有禮 | 在48V架構(gòu)中使用高密度功率轉(zhuǎn)換器構(gòu)建更好的機器人
- STM32全國巡回研討會!(走進11城,9/12-10/27)
- 3小時實戰(zhàn)+剖析:TI工程師手把手帶你全面入門MSP430(限量售$4.3開發(fā)套件,助你參與動手實驗)
- 【EEWORLD第二十九屆】2011年08月社區(qū)明星人物揭曉!