单片机应用技术(第三版)课件 任务5 数字秒表设计_第1页
单片机应用技术(第三版)课件 任务5 数字秒表设计_第2页
单片机应用技术(第三版)课件 任务5 数字秒表设计_第3页
单片机应用技术(第三版)课件 任务5 数字秒表设计_第4页
单片机应用技术(第三版)课件 任务5 数字秒表设计_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务5数字秒表设计教学规划

知识重点:

知识难点:

教学方式:(1)中断控制用寄存器;(2)中断服务函数的编写;(3)定时器工作方式及控制寄存器的使用中断服务函数,定时器工作方式以任务入手,通过完成秒表的设计掌握单片机定时器和中断的使用。5.1中断系统案例6中断计数应用案例5.2定时器/计数器案例7啤酒生产线自动装箱控制案例8数字秒表设计目录5.1中断系统5.1.1中断的概念与作用

中断是指计算机在执行某段程序的过程中,由于计算机系统内、外部的某种原因,暂时中止原程序的执行,转去执行相应的处理程序,在中断服务程序执行完后,再回来继续执行被中断的原程序的过程。1.中断的概念2.中断的作用1)CPU与外设并行工作。

2)实时处理。3)故障处理。

4)实现人机交互5.1.2中断系统结构与控制寄存器1.中断源和中断标志☆中断系统的组成:由中断源、中断控制电路和中断入口地址电路组成。☆中断涉及到四个寄存器:TCON

——定时/计数器控制寄存器SCON

——串行口控制寄存器IE——中断允许寄存器IP——中断优先级寄存器☆五个中断源图5-1中断系统结构2.中断控制相关的4个寄存器1)定时/计数器控制寄存器TCON

位地址8FH8EH8DH8CH8BH8AH89H88HD7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0①

IT0—外部中断0触发方式控制位

IT1—外部中断1触发方式控制位②

IE0—外部中断0的中断请求标志位

IE1—外部中断1的中断请求标志位③TF0—T0溢出中断请求标志位

TF1—T1溢出中断请求标志位④TR0—T0定时/计数器运行控制位

TR1—T1定时/计数器运行控制位2)串行口控制寄存器SCON位地址9FH

9EH9DH9CH9BH9AH99H98HD7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRITI(SCON.1)——串行发送中断标志。RI(SCON.0)——串行接收中断标志。每当串行口发送完一帧串行数据后,TI由硬件自动置“1”。CPU响应该中断时,不能自动清除TI,必须用软件对TI标志位清“0”,即TI=0。3)中断允许寄存器IE位地址AFHAEH

ADHACHABHAAH

A9HA8HD7D6D5D4D3D2D1D0EA××ESET1EX1ET0EX0中断总开关串行口中断允许控制位定时/计数器T1中断允许控制位外部中断1中断允许控制位定时/计数器T0中断允许控制位外部中断0中断允许控制位

EA=1;CPU开中断ET1=1;定时/计数器1允许中断ET1

=

0;定时/计数器1禁止中断【实例5-1】如果我们要设置外中断1,定时器1中断允许,其他不允许,设置IE的相应值如下。位D7D6D5D4D3D2D1D0符号EAXXESET1EX1ET0EX0值100011001)

IE=0x8c2)用位赋值EA=1;CPU开中断ET1=1;定时/计数器1允许中断EX1=1;外中断T1允许中断4)IP中断优先级寄存器单片机有两个中断优先级:高级中断和低级中断。中断源可以通过编程确定为高优先级中断或低优先级中断。若CPU当前正在为低优先级中断服务,在开中断的条件下,它能被另一个高优先级中断请求所中断,转去为高级中断服务,再返回到被中断了的低级中断服务程序,即为中断嵌套。

CPU执行高级中断服务高级中断请求返回低级中断程序返回主程序响应高级中断低级中断请求CPU执行低级中断响应低级中断CPU在执行的主程序图5-5中断嵌套过程示意图位地址BFHBEHBDHBCHBBHBAHB9HB8HD7D6D5D4D3D2D1D0×××PSPT1PX1PT0PX0串行口中断优先级控制位定时/计数器T1中断优先级控制位定时/计数器T0中断优先级控制位外部中断1中断优先级控制位外部中断0中断优先级控制位相应位为1,对应的中断源被设置为高优先级,相应位为0,对应中断源被设置为低优先级系统复位时,均为低优先级例:PT1=0;T1为低优先级中断

PX0=1;外部中断0为高优先级中断中

源同级内优先权排列外部中断0中断(IE0)定时器/计数器0中断(TF0)外部中断1中断(IE1)定时器/计数器1中断(TF1)串行接口中断(TI/RI)

