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

 我来答
迪凯特科技(北京)有限公司_ 2025-01-03
展开全部
四种工作方式啊 1、方式0 串行接口的工作方式0为移位寄存器I/O方式。在串行口外接移位寄存器以扩展I/O接口,也可以外接串行同步I/O的设备。 (1)方式0输出 串行口以方式0发送时,数据以RXD端串行输出,TXD端输出同步信号。当一个数据写入串行口发送缓冲器以后,就启动串行口发送器以振荡频率的十二分之一的波特率,将数据从RXD端串行输出。 (2)方式0输入 当串行口定义为方式0并置位REN后,便启动串行口以方式0接收数据,此时RXD端为数据输入端,TXD端为同步脉冲信号输出端。接收器以振荡率的十二分之一的波特率接收RXD端输入的数据信息。但接收器接收到8位数据时,置1中断标志RI。 2、方式1...
百度网友b86abfb
2020-04-10
知道答主
回答量:1
采纳率:0%
帮助的人:635
展开全部
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
迪凯特科技(北京)有限公司_
2025-01-03 广告
#include void InitUART(void) { TMOD = 0x20; SCON = 0x50; TH1 = 0xF4; TL1 = TH1; PCON = 0x0; EA = 1; ES = 1; TR1 = 1; } ... 点击进入详情页
本回答由迪凯特科技(北京)有限公司_提供
zgr_我要下载
推荐于2017-11-24 · TA获得超过1401个赞
知道小有建树答主
回答量:454
采纳率:100%
帮助的人:512万
展开全部
#include <reg51.h>

void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xF4;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}

void SendOneByte(unsigned char c)//发送函数
{
SBUF = c;
while(!TI);
TI = 0;
}

void main(void)
{
InitUART();
}

void UARTInterrupt(void) interrupt 4 //接收中断
{
if(RI)
{
RI = 0;
//接收的程序放在这里
}
else
TI = 0;
}
追问
m能用汇编语言写么
追答
ORG 0000H
LJMP START
ORG 0023H
LJMP UARTInterrupt

START:
MOV SP,#60H
LCALL InitUART

LOOP:
;add your code here!
LJMP LOOP

InitUART:
MOV TMOD,#20H
MOV SCON,#50H
MOV TH1,#0F4H
MOV TL1,TH1
MOV PCON,#00H
SETB EA
SETB ES
SETB TR1
RET

UARTInterrupt:
JB RI,IsUART_Receive
CLR TI
RETI
IsUART_Receive:
CLR RI
PUSH ACC
MOV A,SBUF
;========================
; 接收的程序放在这里
;========================
POP ACC
RETI

SendOneByte:
CLR ES
CLR TI
MOV SBUF,A
WaitSendFinish:
JNB TI,WaitSendFinish
CLR TI
SETB ES
RET

END
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
goingtek
2011-11-16 · TA获得超过475个赞
知道小有建树答主
回答量:478
采纳率:0%
帮助的人:425万
展开全部
你这没有问题啊?
追问
以中断方式传送数据,编写全双工通信程序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式