基于STC12C5A60S2系列1T 8051单片机串口通信应用
- STC12C5A60S2系列1T 8051单片机管脚图
- STC12C5A60S2系列1T 8051单片机串口通信介绍
- STC12C5A60S2系列1T 8051单片机串口通信的结构
- 基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存器列表
- 基于STC12C5A60S2系列1T 8051单片机串口通信用到的特殊功能寄存器
- STC12C5A60S2系列1T 8051单片机辅助寄存器AUXR
- STC12C5A60S2系列1T 8051单片机辅助寄存器AUXR1
- 串口1控制寄存器SCON
- 串口电源控制寄存器PCON
- 串口数据缓冲寄存器SBUF
- 串口辅助寄存器AUXR
- 串口中断寄存器
- 基于STC12C5A60S2系列1T 8051单片机串口1通信工作模式
- 串口1通信模式0
- 串口1通信模式1
- 串口1通信模式2
- 串口1通信模式3
- 串口通信波特率设置
- 基于STC12C5A60S2系列1T 8051单片机通过串口通信接收计算机用串口助手发送的数据并返回给计算机串口助手显示出来
STC12C5A60S2系列1T 8051单片机管脚图
# STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置# STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍
STC12C5A60S2系列1T 8051单片机串口通信介绍
STC12C5A60S2系列1T 8051单片机串口通信的结构
基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存器列表
基于STC12C5A60S2系列1T 8051单片机串口通信用到的特殊功能寄存器
STC12C5A60S2系列1T 8051单片机辅助寄存器AUXR
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信类型、波特率
STC12C5A60S2系列1T 8051单片机辅助寄存器AUXR1
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信引脚切换
串口1控制寄存器SCON
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信以下功能
(1)、设置串口通信工作模式
(2)、设置串口方式2或方式3多机通信
(3)、设置串口通信允许接收
(4)、设置串口通信在方式2或方式3下发送第9位数据
(5)、设置串口通信通信在方式2或方式3下接收第9位数据
(6)、设置串口通信发送中断请求
(7)、设置串口通信接收中断请求
串口电源控制寄存器PCON
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信以下功能
(1)、设置串口通信波特率选择
(2)、设置串口通信帧错误检测有效控制
串口数据缓冲寄存器SBUF
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信发送或接收数据
串口辅助寄存器AUXR
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信类型、波特率
串口中断寄存器
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信中断允许、中断优先级
基于STC12C5A60S2系列1T 8051单片机串口1通信工作模式
串口1通信模式0
串口1通信模式1
串口1通信模式2
串口1通信模式3
串口通信波特率设置
基于STC12C5A60S2系列1T 8051单片机通过串口通信接收计算机用串口助手发送的数据并返回给计算机串口助手显示出来
#include <stc12c5a60s2.h>
#include <uart.h>
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint
bit ReceiveDataFlag;//声明收到数据标志位变量
uchar ReceiveData;//声明收到数据变量
/*****关于8051系列单片机定时器溢出率、波特率和定时器初值(定时计数初值)之间计算的知识点*****/
/****
一、定时器溢出率计算公式
1、定时器溢出率:定时器每秒溢出的次数
2、定时器溢出率计算公式表
定时方式 分频方式 公式
方式1:16位定时器 12分频(即12T 默认值) Ft=晶振频率/12/(65536-定时器初值)
方式2:8位定时器 12分频(即12T 默认值) Ft=晶振频率/12/(256-定时器初值)
方式1:16位定时器 1分频(即1T) Ft=晶振频率/1/(65536-定时器初值)
方式2:8位定时器 1分频(即1T) Ft=晶振频率/1/(256-定时器初值)
二、波特率计算公式
1、波特率:每秒传输二进制位数的多少
2、波特率计算公式表
定时方式 分频方式 公式
方式1:16位定时器T1 12分频(即12T 默认值) 波特率=晶振频率/12/(65536-定时器初值)/4
方式2:8位定时器T1 12分频(即12T 默认值) 波特率=晶振频率/12/(256-定时器初值)*2^SMOD/32
方式1:16位定时器T2 12分频(即12T 默认值) 波特率=晶振频率/12/(65536-定时器初值)/4
方式1:16位定时器T1 1分频(即1T) 波特率=晶振频率/1/(65536-定时器初值)/4
方式2:8位定时器T1 1分频(即1T) 波特率=晶振频率/1/(256-定时器初值)*2^SMOD/32
方式1:16位定时器T2 1分频(即1T) 波特率=晶振频率/1/(65536-定时器初值)/4
三、根据波特率计算定时器初值(定时器定时计数)
定时方式 分频方式 公式
方式1:16位定时器T1 12分频(即12T 默认值) 定时器初值(定时计数)=65536-晶振频率/(48*波特率)
方式2:8位定时器T1 12分频(即12T 默认值) 定时器初值(定时计数)=256-晶振频率*2^SMOD/(384*波特率)
方式1:16位定时器T2 12分频(即12T 默认值) 定时器初值(定时计数)=65536-晶振频率/(48*波特率)
方式1:16位定时器T1 1分频(即1T) 定时器初值(定时计数)=65536-晶振频率/(4*波特率)
方式2:8位定时器T1 1分频(即1T) 定时器初值(定时计数)=256-晶振频率*2^SMOD/(32*波特率)
方式1:16位定时器T2 1分频(即1T) 定时器初值(定时计数)=65536-晶振频率/(4*波特率)
*****/
void Uart1Init()//串行口1工作模式1的8位串行口波特率可变初始化函数 波特率为9600bps 晶振为22.1184MHz
{
AUXR = 0x00;//设定定时器1的12分频定时作为串行口1的波特率发生器
PCON &= 0x7f;//波特率不加倍
SCON = 0x50;//工作模式1的8位串行口波特率可变
TMOD &= 0x0f;//定时器/计数器工作模式清0
TMOD |= 0x20;//设定定时器/计数器为定时器 工作模式为8位自动重装定时器1模式2
TH1 = 0xfa;//设定定时器1高八位初值
TL1 = 0xfa;//设定定时器1低八位初值
ET1 = 0;//禁止定时器1中断
ES = 1;//允许串行口1中断
EA = 1;//开总中断
TR1 = 1;//打开定时器1
}
void PortChange()//端口切换函数
{
AUXR1 &= 0xf3;//单片机P1端口切换到单片机P4端口
AUXR1 |= 0x04;//设定ADRJ=1
}
void PortModeSet()//端口模式设置函数
{
P0M1 = 0x00;
P0M0 = 0x00;
P1M1 = 0x00;
P1M0 = 0x00;
P2M1 = 0x00;
P2M0 = 0x00;
P3M1 = 0x00;
P3M0 = 0x00;
P4M1 = 0x00;
P4M0 = 0x00;
}
void main()//主函数
{
PortModeSet();//端口模式设置函数
Uart1Init();//串行口1工作模式1的8位串行口波特率可变初始化函数 波特率为9600bps 晶振为22.1184MHz
PortChange();//端口切换函数
while(1)//主循环
{
}
}
void Uart1() interrup 4//串口1通信中断函数
{
if(RI)//判断单片机串行口数据缓存器是否接收到数据
{
ReceiveData = SBUF;//读取单片机串行口数据缓存器中的数据赋给接收数据变量 即单片机串行口缓存寄存器通过串行口通信接收计算机用串口助手发送来的数据
RI = 0;//单片机串行口接收数据标志位清0
SBUF = ReceiveData;//把接收数据变量包含的数据赋给单片机串行口数据缓存器 即单片机通过串行口通信把来自从单片机SPI数据寄存器发送来的数据发送给计算机串口助手显示出来
if(TI == 0)//等待单片机串行口发送完数据
{
TI = 0;//单片机串行口发完数据标志位清0
}
}
}