永发信息网

51单片机编程 采用中断方式循环发送一组字符

答案:1  悬赏:60  手机版
解决时间 2021-03-15 18:56
  • 提问者网友:咪咪
  • 2021-03-14 22:59
编写串行口发送控制程序 串行数据的传输格式为:1 个起始位、8 个数据位和1 个停止位 串行通信的传输速率为9600bps 采用中断方式循环发送一组字符 要汇编 不要C语
最佳答案
  • 五星知识达人网友:怙棘
  • 2021-03-15 00:10
;启动入口
ORG 0000H ;复位启动
LJMP START ;
ORG 0023H ;串口中断
LJMP COM1 ;
ORG 0200H ;主控程序
;
;主控程序
START: MOV SCON,#50H ;8位数据,可变波特率9600bps@11.0592MHz
ANL PCON,#7FH ;波特率不倍速
MOV TMOD,#20H ;定时器1工作于方式2
MOV TL1,#0FDH ;设定定时初值
MOV TH1,#0FDH ;设定定时器重装值
;
MOV SP,#80H ;设置堆栈
SETB TR1 ;启动定时器1
CLR ET1 ;禁止定时器1中断
SETB ES ;允许串口中断
SETB EA ;允许总中断
;
MOV R0,SDAT00 ;收发数据首地址
MOV B,#8 ;8字节数据
MOV A,#30H ;'0'
LOOP: MOV @R0,A ;
INC A ;
INC R0 ;
DJNZ B,LOOP ;装填‘01234567’
;
MOV FSQZZ,#61H ;串口发送指针
MOV SBUF,#0 ;启动发送
JMP $
;
;串行口中断服务程序(9600波特率1起始位8数据位1停止位无校验)
COM1: PUSH PSW ;先行保护现场,9600bps
PUSH ACC ;
MOV PSW,#10H ;选2组R寄存器
;
JBC TI,PDZZ ;发送中断
CLR RI ;接收中断
LJMP QCOM ;
;
PDZZ: MOV R0,FSQZZ ;串口发送指针
CJNE R0,#SDATDN,WBUF ;比较下越界值
MOV FSQZZ,#60H ;串口发送指针
;
WBUF: MOV SBUF,@R0 ;发送当前字节
INC FSQZZ ;发送指针+1
;
QCOM: POP ACC ;恢复现场
POP PSW ;
RETI ;
;
;收发缓冲区
SDATUP EQU 5FH ;数据地址上越界值
SDAT00 EQU 60H ;收发数据首地址
SDAT11 EQU 67H ;收发数据尾地址
SDATDN EQU 68H ;数据地址下越界值
FSQZZ EQU 69H ;串口发送指针
END ;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