#include<reg52.h>
#include<stdio.h>
char putchar(char c);
void SendStr(unsigned char *s);
void SendByte(unsigned char dat);
void InitUART (void);
/*--------------------------------------------------------------
更改波特率或许可以用到此函数,调试的时候注释了,有需要可以自己用着试试
--------------------------------------------------------------*/
//void InitUART ( unsigned char baud)
//{
//
// SCON = 0x50; // SCON: 模式 1, 8-bit UART, 始能接收
// TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
// TH1=256-11059200/32/12/baud;
// TL1=TH1; //11.0592MHZ
//
// TR1 = 1; // TR1: timer 1
// ES = 1;
// EA = 1;
PCON|=0x80; //SMOD置1,波特率倍增为19200
//
//}
/*------------------------------------------------
串口初始化
------------------------------------------------*/
void InitUART (void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 始能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1=0xfd;
TL1=TH1; //11.0592MHZ
TR1 = 1; // TR1: timer 1
ES = 1;
EA = 1;
// PCON|=0x80; //SMOD置1,波特率倍增为19200
}
void main (void)
{
InitUART();
printf("hellow word \r\n");
SendStr("The UART test \r\n");
while (1)
{
}
}
/*------------------------------------------------
发送一个字节
------------------------------------------------*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
/*------------------------------------------------
发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
while(*s!='\0')
{
SendByte(*s);
s++;
}
}
/*------------------------------------------------
串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4
{
unsigned char Temp;
if(RI) //判断是否接收中断产生
{
RI=0; //标志位清零
Temp=SBUF; //读入缓冲区的值
SendByte(SBUF);
SBUF=Temp; //把接收到的值再发回电脑端
}
if(TI) //如果是发送标志位,清零
TI=0;
}
char putchar(char c) //重写此函数才能用printf输出函数
{
SendByte(c);
return c;
}
接收结果(下载程序成功之后记得按一下板子上的下载键)
发送结果(发送的时候点HEX模式接收)
当为文本模式的时候(发出的数据会自动转换成ASCII码表上16进制对应的数)
PS:附上一张接线图,总之串口通信还是挺简单的,可以作为一个调试结果的小助手。