单片机串口通信,电脑接收到乱码
电路图都和网上的一样,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 ,必须软件清零
}
}
为什么一直收到的是乱码啊??? 展开
#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 ,必须软件清零
}
}
为什么一直收到的是乱码啊??? 展开
7个回答
展开全部
试试这样初始化你的定时器:
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
}
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
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有2个可能是乱码
1.接触不良
2.初始化有问题。请粘贴如下初始化代码
void Com_Init(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
1.接触不良
2.初始化有问题。请粘贴如下初始化代码
void Com_Init(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ES=1;这一句去掉试试。
你开了串口中断,却没有定义串口中断函数,程序很可能跑飞哦
同样ET1=1;也去掉
EA=1;也没有必要
你开了串口中断,却没有定义串口中断函数,程序很可能跑飞哦
同样ET1=1;也去掉
EA=1;也没有必要
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
TMOD = 0x20;// 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xF3;// 波特率9600
TL1 = 0xF3;
SCON = 0x50;// 设定串行口工作方式
PCON = 0xf0;// 波特率倍增
TR1 = 1;// 启动定时器1
初始化用上面的程序。然后你把
SBUF=a[1];
改为
SBUF=’a‘;
TH1 = 0xF3;// 波特率9600
TL1 = 0xF3;
SCON = 0x50;// 设定串行口工作方式
PCON = 0xf0;// 波特率倍增
TR1 = 1;// 启动定时器1
初始化用上面的程序。然后你把
SBUF=a[1];
改为
SBUF=’a‘;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
16进制显示就行了。发送也要用16进制的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询