使用AT89C51的串行口按工作方式1进行串行数据通信,假定波特率为2 400bit/s,以中断方式传送数据,请编写

如题所述

ORG  0000H

AJMP MAIN    ;上电,转向主程序

ORG  0023H    ;串行口的中断入口地址

AJMP SERVE  ;转向中断服务程序

ORG  0040H    ;主程序

MAIN: MOV  SP,#60H  ;设置堆栈指针

MOV  SCON ,#50H

MOV  PCON ,#00H

MOV  TMOD,#20H

MOV  TH1,#0F3H

MOV  TL1,#0F3H

SETB  TR1

MOV  R0 ,#20H  ;置发送数据区首地址

MOV  R1 ,#40H  ;置接收数据区首地址

MOV  R7 ,#10H  ;置发送字节长度

MOV  R6 ,#10H  ;置接收字节长度

SETB ES            ;允许串行口中断

SETB EA            ;CPU允许中断

MOV  A ,@R0      ;取第一个数据发送

MOV  SBUF ,A        ;发送第一个数据

SJMP $      ;等待中断

SERVE: JNB  RI ,SEND  ;TI=1,为发送中断

CLR RI

MOV A ,SBUF  ;读出接收缓冲区内容

MOV @R1 ,A    ;读入接收缓冲区

DJNZ R6 ,L1  ;判断数据块发送完否

SJMP L2    ;数据块接收完,转L2

L1:INC  R1    ;修改数据区指针

L2:RETI                ;中断返回

SEND:

CLR  TI            ;清除发送中断标志

DJNZ R7 ,L3  ;判断数据块发送完否

SJMP L4    ;数据块接收完,转L4

L3:  MOV  A ,@R0    ;取数据发送

MOV  SBUF ,A    ;发送数据

INC  R0            ;修改数据地址

L4:

RETI                ;中断返回

END
温馨提示:答案为网友推荐,仅供参考
相似回答