计算机接口技术定时器教案1127Word下载.docx
《计算机接口技术定时器教案1127Word下载.docx》由会员分享,可在线阅读,更多相关《计算机接口技术定时器教案1127Word下载.docx(26页珍藏版)》请在冰豆网上搜索。
化学工业出版社,2017.
2.郭天祥.新概念51单片机C语言教程.北京:
电子工业出版社,2010.
课后分析
授课教师:
郝文延职称:
副教授
长治医学院生物医学工程系信息技术教研室2018年11月20日
第5章中断系统5.4第6章6.1,6.2.1
1.掌握中断服务程序的中断号,中断程序的初始化步骤;
2.掌握定时/计数的三种方法;
3.理解定时/计数器的原理;
4.了解扩展外部中断的方法,定时/计数器的结构。
1.中断初始化步骤,中断号,中断函数与处理;
2.微控制器中断系统中断程序设计举例,proteus仿真实现;
3.利用I/O端口扩展外部中断源;
4.定时/计数器概述,定时/计数器的原理,定时/计数功能,三种定时方法;
5.定时/计数器组成结构,定时/计数方式。
25分钟
40分钟
中断初始化步骤,中断号,中断函数与处理,定时/计数功能,三种定时方法
8051微控制器的中断程序设计。
演示式教学结合课堂讲授,培养学生钻研问题的能力,提高学生的独立性。
课后题1-5题
教学内容
基本内容
备注及时间分配
第6章定时器/计数器
一、复习回顾
中断:
微控制器执行程序过程中,由于内部或者外部的某种原因,要求MCU中止正在运行的程序,转去执行另外一段处理程序,待处理结束后,再回来继续执行被中止了的原程序。
这种程序在执行过程中,由于外界的原因而被中间打断的情况称为“中断”。
中断是硬件改变CPU程序运行方向的一种技术,既和硬件有关,也和软件有关。
先进的中断系统能提高MCU实时处理外界异步事件的能力。
主程序(调用程序):
原来运行的程序;
中断服务程序:
中断之后执行的处理程序;
断点:
主程序被中断的位置(地址);
中断源:
引起中断的原因或能发出中断申请的来源;
中断请求:
中断源要求服务的请求。
中断程序与子程序:
调用中断服务程序的过程类似于程序设计中调用子程序的过程。
不同:
子程序的调用是程序预先设计安排好的;
而中断源发出中断请求是随机的,所以中断服务程序的调用是无法预知的,中断服务程序的调用过程是计算机系统硬件自动完成的。
中断源中断优先级
⒈外部中断0最高
⒉定时器T0中断
⒊外部中断1
⒋定时器T1中断
⒌串行口中断最低
定时器/计数器是微控制器内部最基本的功能模块之一,运用该模块可以方便地实现微机系统测量与控制过程所需要的定时、计数等功能,是微机测控系统的重要组成部分。
本章分为11个教学单元,主要包括定时器/计数器概述,8051MCU定时器/计数器的组成结构与控制方法,定时器/计数器的工作方式,初始化,短、中、长定时的实现,以及定时器/计数器的定时、计数、脉冲宽度测量、外部中断扩展以及实时时钟设计等应用。
6.1.定时器计数器概述
(一)定时器/计数器的原理
定时器/计数器的核心是计数器(Counter)。
计数器是能够对输入脉冲信号的跳变沿进行检测并能进行加法或减法计数的电路模块。
加法计数器
功能:
对输入脉冲进行加法计数,在每个脉冲的上升沿或下降沿计数器加1。
当计数器累加到全1时,再输入1个脉冲,计数器内容变为全0并产生溢出。
通常微控制器中的定时器/计数器模块,大多是采用加法计数器。
2.减法计数器
对输入脉冲进行减法计数,在脉冲的上升沿或下降沿计数器减1。
当计数器减到全0时,再输入1个脉冲,计数器内容变为全1并产生溢出。
独立的定时器/计数器芯片,大多采用减法计数方式,如Z80CTC、8253、8254等。
(二)定时器/计数器的功能
1.定时功能
软件定时:
通过执行一段程序(如延时程序)实现定时。
其特点是无需额外的硬件,但需要消耗CPU的时间资源。
硬件数字电路:
用555构成的定时器和计数器等。
硬件可编程定时/计数器:
用定时器/计数器进行定时。
定时是对内部、周期固定、已知的脉冲计数,从而累计一定时长。
计数脉冲来自单片机芯片内部每个机器周期有一个计数脉冲,即每个机器周期计数器加1。
其特点是无需消耗CPU的时间资源。
2.计数功能
计数是对外部产生的周期不固定的未知脉冲统计个数。
外部事件以脉冲形式输入,作为计数器输入计数脉冲。
芯片上有?
和?
两个引脚,用于为这两个计数器输入计数脉冲。
计数脉冲是负跳变有效,供计数器进行加法计数。
利用定时器/计数器对外部脉冲计数和统计。
如记录一定时间内的外部脉冲的个数,实现该脉冲频率的测量;
又如统计生产流水线上工件的数量等。
6.2定时器计数器的结构与控制
主要介绍8051微控制器中定时器/计数器的组成结构、控制方法,以及定时模式和计数模式的工作原理。
(一)定时器/计数器的结构
1.组成结构:
2个16位的加1定时/计数器T0和T1,6个特殊功能寄存器、内部总线、2个引脚。
2个级联的8位加法计数器组成的T0,对应2个8位寄存器TH0、TL0;
2个级联的8位加法计数器组成的T1,对应2个8位寄存器TH1、TL1;
方式寄存器TMOD和控制寄存器TCON:
对T0、T1进行设置和控制等。
2.定时方式
T0、T1的内部工作原理体电路如图。
当C/T=0时,选择定时模式。
此时Ti(i=0或1)的输入脉冲是内部振荡频率的12分频(即机器周期),即每个机器周期计数器加1。
定时模式时,首先设置T0、T1寄存器的计数初值,再启动定时器工作(使K1闭合),当计数器不断加1到溢出时,定时器中断标志TFi(i=0或1)置位,表示定时器溢出(定时时间到)。
3.计数方式
当C/T=1时,选择计数模式。
计数器累计连接到T0、T1引脚上的外部脉冲,每输入一个脉冲计数器加1。
对于计数模式,通常设置T0、T1寄存器的计数初值为0,再启动定时器工作(使K1闭合),计数器累计外部脉冲,可以实现外部脉冲频率的测量。
对外部脉冲的要求(能够测量任何频率的脉冲吗?
)
外部脉冲的采样过程:
计数模式时,计数器每个机器周期采样一次T0(或T1)引脚状态,当检测到一个下降沿时计数器加1。
(下降沿:
前一个机器周期的采样值为高电平,当前机器周期采样值为低电平。
能够测量的最高频率?
脉冲的采样需要高电平和低电平宽度均应大于一个机器周期TM,因此计数器能够记录的外部脉冲的最高频率是1/(2TM)=系统晶振频率的1/24,例如,若单片机晶振频率为12MHZ,则外部计数脉冲的最高频率只能为?
HZ。
并要求外部脉冲的电平应与微控制器的电平相匹配。
新课
6.2.2定时器/计数器的控制
1.方式寄存器TMOD:
字节地址为89H,不可位寻址。
M1、M0:
工作方式(0~3)选择位。
将结合工作方式予以介绍。
C/T:
功能选择位。
当C/T=?
时,选择定时模式;
当C/T=?
时,选择计数模式。
GATE:
门控位。
与INTi信号相结合,可以实现外部脉冲高电平宽度的测量。
将在“脉冲宽度测量”中进行介绍。
2.控制寄存器TCON:
字节地址为88H,可位寻址。
TF0、TF1:
T0、T1溢出标志位也称为中断标志位。
T0、T1溢出时,相应位置“1”。
在中断方式时,MCU响应中断后由硬件自动清“0”。
在查询方式时,需要由程序清“0”。
TR0、TR1:
T0、T1的运行(启停)控制位。
GATE=0时:
TR0/TR1=1,启动T0/T1计数;
TR0/TR1=1,停止T0/T1计数。
GATE=1时,由TR1和INT1引脚的电平同时控制T1的启停。
系统复位时,寄存器TMOD和TCON的内容为0。
6.3定时器计数器的工作方式
主要介绍定时器/计数器4种工作方式中的工作方式1和工作方式2。
工作方式的选择:
有4种工作方式,用TMOD的M1、M0进行选择。
M1M0
工作方式
功能
00
方式0
13位计数器
01
方式1
16位计数器
10
方式2
计数初值自动重装载8位计数器
11
方式3
定时器0分成两个8位计数器,定时器1停止计数。
对于普通的定时和计数方式,要令GATE=0;
用于测量外部脉冲高电平宽度时,要令GATE=1。
由于方式0和方式3很少应用,因此主要介绍方式1和方式2。
当相应的M1M0设置为01时,Ti设定为工作方式1。
THi和TLi构成16位的加1计数器,因此称为16位计数方式,其最大计数值为216=65536。
1.方式1
令GATE=0,或门输出A=1,与门输出B=TRi,则定时器的启停受控于TRi。
TRi=1,K1闭合,开始定时或计数;
TRi=0,K1断开,结束定时或计数。
定时器方式1-flash
当16位计数器从设置初值不断加1到溢出(变为全0)时,表示定时时间到或计数脉冲达到设定个数,溢出标志位TFi变为“1”。
如果Ti中断允许,则会向CPU发出中断请求。
为使Ti重新从设置初值开始计数,在Ti的中断服务程序或溢出后的处理程序中,必须首先要给THi、TLi重装载初值。
由于中断响应需要一定时间并存在中断响应时间的随机性,因此定时时间有一定误差(误差大小与系统程序的设计、中断的优先级别等有关)。
当M1M0设置为10时,Ti设定为工作方式2。
该方式把TLi配置成一个独立工作的8位加1计数器,THi为重装载初值寄存器,因此称为8位初值重装载方式。
其最大计数值为28=256。
当TLi产生溢出时,一方面使溢出标志TFi置1,同时把THi中的8位数据重新装入TLi中,方式2不存在定时误差,对于连续计数比较有利。
2.方式2
定时器方式2-flash
6.4.定时器计数器的初始化
主要介绍定时器/计数器初始化的内容和步骤;
定时初值的确定方法。
1.初始化步骤
1)确定工作方式,即给方式寄存器TMOD赋值。
2)预置定时初值或计数初值,将初值写入TH0、TL0或TH1、TL1中。
3)中断设置(给IE赋值),允许或禁止定时器/计数器的中断。
4)启动定时器/计数器,令TCON中的TR0或TR1为“1”。
2.定时/计数初值的确定
对于加1计数器,设置的计数初值应是需要定时(计数)值相对于定时器/计数器最大计数值M的补码。
最大计数值M取决于计数器的位数L,M=2L。
方式1时L=16,最大计数值M=216=65536;
方式2时L=8,最大计数值M=28=256。
设晶振频率为12MHz,则机器周期为1us。
(1)对于方式1:
M=65536
若定时初值X=0,则定时时间为65536μs。
若需要定时t为20ms=20000us,则定时计数初值X应为:
最长定时时间-需要定时时间=65536-20000=45536。
加1计数器在该初值基础上,计数20000个机器周期脉冲,就发生溢出,表示20ms定时时间到。
(2)对于方式2:
M=256
若定时初值X=0,则定时时间为256μs。
若需要定时t为200μs,则定时初值X应为:
最长定时时间-需要定时时间=256-200=56。
加1计数器在该初值基础上,计数200个机器周期脉冲,就发生溢出,表示200μs定时时间到。
设定时初值为X,则定时时间t=(M-X)×
1μs;
对于晶振频率为f的MCU系统,定时时间t为:
如果要求定时的时间为t,则根据上式可以得到定时初值X:
例6-1:
某8051微控制器采用的晶振频率为6MHz,请用T1产生1ms的定时,试计算定时初值。
解:
因为f=6MHz,则机器周期为2μs。
计数器需要累计的脉冲个数为1000μs/2μs=500;
由于方式2的最大计数值是256,因此无法实现。
采用方式1,定时初值X=65536-500=65036=FE0CH,即向TH1、TL1设置FEH、0CH。
例6-2:
设某8051微控制器系统的晶振频率为12MHz,若要T1定时50ms,试确定定时初值。
已知f=12MHz,则机器周期为1us。
计数器需要累计的脉冲个数为50000个;
选用工作方式1,定时初值X=65536-50000=15536=3CB0H,即向TH1、TL1设置3CH、B0H。
例6-3:
设晶振频率为12MHz,若要T1产生250µ
s的定时信号,试选择工作方式、确定定时初值。
计数脉冲即机器周期是1μs;
则计数器需要累计的脉冲个数为250个。
选择工作方式2,定时初值X=256-250=6,即向TL1、TH1设置初值为6。
对于计数方式,通常将计数初值设置为0,则经过一定时间(如1s)后,TH0、TL0或TH1、TL1的内容即为这段时间内记录的脉冲数。
6.5定时的实现方法
主要介绍定时的软硬件实现方法;
短、中、长不同定时长度的具体实现。
(1)软件定时
软件定时可以实现8051MCU的最短定时时间,以及长时间的定时。
对于只有几个机器周期的定时,通常采用若干个NOP指令来实现;
对于较长的定时,可以采用延时子程序实现。
(2)定时器定时
定时器方式2(8位)能够自动重装载定时初值,适合用于产生256个机器周期内的定时;
定时器方式1(16位)适合用于定时时间大于256小于65536个机器周期的定时。
更长时间的定时,将定时器的硬件定时和软件计数结合起来。
产生不同定时时间的方法
定时时间(μs)
方法
几个μs-较长定时
软件编写
256(max)
8位定时方式
65536(max)
16位定时方式
较长定时
16位定时方式及软件计数
上表中假设系统晶振为12MHz,则机器周期为1μs
软件延时需要CPU运行程序,因此要占用CPU的时间资源;
定时器不需要占用CPU时间,只有在定时器/计数器溢出时,才向CPU请求中断。
定时准确、灵活性强,能有效提高微控制器的性能。
6.6定时方式的应用
主要介绍定时器/计数器定时模式的应用,以及查询方式和中断方式的程序(汇编、C51)设计方法。
例6-6:
设8051微控制器采用的晶振频率为12MHz,利用定时器T1定时,使P1.0输出周期为2ms的方波。
分析:
要产生周期为2ms的方波需要每1ms改变一次P1.0的电平,故定时时间为1ms,应采用工作方式1。
TMOD的方式控制字应为10H;
计数脉冲周期为1μs,所以定时初值为X=?
=64536=FC18H
汇编程序(查询方式):
MOVTMOD,#10H;
设置T1为方式1
SETBTR1;
启动T1定时
LOOP:
MOVTH1,#0FCH
MOVTL1#18H;
装入定时初值
JNBTF1,$;
等待溢出,若TF1=0,则继续查询等待
CPLP1.0;
P1.0状态翻转,输出方波
CLRTF1;
查询方式,TF1需要软件清0
SJMPLOOP;
重复循环
C51程序(查询方式):
TMOD=0x10;
//T1按方式1工作
TR1=1;
//启动T1
while
(1)//循环不停
{
TH1=0xFC;
TL1=0x18;
//给计数器赋初值
while(TF1==0);
//查询到TF1==1为止
TF1=0;
P10=~P10;
//P1.0反相,输出方波
}
C51程序(中断方式):
sbitP10=P1^0;
voidmain()
{
TMOD=?
;
//T1设置为方式1
TH1=?
TL1=?
EA=?
//CPU中断允许
ET1=?
//T1中断允许
TR1=?
//启动T1
while
(1);
//模拟主程序
}
总结:
采用查询方式的程序简单,但需要CPU不断查询溢出标志,没有提高CPU的效率;
中断方式的程序编写相对复杂,但是CPU对定时器/计数器初始化后,就由硬件进行定时,CPU只在定时时间到时,响应中断执行中断服务程序即可;
在实际应用程序中,通常采用中断方式设计定时程序。
6.7计数方式的应用
主要介绍定时器/计数器计数模式的应用,以及程序(汇编、C51)设计。
例6-7:
设计一个微机系统,用于记录生产流水线上每天生产的工件箱数。
每箱装100个工件,因此每次计数到100个工件时,该系统要向包装机发出打包命令(输出一个高脉冲信号),使包装机执行打包动作,并推出装满工件的箱子引入空箱子。
首先通过电路设计将经过流水线上的工件转换为脉冲信号,一个工件输出一个脉冲,用定时器/计数器记录工件脉冲的个数。
由于每100个工件为一箱,所以选择工作方式2,设置初值为156(9CH),则累计100个工件脉冲后,溢出请求中断;
在中断程序中发出打包信号,并完成箱数的累计等。
外围电路设计:
选用LED光源和光敏电阻RL作为流水线上工件的检测模块。
当有工件通过时,LED发出的光线受阻挡无法到达光敏电阻RL,其阻值很大而使三极管T导通输出高电平;
当没有工件时,光敏电阻接收到LED光使RL变小,此时T截止而输出低电平。
因此,每通过一个工件,T0端就会接收到一个正脉冲信号,由T0进行计数。
程序设计:
计数模式,工作方式2,TMOD方式控制字为06H。
用P1.0输出打包机需要的包装命令(高脉冲);
用Total作为每天生产工件箱数的计数器。
intTotal;
P10=0;
//P1.0低电平
Total=0;
//箱数清0
TMOD=6;
//设置T0工作方式
TH0=0x9C;
//设置重装载初值
TL0=0x9C;
//设置计数初值
EA=1;
ET0=1;
TR0=1;
while
(1);
}
6.8脉冲宽度的测量
主要介绍利用8051MCU的定时器/计数器,实现外部脉冲高电平宽度的测量方法,以及程序实现。
在实际应用中,通常需要测量脉冲的频率、周期或高、低电平的宽度。
利用经典8051MCU中的定时器/计数器结合外部中断引脚,可以实现脉冲高电平宽度的测量。
(脉冲频率和周期的测量方法,将在第10章介绍)。
脉冲高电平的测量,需要用到方式寄存器TMOD中的GATE信号,并要将被测脉冲信号连接到INT0或INT1引脚。
测量方法总结:
设置为定时模式(C/T=0),工作方式1,定时初值为0000H;
外部脉冲连接至INTi引脚;
设置GATE=1,在INTi为低电平时,令TRi=1;
这时,定时器/计数器的启停受INTi引脚电平控制;
高电平开始计数,低电平停止计数;
停止计数时,读取Ti16位寄存器的内容,即为INTi引脚高电平期间累计的机器周期数,即高电平的宽度。
例6-8:
利用T1,测量INT1引脚上的高脉冲宽度。
设晶振为12MHz,高脉冲宽度小于65ms。
选择T1定时模式,工作方式1,定时初值设置为0。
首先在INT1低电平期间设置TR1=1(为INT1控制T1的启停做准备),当INT1引脚从0变1时,就启动了T1工作(计数器从0开始累计),当INT1引脚变低时停止计数。
此时T1寄存器中的计数值即为正脉冲的宽度(机器周期数)。
所能测量到的最大脉冲宽度为65535μs。
C51程序:
sbitP33=P3^3;
intA1,B1;
TMOD=0x90;
//设置方式控制字
TR1=0;
TL1=0;
//设置初值
TH1=0;
while(P33==1);
//等待INT1变低电平
//为计数器受INT1控制做准备
while(P33==0);
//等INT1变高电平,开始脉冲宽度测量
//等INT1变回低电平,结束脉冲宽度测量
A1=TL1;
B1=TH1;
6.9扩展外部中断
主要介绍利用定时器/计数器扩展外部中断的方法,以及程序设计。
外部中断外展方法:
把T0、T1设置为计数方式,选用工作方式2,设置初值为FFH,允许中断。
外部中断源连接到T0、T1引脚,则在其引脚上发生负跳变时(产生一个下降沿),定时器/计数器加1,就会产生溢出而向CPU请求中断。
利用这个特性可以把T0(P3.4)和T1(P3.5)两个引脚扩展为外部中断请求引脚,中断的触发条件是下降沿触发,中断标志为T0、T1的溢出标志TF0和TF1。
其作用和功能与外部中断INT0、INT1完全相同。
这样就把经典8051MCU的外部中断源扩展到了4个。
#include<
reg51.h>
//T0计数模式,工作方式2
TL0=0xFF;
//设置初值
TH0=0xFF;
//设置重装载初值
//CPU中断开放
//T0中断开放
//启动T0
while
(1);
//模拟主程序
voidt0sub()interrupt1using0//中断服务程序
…
58
6.3定时器/计数器的应用
幻灯片59
59