📄 串口通信.asm
字号:
;说明: 1.将表TAB中的256个数据通过串口发送
; 2.串口接收到的数据保存在内部RAM的80H到0FFH单元,超过数据覆盖低位地址
ORG 0000H
AJMP START ;转主程序
ORG 0023H
AJMP ACINT ;转串口中断程序
ORG 0030H
;***************串口中断入口******************
ACINT:
MOV SBUF,A ;从串行数据缓冲寄存器取值
CLR RI ;清接收中断标志
MOV @R0,A ;接收到的值送内部RAM保存
INC R0 ;RAM地址自增
CJNE R0,#00H,ACINT1 ;判是否写满?
MOV R0,#80H ;重设初值
ACINT1:
RETI ;中断返回
;***************主程序开始******************
START:
MOV SP,#30H ;设堆栈首址
MOV R0,#80H
MOV TMOD,#20H ;开定时器1工作方式2
MOV TL1,#0FDH ;
MOV TH1,#0FDH ;9600波特率
SETB EA ;开总中断使能
SETB ES ;开串口中断
MOV PCON,#00H ;波特率不加倍
MOV SCON,#40H ;串口工作方式2,RET=1允许接收
SETB TR1 ;启动T1
MOV R2,#00H ;计数初值为0
MOV DPTR,#TAB ;送数据表首址
START1:
MOV A,R2
MOVC A,@A+DPTR ;取数据
MOV SBUF,A ;送串口发送
JNB TI,$ ;查询发送是否完毕
CLR TI ;发送完清发送中断标志
INC R2 ;计数值自增
CJNE R2,#00H,START1 ;判是否发完256个数据?
AJMP $ ;发完则循环等待
;数据表
TAB:
DB 14H,24H,44H,84H,64H,1CH,20H,18H,0FH,0E8H,08H,08H,28H,18H,08H,00H
DB 40H,041H,0CEH,04H,00H,0FCH,04H,02H,02H,0FCH,04H,04H,04H,0FCH,00H,00H
DB 00H,40H,42H,44H,5CH,0C8H,40H,7FH,40H,0C0H,50H,4EH,44H,60H,40H,00H
DB 00H,0F8H,00H,00H,0FEH,40H,30H,8FH,0AH,08H,18H,68H,08H,88H,08H,00H
DB 04H,04H,0E4H,24H,24H,64H,0B4H,2FH,24H,0A4H,64H,24H,24H,0E6H,04H,00H
DB 20H,10H,08H,0FCH,03H,02H,10H,10H,7FH,88H,88H,84H,86H,0E4H,00H,00H
DB 20H,20H,20H,20H,20H,20H,0A0H,7FH,0A0H,20H,20H,20H,20H,20H,20H,00H
DB 40H,30H,10H,12H,5CH,54H,50H,51H,5EH,0D4H,50H,18H,57H,32H,10H,00H
DB 20H,10H,4CH,43H,43H,2CH,20H,10H,0CH,03H,06H,18H,30H,60H,20H,00H
DB 40H,20H,1FH,20H,40H,47H,42H,41H,40H,5FH,40H,42H,44H,43H,40H,00H
DB 00H,80H,40H,20H,18H,07H,00H,00H,00H,3FH,40H,40H,40H,40H,78H,00H
DB 00H,1FH,00H,00H,7FH,00H,00H,7FH,21H,21H,3FH,21H,21H,7FH,01H,00H
DB 00H,00H,7FH,04H,05H,05H,05H,7FH,05H,05H,05H,25H,44H,3FH,00H,00H
DB 00H,04H,04H,05H,04H,04H,04H,0FFH,04H,04H,04H,04H,04H,04H,04H,00H
DB 00H,80H,04H,20H,10H,0CH,03H,00H,01H,06H,08H,30H,60H,0C0H,40H,00H
DB 00H,02H,02H,02H,02H,02H,42H,82H,7FH,02H,02H,02H,02H,02H,02H,00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -