单片机关于定时器方式1的串口通信

请问我这样配置为9600波特率的为什么无法收发数据voidUsartInit(){SCON=0X50;//设置为工作方式1TMOD=0X10;//设置计数器工作方式1TH... 请问我这样配置为9600波特率的为什么无法收发数据
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X10; //设置计数器工作方式1
TH1=0XFFFD; //计数器初始值设置,注意波特率是9600的
TL1=0XFFD0;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}

void main()
{

UsartInit(); // 串口初始化
while(1);
}

void Usart() interrupt 4
{
u8 receiveData;

receiveData=SBUF;//出去接收到的数据
if(receiveData==6)
{
SBUF=receiveData+1;//将接收到的数据放入到发送寄存器
}
else{
SBUF=receiveData;
}
RI = 0;//清除接收中断标志位

while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
TH1=0XFFFD;
TL1=0XFFD0;
}
展开
 我来答
lycdl
高粉答主

2019-05-22 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4881万
展开全部

单片机的定时器T1用于串口闷雀睁通信时,必须为方式2,TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
别写成16位数,更不是TL1=0xFFD0;
晶振频率是11.0592MHz吧?那个0xFFD0是怎么算出来的?
还有,串口中断程序中不能重写TH1和TL1的初值。


判断接收的数据==6,这在电脑上发送时数据时必须按十六进制数发才行,即串口调试助手中,按HEX发送。如果是按岁手字符发送的,单蚂岁片机接收也要判断为写符才对,即=='6' ,这才是字符6。

11kxmx
2019-05-21 · TA获得超过1.4万个赞
知道大有可为答主
回答量:1.2万
采纳率:70%
帮助的人:2481万
展开全部
串口通信应采用定时器尘陪燃1的工作方式派虚乱誉2才行
TMOD=0x20
追问
我知道能用工作方式2产生波特率,现在我想改成用工作方式1产生波特率进行串口通信,请问需要进行什么修改呢
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式