谁帮我看一下这个51单片机的串口程序为什么串口调试助手收到的是乱码

我想用单片机向电脑发送数据用串口调试助手观察但我总是收到乱码,晶振是12M波特率600//////////////////////////////////////////... 我想用单片机向电脑发送数据用串口调试助手观察 但我总是收到乱码,晶振是12M 波特率600

////////////////////////////////////////////////////////////////////////////////////////

#include <reg51.h>
#include <string.h>
unsigned char ch='a';

bit TX_flag= 0 ;

void init_serialcom( void ) //串口通信初始设定
{
SCON = 0x50 ; //UART为模式1,8位数据,允许接收
TMOD= 0x20 ; //定时器1为模式2,8位自动重装
PCON= 0x80 ; //SMOD=1;
TH1=TL1=0xcc ; //Baud:19200 fosc="12MHz
IE= 0x90 ; //Enable Serial Interrupt
TR1= 1 ; // timer 1 run
TI=1;
}

//向串口发送一个字符
void send_char_com( unsigned char ch)
{
SBUF=ch;
while (TI==0);
TI=0 ;
}

//串口接收中断函数
void serial () interrupt 4 using 3
{
if (TI)
{
TI = 0 ;
SBUF=ch;
TX_flag= 1 ; //就置位发送标志
}

}

main()

{

init_serialcom(); //初始化串口

while ( 1 )

{

if (TX_flag) //如果取数标志已置位,就将读到的数从串口发出

{

TX_flag= 0 ; //取数标志清0

send_char_com(ch);

}

}
pcon=0x00;
展开
 我来答
劫尾3376
2012-06-08 · 超过13用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:42.9万
展开全部
你收到乱码是指的是什么??你要发送的是什么?显示的是什么??首先确定串口软件和你程序的波特率是不是一致,再看看你要现实的是HEX形式(十六进制数)还是BCD码。
你写的程序很清晰,只发送一个数据,应该不是程序问题,先看看软件设置再看程序吧
百度网友320274dc4
2012-06-06 · TA获得超过641个赞
知道小有建树答主
回答量:359
采纳率:0%
帮助的人:240万
展开全部
晶振是12M 波特率9600//可能你的调试助手波特率9600

TH1=TL1=0xcc ; //Baud:19200 fosc="12MHz //而你的单片机波特率设为19200

当然不能正常显示了
追问
那个后面的注释不要看了 0xcc我设置的波特率是600
追答
PCON= 0x80 ; //SMOD=1;  
波特率倍增了,你在PC端用1200波特率试试看
=======================================
为什么选择这么低的波特率?我还是用常用的9600
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dhpoin
2012-06-05
知道答主
回答量:23
采纳率:0%
帮助的人:26.4万
展开全部
串口中断号错了吧~~~
追问
对啊 串口中断不是4吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式