历史上的今天
今天是:2025年01月25日(星期六)
2018年01月25日 | HT48R50A的 AT24C02 IIC 示例程序
2018-01-25 来源:eefocus

; *************************************************
; 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
史海拾趣
|
刚接触嵌入式驱动设计,公司设计了一个板子,用了 PTD0/LCD0~PTD3/LCD3 作为COM0~COM3 而PTD4/LCD4~PTD15/LCD15 作为S0~S12 我照freescale的文档做了初始化,可是在板子上调试时,没有任何反应, 请高手指点是为什么? #define CONFIG_LCD ...… 查看全部问答> |
|
我以前开发的产品用的都是wince5.0,所以我电脑上装的软件是 :PB5.0+EVC4.0+VC6.0,现在要用wince6.0了,我的问题是:装 VS 2005会不会影响我以前的CE5.0的工程、BSP等,我还能用PB5.0吗?还能用EVC4.0、VC6.0吗?我是否需要将以前的软件卸掉?最 ...… 查看全部问答> |
|
我用的是Platform builder 5.0,新建一个CE 的OS,然后,新建一个驱动的DLL Project,但是编译的出现如下的错误: BUILD: [01:0000000045:ERRORE] CAN.CPP(1,2): error CS1024: Preprocessor directive expected BUILD: [01:0000000046:ERRORE] CA ...… 查看全部问答> |
|
我有下面这段程序,send()子程序单独工作的时候是正常的,但是加入到主程序中时就出现问题, 我的主程序是一个频率计。主要问题是频率计的数码管显示不正常,串口能输出数据,但是数据是错误的。 #include unsigned char code dispbit[]={0xfe, ...… 查看全部问答> |
|
大家好,我的FPGA是SP601,petalinux是0.4版本,我在petalinux上写了一个简易的web服务器,在移植了petalinux的FPGA的板子上可以运行,但是我通过IE浏览器不能访问web网页,我想问一下,petalinux-0.4是否支持web访问?到底问题出在哪里?… 查看全部问答> |
|
MCU:msp430f449 基本定时器:0.064ms溢出一次,bt_flag++,取bt_flag的特定若干值(值1,值2,值3,4,5,6,7…….n,值n+1.)来唤醒睡眠中的mcu执行动作。main loop形式如下: main() { ……………. …………… While(1) { 入低功耗n; 等待 ...… 查看全部问答> |




