📄 24-1 485receive.asm
字号:
;晶振11.0592MHz
;485通讯Receive.ASM
;接收1,2,3,......,并送数码显示
DBUF DATA 030H
BIT_COUNT DATA 040H
TIMER DATA 041H
DATA_IN DATA 020H
DATA_OUT DATA 021H
CLK BIT P1.6
DAT BIT P1.7
R_W485 BIT P3.2
ORG 0000H
JMP main
ORG 0100H
main:
MOV SCON,#01010000B ;设定串行方式1:8位异步,允许接收
MOV TMOD,#20H ;设定计数器1为模式2
ORL PCON,#10000000B ;波特率加倍
MOV TH1,#0F4H ;设定波特率为4800
MOV TL1,#0F4H
SETB TR1 ;计数器1开始计时
CLR A
ACALL TOBCD
ACALL DISPLAY
RECEIVE:
CLR R_W485 ;发送控制
mloop:
JNB RI,$ ;等待接收
CLR RI ;清接收标志
MOV A,SBUF ;接收数据缓冲
ACALL TOBCD
MOV A,DBuf+2
JNZ TODISP
mov DBuf+2, #0FH ; 消影
MOV A,DBuf+1
JNZ TODISP
mov DBuf+1, #0FH
MOV A,DBuf
JNZ TODISP
mov DBuf, #0FH
TODISP:
ACALL DISPLAY
ACALL DELAY
SJMP mloop
TOBCD:;===================
mov b, #100
div ab
mov DBuf+2, a
mov a, b
mov b, #10
div ab
mov DBuf+1, a
mov a, b
mov DBuf, a
ret
DELAY: LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
RET
DELAY1:MOV R1, #0
DLOOP: DJNZ R1, DLOOP
DJNZ R0, DELAY1
RET
Delay2:
mov r5, #2
A0: mov r6, #20
A1: mov r7, #50
DelayLoop:
NOP
NOP
djnz r7, DelayLoop
djnz r6, A1
djnz r5, A0
RET
DISPLAY:
ANL P2,#00H ; CS7279有效
MOV DATA_OUT,#10100100B ; A4H,复位命令
CALL SEND
MOV DATA_OUT,#10000000B ; 在第一个数码管上显示
CALL SEND
MOV DATA_OUT,DBUF
CALL SEND
MOV DATA_OUT,#10000001B ; 译码方式0,2位显示在第二个数码管上显示
CALL SEND
MOV DATA_OUT,DBUF+1
CALL SEND
MOV DATA_OUT,#10000010B ; 译码方式0,3位显示在第三个数码管上显示
CALL SEND
MOV DATA_OUT,DBUF+2
CALL SEND
RET
SEND: MOV BIT_COUNT,#8 ; 发送字符子程序
ANL P2,#00H
CALL LONG_DELAY
SEND_LOOP:MOV C,DATA_OUT.7
MOV DAT,C
SETB CLK
MOV A,DATA_OUT
RL A
MOV DATA_OUT,A
CALL SHORT_DELAY
CLR CLK
CALL SHORT_DELAY
DJNZ BIT_COUNT,SEND_LOOP
CLR DAT
RET
LONG_DELAY: MOV TIMER,#80 ;延时约200US
DELAY_LOOP: DJNZ TIMER,DELAY_LOOP
RET
SHORT_DELAY: MOV TIMER,#6 ;延时约20US
SHORT_LP: DJNZ TIMER,SHORT_LP
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -