单片机串口通信,电脑接收到乱码

电路图都和网上的一样,max232加四个104,如下图。单片机是STC12C5204AD。程序很简单。晶振11.0592M的。9600波特率。#include"stc.h... 电路图都和网上的一样,max232加四个104,如下图。单片机是STC12C5204AD。程序很简单。晶振11.0592M的。9600波特率。

#include "stc.h"
unsigned char i;unsigned char a[]={'g','s','h'};
void main(){
TMOD=0x20; //设置T1的工作方式为方式2,T0是低四位
SCON=0x50;
EA=1;
ES=1;
ET1=1;
TH1=0xfd;
TL1=0xfd; //装入初值,TL1溢出后,TH1的值装入TL1中
TR1=1;
while(1)
{
SBUF=a[1];
while(!TI); //等待数据发送结束
TI=0; //数据发送完毕,TI自动置1 ,必须软件清零
}
}

为什么一直收到的是乱码啊???
展开
 我来答
粤琛非z
2012-11-05 · TA获得超过1564个赞
知道小有建树答主
回答量:866
采纳率:100%
帮助的人:625万
展开全部
试试这样初始化你的定时器:
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xDC; //设定定时初值
TH1 = 0xDC; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
兆芷荷0ht05f
2012-11-09 · TA获得超过117个赞
知道答主
回答量:105
采纳率:0%
帮助的人:84.1万
展开全部
有2个可能是乱码
1.接触不良
2.初始化有问题。请粘贴如下初始化代码
void Com_Init(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
落叶城主lyc
2012-11-04 · TA获得超过450个赞
知道小有建树答主
回答量:346
采纳率:66%
帮助的人:301万
展开全部
ES=1;这一句去掉试试。
你开了串口中断,却没有定义串口中断函数,程序很可能跑飞哦
同样ET1=1;也去掉
EA=1;也没有必要
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lin1936
2012-11-04 · TA获得超过184个赞
知道答主
回答量:23
采纳率:0%
帮助的人:7.9万
展开全部
TMOD = 0x20;// 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xF3;// 波特率9600
TL1 = 0xF3;

SCON = 0x50;// 设定串行口工作方式
PCON = 0xf0;// 波特率倍增

TR1 = 1;// 启动定时器1

初始化用上面的程序。然后你把
SBUF=a[1];
改为
SBUF=’a‘;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匡秀越By
2012-11-04 · TA获得超过1220个赞
知道小有建树答主
回答量:805
采纳率:0%
帮助的人:385万
展开全部
16进制显示就行了。发送也要用16进制的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式