单片机教程5.定时器和数码管
> 单片机教程5.定时器和数码管     2018-11-14

  通过上节课的试验,大家会发现,我们逐步进入比较实质性的学习了,需要记住的内容也更多了,个别地方可能会感觉费劲。然而大家不要耽心,要有信念。这个跟小孩学走路一样,刚开始走路不太稳,没瓜葛,多走几步多练练。看视频的时候要注意专心,一遍看不懂,思考一下,再回头看第二遍以及第三遍,没准一下就明白了。如果三遍还看不明白,那就把不懂的问题放一放,继续往下学两课再回头看一次,也能够到群里或者者论坛里多咨询一下其他的同学,讨论一下,可能就会茅塞顿开。   1.1 基本数字逻辑门电路

  不论是数字电路,还是C语言,我们都会常常遇到逻辑运算以及逻辑电路,在这里我介绍一下,大家先简单了解一下,晓得有这么回事,回头遇到了,再详细钻研。

  首先,在“逻辑”这个概念范畴内,存在真以及假这两个逻辑值,而将其对应到数字电路或者C语言中,就变成为了“非0值”以及“0值”这两个值,即逻辑上的“假”就是数字电路或者C语言中的“0”这个值,而逻辑“真”就是其它一切“非0值”。

  然后,我们来具体分析一下几个主要的逻辑运算符。我们假设有2个字节变量:A以及B,两者进行某种逻辑运算后的结果为F。

  下列逻辑运算符都是依照变量整体值进行运算的,通常就叫做逻辑运算符:

  &&:逻辑与,F = A && B,当A、B的值都为真(即非0值,下同)时,其运算结果F为真(具体数值为1,下同);当A、B值任意一个为假(即0,下同)时,结果F为假(具体数值为0,下同)。

  ||:逻辑或者,F = A || B,当A、B值任意一个为真时,其运算结果F为真;当A、B值都为假时,结果F为假。

  ! :逻辑非,F = !A,当A值为假时,其运算结果F为真;当A值为真时,结果F为假。

  下列逻辑运算符都是依照变量内的每个位来进行运算的,通常就叫做位运算符:

   & :按位与,F = A & B,将A、B两个字节中的每一一名都进行与运算,再将患上到的每一一名结果组合为总结果F,例如A = 0b11001100,B = 0b11110000,则结果F就等于0b11000000。

  | :按位或者,F = A | B,将A、B两个字节中的每一一名都进行或者运算,再将患上到的每一一名结果组合为总结果F,例如A = 0b11001100,B = 0b11110000,则结果F就等于0b11111100。

  ~ :按位取反,F = ~A,将A字节内的每一一名进行非运算(就是取反),再将患上到的每一一名结果组合为总结果F,例如,A = 0b11001100,则结果F就等于0b00110011;这个运算符我们在前面的流水灯试验里已经经用过了,现在再回头看一眼,是不是清楚多了。

  ^ :按位异或者,异或者的意思是,如果运算双方的值不同(即相异)则结果为真,双方值相同则结果为假。在C语言里没有按变量整体值进行的异或者运算,所以我们仅以按位异或者为例,F = A ^ B,A = 0b11001100,B = 0b11110000,则结果F就等于0b00111100。

  我们今后要看资料或者芯片手册的时候,会常常遇到一些电路符号,表5-1就是数字电路中的常用符号,晓得这些符号有利于我们理解器件的逻辑结构,特别重点认识下列表中的“国外流行图形符号”。在这里我们先简单看一下,后边遇到了晓得到这里查阅就能够了。

单片机教程

