📄 hkbus16.asm
字号:
; ANL A,#0F0H
; ORL A,R7
; MOV P1,A
INC R7
SETB P3.3
NOP
NOP
CLR P3.3 ;STO脉冲锁存数据
MOV R6,#10 ;防止暗亮
DJNZ R6,$
CLR P3.2 ;OE开显示
JMP DIS1
;------------------------------------------------------------------
;入口参数:此幕起始数据指针(69H,68H)
;出口参数:下一幕起始数据指针(69H,68H)
LILI:JNB 06H,LILI1
PUSH 69H
PUSH 68H
LILI1:MOV 42H,68H
MOV 43H,69H
MOV 44H,#00H
MOV 45H,#80H
LCALL LIU1
MOV 68H,42H
MOV 69H,43H
JNB 06H,LILI8
POP 68H
POP 69H
LJMP LILI9
LILI8:MOV R5,#90H ;显示次数
LILIY:LCALL DIS
DJNZ R5,LILIY
LILI9:RET
LIU1: MOV R5,#VER ;R5中存放图文屏共有几行
LIU2: MOV R4,#HOR ;R4中存放图文屏一行有几字节
LIU3: MOV A,#01H
LCALL PX
MOV DPL,42H
MOV DPH,43H
MOVX A,@DPTR
MOV B,A
INC DPTR
MOV 42H,DPL
MOV 43H,DPH
MOV A,#0
LCALL PX
MOV DPL,44H
MOV DPH,45H
MOV A,B
JNB 06H,LIU6
MOV A,#00H
LIU6: MOVX @DPTR,A
INC DPTR
MOV 44H,DPL
MOV 45H,DPH
DJNZ R4,LIU3
DJNZ R5,LIU2
RET
;----------------------------------------------------------------
PX: ;选择芯片子程序
CLR C
CJNE A,#09,PXX1 ;入口参数放入A中,0-8
PXX1:JC PXX2
RET
PXX2:PUSH DPL
PUSH DPH
PUSH B
PUSH ACC
MOV B,#10
MUL AB
MOV B,A
POP ACC
ADD A,B
MOV DPTR,#PXX
JMP @A+DPTR
PXX:CLR P1.6 ;A=00,选中628128-1的低64K,
CLR P1.7
CLR P1.4
CLR P1.5
LJMP PXX3
CLR P1.6 ;A=01,选中628128-1的高64K,
CLR P1.7
SETB P1.4
CLR P1.5
LJMP PXX3
SETB P1.6 ;A=02,选中628128-2的低64K,
CLR P1.7
CLR P1.4
CLR P1.5
LJMP PXX3
SETB P1.6 ;A=03,选中628128-2的高64K,
CLR P1.7
SETB P1.4
CLR P1.5
LJMP PXX3
CLR P1.6 ;A=04,选中1387
SETB P1.7
CLR P1.4
CLR P1.5
LJMP PXX3
SETB P1.6 ;A=05,选中29C020的1区
SETB P1.7
CLR P1.4
CLR P1.5
LJMP PXX3
SETB P1.6 ;A=06,选中29C020的2区
SETB P1.7
SETB P1.4
CLR P1.5
LJMP PXX3
SETB P1.6 ;A=07,选中29C020的3区
SETB P1.7
CLR P1.4
SETB P1.5
LJMP PXX3
SETB P1.6 ;A=08,选中29C020的4区
SETB P1.7
SETB P1.4
SETB P1.5
LJMP PXX3
PXX3:POP B
POP DPH
POP DPL
RET
;----------------------------------------------
REC: CLR P3.4
MOV R1,#10H
REC3:MOV R3,#0FFH
REC4:MOV R2,#0FFH
REC1:JBC RI,REC2
JBC RI,REC2
JBC RI,REC2
DJNZ R2,REC1
DJNZ R3,REC4
DJNZ R1,REC3
; AJMP REC1
POP DPL
POP DPH
MOV DPTR,#RETU
PUSH DPL
PUSH DPH
REC2:RET
;--------------------------------------------
INTEST:CJNE A,#'K',RETU2 ;SELF TEST
MOV A,37H
CJNE A,#'4',RETU2
MOV A,3AH
CJNE A,#'1',RETU2
MOV A,3BH
CJNE A,#'0',RETU2
MOV R4,#'1'
LCALL SENDTE ;TEST ACK
SETB P3.2 ;关显示OE
SETB P1.3 ;控制所有片选有效,9572并入串出功能无效
;MDD EXECUTE A SELF TEST OPRATION
MOV R1,#55H
LCALL TEST
MOV R1,#0AAH
LCALL TEST
CLR 0FH
LCALL TESV
SETB 0FH
LCALL TESV
MOV R1,#0FFH
LCALL TEST
SETB 0AH ;检测所存幕循环显示一次
pop DPH
pop DPL
mov dptr,#list0
push dpl
push dph
RETI
;--------------------------------------------
RETU2:LJMP RETU
;--------------------------------------------
INKP:CJNE A,#24H,RETU2 ;KEYPAD来的开始指令 $
SETB P3.2 ;关显示OE
SETB P1.3 ;控制所有片选有效,9572并入串出功能无效
MOV R0,#30H
MOV @R0,A
INC R0
LCALL RKEYPAD ;接收KEYPAD的数据
MOV A,35H
CJNE A,#'B',INTEST ;不是FUNCTION,则跳到INTEST自检
MOV A,36H
CJNE A,#'S',RETU2
LCALL SENDOK ;IF OK 发送acknowledge to KEYPAD
MOV R0,#30H ;接收KEYPAD的数据 $0000K......
LCALL RKEYPAD ;接收KEYPAD的数据
MOV A,36H ;CHECK SUM
CLR C
SUBB A,#30H
SWAP A
MOV B,A
MOV A,37H
CLR C
SUBB A,#30H
ORL A,B
MOV R1,A ;the length of the data
MOV R2,A
MOV R3,A
MOV R7,#06
MOV R0,#30H
MOV A,#0
CSUM1:ADD A,@R0
INC R0
DJNZ R7,CSUM1
ADD A,@R0
INC R0
ADD A,@R0
INC R0
CSUM2:ADD A,@R0
INC R0
DJNZ R3,CSUM2
MOV R5,A ;R5--SUM
SWAP A
ANL A,#0FH
CLR C
CJNE A,#10,CSUM4
CSUM4:JC CSUM5
ADD A,#07H
CSUM5:ADD A,#30H
MOV B,A
MOV A,@R0
CJNE A,B,RETU2
MOV A,R5
ANL A,#0FH
CLR C
CJNE A,#10,CSUM6
CSUM6:JC CSUM7
ADD A,#07H
CSUM7:ADD A,#30H
MOV B,A
INC R0
MOV A,@R0
CJNE A,B,RETU2
MOV A,3BH
CJNE A,#31H,INST0 ;Fn
JMP ERROR
INST0:MOV R0,#38H ;CHECK INVELID
CLR 05H ;幕数选择OR亮度调整 标志
INST1:MOV A,@R0
INC R0
CJNE A,#'Q',INST2
SETB 05H
JMP INST5
INST2:CLR C
CJNE A,#3AH,INST3
INST3:JNC ERROR ;>10错误
MOV B,A
MOV A,R2
CLR C
CJNE A,#03,INST4 ;除了最后两位数字,其余要=0,不然报错
INST4:JC INST5
MOV A,B
CLR C
CJNE A,#30H,ERROR
INST5:DJNZ R2,INST1
JB 05H,LIGHT
DEC R0
MOV A,@R0
CLR C
SUBB A,#30H
MOV R7,A
DEC R0
MOV A,@R0
CLR C
SUBB A,#30H
MOV B,#10
MUL AB
ADD A,R7 ;选择幕数A
LJMP RETX2
LIGHT:
DEC R0
MOV A,@R0
CLR C
SUBB A,#30H
MOV R7,A
DEC R0
MOV A,@R0
CJNE A,#'Q',LIGHT2
MOV A,R7
JMP LIGHT3
LIGHT2:CLR C
SUBB A,#30H
MOV B,#10
MUL AB
ADD A,R7 ;亮度等级A
LIGHT3:
LJMP LIGHT99
;--------------------------------------------
ERROR:LJMP RETX24
;--------------------------------------------
LIGHT99:MOV R6,A
MOV A,#01
LCALL PX
MOV DPTR,#0FFFAH ;0FFFAH中存亮度等级0-9
MOV A,R6
LCALL CHECKA ;限制A为0-9
MOVX @DPTR,A
MOV 73H,A ;亮度等级参数73H
LCALL ZHUZ71 ;HOR-HOR/10*73H==>74H
LCALL W29CS1 ;写FF00H--FFFFH的内容到29C040
mov SCON,#0f0h
SETB ES
LCALL SENDOK ;IF OK 发送acknowledge to KEYPAD
MOV R0,#30H
LCALL RKEYPAD ;接收KEYPAD的数据
LCALL SENDOK ;IF OK 发送acknowledge to KEYPAD
pop DPH
pop DPL
mov dptr,#list
push dpl
push dph
RETI
;--------------------------------------------
RETX2:JZ RETX24
DEC A ;执行幕号
CLR C
CJNE A,1CH,RETX21 ;与结束幕号比较
MOV 1DH,A
JMP RETX23
RETX21:JNC RETX24
MOV 1DH,A
RETX23:MOV A,#01
LCALL PX
MOV A,1DH
MOV DPTR,#0FFFEH ;0FFFBH中存选择幕数
MOVX @DPTR,A
LCALL W29CS1 ;写FF00H--FFFFH的内容到29C040
mov SCON,#0f0h
SETB ES
LCALL SENDOK ;IF OK 发送acknowledge to KEYPAD
LCALL RKEYPAD ;接收KEYPAD的数据
LCALL SENDOK ;IF OK 发送acknowledge to KEYPAD
pop DPH
pop DPL
mov dptr,#list
push dpl
push dph
RETI
RETX24:
LCALL SENDER ;IF OK 发送acknowledge to KEYPAD
LCALL RKEYPAD ;接收KEYPAD的数据
LCALL SENDOK ;IF OK 发送acknowledge to KEYPAD
mov SCON,#0f0h
SETB ES
RETI
;--------------------------------------------
RETU:SETB ES ;通讯失败,返回
SETB TR1
mov SCON,#0f0h
MOV A,#01H
LCALL PX
CLR P3.4
RETI
;-----------------------------------------------------------
INKPP:LJMP INKP
;-----------------------------------------------------------
INES: ;通讯子程序
CLR RI
MOV A,SBUF
CJNE A,#ADDR1,INKPP ;判定是否本机地址
MOV 67H,A
LCALL REC
MOV A,SBUF
CJNE A,#ADDR2,RETU
LCALL REC
MOV A,SBUF
CJNE A,#ADDR3,RETU
SETB P3.4 ;发控制端置为发送
SETB P3.2 ;关显示OE
SETB P1.3 ;控制所有片选有效,9572并入串出功能无效
CLR ES
setb TB8 ;是重新设置通讯协议为单机方式
MOV A,67H
MOV SBUF,A ;改校验为无校验,不发送第9位
JNB TI,$
CLR TI
mov SCON,#0d0h ; 清SM2位,所有数据接收
CLR P3.4
LCALL REC
MOV A,SBUF ;接收功能号
SETB P3.4
CLR TB8
MOV SBUF,A
JNB TI,$
CLR TI
MOV 71H,A ;功能号暂存71H
CJNE A,#2AH,RETU ;"*" 接收图片信息
CLR P3.4
LCALL REC
PRI1C:MOV A,SBUF
SETB P3.4
MOV R6,A
MOV R7,A ;R7中存放总共要接收几屏
CLR TB8
MOV SBUF,A ;R6存放还剩几屏需接收,初始为总屏数
JNB TI,$
CLR TI
CLR P3.4
mov a,#01h ;控主板1断开,主板2接通显示
lcall px ;选中628128
COMI:MOV DPTR,#0000H
MOV A,R7
CLR C
SUBB A,R6 ;总屏数R7-还剩几屏需接收R6==>正在接收第几屏B
MOV B,A
MOV A,#SUM1 ;SUM1整个点阵屏有几个字节的低位
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A ;计算接收当前屏的存放地址
MOV A,R7
CLR C
SUBB A,R6
MOV B,A
MOV A,#SUM2 ;SUM2整个点阵屏有几个字节的高位
MUL AB
ADD A,DPH
MOV DPH,A
MOV R4,#HOR ;R4中存放图文屏一行有几字节
MOV R5,#VER ;R5中存放图文屏共有几行
RIGV:LCALL REC
PRI1:MOV A,SBUF
MOVX @DPTR,A
INC DPTR
SETB P3.4
CLR TB8
MOV SBUF,A
JNB TI,$
CLR TI ;存放显示内容数据
CLR P3.4
DJNZ R4,RIGV
MOV R4,#HOR
DJNZ R5,RIGV
mov dptr,#0f600h ;计算该屏显示方式存放地址
MOV A,R7
CLR C
SUBB A,R6 ;0f600h+此幕*10
MOV B,#10
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOV R4,#4
RIGVM:LCALL REC ;跳到接收下一幕数据
PRI1m:MOV A,SBUF
MOVX @DPTR,A
INC DPTR
SETB P3.4
CLR TB8
MOV SBUF,A
JNB TI,$
CLR TI
CLR P3.4
DJNZ R4,RIGVM ;存放显示方式的4个数据
DJNZ R6,COMI0 ;R6减1,接收下一屏
JMP COMI1
COMI0:LJMP COMI
COMI1:mov dptr,#0fffeh ;显示内容和方式字接收完毕
mov a,#0
movx @dptr,a
MOV DPTR,#0FFFFH ;0FFFEH中存显示屏号起始号
MOV A,R7 ;0FFFFH中存显示屏号结束号
DEC A
MOVX @DPTR,A
RTIME: mov a,#04h ;选中12887时间芯片
lcall px ;接收时间参数
mov dptr,#7f89h
MOV R4,#4
RIGVj:LCALL REC ;接收年,月,日,星期
PRI1j:MOV A,SBUF
MOVX @DPTR,A
SETB P3.4
CLR TB8
MOV SBUF,A
clr c
mov a,dpl
subb a,#01
mov dpl,a
mov a,dph
subb a,#0
mov dph,a
JNB TI,$
CLR TI
CLR P3.4
DJNZ R4,RIGVj ;接收4个字节
clr c
mov a,dpl
subb a,#01
mov dpl,a
mov a,dph
subb a,#0
mov dph,a
MOV R4,#3
RIGVn:LCALL REC ;接收时,分,秒
PRI1n:MOV A,SBUF
MOVX @DPTR,A
SETB P3.4
CLR TB8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -