一.串口与中断系统相结合
通过接受数据然后进入中断系统,再对数据进行处理,处理完可以以LED形式表现出来。
二.相关代码
1.UART.c
#include <REGX52.H>
/**
* @brief 串口初始化,4800bps@12.000MHz 波特率计算
* @param 无
* @retval 无
*/
void UART_Init()
{
//stc软件波特率计算自带代码
SCON=0x50; //0101 0000
PCON |= 0x80;
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xF3; //设定定时初值
TH1 = 0xF3; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
EA=1; //串口中断开关闭合 发生中断后再处理数据
ES=1; //串口中断开关闭合 发生中断后再处理数据
}
/**
* @brief 串口发送一个字节数据
* @param Byte 要发送的一个字节数据
* @retval 无
*/
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte; //SUBF在等号左边为发送信号
while(TI==0); //判断是否不断发送 等于0会一直循环 等于1会跳出循环
TI=0; //跳出循环后TI等于0 即得用软件进行复位
}
2.main.c
#include <REGX52.H>
#include "Delay.h"
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
void main()
{
UART_Init(); //串口初始化
while(1)
{
}
}
void UART_Routine() interrupt 4
{
if(RI==1) //如果接收标志位为1,接收到了数据
{
P2=~SBUF; //读取数据,取反后输出到LED
UART_SendByte(SBUF); //将受到的数据发回串口
RI=0; //接收标志位清0
}
}