📄 cs1821_20060106_ok.asm
字号:
DIS_DATA_WR_1_1:
MOV A,B
ANL A,#0F0H
MOV R3,A
LCALL DATA_WR
MOV A,B
ANL A,#0FH
SWAP A
MOV R3,A
LCALL DATA_WR
NOP
DJNZ R0,DIS_DATA_WR_1_1
RET
;---------------------------------------------------------------------------
;***************************************************************************
DIS_DATA_WR_2:
MOV DPTR,#DIS_TAB_2 ;20051130 ADD
MOV A,R7
MOVC A,@A+DPTR
MOV B,A ;另存显示数据
;---------------------------------------------------------------------------
MOV R0,#10H ;每次写入一个数据
DIS_DATA_WR_2_1:
MOV A,B
ANL A,#0F0H
MOV R3,A
LCALL DATA_WR
MOV A,B
ANL A,#0FH
SWAP A
MOV R3,A
LCALL DATA_WR
NOP
DJNZ R0,DIS_DATA_WR_2_1
RET
;--------------------------------------------------------------------------
;**************************************************************************
DIS_DATA_WR_3:
MOV DPTR,#DIS_TAB_3 ;20051130 ADD
MOV A,R7
MOVC A,@A+DPTR
MOV B,A ;另存显示数据
;---------------------------------------------------------------------------
MOV R0,#01H ;共16个字节,32个显示RAM
DIS_DATA_WR_3_1:
MOV A,B
ANL A,#0F0H
MOV R3,A
LCALL DATA_WR
MOV A,B
ANL A,#0FH
SWAP A
MOV R3,A
LCALL DATA_WR
NOP
DJNZ R0,DIS_DATA_WR_3_1
RET
;---------------------------------------------------------------------------
;***************************************************************************
DIS_DATA_WR_4:
MOV DPTR,#DIS_TAB_4 ;20051130 ADD
MOV A,R7
MOVC A,@A+DPTR
MOV B,A ;另存显示数据
;---------------------------------------------------------------------------
MOV R0,#10H ;共16个字节,32个显示RAM
DIS_DATA_WR_4_1:
MOV A,B
ANL A,#0F0H
MOV R3,A
LCALL DATA_WR
MOV A,B
ANL A,#0FH
SWAP A
MOV R3,A
LCALL DATA_WR
NOP
DJNZ R0,DIS_DATA_WR_4_1
RET
;---------------------------------------------------------------------------
DIS_DATA_WR_5:
MOV DPTR,#DIS_TAB_5 ;20051130 ADD
MOV A,R7
MOVC A,@A+DPTR
MOV B,A ;另存显示数据
;---------------------------------------------------------------------------
MOV R0,#01H
DIS_DATA_WR_5_1:
MOV A,B
ANL A,#0F0H
MOV R3,A
LCALL DATA_WR
MOV A,B
ANL A,#0FH
SWAP A
MOV R3,A
LCALL DATA_WR
NOP
DJNZ R0,DIS_DATA_WR_5_1
RET
;---------------------------------------------------------------------------
;****************************************************************************
DIS_ERROR_WR:
MOV DPTR,#ERROR_TAB ;20051130 ADD
MOV A,R7
MOVC A,@A+DPTR
MOV B,A ;另存显示数据
;---------------------------------------------------------------------------
MOV R0,#01H
DIS_ERROR_WR_1:
MOV A,B
ANL A,#0F0H
MOV R3,A
LCALL DATA_WR
MOV A,B
ANL A,#0FH
SWAP A
MOV R3,A
LCALL DATA_WR
NOP
DJNZ R0,DIS_ERROR_WR_1
RET
;----------------------------------------------------------------------------
;****************************************************************************
DIS_RIGHT_WR:
MOV DPTR,#RIGHT_TAB ;20051130 ADD
MOV A,R7
MOVC A,@A+DPTR
MOV B,A ;另存显示数据
;---------------------------------------------------------------------------
MOV R0,#01H
DIS_RIGHT_WR_1:
MOV A,B
ANL A,#0F0H
MOV R3,A
LCALL DATA_WR
MOV A,B
ANL A,#0FH
SWAP A
MOV R3,A
LCALL DATA_WR
NOP
DJNZ R0,DIS_RIGHT_WR_1
RET
;----------------------------------------------------------------------------
;****************************************************************************
DIS_RAM_READ:
SETB CS1821_CS
SETB CS1821_RD
LCALL DELAY
CLR CS1821_CS
MOV R1,#ID_READ ;将读RAM ID(110)写入CS1821
LCALL ID_WR
MOV R5,#06H ;将显示RAM的六位地址写入CS1821
MOV R2,#RAM_ADD ;从地址00H开始
LCALL COMMAND_WR_1
MOV COUNT,#10H ;共读入16个字节
MOV R1,#MRD
DIS_RAM_READ_1:
LCALL DATA_READ
MOV A,READ_TEMP
ANL A,#0FH
SWAP A
MOV TEMP_1,A
LCALL DATA_READ
MOV A,READ_TEMP
ANL A,#0FH
ORL A,TEMP_1
MOV @R1,A
INC R1 ;调整存储数据指针
DJNZ COUNT,DIS_RAM_READ_1
LCALL DELAY_20MS
RET
;-------------------------------------------------------------
;*************************************************************
DATA_READ:
;PUSH ACC
;PUSH PSW
;SETB RS1
;CLR RS0
;MOV R5,#04H
MOV TEMP_3,#04H
CLR C
MOV R6,#00H
MOV A,R6
DATA_READ_1:
CLR CS1821_RD
NOP
NOP
NOP
SETB CS1821_RD
SETB CS1821_DATA ;SET CS1821_DATA FOR INPUT
NOP
NOP
MOV C,CS1821_DATA
RLC A
DJNZ TEMP_3,DATA_READ_1
MOV READ_TEMP,A ;读入的四位数据存放在RAM_T
;POP PSW
;POP ACC
RET
;---------------------------------------------------------
;*********************************************************
READ_MODIFY_WRITE:
SETB CS1821_CS
SETB CS1821_RD
LCALL DELAY
CLR CS1821_CS
MOV R1,#ID_DATA ;将数据ID(101)写入CS1821
LCALL ID_WR
MOV R5,#06H ;将显示RAM的六位地址写入CS1821
MOV R2,#RAM_ADD ;每次皆从地址00H开始
LCALL COMMAND_WR_1
MOV TEMP_4,#10H
MOV R7,#00H
CLR C
READ_MODIFY_WRITE_1:
LCALL DATA_READ
MOV DPTR,#RIGHT_TAB ;20051130 ADD
MOV A,R7
MOVC A,@A+DPTR
MOV B,A
ANL A,#0F0H
MOV R3,A
LCALL DATA_WR
LCALL DATA_READ
MOV A,B
ANL A,#0FH
SWAP A
MOV R3,A
LCALL DATA_WR
INC R7
DJNZ TEMP_4,READ_MODIFY_WRITE_1
RET
;----------------------------------------------------------
;**********************************************************
LOOK_UP_TAB5: ;TAB5中的数据发送到以MTD为首地址的缓冲区
MOV DPTR,#DIS_TAB_5
MOV R0,#MTD
MOV R6,#00H
MOV R7,#10H
LOOK_UP_TAB5_1:
MOV A,R6
MOVC A,@A+DPTR
MOV @R0,A
INC R6
INC R0
DJNZ R7,LOOK_UP_TAB5_1
RET
;---------------------------------------------------------
;*********************************************************
DATA_COMPARE:
MOV R0,#MTD
MOV R1,#MRD
MOV R7,#10H
DATA_COMPARE_1:
MOV A,@R0
XRL A,@R1
JZ DATA_COMPARE_2
LJMP DATA_COMPARE_EXIT
DATA_COMPARE_2:
INC R0
INC R1
DJNZ R7,DATA_COMPARE_1
LJMP DATA_COMPARE_EXIT_1
DATA_COMPARE_EXIT:
MOV ERROR_FLAG,#80H
DATA_COMPARE_EXIT_1:
RET
;*********************************************************
;-----------------------ID写入子程序----------------------
ID_WR:
MOV R5,#03H ;共写入三位ID码(100或101)
MOV A,R1
ID_WR_1:
LCALL CLOCK_WR
DJNZ R5,ID_WR_1
RET
;---------------------命令写入子程序-----------------------
COMMAND_WR:
MOV R5,#08H ;八位命令
COMMAND_WR_1:
MOV A,R2
COMMAND_WR_2:
LCALL CLOCK_WR
DJNZ R5,COMMAND_WR_2
RET
;--------------------无关位写入子程序----------------------
X_WR:
MOV A,R3
LCALL CLOCK_WR
RET
;-------------------RAM DATA写入子程序--------------------
DATA_WR:
MOV R4,#04H ;每次写入4位串行数据
MOV A,R3
DATA_WR_1:
LCALL CLOCK_WR
DJNZ R4,DATA_WR_1
RET
;----------------------写时钟子程序------------------------
CLOCK_WR:
RLC A
MOV CS1821_DATA,C
CLR CS1821_WR
NOP
SETB CS1821_WR
NOP
RET
;-----------------------------------------------------------
;***********************************************************
;-----------------------延时子程序--------------------------
DELAY_1MS: ;选用第一组工作寄存器(RS0=1,RS1=0)
PUSH PSW
SETB RS0
CLR RS1
MOV R7,#50
DELAY_1MS_1:
MOV R6,#10
DELAY_1MS_2:
DJNZ R6,$
DJNZ R7,DELAY_1MS_1
POP PSW
RET
;------------------------------------------------
DELAY_10MS:
PUSH PSW
SETB RS0
CLR RS1
MOV R5,#10
DELAY_10MS_1:
LCALL DELAY_1MS
DJNZ R5,DELAY_10MS_1
POP PSW
RET
;------------------------------------------------
DELAY_20MS:
PUSH PSW
SETB RS0
CLR RS1
MOV R5,#20
DELAY_20MS_1:
LCALL DELAY_1MS
DJNZ R5,DELAY_20MS_1
POP PSW
RET
;-------------------------------------------------
DELAY:
PUSH PSW
SETB RS0
CLR RS1
MOV R6,#0FFH
WAIT_1:
DJNZ R6,WAIT_1
MOV R6,#0FFH
WAIT_2:
DJNZ R6,WAIT_2
POP PSW
RET
;----------------------------------------------------
DELAY_400MS:
PUSH PSW
SETB RS0
CLR RS1
MOV R0,#10H
DELAY_400MS_1:
MOV R1,#64H
DELAY_400MS_2:
MOV R2,#64H
DJNZ R2,$ ;200US
DJNZ R1,DELAY_400MS_2 ;203*100=20300US
DJNZ R0,DELAY_400MS_1 ;(20300+3)*20+3=406063US=406MS
POP PSW
RET
;***************************************************************
;---------------------------------------------------------------
DIS_TAB_1:
DB 60H,3EH,7FH,60H ;1,2,8,1
;DB 5BH,1DH,5BH,7DH ;S,C,5,0
;DB 02H,60H,7DH,02H ;-,1,0,-
;DB 5FH,7DH,7DH,3EH ;6,0,0,2
DB 5BH,1DH,02H,5FH ;S,C,-,6 FOR TEST
DB 7DH,7DH,3EH,5BH ;0,0,2,5
DB 7DH,02H,60H,7DH ;0,-,1,0
DB 00H,00H,00H,00H ;全灭
DIS_TAB_2:
DB 10H,20H,40H,08H ;A,B,C,D
DB 04H,01H,02H,80H ;E,F,G,H
DB 0FFH,0FFH,00H,00H
DIS_TAB_3:
;DB 7BH,7FH,70H,5FH ;9,8,7,6
;DB 5BH,63H,7AH,3EH ;5,4,3,2
;DB 60H,7DH,00H,00H ;1,0
DB 7FH,7DH,7FH,7DH ;8,0,8,0
DB 7FH,7DH,7DH,7FH ;8,0,0,8
DB 7DH,7FH,7DH,7FH ;0,8,0,8
DB 7DH,7FH,7DH,7FH
DIS_TAB_4:
DB 7DH,60H,3EH,7AH ;0,1,2,3
DB 63H,5BH,5FH,70H ;4,5,6,7
DB 7FH,7BH,77H,4FH ;8,9,A,b
DB 1DH,6EH,1FH,17H ;C,d,E,F
DB 02H,00H,00H,00H
DIS_TAB_5:
;DB 17H,1FH,6EH,1DH ;F,E,D,C
;DB 4FH,77H,7BH,7FH ;B,A,9,8
;DB 70H,5FH,5BH,63H ;7,6,5,4
;DB 7AH,3EH,60H,7DH ;3,2,1,0
DB 5BH,63H,7AH,3EH ;5,4,3,2
DB 60H,7DH,77H,7BH ;1,0,A,9
DB 7FH,70H,5FH,17H ;8,7,6,F
DB 1FH,6EH,1DH,4FH ;E,D,C,B
DB 00H,00H,00H,00H
ERROR_TAB: ;r,o,r,r,E
DB 06H,4EH,06H,06H
DB 1FH,00H,00H,00H
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
RIGHT_TAB: ;t,h,g,i,r
;DB 70H,47H,7BH,60H
;DB 15H,00H,00H,00H
DB 7FH,7FH,7FH,7FH
DB 7FH,7FH,7FH,7FH
DB 7FH,7FH,7FH,7FH
DB 7FH,7FH,7FH,7FH
DIS_TAB_CLR:
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
DB 00H,00H,00H,00H
;----------------------------------------------------------------
END
;----------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -