51单片机的串行口按工作方式1进行串行数据通信,假定波特率为2400bs编写程序

51单片机的串行口按工作方式1进行串行数据通信,假定波特率为2400bs编写程序,第1张

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 EACPU允许中断

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

void init1(void)

{

TMOD=0x20

TH1=0xfd

TL1=0xfd

SCON=0x40

TR1=1

}

void init2(void)

{

TMOD=0x20

TH1=0xfd

TL1=0xfd

SCON=0x50

TR1=1

ES=1

EA=1

}

初始化程序:

SCON = 0x50 //方式1,允许接陆尘受

TMOD = 0x20 //设闹仿置time1,方式2

TH1 = 0xfd//波特率9600b/s晶振12MHz

TL1 = 0xfd

ES = 1 //允许串口液悉纤中断

EA = 1 //中断总开启

TR1 = 1 //T1开启


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12353114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存