串口通信
串口介绍
接口及引脚定义
硬件电路
电平标准
常见通信接口比较
相关术语
51单片机的UART
串口参数及时序图
串口模式图
串口和中断系统
串口相关寄存器
单片机每隔一秒向电脑发送数据
UART.c
#include <REGX52.H>
/**
* @brief 串口初始化
* @param 无
* @retval 无
*/
void UART_Init() //[email protected]
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x40; //8位数据,可变波特率
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xF4; //设置定时初始值
TH1 = 0xF4; //设置定时重载值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
}
/**
* @brief 串口发送一个字节数据
* @param Byte 要发送的一个字节数据
* @retval 无
*/
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
UART.h
#ifndef __UART_H__
#define __UART_H__
void UART_Init();
void UART_SendByte(unsigned char Byte);
#endif
main.c
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
unsigned char Sec;
void main()
{
UART_Init();
while(1)
{
UART_SendByte(Sec++);
Delay(1000);
}
}
Delay.c
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char data i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
Delay.h
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay(unsigned int xms);
#endif
运行效果
使用发送数据控制LED
UART.c
#include <REGX52.H>
/**
* @brief 串口初始化
* @param 无
* @retval 无
*/
void UART_Init() //[email protected]
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xF4; //设置定时初始值
TH1 = 0xF4; //设置定时重载值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
EA=1; //CPU开放中断
ES=1; //允许串口中断
}
/**
* @brief 串口发送一个字节数据
* @param Byte 要发送的一个字节数据
* @retval 无
*/
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
UART.h
#ifndef __UART_H__
#define __UART_H__
void UART_Init();
void UART_SendByte(unsigned char Byte);
#endif
ChangeLED.c
#include <REGX52.H>
void ChangeLED()
{
bit t;
t=P2_0;
P2_0=P2_7;
P2_7=t;
t=P2_1;
P2_1=P2_6;
P2_6=t;
t=P2_2;
P2_2=P2_5;
P2_5=t;
t=P2_3;
P2_3=P2_4;
P2_4=t;
}
ChangeLED.h
#ifndef __CHANGELED_H__
#define __CHANGELED_H__
void ChangeLED();
#endif
main.c
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
#include "ChangeLED.h"
void main()
{
UART_Init();
while(1)
{
}
}
void UART_Routine() interrupt 4
{
if(RI==1)
{
P2=~SBUF;
ChangeLED();
UART_SendByte(SBUF);
RI=0;
}
}