📄 f16std0.asm
字号:
;f16std0 16点阵屏旧通讯协议标准程序 可用89c51
;15H 本机地址
;18H 接收数据的校验和
;r5 接收的第几字节计数
;R6 将接收的指令记住,用于最后的数据应答
ORG 0000H
JMP MAIN
ORG 000BH ;INT0 外部中断0服务程序
JMP SMXS
ORG 0023H ; 通讯中断服务程序
JMP REC
ORG 0030H
MAIN: CLR P3.2 ;(int0)收发切换
MOV SCON, #0F0H
MOV TMOD, #21H
MOV TL1, #0F6H
MOV TH1, #0F6H
SETB TR1
SETB PT0
MOV SP, #63H
MOV TL0, #00H
MOV TH0, #00H
MOV IE, #92H
CALL CLP
MOV 2FH, #00H
MOV 2EH, #02H
MOV R4, #00H
MOV 14H, #00H
MOV 2AH, #00H
CLR P3.4
CLR INT1
CLR INT1
SETB INT1
SETB INT1
MOV 15H, P2
SETB P3.4
SETB TR0
MOV R2, #10H
;ADDED
MOV a,#30h
PRE_SEE:
mov 29h,#04h
mov 28h,29h
;mov a,#31h
mov r5, #02h
MOV 1AH, #15H
ADYL2: lcall XNM
inc r5
DJNZ 1AH, ADYL2
MOV 14H, #00H
MOV 2AH, #00H
MOV R4, #00H
MOV R3, #07H
CLR 27H.4
SETB 2AH.1
MOV 1AH, #0FFH ;数据延时
ADYL14: MOV 19H, #0FFH
DJNZ 19H, $
DJNZ 1AH, ADYL14
mov 29h,#05h
mov 28h,29h
;mov a,#31h
mov r5, #02h
MOV 1AH, #15H
ADYL3: lcall XNM
inc r5
DJNZ 1AH, ADYL3
MOV 14H, #00H
MOV 2AH, #00H
MOV R4, #00H
MOV R3, #07H
CLR 27H.4
SETB 2AH.1
mov r5, #05h
ADYL5: MOV 1AH, #0FFH ;数据延时
ADYL4: MOV 19H, #0FFH
DJNZ 19H, $
DJNZ 1AH, ADYL4
DJNZ r5, ADYL5
INC a
INC a
CJNE a, #3aH , PRE_SEE
CALL CLP
;End ADDED
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
MAL5: JMP MAL5
;**************************************
SMXS: PUSH ACC
PUSH P1
PUSH P2
PUSH 01H
SETB P3.5
CLR P1.0
SETB T1 ;SCAN HC161 COUNT (FROM 00 TO 15)
CJNE R2, #10H, SML1
MOV R2, #00H
CLR INT1 ;\
CLR INT1 ; | CLEAR HC161
SETB INT1 ;/
MOV 08H, #00H
SML1: CLR P1.4
CLR P1.5
CLR P1.6
SETB P1.7
MOV P2, 2FH
MOV 0AH, #10H
MOV R0, 08H
SML2: MOVX A, @R0
INC R0
DJNZ 0AH, SML2
SETB P1.5
MOV P2, 2EH
MOV 0AH, #10H
MOV R0, 08H
SML3: MOVX A, @R0
INC R0
DJNZ 0AH, SML3
MOV 08H, R0
CLR P1.7
MOV P2, R2 ;SCAN
CLR P3.5
SETB P1.0
CLR T1
MOV TL0, #00H
MOV TH0, #0FCH
CJNE R2, #00H, SML4
JNB 2AH.0, SML4
MOV 17H, #00H
CALL DNM
SML4: JNB 2AH.1, SML5
CALL DNM1
SML5: JNB 2AH.2, SML6
CALL MOVE
SML6: INC R2
POP 01H
POP P2
POP P1
POP ACC
RETI
REL17: SETB SM2
JMP REL7
;**************************************
REC: PUSH ACC ; 通讯中断服务程序
PUSH PSW
MOV A, SBUF
CLR RI
JNB RB8, REL0 ;是数据则转
CJNE A, 15H, REL17 ;地址错
SETB P3.2 ;(int0)收发切换--发射
MOV 1AH, #15H ;#06H 应答前的延时
DYL1: MOV 19H, #0FFH
DJNZ 19H, $
DJNZ 1AH, DYL1
; SETB P3.2 ;(int0)收发切换--发射
clr TB8 ;SETB TB8
MOV SBUF, A
JNB TI, $
CLR P3.2 ;(int0)收发切换--接收
CLR TI
CLR TB8
CLR SM2 ;数据接收状态
MOV R5, #00H
JMP REL7
REL0: CJNE R5, #00H, REL5 ;如果不是接收的第一个字节,则转
INC R5 ;如果是第一个字节,为命令字
MOV R6, A ;将接收的指令记住,用于最后的数据应答
MOV 18H, A
CJNE A, #01H, REL1 ;01--上行
MOV 29H, #04H
JMP REL7
REL1: CJNE A, #02H, REL2 ;02--下行
MOV 29H, #05H
JMP REL7
REL2: CJNE A, #03H, REL7 ;清屏
MOV R6, A
CALL CLP ;清屏函数
SETB SM2
JMP DYL5
REL5: INC R5 ;第二字节开始为数据
CJNE R5, #12H, REL6 ;第#2~#11H个字节为10个数据
SETB SM2 ;切换回地址接收状态;第#12h个为校验和
MOV 28H, 29H
CJNE A, 18H, REL7 ;校验和错不应答
DYL5: SETB P3.2 ;(int0)收发切换
MOV 1AH, #15H ;数据应答前延时#06H
DYL2: MOV 19H, #0FFH
DJNZ 19H, $
DJNZ 1AH, DYL2
;DYL5: SETB P3.2 ;(int0)收发切换
clr TB8 ;SETB TB8 数据应答
MOV SBUF, R6
MOV 14H, #00H
MOV 2AH, #00H
MOV R4, #00H
MOV R3, #07H
CLR 27H.4
JNB TI, $
SETB 2AH.1
CJNE R6, #03H, REL9
CLR 2AH.1
REL9: CLR P3.2 ;(int0)收发切换
CLR TB8
CLR TI
JMP REL7
REL6: CALL XNM
ADD A, 18H ;计算校验和
MOV 18H, A
REL7: POP PSW
POP ACC
RETI
;*************************************
XNM: CLR P1.0
MOV P2, 29H
MOV R1, 05H
DEC R1
DEC R1
MOVX @R1, A
SETB P1.0
RET
;*************************************
MOVE: CLR P1.0
INC 17H
MOV P2, #08H
JNB 28H.0, MOL1
SETB P2.0
MOL1: MOV R0, 17H
MOVX A, @R0
RLC A
MOVX @R0, A
DEC R0
MOVX A, @R0
RLC A
MOVX @R0, A
INC 17H
MOV P2, 2FH
JNB 28H.0, MOL2
MOV P2, 2EH
MOL2: MOV 0AH, #10H
MOV R0, 08H
MOL3: DEC R0
MOVX A, @R0
RLC A
MOVX @R0, A
DJNZ 0AH, MOL3
SETB P1.0
RET
;************************************
DNM: INC R3
JNB 27H.4, DNL0
CJNE R3, #10H, DNL4
JMP DNL6
DNL0: CJNE R3, #08H, DNL4
DNL6: CLR P1.0
MOV R3, #00H
MOV P2, 28H
MOV R0, 04H
MOVX A, @R0
MOV 2BH, A
JNB 2BH.7, DNL2
INC R0
MOVX A, @R0
MOV 2CH, A
CALL QDZ
JMP DNL3
DNL2: CALL QDZ1
DNL3: SETB P1.0
MOV 04H, R0
INC R4
CALL DZK
SETB 2AH.2
CJNE R4, #11H, DNL8
DNL8: JC DNL4
MOV 2AH, #00H
DNL4: RET
;************************************
DNM1: CLR P1.0
MOV P2, 28H
MOV R0, 04H
MOVX A, @R0
MOV 2BH, A
JNB 2BH.7, DN1L2
INC R0
MOVX A, @R0
MOV 2CH, A
CALL QDZ
JMP DN1L3
DN1L2: CALL QDZ1
DN1L3: SETB P1.0
MOV 04H, R0
CALL DZK1
INC R4
CJNE R4, #10H, DN1L9
DN1L9: JC DN1L5
MOV 2AH, #00H
JB 28H.0, DN1L4
CPL 2FH.0
JMP DN1L5
DN1L4: CPL 2EH.0
DN1L5: RET
;************************************
; 2BH-2DH 2BH=GB1, 2CH=GB2
; ADDR: 2DH,2CH,2BH
;************************************
QDZ1: MOV A, 2BH
MOV B, #10H
MUL AB
MOV 2BH, A
MOV A, B
ADD A, #0A0H
MOV 2CH, A
MOV 2DH, #00H
CLR 27H.4
RET
;***************************************
; 2BH-2DH 2BH=GB1, 2CH=GB2
; ADDR: 2DH,2CH,2BH
;***************************************
QDZ: CLR C
MOV A, 2CH
SUBB A, #0A1H
MOV 2CH, A
CLR C
MOV A, 2BH
SUBB A, #0A1H
MOV B, #5EH
MUL AB
CLR C
ADD A, 2CH
JNC QDL1
INC B
QDL1: MOV 2CH, B
MOV B, #20H
MUL AB
MOV 2BH, A
MOV 2DH, B
MOV A, 2CH
MOV B, #20H
MUL AB
CLR C
ADD A, 2DH
MOV 2CH, A
JNC QDL2
INC B
QDL2: MOV 2DH, B
SETB 27H.4
RET
;*****************************************
DZK: MOV C, 2DH.0
MOV P1.1, C
MOV C, 2DH.1
MOV P1.2, C
MOV DPH, 2CH
MOV DPL, 2BH
MOV R1, #40H
MOV 10H, #20H
JB 27H.4, DZL0
MOV 10H, #10H
DZL0: ; CLR P3.3
CLR P1.4
CLR P1.5
SETB P1.6
SETB P1.7
DZL1: MOVX A, @DPTR
MOV @R1, A
INC DPTR
INC R1
JB 27H.4, DZL2
INC R1
DZL2: DJNZ 10H, DZL1
; SETB P3.3
CLR P1.7
MOV R1, #40H
MOV R0, #00H
MOV 10H, #20H
MOV P2, #08H
JNB 28H.0, DZL9
SETB P2.0
DZL9: CLR P1.0
DZL3: MOV A, @R1
MOVX @R0, A
INC R0
INC R1
DJNZ 10H, DZL3
SETB P1.0
RET
;********************************************
DZK1: MOV C, 2DH.0
MOV P1.1, C
MOV C, 2DH.1
MOV P1.2, C
MOV DPH, 2CH
MOV DPL, 2BH
MOV R1, #40H
MOV 10H, #20H
JB 27H.4, DZ1L0
MOV 10H, #10H
DZ1L0: ; CLR P3.3
CLR P1.4
CLR P1.5
SETB P1.6
SETB P1.7
DZ1L1: MOVX A, @DPTR
MOV @R1, A
INC DPTR
INC R1
DJNZ 10H, DZ1L1
;SETB P3.3
CLR P1.7
MOV R1, #40H
MOV R0, 14H
MOV P2, 2FH
JNB 28H.0, DZ1L4
MOV P2, 2EH
DZ1L4: CPL P2.0
JNB 27H.4, DZ1L3
MOV 10H, #10H
CLR P1.0
DZ1L5: MOV 13H, #02H
DZ1L6: MOV A, @R1
MOVX @R0, A
INC R0
INC R1
DJNZ 13H, DZ1L6
MOV A, R0
ADD A, #0EH
MOV R0, A
DJNZ 10H, DZ1L5
SETB P1.0
INC 14H
INC 14H
JMP DZ1L8
DZ1L3: MOV 10H, #10H
CLR P1.0
DZ1L7: MOV A, @R1
MOVX @R0, A
INC R1
MOV A, R0
ADD A, #10H
MOV R0, A
DJNZ 10H, DZ1L7
SETB P1.0
INC 14H
DZ1L8: RET
;********************************************
CLP: CLR P1.0 ;清屏函数
MOV DPTR, #00H
MOV A, #00H
CLL1: MOVX @DPTR, A
INC DPTR
MOV R7, DPH
CJNE R7, #04H, CLL1
SETB P1.0
RET
;********************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -