在进行DS18B20的实验之前的对UART的学习(串口通信)

本文详细介绍了UART通信的概念、波特率设置、串口通信模式(单工、半双工、全双工)、异步通信特点以及如何配置定时器和SBUF寄存器。特别关注了IAP单片机的特定问题和实验现象。
摘要由CSDN通过智能技术生成

一、概念和原理 

说明: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里面俩个发送字节函数的指令,但是我们发送数据,发送字节函数依旧可以正常使用)。

 办法:下载成功之后,再关开你的下载按钮,就会出现教程里面的实验现象。(我也很奇怪为啥会这样,等哪天搞明白了,会给大家补上)

  • 28
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DS18B20是单总线数字传感器,共有6种信号类型:复位脉冲、应答脉冲、写0、写1、读0和读1。所有这些信号,除了应答脉冲以外,都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在前。 这几个信号的时序如下: 1)复位脉冲和应答脉冲 单总线上的所有通信都是以初始化序列开始。主机输出低电平,保持低电平时间至少480us,以产生复位脉冲。接着主机释放总线,4.7K的上拉电阻将单总线拉高,延时15~60us,并进入接收模式(Rx)。接着DS18B20拉低总线60~240us,以产生低电平应答脉冲,若为低电平,再延时480us。 2)写时序 写时序包括写0时序和写1时序。所有写时序至少需要60us,且在2次独立的写时序之间至少需要1us的恢复时间,两种写时序均起始于主机拉低总线。写1时序:主机输出低电平,延时2us,然后释放总线,延时60us。写0时序:主机输出低电平,延时60us,然后释放总线,延时2us。 3)读时序 单总线器件仅在主机发出读时序时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要60us,且在2次独立的读时序之间至少需要1us的恢复时间。每个读时序都由主机发起,至少拉低总线1us。主机在读时序期间必须释放总线,并且在时序起始后的15us之内采样总线状态。典型的读时序过程为:主机输出低电平延时2us,然后主机转入输入模式延时12us,然后读取单总线当前的电平,然后延时50us。 DS18B20的温度读取过程一般为:复位->发SKIPROM命令(0XCC)->发开始转换命令(0X44)->延时->复位->发送SKIPROM命令(0XCC)->发读存储器命令(0XBE)->连续读出两个字节数据(即温度)->结束。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值