刚刚接触单片机串口通信,用串口调试助手,发送任何字母都没有任何反应,波特率设置的是9600
/****************串口通信****************/
#include <stdio.h>
#include <reg51.h>
#include <intrins.h> //包含延时函数
#define uint unsigned int
#define uchar unsigned char
void SendData(uchar dat);
void UartInit(void);
void delay_ms(uint time2);
uchar re;
void main(){
UartInit();
EA = 1; //打开总中断
while(1)
{
SendData(re);
delay_ms(50);
}
}
//串口初始化,9600波特率
void UartInit(void) //9600bps@22.1184MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率,选择模式1
//AUXR |= 0x40; //定时器时钟1T模式
//AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xB8; //设置定时初始值
TH1 = 0xB8; //设置定时重载值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
ES = 1; //打开串口中断
}
void SendData(uchar dat){
SBUF=dat; //发送数据
while(!TI);
TI=0; //发送中断标志位置0
}
void UART() interrupt 4{ //串口中断号为4
if(RI)
{
RI=0; //清除接收中断标志
// ES=0; //关闭串口中断
re=SBUF; //接受数据
}
}
/**********延时程序**************/
void Delay1us() //@22.1184MHz ,STC-ISP系统生成的延时函数
{
unsigned char i;
_nop_();
i = 5;
while (--i);
}
void delay_us(uint time1){ //封装的1us函数接口
uint i;
for(i=0;i<=time1;i--){
Delay1us();
}
}
void Delay1ms() //@22.1184MHz STC-ISP系统生成的延时函数
{
unsigned char i, j;
i = 29;
j = 183;
do
{
while (--j);
} while (--i);
}
void delay_ms(uint time2){ //封装的1ms函数接口
uint i;
for(i=0;i<=time2;i--){
Delay1ms();
}
}
/**********************************/
这个是下载程序的截图:
这个是串口调试的截图: