一、概念和原理
说明:1.DS18B20要用到这个uart的配置,所以咱们先学这个。
2. 说得直白一点:单工,就是只能有接收或者发送数据得其中一种;
半双工,就是可以有接收和发送数据,但同时只能有一种状态,同一时间只能接收或者发送其中一种;
全双工,就是可以同时发送,接收俩种状态。
3.UART口就是异步通信,进行数据帧得传送,一次传送一个帧。
异步通信里面的波特率比较重要,咱们先了解一下其概念。
我们平时在烧录软件里面见到得9600的波特率意思就是每秒发送9600位数,数据帧如果是一个起始位一个结束位八个数据位,那就是10位为一个数据帧,那每秒就可以传送960个数据帧。
说明:串口通信有四种模式。溢出率应该是指每多少秒,定时器1就会溢出一次。
讲一下这个八位自动重装。在定时器工作原理中,在定时器1中断溢出之后,我们在中断函数里面要写一个计数初值重装的代码,使用自动重装就可以少写代码
最重要的就是波特率的计算了。第一个公式作了解就行,要记住下面SMOD俩种情况对应的参数计算方式,或者直接记住俩种模式下的参数值。一般是使用这俩个值的。
再来看串口收发还涉及到哪些东西。(兄弟们,这个uart确实挺多的,我也烦)
说明:1.一个SBUF,对应俩个寄存器。只能一个字节写入和读出,不能进行位操作。
2.CPU会自己识别发送还是接收,那就不用我们去单独去配置,所以地址重叠也没关系。
这个寄存器是相关的重要寄存器,要学会!
说明:1.我们对串口的初始化其实就是对这个寄存器进行一些工作;
2.可以看到带颜色的模块有四个部分。绿色三个位是设置串口的模式。SM2可以等到需要才去管。
配置得到的四种模式在下方的四个蓝色的二进制码,最常用的是有下划线的( 010 (SM2是0));
3.蓝色的是控制是否允许接收的位,一般用到都是置1;
4.橙色的是用作奇偶检验时才会用到。(奇偶检验概念放下面了) 此处不用直接俩位都置0;
5.黄色的是中断标志位,系统自动置1,我们借此判断相关信息之后就需要手动清0;
看完说明之后就可以理解图片后面的第一点为什么是0x50了 ;至于最后一点,作者现在使用的就是IAP的,所以在之前的调试中一直报错说AUXR没定义,要注意这一点。
二、题目
题目来了。(实验现象图片中也有)
三、手写代码
一、框架(基础)
二、明确要写的函数(以后可能可以模块化去使用)
说明:1.变量是因为遇到使用SBUF寄存器时要读取和写入;
2.初始化函数是我们使用UART通信的配置(最重要)
3.中断函数是用来产生波特率的,中断序号可以查 (放下面了,0是外部中断0;1是定时器0;2是外部中断1;3是定时器1;4就是我们要用到的串口中断,写多就记住了)
一、
定时器1配置
三、
配置最离不开的最实在的就是查数据手册,上图就是相关信息。不好看的话还可以看看下面这个教程。教程也说了,三大寄存器我们都要务必掌握,好处多多。
说明:1.蓝色就是定时器1,黄色就是定时器0,不用则全部置0;
2.我们使用TR来启动;波特率是每秒的位数嘛,所以定时器要用来定时;八位重装(00100000)(0x20)
四、配置TH1和TL1
也可以查手册,所以数据手册还是很实在的。可以看到9.6K也就是9600波特率对应的重新装入值是FD,然后对应TH1和TL1值是一样的。(12兆选择FD会有误差,但是是允许的)
前面俩步可以看作是配置部分,那我们配置完肯定要告诉定时器要工作了。
五、启动!
串口寄存器配置
一、SCON寄存器(其实就一步,而且前面讲原理的时候已经解释过为什么是0x50了)
打开中断
我们后面有中断函数的,配置必不能少了这部分。视频里面说有一个总中断EA要置1打开;还有一个自己的中断标志位ES要置1,应该就是如数据手册里面说的一样。
新增的AUXR
咱们暂时不研究它,使用IAP型号单片机的同学记得用sfr赋值一下和在程序里面将其置0x00就行了
二、
中断服务函数
说明:1.中断序号前面已经说明了;2.RI是接收到完整数据时的标志位;3.SBUF寄存器用来存数据;4.ur_Date这个自定义的变量用来存放接收到的数据;5.把发送字节函数放在此中断之前
三、
发送字节函数
我们配置好单片机之后,就可以真正意义上利用这些配置开始实现我们的实验了。
四、
结尾
调用我们写好的初始化函数和发送字节函数
实验现象
说明:1.作者一开始因为写错了,找了很久,发现代码没问题后,意外发现下面这个实验现象的解决办法(实验现象表示不会在打开串口后执行我们main里面俩个发送字节函数的指令,但是我们发送数据,发送字节函数依旧可以正常使用)。
办法:下载成功之后,再关开你的下载按钮,就会出现教程里面的实验现象。(我也很奇怪为啥会这样,等哪天搞明白了,会给大家补上)