STC单片机串口通信问题/独立波特率发生器,每次文件烧录后数据显示都不一样
void UARTInit(void) //@11.0592MHz
{
SCON=0X50;
WAKE_CLKO |= 0x40;
BRT = 0xFD; //设置定时初值
AUXR |= 0x11; //定时器时钟12T模式
ES=1; //串口中断打开
}
void UART(void) interrupt 4 using 3
{
// uint8 dat;
ES=0; //关串口中断,防止中断的嵌套
if(TI) //如果是串口1发送中断(TI)不进行处理
{
TI=0; //TI清0
busy=0; //传送标识复位
}
if(RI)
{
RI = 0; //RI清0
CmdWord=SBUF;
// dat = SBUF;
// CmdWord=dat;
ReceiveFlag=1;
Send_Dat(CmdWord);
}
ES=1; //开启串口中断
}
结果是:乱码
给你一个串口初始化的函数吧 ,你那个好像不全。
void init_uart(void) //115200bps@11.0592MHz
{
PCON&=0x7F;
SCON = 0x50;
AUXR |= 0x40;
AUXR &=0xFE;
TMOD &= 0x0F;
TMOD |= 0x21;
TH1 =TL1 = 0xFD; //0.000558S
TH0 =0Xfd;
TH0 =0Xc0;
ET1 =0;
TR0 =1;
TR1 =1;
ET0 =1;
}
谢谢,如果用独立波特率发生器该怎么初始化呢?我用t0显示,t1发脉冲控制电机,独立发生器做通信
还有,为什么我烧录一次源程序(程序不变),结果数据会变?
给你改一下
void UARTInit(void) //@11.0592MHz
{
TMOD=0X20; //定时器1工作模式
TH1=0XFD; //timer high 1
TL1=0XFD; //timer low 1
TR1=1; //定时器T1的运行控制位
SCON=0X50; //串行控制寄存器
EA=1; //CPU的总中断允许控制位
ES=1; //串行口中断允许位 //串口中断打开
}
void UART(void) interrupt 4 using 3
{
// uint8 dat;
ES=0; //关串口中断,防止中断的嵌套
RI=0; //接收中断请求标志位清0
CmdWord=SBUF;//获取SBUF接收到的数据
// dat = SBUF;
// CmdWord=dat;
ReceiveFlag=1;
Send_Dat(CmdWord);
SBUF=CmdWord;//把收到的数据发送回去
while(!TI); //等待发送中断请求标志位为1
TI=0; //发送中断请求标志位清0
ES=1; //开串口中断
}
独立波特率发生器只有12和11系列才有,系列没有,用stc软件直接生成就可以了
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xFB; //独立波特率发生器时钟为Fosc/12,即12T
BRT = 0xFD; //设定独立波特率发生器重装值
AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
AUXR |= 0x10; //启动独立波特率发生器
}