表5-1 数字逻辑门电路

  1.2 定时器的学习

  定时器是单片机的重点中的重点,但不是难点,大家一定要完整理解并且熟练掌握定时器的应用。

  1.2.1 定时器的初步认识

  时钟周期:时钟周期T是时序中最小的时间单位具体计算的法子就是1/时钟源,我们KST-51单片机开发板上用的晶振是11.0592M,那末对我们这个单片机系统来讲,时钟周期=1/11059200秒。

  机器周期:我们的单片机完成一个操作的最短时间。机器周期主要针对汇编语言而言,在汇编语言下程序的每一一条语句履行所使用的时间都是机器周期的整数倍,而且语句占用的时间是可以计算出来的,而C语言一条语句的时间是不可计算的。51单片机系列,在其标准架构下一个机器周期是12个时钟周期,也就是12/11059200秒。现在有很多增强型的51单片机,其速度都比较块,有的1个机器周期等于4个时钟周期,有的1个机器周期就等于1个时钟周期,也就是说大体上其速度可以达到标准51架构的3倍或者12倍。由于我们是讲标准的51单片机,所以我们后边的课程如果遇到这个概念,全体是指12个时钟周期。

  这两个概念了解便可,下边就来我们的重头戏,定时器以及计数器。定时器以及计数器是单片机内部的同一个模块,通过配置SFR(特殊功能寄存器)可以实现两种不同的功能,我们大多数情况下是使用定时器功能,因而我们的课程也是主要来说定时器功能,计数器功能大家自己了解下便可。

  顾名思义,定时器就是用来进行定时的。定时器内部有一个寄存器,我们让它开始计数后,这个寄存器的值每一经由一个机器周期就会加1一次,因而,我们可以把机器周期理解为定时器的计数周期。我们的秒表,每一经由一秒,数字加1,而这个定时器就是每一过一个机器周期的时间,也就是12/11059200秒,数字加1。还有一个特别注意之处,就是秒表是加到60后,秒就自动变成0了,这种情况在单片机以及计算机里我们称之为溢出。那定时器加到多少才会溢出呢?定时器有几种模式,假设是16位的定时器,也就是2个字节,最大值就是65535,那末加到65535后,再加1就算溢出,如果有其他位数的话,道理是一样的,对51单片机来讲,溢出后,这个值会直接变成0。从某一个初值,经由计算肯定的时间后溢出,这个进程就是其定时的含意。

  1.2.2 定时器的寄存器描写

  标准的51里边只有定时器0以及定时器1这两个定时器,现在良多单片机也有多个定时器的,在这里我们先讲定时器0以及1。那末我前边提到过,对单片机的每个功能模块,都是由他的SFR,也就是特殊功能寄存器来节制。而以及定时器有关的特殊功能寄存器,有下列几个,大家不需要去记忆这些寄存器的名字以及作用,你只要大概晓得就行,用的时候,随时可以查手册,找到每一个寄存器的名字以及每一个寄存器所起到的作用。

  表5-2 定时值存储寄存器

名称

描写

SFR地址

TH0

定时器0高字节

8CH

TL0

定时器0低字节

8AH

TH1

定时器1高字节

8DH

TL1

定时器1低字节

8BH

 

  表5-3 TCON--定时器/计数器节制寄存器的位分配(地址:88H)

   可位寻址;复位值:0x00;复位源:任何复位

7

6

5

4

3

2

1

0

符号

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

 

  表5-4 TCON--定时器/计数器节制寄存器的位描写

符号

描写

7

TF1

定时器1溢出标志。一旦定时器1产生溢出时硬件置1。清零有两种方式:软件清零,或者者进入定时器中止时硬件清零。

6

TR1

定时1运行节制位。软件置位/清零来进行启动/关闭定时器。

5

TF0

定时器0溢出标志。一旦定时器0产生溢出时硬件置1。清零有两种方式:软件清零,或者者进入定时器中止时硬件清零。

4

TR0

定时0运行节制位。软件置位/清零来进行启动/关闭定时器。

3

IE1

 

外部中止部份,与定时器无关,暂且不看

2

IT1

1

IE0

0

