这一小节写一下串口通讯。

建议先去了解一下什么串行通讯。

推荐一个视频3分钟理解通信协议之串口UART到底是个啥?_哔哩哔哩_bilibili

因为串口通讯涉及的寄存器相对较多。所以尽量要自己去看看STC的官方手册。我这里用的是STC12C5A60S2这个系列的产品,所以参考的手册也是这个。如果你用的是别的型号的51单片机建议去官网下载对应型号的手册。


附一个下载方法:

1、百度搜索 STC官网

进去后就是:

一个第一眼看上去很土的网站

2、找到对应的产品型号的手册

进入网站后往下拉去找。或者用Ctrl+F页面搜索  输入产品型号

3、点进去

右上角点下载。


内部硬件结构

结构大致可以分为:波特率发生器、引脚、 检测器、缓冲寄存器、接收寄存器、发送寄存器、移位寄存器、内部总线。

1、波特率发生器

接下来我要说一堆概念了。

在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。即波特率是指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示。(如果学过工程测试技术的人应该能明白它在讲什么。)

①波特率就是对数据信号传输速率的描述。

②        调制:调制就是用原始信号(这里对应的就是数据信号)去控制载波信号的某个或几个参量的变化(这里其实就一个参量:速率),经过这样处理的载波信号就是调制信号了。

解调:解调是调制的反过程,已调信号的参量变化中恢复原始信号。

--------------------------------------------------------------------------------------------------------------------------

-----------小声哔哔---看不懂这些概念也没关系-----看懂下面的图和比喻就可以理解了------------

----------当然能懂这些概念是最好的---------------------------------------------------------------------------------


TX是发送端,RX是接收端 ,两端想要发送和接收的都是数据信号,但传输的时候是以调制信号的形式传输的。为什么要这么做呢?其实最重要的原因是增强信号的抗噪声能力。


打个比喻,这就好像有一封信你要传出去,但纸张太容易破损你不想它在传输过程中受到损坏,所以你把信上的内容按照一定的规则刻在木盒子上,对方拿到木盒子后按照事先说好的规则去读取盒子上的内容。(这个规则就是你设定好的波特率,木盒子就是载波信号,刻好信的内容的木盒子就是调制信号,通过事先说好的规则(波特率)对方读懂了木盒子上的内容,也就完成了一次通讯)。

如果波特率不匹配,接收方读取的只会是乱码。

而波特率发生器的作用就是产生调制好的载波信号。


2、缓冲寄存器、移位寄存器

这是手册上的解释,说白了缓冲寄存器和移位寄存器都是辅助串口发送接收的临时数据存放点。

发送时:通过内部数据总线把要发送的数据先放到SBUF寄存器中 ,然后会把SBUF的数据移动到移位寄存器(是一个九位的寄存器),移位寄存器的第九位是数据发送位,前8位数据会一位一位的向这个位移动,移到这个位的数据就会被发送出去。

接收时:数据接收后会被先放到移位寄存器,当一帧数据接收完,就会将数据移动到SBUF寄存器中,这是你就可以把它读走。


相关的寄存器

主要是串口控制寄存器——SCON 、PCON


工作方式的选择。

通常使用的是方式1。


也就是使能位。


中断标志位。




还有中断相关的寄存器 


编程步骤

我们通常用的都是模式1。

发送:

接收: 

 波特率的配置:

主要是计算计数初值SMOD的值。

1、确定串口的工作方式。

MOV SCON ,#50H

2、确定SMOD值,定时器T1计数初值,定时器T1工作方式,最后开启定时器T1.

MOV PCON,#00H                ;设置SMOD=0
MOV TMOD ,#20H                ;设置定时器1为工作模式2
MOV TH1, #0E6H                ;设置计数器重装载值
MOV TL1, #0E6H                ;设置计数器的初始值
SETB TR1                        ;开启定时器

这样初始化工作就完成了。

值得注意的是定时计数器工作模式2具体的可以去看手册。

这里简单的说一下,定时器工作方式2是8位的自动从装载模式。计数器的高8位是存放重装载值的,低8位放的是计数初始值的。这和定时器的模式1有所不同。工作模式1是两个寄存器(TH1、TL1)共同存放初始值,(所以叫16位的计数器)。自动重装载的意思是当产生完一次计数溢出(产生中断)后,由TH1复制一份初始值数据到TL1(所以在这个模式下一般TH1和TL1的值是相同的),这个过程由硬件自己完成。不需要软件控制(软件只要确定好工作方式就行了)。而定时器工作方式1因为是两个寄存器(TH1、TL1)共同存放初始值所以是没有地方给他放重装载值的,所以要在进入中断服务程序后再一次用软件去控制再一次写入初始值,以实现重装初值。


