串口的奇怪问题,高手出招

hwmfly 2005-08-09 12:40:43
下面是原代码,我用串口调试程序,波特率1200,数据位8,停止位1,效验位none
有时,显示正常,有时后是乱码,就如下面,请高手指点

杀?)北絹萁杀?)北絹萁杀?)北絹萁杀?)北奖苯佪缴睉5)北絹萁杀?)北絹萁杀?)北絹萁杀?)北絹萁杀?)?
hello world
hello world

#include<AT89X51.H>
#include<stdio.h>
void main(void)
{
SCON=0X50;
TMOD=0X20;
TCON=0X40;
TH1=0XE8;
TL1=0XE8;
TI=1;
TR1=1;
while(1)
{
printf("hello world\n");
}
}
...全文
488 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
tyj_3 2005-12-01
  • 打赏
  • 举报
回复
在显示函数前加延时试试,应该不会出现乱码
yangyzqo 2005-11-18
  • 打赏
  • 举报
回复
UP
flowercity 2005-11-18
  • 打赏
  • 举报
回复
频率问题
不像汇编,那样精确控制的
haotz 2005-11-17
  • 打赏
  • 举报
回复
太快了
扬州飞翔吧 2005-09-28
  • 打赏
  • 举报
回复
no program.printf自己对TI处理

javazb 2005-08-23
  • 打赏
  • 举报
回复
自己写一个串口收发函数试试,别用printf
ldqmoon 2005-08-18
  • 打赏
  • 举报
回复
可能是在启动串口的时候,速率还没稳定下来
Great_Bug 2005-08-18
  • 打赏
  • 举报
回复
printf真的那么好么?
LeeAn 2005-08-14
  • 打赏
  • 举报
回复
而且还真巧了,我也准备今天发帖子问关于这个程序的问题:还请楼主及各位大侠帮我看看。

程序中有一句是:“TI=1;”。就是这个TI位我搞不懂了。
TI:发送中断标志。有硬件置位,TI=1是,申请中断,CPU响应中断后,发送下一帧数据。在任何模式下,必须由软件清除。
问题:1:为何在printf之前就设TI=1。
2:串口中断未开,当然据我了解,这种方式叫“查询方式”,可也未见查询语句和TI复位语句。
3:我又将“TI=1”改为“TI=0”后,发现此程序只发送一次后就终止了。这也不知为何?
4:再将“TI=0,串口中断打开,编制串口中断处理程序,在串口中断处理程序中添加语句TI=0,实现软件复位,程序无任何反应。
请问此程序采用的究竟是“中断方式”??还是“查询方式”??。“中断方式”下如果没用软件清除TI,即保持TI=1,那么串口是否可以持续工作?

LeeAn 2005-08-14
  • 打赏
  • 举报
回复
和我玩得一样的程序,程序是对的。我用“串口调试”监测的时候也这样,先“暂停显示”在“恢复显示”,多试几下就行了。还有你用的晶振频率是多少的?这程序默认是11.059M,若你使用12M的,要将“TH1=0XE6;TL1=0XE6;”。
jtg98g3 2005-08-10
  • 打赏
  • 举报
回复
难道是时序匹配的问题!?

gRempCH_eNter 2005-08-10
  • 打赏
  • 举报
回复
可能是串口初始化的问题!
bluedreammer 2005-08-09
  • 打赏
  • 举报
回复
你用hex方式显示再看看问题出在哪里。
------------------------------------
可能是前几个bit有问题
rzsheng 2005-08-09
  • 打赏
  • 举报
回复
printf太快了,中间加上几个延时看看
while(1)
{
sleep(1);延时1秒看看
printf("hello world\n");
}
TheSaviour 2005-08-09
  • 打赏
  • 举报
回复
你用hex方式显示再看看问题出在哪里。

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