(四)单片机串口通信:

MCS-51单片机具有一个全双工的串行通信接口,能同时进行发送和接收。它可以作为UART(通用异步接收和发送器)使用,也可以作为同步的移位寄存器使用。
用到串行口控制寄存器(SCON)、功率控制寄存器(PCON)、工作方式寄存器(TMOD)、时钟控制寄存器(TCON)、数据缓冲寄存器(SBUF)
6.串行口控制寄存器(SCON)

REN:为允许串行接收位,由软件置位或清除。置位时允许串行接收,清除时禁止串行接收。   
TB8:是工作方式2和3要发送的第9位数据。在许多通信协议中该位是奇偶位,可以按需要由软件置位或清除。在多处理机通信中,该位用于表示是地址帧还是数据帧。 
RB8:是工作方式2和3中接收到的第9位数据(例如是奇偶位或者地址/数据标识位),在工作方式1中若SM2=0,则RB8是已接收的停止位。在工作方式0中RB8不使用。  
TI :为发送中断标志位,由硬件置位,软件清除。工作方式0中在发送第8位末尾由硬件置位;在其他工作方式时,在发送停止位开始时由硬件置位。TI=1时,申请中断。CPU响应中断后,发送下一帧数据。在任何工作方式中都必须由软件清除TI。
RI:为接收中断标志位,由硬件置位,软件清除。工作方式0中在接收第8位末尾由硬件置位;在其他工作方式时,在接收停止位的中间由硬件置位。RI=1时,申请中断,要求CPU取走数据。但在工作方式1中,SM2=1且未接收到有效的停止位时,不会对RI置位。在任何工作方式中都必须由软件清除RI。   
系统复位时,SCON的所有位都被清除。
SM0和SM1:为工作方式选择位,可选择四种工作方式:

SM2:多机通信控制位。主要用于方式2和方式3 
REN:允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。 
TB8,在方式2或方式3中,是发送数据的第九位 
RB8,在方式2或方式3中,是接收到数据的第九位 
RI:串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。注意,RI必须由软件清除。 
TI:串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。

7.功率控制寄存器(PCON)

该寄存器只有一位SMOD与串行口工作有关 
SMOD(PCON.7)波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。

串口是采用定时器1工作在8位自动重装定时/计数模式,即工作方式2,TMOD=0x20。
时钟控制寄存器(TCON)该寄存器只有第六位与串口有关,用于开启定时器1。

8051的串行口结构:

两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的,不会生重叠错误。

波特率的计算:
通过软件可对单片机串行口编程为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。
串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。 
方式0的波特率 = fosc/12 
方式2的波特率 =(2· SMOD/64)· fosc 
方式1的波特率 =(2· SMOD/32)·T1溢出率) 
方式3的波特率 =(2· SMOD/32)·T1溢出率)

对于方式1的定时器初值计算: 
T1溢出率= fosc/(12·(28-X)) 
波特率=(2·SMOD/32)fosc/(12·(28-X)) 
其中X为定时器的初始值

串口通信实现:
MCS-51单片机具有一个全双工的串行通信接口,能同时进行发送和接收。它可以作为UART(通用异步接收和发送器)使用,也可以作为同步的移位寄存器使用。
用到串行口控制寄存器(SCON)、功率控制寄存器(PCON)、工作方式寄存器(TMOD)、时钟控制寄存器(TCON)、数据缓冲寄存器(SBUF)

串口通信实现过程:
串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下: 
(1)确定T1的工作方式(编程TMOD寄存器); 
(2)计算T1的初值,装载TH1、TL1; 
(3)启动T1(编程TCON中的TR1位); 
(4)确定串行口控制(编程SCON寄存器); 
(5)如果串行口在中断方式工作,还要进行中断设置(编程IE、IP寄存器)。


串口通信程序实现:电脑与单片机之间的互相通信:
假如我们使用的是12MHZ的晶振,然后设置波特率为4800:
void Serial _init()
{
   SCON=0x50;    //选择工作方式1,允许串行口接收数据  
   TMOD=0x20;  //选择8位自动重装定时器
   PCON=0x80;  //波特率增倍
   TH1=0xF3;    //晶振频率12MHZ,SMOD=1
   TL1=0xF3;    //波特率为4800时定时器的初值
   TR1=1;         //开定时器
}
接收与发送
我们通过电脑上的串口调试助手发送一个十六进制的数给单片机,然后单片机又把接收到的这个数发回给电脑,实现电脑与单片机的互相通信。
void main()
{
       unsigned char tmp=0;
       
Serial_Init();
       init_lcd1602();
       while(1)
       {
            /*单片机接收数据*/
            while(!RI);     //等待接收数据完成
            tmp=SBUF;   //获取接受数据
            RI=0;           //清除接收标志位
             /*单片机发送数据*/
            //LCD_write_com(0x80);
            // LCD_write_data(tmp);
            SBUF=tmp;  //将数据写入发送缓冲区中
            while(!TI);  //等待发送完毕
            TI=0;         //清除发送标志位
       }
}