低同一优先级中的中断源优先权排队按自然优先顺序进行,自然优先顺序由中断系统的硬件确定,用户无法自行安排,自然优先权顺序如表5-1所示。MCS-51系列单片机中断响应原则:1)高级中断请求可以中断正在执行的低级中断。2)同级或低级中断请求不能中断正在执行的中断。3)多个中断源同时向CPU申请中断,首先响应优先级别最高的中断请求;多个同级中断源同时向CPU申请中断,CPU通过内部硬件查询,按自然优先级确定优先响应哪一个中断请求。【实例5-2】如要求将T0、外中断1设为高优先级,其它为低优先级,求IP的值。解:IP的首3位没用,可任意取值,设为000,后面根据要求写。位D7D6D5D4D3D2D1D0符号XXXPSPT1PX1PT0PX0值00000110IP值是06H。【实例5-3】在上面的实例中,如果5个中断请求同时发生,求中断响应的次序。解:响应次序如下:定时器0>外部中断1>外部中断0>定时器1>串行口中断。5.1.3中断服务函数1.中断服务函数的一般形式void函数名(void)interruptm[unsingn]代表中断号,是一个常量,取值范围是0-31。C51编译器允许32个中断,从8m+3处产生中断向量代表中断函数将要选择使用的寄存器组,也是一个常量,取值范围是0~3。表5-2中断源的中断服务程序入口地址提示(1)使用using可缩减中断服务函数的入栈操作时间,因此可以使中断得到更及时的处理;但同时,使用using要十分小心,要保证寄存器组切换在所控制的区域内,否则会导致错误。(2)中断函数的编写包括两部分:中断源的初始化函数和中断服务函数。概括地说,中断源初始化函数就是对中断源所需要的一些变量进行设置,其形式与其他普通函数一样——一般在主函数里实现;而中断服务函数就是规定系统在发生相应的中断的时候要执行哪些操作。(3)中断函数的调用过程与一般函数调用相似,但一般函数是程序中事先安排好的;而何时调用中断函数事先无法确定,调用中断函数的过程是由硬件自动完成的。【实例5-4】P1.3外接一个扬声器,当与P3.3(外部中断1输入引脚)变为低电平时,扬声器发声。#include<reg51.h>sbitp13=P1^3;voidmain(){IT1=0;EA=1;EX1=1;p13=1;while(1);//等待外部中断1到来}voidisr_int()interrupt2{

int

i;

p13=~p13;//取反使扬升器发声for(i=1000;i>0;i--);}主函数主要完成中断的初始化工作:①开中断总开关。②开中断源允许相应位。③各中断源优先级设定。④外部中断请求的触发方式。案例6中断计数应用案例要求在P3.2按一个按钮,P2口接两个BCD数码管,每按一次按钮数码管加1(按下按钮次数不超过99次)#include<reg51.h>unsignedchara;

//a是外部变量voidisr_int();

//声明x(unsignedcharb);

//声明voidmain(){

IT0=1;

//外部中断0下降沿触发

EX0=1;//外部中断0中断允许

EA=1;

//总中断开

a=0;

//a中存放计数值

while(1)

{P2=x(a);}}voidisr_int()interrupt0{

a++;

if(a==100)a=0;}x(unsignedcharb){

unsignedcharc,d,e;

c=b/10;

//得到计数值十位

d=b%10;

//得到计数值个位

e

=(c<<4)|d;return(e);}5.2定时器/计数器5.2.1定时器/计数器的结构图5-9定时器/计数器的结构框图1、结构两个16位的定时/计数器T0、T1T0/T1分别由两个8位的计数器组成T0由TH0、TL0构成,字节地址为8CH、8AHT1由TH1、TL1构成,字节地址为8DH、8BH;相关的控制寄存器方式寄存器TMOD:字节地址89H控制寄存器TCON:字节地址88H

(1)结构组成部分(2)工作原理外部脉冲由T0(P3.4)或T1(P3.5)引脚输入,此时计数状态。核心部件是16位加法计数器TL0、TH0或TL1、TH12.工作方式寄存器TMODGATE—门控位开关K=(GATE+INT0)×TR0

C/T——定时/计数模式选择位C/T=0,定时模式,对内部机器周期进行计数C/T=1,计数模式,对来自T0或T1引脚的外部脉冲信号进行计数。

M1、M0—工作方式选择位开关K=(GATE+INT0)×TR0GATE=0,非门控方式(内部启动)TR0

=1,启动定时器工作;TR0=0,停止定时器工作。GATE=1,门控方式(外部启动)TR0=1且引脚INT0=1才启动。C/T=0,定时模式,对内部机器周期进行计数C/T=1,计数模式,对来自T0或T1引脚的外部脉冲信号进行计数。表5-3工作方式选择位3.控制寄存器TCON

D7D6D5D4D3D2D1D0(88H)8FH8EH8DH8CH8BH8AH89H88HTCONTF1TR1TF0TR0IE1IT1IE0IT0TF0或1:T0或他1溢出标志位。响应中断后TF由硬件自动清0。TR0或1:T0或T1的运行控制位。 TR0=1;定时/计数器T0开始工作 TR1=0;定时/计数器T1停止工作IE0或1:外部中断0或1溢出标志位.IE0=1,外中断0提出中断申请IT0或1:外部中断0或1的中断触发方式选择位

IT1=0,外部中断1低电平触发;IT0=1,外部中断0边沿触发5.2.2定时器/计数器工作方式

