![](https://img-blog.csdnimg.cn/56492958f3b7470998c8a27ac2046a30.png)
单片机的UART
串口模式
串口和中断系统
![](https://img-blog.csdnimg.cn/b77daeebc94840f4a62707e69e2af310.png)
串行口相关寄存器
![](https://img-blog.csdnimg.cn/05bf1829f3344ff1bcd75e4429423c23.png)
TI,RI必须使用软件复位
发送!!!!
#include <REGX52.H>
void UART_Init()
{
SCON=0x40;
PCON|=0x80;
TMOD&=0x0F;
TMOD|=0x20;
TH1=0xF4;
TL1=0xF4;
ET1=0;
TR1=1;
}
void send(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
int main()
{
UART_Init();
send(0x66);
while(1)
{
}
}
关于为什么接收到数据就会中断的说明:
1.串口在接收到数据之后,硬件会自动将RI=1。
2.控制串口中断的逻辑门是或门。
3.只要RI或者T=1就会触发串口中断。前提是程序打开了总中断和串口中断。
接收与发送!
#include <REGX52.H>
void UART_Init()
{
SCON=0x50;
PCON|=0x80;
TMOD&=0x0F;
TMOD|=0x20;
TH1=0xF4;
TL1=0xF4;
//蓝牙模块 TH1=0xFA;TL1=TH1;//计数器初始值设置
ET1=0;
TR1=1;
EA=1;//中断
ES=1;
}
void send(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
int main()
{
UART_Init();
while(1)
{
}
}
void UART_Rountine() interrupt 4
{
if(RI==1)
{
P0=SBUF;
}
RI=0;
}