3、进行发送数据

MOV A,#41H        ;发送字符A 的ASCII码
MOV SBUF ,A
JNB TI ,$        ;判断串口发送中断标志位是否被置1,如果没有被(硬件)置一,说明还没发送完则在此处                ;等
CLR TI           ;清除中断标志位。

那么接收就更简单了,你只要去判断标志位RI是否被置一,如果置一了 那就MOV A, SBUF  把数据读出来就行了。然后清除中断标志位   即RI=0。


--------------------------------------------串口结束-------------------------------------------------------------------------

51单片机汇编学习10——串口通讯相关推荐

  1. 51单片机汇编学习(一)点亮你的LED灯

    本帖为使用汇编编写51单片机的学习笔记,本帖使用软件为keil5,因为没有实际硬件,所以选择porteus仿真软件,因为是第一篇,所以内容多有赘述,详细说明了工程建立等,因为文章太长所以编程和仿真分开 ...

  2. 51单片机汇编学习例程(9)——ADC0809篇

    ASM9_ADC0808:    ADC0808采集ADC参数,数码管显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** ************************** ...

  3. 51单片机汇编学习11——扩展原理与接口技术

    终于到这一小节了.这一节讲扩展原理与接口技术. 那么什么是扩展原理&接口技术呢?其实主要是3种. 1.扩展一个程序存储器 2.扩展一个数据存储器 3.扩展IO口 1.扩展程序存储器 其实这个扩 ...

  4. 51单片机汇编学习笔记9——定时计数器

    这一小节介绍一下51单片机的一个重要外设定时计数器. 顾名思义定时计数器主要是两种功能:定时.计数. 定时:就是当你开启定时器后到了设定的时间他会触发中断,然后去执行中断服务函数里面的程序. 计数:主 ...

  5. 51单片机汇编学习例程(10)——DAC0832篇

    ​ ASM10_DAC0832:    DAC0832输出各种波形 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** ****************************** ...

  6. 51单片机汇编学习例程(7)——74HC595数码管篇

    7.ASM7_Seg_595:    74HC595控制数码管静态显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** **************************** ...

  7. 51单片机汇编学习例程(16)——AT24C02篇

    ​ASM16_AT24C02:EEPROM数据读写,LED显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /*********************************** ...

  8. 51单片机汇编学习例程(17)——KeyPad4X4篇

    ​ASM17_KeyPad4X4:矩阵键盘,LCD1602显示按键值. (注意代码显示不全,最下面有Keil源码和Proteus工程) 仿真视频 /** *********************** ...

  9. 51单片机汇编学习例程(13)——DC-Motor篇

    ​ ASM13_DCMotor:    DC-Motor电机控制 (注意代码显示不全,最下面有Keil源码和Proteus工程) /********************************** ...

最新文章

  1. c++ 基本数据类型字节数
  2. 什么情况下会用到try-catch
  3. 计算机组成原理期末复习题
  4. springboot下整合各种配置文件
  5. 马上开课 | 临床基因组学数据分析实战助力解析Case,快速发表文章
  6. 关于RecyclerView条目复用
  7. Java NIO(十六) Files
  8. bootstrap 表单样式
  9. 全面了解APON,BPON,EPON,GPON
  10. HTML背景图片设置
  11. 三星Galaxy Note 10.1刷机教程
  12. Python爬虫实例--新浪热搜榜[xpath语法]
  13. 【cocos2d游戏开发实战】一款射击类小游戏《Zombie Age》的开发(一)
  14. html5 JavaScript 邮箱地址验证
  15. vb mysql 转义字符,MySQL_在VB.NET应用中使用MySQL的方法, 绪言 在Visual Studio中使用 - phpStudy...
  16. C语言指针详解(补充中)
  17. 虚拟机中Centos更新内核
  18. 感触极深的一篇文章(迷失方向的你不妨看看)
  19. 杭州阳陂湖湿地公园游览攻略
  20. IT 领导力:真正数字化领导者的 5 大特质

热门文章

  1. Java导出Excel每列求和,如何使用VBA对Excel中的范围中的每一行求和
  2. flex布局+自动换行
  3. java控制浏览器_Selenium常用API的使用java语言之7-控制浏览器操作
  4. 联诚展览,2023第十届中国(北京)国际智慧养老产业展览会
  5. Mac:系统深色模式下关闭软件深色模式的办法(针对软件没有设置选项的情况)
  6. 改网卡ip的两种方式
  7. 如何开一个高效的会议?
  8. 50款国外后期草地素材g
  9. c语言之双精度数的有效数字
  10. Iphone画饼图工具类