补充:1.工作方式0最大计数值为213=81924096204810245122561286432

×

×

×16

8

4

2

1【实例5-5】已知单片机晶振频率为6MHz,试编程利用T0的方式0在Pl.0引脚输出周期为500us的方波。查询方式程序清单

#include<reg51.h>sbitp10=P1^0;main(){TMOD=0;

//T0设置为工作方式0TH0=0XFC;//T0设置初值TL0=0X03;TR0=1;

while(1){while(TF0==0);

//TF0=0时在此处等待

p10=~p10;TH0=0XFC;TL0=0X03;

TF0=0;}}分号不能缺中断方式程序清单#include<reg51.h>sbitp10=P1^0;voidisr_time0();

//原型声明main(){

TMOD=0;

TH0=0XFC;

TL0=0X03;

EA=1;ET0=1;

TR0=1;

while(1);

//主程序在此处等待定时到来}voidisr_time0()interrupt1{p10=~p10;TH0=0XFC;TL0=0X03;}【实例5-6】单片机晶振频率12MHz,试编程利用T0的方式0实现1s延时,每隔1s钟使P1.0引脚翻转一次。1)TMOD初始化:00H2)计数初值:定时时间:tmax=8192×1us=8.192ms;取5ms1秒延时实现:5ms延时200次

T0的初值:

=213-5000μs×12MHz/12=3192=0110001100011000B=6318H∴TH0=63H,TL0=18H源程序清单:#include<reg51.h>voidisr_time0(void);//声明SbitP10=P1^0;unsignedintcounter=200;voidmain(){

TMOD=0X00;

TH0=0X63;TL0=0X18;

TR0=1;

EA=1;ET0=1;

while(1);}voidisr_time0()interrupt1{counter--;

if(counter==0)

{

counter=200;

P10=~P10;

}TH0=0X63;TL0=0X18;}200次5ms定时到了2.工作方式1【实例5-7】试编程利用T0的方式1,完成实例5-5的功能(即在P1.0的引脚输出周期为500us的方波)1)TMOD初始化:01H2)计数初值:计数初值=216-250×10-6×6×106/12=216-250/2=65411=FF83H

因此TH1=0xFF,TL1=0x833)TCON初始化,TR0=14)开中断:EA=1;ET0=1源程序清单#include<reg51.h>voidisr_time0(void);sbitP10=P1^0;voidmain(){

TMOD=0X01;

TH0=-125>>8;TL0=-125;TR0=1;EA=1;ET0=1;

while(1);}//中断服务函数voidisr_time0(void)interrupt1{P10=~P10;

TH0=-125>>8;TL0=-125;}小技巧:计数初值可以直接用如下方法表示:TH0=-125>>8;//取计数初值的高8位(0FFH)TL0=-125;//自动取计数初值的低8位(83H)不需要计算出具体的计数初值。3.工作方式2自动重置初值的8位计数器振荡器÷12TF0中断T0GATEINT0TR0TL0(8位)TH0(8位)控制重新装入l≥l&C/T=0C/T=1&&EAET0【实例5-8】已知系统晶振12MHz,试编程用定时器0的工作方式2实现在P1.0产生周期为500us的方波。解:TMOD初始化;02H;

TH0作为定时器,定时时间250us,初值28-250=06H;

TL0初值也是06H;#include<reg51.h>sbitp10=P1^0;voidmain(){

TMOD=2;

TH0=0x06;

TL0=0x06;

TR0=1;EA=1;ET0=1;

while(1);}voidisr_time0()interrupt1{

p10=~p10;}

TH0计满后自动问TL0要初值案例7啤酒生产线自动装箱控制某啤酒自动生产线,每生产12瓶执行装箱操作,将生产出的啤酒自动装箱,用单片机实现该控制要求。解:如果啤酒生产线上装有传感装置,每检测一瓶啤酒就向单片机发送一个脉冲信号,使用T0计数功能就可实现该控制要求。1)TMOD初始化:06H2)计数初值:TH0=TL0=

28-12=0F4H程序清单#include<reg51.h>voidisr_time0(void);sbitP37=P3^7;voidmain(){

TMOD=0x06;

TL0=0Xf4;

TH0=0Xf4;

ET0=1;EA=1;

P37=1;

TR0=1;while(1);}voidisr_time0()interrupt1{inti,time=600;P37=0;//驱动电机转动

while(time--)//假设装箱时间固定

for(i=500;i>0;i--);P37=1;//装箱结束电机停止转动}案例8秒表设计要求设计一个00——59s的电子秒表,具体要求如下:(1)P2口接两个BCD数码管显示秒数,显示格式为十位、个位。(2)INT0(p3.2),INT1(p3.3),T1(p3.5)分别接一个按钮。分别为开始,停止,清0按钮。程序如下:#include<reg51.h>unsignedchara,b;x(unsignedchari);voidmain() {

TMOD=0X61;//T0方式1定时,T1方式2计数

TH0=0X3C;TL0=0XB0;

//T0定时50ms

TH1=0XFF;TL1=0XFF;

//T1计数1次

EA=1;

EX0=1;EX1=1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论