250 likes | 342 Views
单 片 机 应 用 技术. 项目三 秒表的设计. 任务 2 基于 T0 查询法可控秒表的设计. 教学目标:. 1 、了解 51 单片机定时 / 计数器的结构组成、各特殊功能寄存器的用途 2 、 掌握 51 单片机定时 / 计数器的查询使用的设计方法。 2 、进一步熟悉并掌握独立按键、数码管的使用与编程方法。. 任务 2 教学提纲. 工作任务 任务解析 操作演示 课堂实训. 工作任务. 1 、基于两位一体数码管 0~99 计数器的设计法
E N D
单 片 机 应 用 技术 项目三 秒表的设计
任务2 基于T0查询法可控秒表的设计 教学目标: 1、了解51单片机定时/计数器的结构组成、各特殊功能寄存器的用途 2、掌握51单片机定时/计数器的查询使用的设计方法。 2、进一步熟悉并掌握独立按键、数码管的使用与编程方法。
任务 2 教学提纲 • 工作任务 • 任务解析 • 操作演示 • 课堂实训
工作任务 1、基于两位一体数码管0~99计数器的设计法 ★2、利用T0的查询法设计一个可控的秒表,可实现秒表的开始、暂停与复位。用数码管显示,仿真其功能,并在实验板上完成系统的制作。
任务解析 • 在本任务中,要完成按键功能模块、显示功能模块、计时功能模块的设计。要确定这几个功能模块的设计,首先应了解有哪些可行的设计方案。 • 按键的设计方案:独立按键; • 显示的设计方案:数码管的静态显示法、数码管的动态显示法。 • 计时模块:软件延时法、采用时基电路定时、采用可编程芯片定时、定时/计数器计时法
1.定时/计数器的结构:C51单片机内部有两个16位的可编程定时/计数器,称为T0和T11.定时/计数器的结构:C51单片机内部有两个16位的可编程定时/计数器,称为T0和T1 8051定时器/计数器逻辑结构
定时/计数器的结构: 定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。 2.定时/计数器的工作原理 加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。 可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t。设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t。 • 设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 s。
3.定时/计数器的控制 80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。 (1)工作方式寄存器TMOD 工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于设置T0,高四位用于设置T1。其格式如下:
GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。 :定时/计数模式选择位。 =0为定时模式; =1为计数模式。 M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。
(2)控制寄存器TCON TCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下: • TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。 • TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。 • TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。 • TR0(TCON.4):T0运行控制位,其功能与TR1类同。
4.定时/计数器的工作方式 (1)方式0、方式1 方式0为13位计数,方式1为16位计数 定时器的方式0、1示意图
(2)方式2 定时器的方式2示意图
(3)方式3 方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。 工作方式3将T0分成为两个独立的8位计数器TL0和TH0。 5.定时/计数器的使用步骤 ①设置定时/计数器工作方式 ②设置计数初值 ③启动定时/计数器 ④设计数溢出标志
设置计数初值 • T0、T1是16位加法计数器,分别由两个8位专用寄存器组成,T0由TH0和TL0组成,T1由TH1和TL1组成。TL0、TL1、TH0、TH1的访问地址依次为8AH8DH,每个寄存器均可被单独访问,因此可以被设置为8位、13位或16位计数器使用。 • 在计数器允许的计数范围内,计数器可以从任何值开始计数,对于加1计数器,当计到最大值时(对于8位计数器,当计数值从255再加1时,计数值变为0),产生溢出。 • 定时/计数器允许用户编程设定开始计数的数值,称为赋初值。初值不同,则计数器产生溢出时,计数个数也不同。例如:对于8位计数器,当初值设为100时,再加1计数156个,计数器就产生溢出;当初值设为200时,再加1计数56个,计数器产生溢出。
定时器的初始值的计算 对于不同的工作方式,计数器位数不同,故最大计数值M也不同: 方式0:M=213=8192 方式1:M=216=65536 方式2:M=28=256 方式3:定时器0分为2个8位计数器,每个M均为256。 因为定时/计数器是作加1计数,并在计满溢出时产生中断,因此初值X的计算如下: X = M – 计数值 计算出来的结果X转换为16进制数后分别写入TL0(TL1)、TH0(TH1)。 注意!方式0时初始值写入时,对于TL不用的高3位应填入0!
举 例1 用T1、工作方式0实现1秒延时函数,晶振频率为12MHz。 方式0采用13位计数器,其最大定时时间为:8192×1s = 8.192ms,因此,定时时间不可能象任务7中一样选择50ms,可选择定时时间为5ms,再循环200次。 定时时间为5ms,则计数值为5ms/1s =5000,T1的初值为: X = M 计数值= 8192 5000 = 3192 = C78H = 0110001111000B 13位计数器中TL1的高3位未用,填写0,TH1占高8位,所以,X的实际填写值应为: X = 0110001100011000B = 6318H
举 例1 用T0方式0实现任务7中1秒延时函数如下: void delay1s() { unsigned char i; TMOD=0x00; // 置T1为工作方式0 for(i=0;i<0xc8;i++){ // 设置200次循环次数 TH0=0x63; // 设置定时器初值 TL0=0x18; TR0=1; // 启动T1 while(!TF0); // 查询计数是否溢出,即定时5ms时间到,TF0=1 TF0=0; // 5ms定时时间到,将定时器溢出标志位TF1清零 } }
举 例2 用T1、工作方式2实现1秒延时,晶振频率为12MHz。 因工作方式2是8位计数器,其最大定时时间为:256×1s = 256s,为实现1秒延时,可选择定时时间为250s,再循环4000次。定时时间选定后,可确定计数值为250,则T1的初值为:X = M 计数值=256 250 = 6 = 6H。采用T1方式2工作,因此,TMOD =0x20。
举 例2 用定时器工作方式2实现的1秒延时函数如下: void delay1s() { unsigned int i; // i取值范围为0~4000,因此不能定义成unsigned char TMOD=0x20; // 设置T1为方式2 TH1=6; // 设置定时器初值,放在for循环之外 TL1=6; for(i=0;i<4000;i++) // 设置4000次循环次数 { TR1=1; // 启动T1 while(!TF1); // 查询计数是否溢出,即定时250s时间到,TF1=1 TF1=0; // 250s定时时间到,将定时器溢出标志位TF1清零 } }
操作演示 1)根据确定的设计方案设计系统硬件电路 按键设计:独立的按键设计 显示模块:两个独立的数码管 计时模块:定时/计数的查询法计时 (2)根据硬件电路,编写软件系统。 (3)系统仿真、调试 (4)系统移植到实验板上进行调试。
课堂实训 活动一 :完成系统控制要求,在仿真软件上实现; 活动二:在单路板上都能实现控制要求
小结 • 单片机 定时器/计数器用于较精确的时间定时的使用 • 数码管的动态显示方法
课后任务 • (1)复习本次课内容 • (2)设计基于两位一体数码管的可控秒表的设计,其余设计方案同上。