为了降低CPU负担,一般串口接收都采用中断方式进行。可以设置一个接收缓冲区,将接收到的
字符串存入,达到一定长度时再读出整段信息,以判断接收的数据,这种方式一般用于串口发送
控制命令或数据的形式。这里我们只给出了接收单个字符并接收后立即发送出去的程序作为演示。
代码如下:
#include<reg52.h>
#define UART_INTERRUPT 4
void serial_init(void);
void send_char(char c);
void main()
{
serial_init();
while(1)
{
PCON |= 0x01;
}
}
void serial_init(void) //串口初始化函数
{
TMOD = 0x20; //T1工作方式1,用于设定波特率
TH1 = 0xF3; //波特率4800Bps,12MHz晶振
TL1 = 0xF3;
PCON |= 0x80; //SMOD = 1,波特率加倍
SCON = 0x50; //允许发送接收
ES = 1; //允许串口中断
TI = 1;
TR1 = 1;
}
void Serial_Interrupt() interrupt UART_INTERRUPT //接收中断
{
char ch;
if(RI) //接收中断
{
RI = 0;
ch = SBUF;
send_char(ch); //将接收到的字符发送出去
}
}
void send_char(char c)
{
SBUF = c; //将要发送的内容存入发送缓冲区
while(TI == 0); //等待发送完成
TI = 0; //清零Ti,准备下一次发送
}
字符串存入,达到一定长度时再读出整段信息,以判断接收的数据,这种方式一般用于串口发送
控制命令或数据的形式。这里我们只给出了接收单个字符并接收后立即发送出去的程序作为演示。
代码如下:
#include<reg52.h>
#define UART_INTERRUPT 4
void serial_init(void);
void send_char(char c);
void main()
{
serial_init();
while(1)
{
PCON |= 0x01;
}
}
void serial_init(void) //串口初始化函数
{
TMOD = 0x20; //T1工作方式1,用于设定波特率
TH1 = 0xF3; //波特率4800Bps,12MHz晶振
TL1 = 0xF3;
PCON |= 0x80; //SMOD = 1,波特率加倍
SCON = 0x50; //允许发送接收
ES = 1; //允许串口中断
TI = 1;
TR1 = 1;
}
void Serial_Interrupt() interrupt UART_INTERRUPT //接收中断
{
char ch;
if(RI) //接收中断
{
RI = 0;
ch = SBUF;
send_char(ch); //将接收到的字符发送出去
}
}
void send_char(char c)
{
SBUF = c; //将要发送的内容存入发送缓冲区
while(TI == 0); //等待发送完成
TI = 0; //清零Ti,准备下一次发送
}