protues仿真串口通信,使用at89c52单片机无法接收数据,但是使用stc15w4k32s4却可以。
UART.c
#include <STC89C5xRC.H>
#include "uart.h"
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
//开启中断
EA=1; //总中断控制
ES=1; //串口中断
}
void UART_SendByte(unsigned char Byte)
{
SBUF = Byte;
while(TI==0);
TI = 0;
}
UART.h
#ifndef __UART__H_
#define __UART__H_
void UartInit(void);
void UART_SendByte(unsigned char Byte);
#endif
main.c
#include <STC89C5xRC.H>
#include "uart.h"
void main()
{
UartInit();
while(1)
{
}
}
//串口中断
void UART_Routine() interrupt 4
{
unsigned char c;
if(RI==1)
{
RI=0;//复位
c=SBUF;
UART_SendByte(c);//将数据发回
}
}
使用at89c52单片机无法接收数据图,单片机晶振已改到11.0592MHz,虚拟终端也改成了9600
使用stc15w4k32s4单片机正常接收图