IT0

  大家注意在表5-4中的描写中,只要写到硬件置1或者者清0的,就是指一旦符合前提,单片机自动完成的动作,只要写软件置1或者者清0的,是指我们用程序去完成这个动作,后边课程中再也不做说明。

  表5-2中的寄存器,是存储计数器的计数值的,两个字节的用于定时器1,两个字节用于定时器0。

  表5-3中有TF1、TR1、TF0、TR0这4位需要我们理解清楚。两位定时器1的,两位定时器0的,我们只解释定时器1的,定时器0的同理。先看TR1,当我们程序中写TR1 = 1以后,定时器值就会每一经由一个机器周期加1,当我们程序中写TR1 = 0以后,定时器值就会保持不变化。TF1,这个是一个标志位,他的作用是告知我们定时器溢出了。比如我们的定时器设置成16位的定时器,那末每一经由一个机器周期,TL1加1一次,当TL1加到255后,再加1,TL1变成0,TH1会加1一次,如此一直加到TH1以及TL1都是255(即TH1以及TL1组成的16位整型数为65535)以后,再加1一次,那末就会溢出,TH1以及TL1同时都变成0,只要一溢出,TF1马上自动变成1,告知我们定时器溢出了,仅仅是提供给我们一个信号,让我们晓得定时器溢出了,它不会对定时器是不是继续运行产生任何影响。

  表5-5 TMOD--定时器方式节制寄存器的位分配(地址 89H)

   不可位寻址;复位值:0x00;复位源:任何复位

7

6

5

4

3

2

1

0

符号

GATE

(T1)

C/T

(T1)

M1

(T1)

M0

(T1)

GATE

(T0)

C/T

(T0)

M1

(T0)

M0

(T0)

  细心的同学会发现,TCON那个地方标注的是“可位寻址”,TMOD这里标注的是“不可位寻址”。这个地方的意思就是比如TCON有一名TR1,我们可以在程序中直接进行TR1 = 1;这样操作。然而(T1)M1 = 1;这样的操作就是过错的。我们要操作就必须一次操作一个字节,就是必须一次性对TMOD所有位操作,不能对其中某一名单独进行操作。

  表5-6 TMOD--定时器/计数器方式节制寄存器的位描写

符号

描写

T1/T0

在表5-5中,标T1的表示节制定时器1的位,标T0的表示节制定时器0的位。

GATE

该位被置1时为门控位。仅当’INTx’脚为高并且’TRx’节制位被置1时使能定时器’x’,定时器开始计时,当该位被清0时,只要’TRx’位被置1,定时器x就使能开始计时,不遭到单片机引脚’INTx’外部信号的干扰,常用来丈量外部信号脉冲宽度。这是定时器一个额外功能,本节课暂不介绍。

C/T

定时器或者计数器选择位。该位被清零时用作定时器功能(内部系统时钟),被置1用作计数器功能。
 

 

  表5-7 TMOD--定时器方式节制寄存器M1/M0工作模式

M1

M0

工作模式

描写

0

0

0

兼容8048单片机的13位定时器,THn的8位以及TLn的5位组成一个13位定时器

0

1

1

THn以及TLn组成一个16位的定时器

1

0

2

8位自动重装模式,定时器溢出后THn重装到TLn中

1

1

3

禁用定时器1,定时器0变成2个8位定时器

  以上这4种模式的配置,其中模式0是为了兼容老的8048单片机而设的,现在的51几近不会用到这种模式,而模式3依据我的应用经验,他的功能模式2完整可以取代,所以基本上也是不用,那末我们重点就学习模式1以及模式2。

  模式1就是THn以及TLn组成为了一个16位的定时器,取值规模是0到65535,溢出后,只要不对THn以及TLn重新赋值,则从0开始计数。模式2的功能是自动装载,就是TLn溢出后,TFn就直接置1了,并且THn的值直接赋给TLn,然后TLn重新赋值的这个数字开始计数。这个功能可以用来产生串口的通讯波特率,我们讲串口的时候要用到,本章节我们重点来学习模式1。为了加深大家理解这个定时器原理,我们来看一下他的模式1的电路示意图5-1。

单片机教程

 

© Copyright 吾爱微电子 | 琥珀川