📄 接收带发送2.asm
字号:
BUF DATA 45H
DBUF0 EQU 30H
DATA_SL DATA 80H ;定义位码变量
LED_ADDR EQU 0A0H ;定义LED数码管的数据段地址
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN:
MOV SP,#60H
MOV TMOD,#20H ;设置T1为方式2
MOV TH1,#0FDH ;设置波特率为9600
MOV TL1,#0FDH
SETB TR1
MOV SCON,#40H ;设置串口位方式1
MOV PCON,#00H
UPUP:
MOV R0,#30H
MOV R7,#4 ;连续接收5个数据
RRU:
SETB REN
RRUP: JBC RI,RRD ;接受一位
AJMP RRUP
RRD: MOV A,SBUF
MOV @R0,A
INC R0
DJNZ R7,RRU
MOV R0,#30H
MOV R7,#4
UP: CLR REN
MOV A,@R0
MOV SBUF,A ;把它发送出去
NEXT: JBC TI,DOWN
AJMP NEXT
DOWN: INC R0
DJNZ R7,UP
DIP: ACALL DISPLAY
AJMP DIP
DISPLAY:
MOV R7,#04 ;给R7赋初值,存放数码管的个数
MOV R0,#30H ;把显示缓冲区首地址送R0
MOV DATA_SL,#0F7H
LOOP:
MOV A,@R0 ;取若显示的数据
ANL A,#0FH ;由于接收的数据是ASCII码,显示前先转换成BCD码?
ACALL TABLE ;查段码表,得出该数据对应的段码
MOV P2,A ;LED数码管地址送DPTR
MOV A,DATA_SL ;位码送A
MOV P0,A ;输出位码
ACALL DELAY ;调延时子程序
MOV P0,#0FFH ;输出位码
Rl A ;取下一个数码管
MOV DATA_SL,A ;保存该位码值
INC R0 ;取下一个数据显示
DJNZ R7,LOOP ;6位数据显示完否?
RET
;**************
;延时子程序
;**************
DELAY:
MOV R6,#10H
DELAY0: MOV R5,#40H
DELAY1: DJNZ R5,DELAY1
DJNZ R6,DELAY0
RET
;查表子程序
TABLE: INC A ;基地址加一
MOVC A, @A+PC ;查段码表,取其相应的段码
RET
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,80H,090H ;0-9的段码
DB 088H,083H,0c6H,0a1H,86H,8eH,0bfH,89H,8cH ;A-F、-、P的段码
;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -