基于STC12C5A60S2系列1T 8051单片机串口通信信应用

基于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单片机串口通信信应用_第1张图片基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第2张图片基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第3张图片

STC12C5A60S2系列1T 8051单片机串口通信的结构

基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存器列表

基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第4张图片

基于STC12C5A60S2系列1T 8051单片机串口通信用到的特殊功能寄存器

STC12C5A60S2系列1T 8051单片机辅助寄存器AUXR

基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第5张图片
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信类型、波特率

STC12C5A60S2系列1T 8051单片机辅助寄存器AUXR1

基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第6张图片
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信引脚切换

串口1控制寄存器SCON

基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第7张图片
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信以下功能
(1)、设置串口通信工作模式
(2)、设置串口方式2或方式3多机通信
(3)、设置串口通信允许接收
(4)、设置串口通信在方式2或方式3下发送第9位数据
(5)、设置串口通信通信在方式2或方式3下接收第9位数据
(6)、设置串口通信发送中断请求
(7)、设置串口通信接收中断请求

串口电源控制寄存器PCON

基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第8张图片
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信以下功能
(1)、设置串口通信波特率选择
(2)、设置串口通信帧错误检测有效控制

串口数据缓冲寄存器SBUF

基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第9张图片基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第10张图片
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信发送或接收数据

串口辅助寄存器AUXR

基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第11张图片基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第12张图片
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信类型、波特率

串口中断寄存器

基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第13张图片
作用:用来设置STC12C5A60S2系列1T 8051单片机串口通信中断允许、中断优先级

基于STC12C5A60S2系列1T 8051单片机串口1通信工作模式

串口1通信模式0

基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第14张图片

串口1通信模式1

基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第15张图片基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第16张图片

串口1通信模式2

基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第17张图片基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第18张图片

串口1通信模式3

基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第19张图片基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第20张图片

串口通信波特率设置

基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第21张图片基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第22张图片基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第23张图片基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第24张图片基于STC12C5A60S2系列1T 8051单片机串口通信信应用_第25张图片

基于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() interrupt 4//串口1通信中断函数
{
  if(RI)//判断单片机串行口数据缓存器是否接收到数据
 {
   ReceiveData = SBUF;//读取单片机串行口数据缓存器中的数据赋给接收数据变量 即单片机串行口缓存寄存器通过串行口通信接收计算机用串口助手发送来的数据
   RI = 0;//单片机串行口接收数据标志位清0
   SBUF = ReceiveData;//把接收数据变量包含的数据赋给单片机串行口数据缓存器 即单片机通过串行口通信把来自从单片机SPI数据寄存器发送来的数据发送给计算机串口助手显示出来
   if(TI == 0)//等待单片机串行口发送完数据
  {
    TI = 0;//单片机串行口发完数据标志位清0
   }
  }
 }

你可能感兴趣的:(单片机,c语言,嵌入式硬件)