#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void UartInit(void) //9600bps@12MHz
{
PCON &= 0x7f; //波特率不倍速
SCON = 0x50; //工作方式1,8位数据,可变波特率
TMOD &= 0x80; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xD9; //设定定时初值
TH1 = 0xD9; //设定定时器重装值 设置波特率
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void main()
{
display =0x00;
UartInit();
while(1)
{
SBUF='a';
while(!TI);
}
#define uint unsigned int
#define uchar unsigned char
void UartInit(void) //9600bps@12MHz
{
PCON &= 0x7f; //波特率不倍速
SCON = 0x50; //工作方式1,8位数据,可变波特率
TMOD &= 0x80; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xD9; //设定定时初值
TH1 = 0xD9; //设定定时器重装值 设置波特率
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void main()
{
display =0x00;
UartInit();
while(1)
{
SBUF='a';
while(!TI);
}
}
运行结果是在PC端一直接受的是00
检查过了波特率没有设错 ;
最后发现将波特率调到2400是好的,如果要用大的波特率如9600 就必须换晶振,可以吧12M的换成11.0592M 的。