51单片机精华笔记(下)相关推荐

  1. 51单片机精华笔记(上)

    单片机概念: 单片机由中央处理器(CPU).随机存储器(RAM).只读储存器(ROM).输入输出(I/O)接口电路组成,集成在一块芯片上面,又称微控制器(MCU). 单片机原理图(89C51): 单片 ...

  2. 51单片机学习笔记-1简介及点灯

    51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...

  3. AutoLeaders控制组—51单片机学习笔记

    文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...

  4. 51单片机学习笔记2 仿真器的使用及STC89Cxx简介

    51单片机学习笔记2 仿真器的使用及STC89Cxx简介) 一.连接步骤 1. 硬件连接 2. 安装软件驱动 3. 检查是否安装成功 二.仿真步骤 1. 打开一个51工程 2. 选择仿真设备 3. S ...

  5. [51单片机学习笔记TWO]----蜂鸣器

    蜂鸣器音乐播放实验 首先应该了解一下蜂鸣器音乐播放的原理,在这里我只讲一下电磁式蜂鸣器驱动原理(还有一种是压电式蜂鸣器): 电磁式蜂鸣器驱动原理: 蜂鸣器发声原理是电流通过电磁线圈,使电磁圈产生磁场来 ...

  6. 单片机c语言北航,【下载资料】《51单片机学习笔记》北航版

    原标题:[下载资料]<51单片机学习笔记>北航版 如果手机下载有问题,请移步至电脑端,链接:https://forum.mianbaoban.cn/t/topic/36906 内容简介 本 ...

  7. 51单片机学习笔记5 流水灯实现及蜂鸣器控制

    51单片机学习笔记5 流水灯实现及蜂鸣器控制 一.流水灯 1. 硬件电路 2. 代码实现 (1) 点亮一个LED的基本操作 (2) 使用算术左移实现流水灯 (3) 使用库文件左移函数 二.蜂鸣器 1. ...

  8. 51单片机学习笔记1 简介及开发环境

    51单片机学习笔记1 简介及开发环境 一.51单片机 1. STC89C52单片机简介 2. 命名规则 3. 封装 (1)PDIP (2)LQFP (3)PLCC (4)PQFP 二.STC8051结 ...

  9. AutoLeaders控制组——51单片机学习笔记(AD/DA、红外遥控)

    本篇内容是观看B站江科大自化协UP主的教学视频所做的笔记,对其中内容有所引用,并结合自己的单片机板块进行了更改调整. 以下笔记内容以一个视频为一个片段(内容较多,可能不适合速食,望见谅) 一些内容涉及 ...

最新文章

  1. hdu 3966( 树链剖分+点权更新)
  2. Android使用百度地图定位
  3. sql索引从入门到精通(十亿行数据测试报告)
  4. python随机数据随概率分布_概率分布及其Python实现
  5. XSS漏洞原理/方式/防御
  6. zabbix 客户端自定义端口监控
  7. html 边距等于父节点,css的百分比margin,padding为什么不是相对于父元素的?
  8. 使用vue element-ui 打印组件
  9. html简单实现自动轮播代码怎么写,HTML图片轮播代码怎么写?
  10. 服务器操作系统 份额,2019年6月全球桌面操作系统市场份额数据:Linux占比1.55%...
  11. css3复习知识点概括1(根据W3S顺序)
  12. 量化交易入门阶段——欧奈尔的CANSLIM模型(S 供需关系)
  13. javabean+servlet+jsp返利网
  14. dockers-系统学习-docker compose服务编排
  15. SpringBoot+Redis 实现一个微博热搜!
  16. Effective Java读书笔记一(Java Tips.Day.1)
  17. Good Softwares and Tools
  18. (附源码)ssm经济信息门户网站 毕业设计 141634
  19. sec 与csc的原函数
  20. 02_功分器设计及联合式EM仿真

热门文章

  1. AEG电站用电池充电器PROFITEC SN1
  2. 无人驾驶的劳斯莱斯轿车_劳斯莱斯的第一款无人驾驶概念车,奢华大气还是丑?...
  3. Lightwave 3D Character Animation
  4. 数据结构4:Tire树入门
  5. 强化学习-让机器自学习
  6. php 过滤emoji表情
  7. python递归函数公式_python之内置函数,匿名函数,递归函数
  8. JVM垃圾回收(GC)原理
  9. jxl.write.biff.RowsExceededException: The maximum number of rows permitted on a worksheet been exce
  10. 在Windows 10上观看DVD的两种简便方法