目录
一,原理概述
1.串口的概念
电路如何实现通讯?
双向通讯就必须要交叉连接
TTL一般在单片机系统中使用,而RS232一般在电脑设备这种高电压传输中使用,而S485可以在一千多米的距离中使用,稳定性高。
常见的通信接口
通信方式术语解释
本次只学习模式一
串口参数,在stc中也会涉及到
串口内部如何实现收发?
串口工作原理图示
配置串口相关的寄存器
配置SCON,PCON的SMOD,SMODO,直接写和读SBUF,配置中断的EA,ES,以及定时器
T1配置好。
在串口中定时器有专用的模式,8位自动重装模式
此模式不需要像定时器一样手动赋初值,会自动赋初值
波特率设置
波特率越低,信号越稳定,越不容易出现误差。
在高波特率的时候可以适当增加延时函数,减小误差。
二,串口应用
应用一:向电脑发送程序(只发不收)
#include <REGX52.H>
#include "Delay.H"
unsigned char Sec;
void UART_Init()//4800bps@12.000MHz
{
SCON=0x40;
PCON |= 0x80;
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xF3; //设定定时初值
TH1 = 0xF3; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
void main()
{
UART_Init();
while(1)
{
UART_SendByte(Sec);
Sec++;
Delay(1000);
}
}
应用二:电脑通过串口控制LED
将SCON改为SCON=0x50
接收数据需要用到中断,所以还需要配置中断的接口
#include <REGX52.H>
#include "Delay.H"
#include "UART.H"
unsigned char Sec;
void main()
{
UART_Init();
while(1)
{
}
}
void UART_Routine() interrupt 4
{
if(RI==1)
{
P2=SBUF;
UART_SendByte(SBUF);
RI=0;
}
}
------------------------------------------------------------------
#include <REGX52.H>
//串口初始化
void UART_Init()//4800bps@12.000MHz
{
SCON=0x50;
PCON |= 0x80;
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xF3; //设定定时初值
TH1 = 0xF3; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
EA=1;
ES=1;
}
//串口发送一个字节数据Byte
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}