📄 jieshou.asm
字号:
Z8279 EQU 0FF82H;
D8279 EQU 0FF80H;
LEDCLS EQU 0D1H;
LEDWRO EQU 90H;
LEDFEQ EQU 34H;
LEDMOD EQU 10H;
;---------------------------
ORG 0000H
AJMP START
ORG 0050H
START:
MOV SP,#60H; 8279的初始化
LCALL INIT8279
LCALL INIT_CPU
MOV TMOD,#20H ;把定时器1设置在模式2
MOV SCON,#70H ;串行口工作在方式1
MOV PCON,#80H
MOV TH1,#0FDH ;波特率为9.6kbs
MOV TL1,#0FDH
SETB TR1
LOOP:
JNB RI,$ ;等待接受结束
CLR RI
MOV A,SBUF ;接收数据
CJNE A,#03H,NEX;若收到是3,则是成组接收,
AJMP LOO
NEX:
CJNE A,#02H,NEXX
AJMP LOOO;若收到是2,是发送回复
NEXX:
MOV 37H,36H
MOV 36H,35H
MOV 35H,34H
MOV 34H,33H
MOV 33H,32H
MOV 32H,31H
MOV 31H,30H
MOV 30H,A
LCALL DISP_NUM
AJMP LOOP
;---------------------------
;承租接收,3+4
LOO: MOV 37H,#13H
MOV 36H,#13H
MOV 34H,#13H
MOV 35H,#13H
MOV 33H,#13H
MOV 32H,#13H
MOV 31H,#13H
MOV 30H,#13H
JNB RI,$
CLR RI
MOV A,SBUF
MOV R0,A;数据个数存在R0
MOV R1,#30H
LO1: JNB RI,$
CLR RI
MOV A,SBUF
MOV @R1,A
INC R1
DJNZ R0,LO1
LCALL DISP_NUM
AJMP LOOP;重新来过
;--------------------------------------------------------
;2号功能接收,发送+回复
LOOO:
JNB RI,$
CLR RI
MOV A,SBUF
CJNE A,#23H,LOOP;若不是23则返回初始状态
JNB RI,$
CLR RI
MOV A,SBUF
MOV R0,A;数据个数存在R0
MOV R1,#30H
MOV 37H,#13H
MOV 36H,#13H
MOV 34H,#13H
MOV 35H,#13H
MOV 33H,#13H
MOV 32H,#13H
MOV 31H,#13H
MOV 30H,#13H
LO: JNB RI,$
CLR RI
MOV A,SBUF
MOV @R1,A
INC R1
DJNZ R0,LO
LCALL DISP_NUM;数据已接收完
LOOOO: MOV DPTR,#Z8279
MOVX A,@DPTR
ANL A,#0FH
JZ LOOOO
MOV DPTR,#D8279
MOVX A,@DPTR
CJNE A,#02H,FANHUI;若A=2,则发送23,启动回复,按任意键返回
MOV A,#23H
MOV SBUF,A
JNB TI,$
CLR TI
MOV 37H,#13H
MOV 36H,#13H
MOV 34H,#13H
MOV 35H,#13H
MOV 33H,#13H
MOV 32H,#13H
MOV 31H,#13H
MOV 30H,#13H
MOV R1,#30H
MOV R4,R1
MOV R0,#00H;数据个数
LOOOOO: MOV DPTR,#Z8279
MOVX A,@DPTR
ANL A,#0FH
JZ LOOOOO
MOV DPTR,#D8279
MOVX A,@DPTR
CJNE A,#02H,NEE;若A=2则启动发送
MOV A,R0
MOV SBUF,A;发送数据个数
JNB TI,$
CLR TI
MOV R1,R4
LOO1:
MOV A,@R1
MOV SBUF,A
JNB TI,$
CLR TI
INC R1
DJNZ R0,LOO1
AJMP LOOO;在当前模式下循环
NEE:
MOV @R1,A;把数据存入显示单元
INC R1
INC R0
LCALL DISP_NUM
AJMP LOOOOO;继续输入数据
FANHUI: MOV A,#22H
MOV SBUF,A
JNB TI,$
CLR TI
LJMP LOOP;若输入的是任意键,则把22H发送过去,跳回默认的初始状态
;--------------------------------------------
INIT_CPU:
MOV A,#00H;
MOV R0,#30H
MOV R2,#08H
INIT_CPU1:
MOV @R0,A
INC R0
DJNZ R2,INIT_CPU1
RET
;---------------------------------------------
INIT8279:
MOV DPTR,#Z8279
MOV A,#LEDCLS
MOVX @DPTR,A
INIT82791:
MOVX A,@DPTR
JB ACC.7,INIT82791
MOV A,#LEDMOD
MOVX @DPTR,A
MOV A,#LEDFEQ
MOVX @DPTR,A
MOV A,#LEDWRO
MOVX @DPTR,A
MOV DPTR,#D8279
;TEST
MOV A,#3FH
MOVX @DPTR,A
MOV A,#3FH
MOVX @DPTR,A
MOV A,#3FH
MOVX @DPTR,A
MOV A,#3FH
MOVX @DPTR,A
MOV A,#3FH
MOVX @DPTR,A
MOV A,#3FH
MOVX @DPTR,A
MOV A,#3FH
MOVX @DPTR,A
MOV A,#3FH
MOVX @DPTR,A
RET
;-------------------------------------------------
;SHOW
;ENTRANCE 30H-37H FROM THE RIGHT SIDE TO THE LEFT SIDE
DISP_NUM:
MOV DPTR,#D8279
MOV R0,#30H
MOV R2,#08H
DISP_NUM1:
MOV A,@R0
MOV DPTR,#LEDSEG
MOVC A,@A+DPTR
MOV DPTR,#D8279
MOVX @DPTR,A
INC R0
DJNZ R2,DISP_NUM1
RET
;-------------------------------------------------
;SHOWSEG LIST
LEDSEG: DB 3FH,06H,5BH,4FH,66H;0,1,2,3,4
DB 6DH,7DH,07H,7FH,6FH,77h;5,6,7,8,9
DB 7CH,39H,5EH,79H,71H;
DB 3EH,40H,08H,00H,30H,3FH,73H
END
;-----------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -