1、实验四 外中断 P1.0_P1.7接8个发光二极管,管脚INT0、INT1接两个按键,分别定义为“+”和“-”。要求:上电全灭,每按一次“+”键,亮的灯多一盏,每按一次“-”键,亮的灯减一盏,当全亮时,再按一次“+”键,则全灭 当全灭时,再按一次“-”键,则全亮实验报告要求:实验报告要求:1写明实验日期、桌号2写明实验要求;3画出硬件接线图4编程,加标注5写出调试过程,遇到的问题及解决方法6总结实验目的,写出收获体会 INT0INT0,INT1INT1,T0 T0 及及 T1T1的中断标志存放在的中断标志存放在 TCONTCON寄存器中;寄存器中;串行口的中断标志存放在串行口的中断标志存放在
2、SCONSCON寄存器中。寄存器中。定时器计数器控制寄存器定时器计数器控制寄存器TCONTCON:IT1IT1:INT1INT1的中断申请触发方式控制位的中断申请触发方式控制位IT0IT0:INT0INT0的中断申请触发方式控制位。的中断申请触发方式控制位。5.3 中断的控制5.3.1中断标志中断允许和禁止由中断允许寄存器中断允许和禁止由中断允许寄存器IEIE控制。控制。中断允许寄存器中断允许寄存器IE IE(可位寻址)可位寻址):5.3.2 5.3.2 中断允许控制中断允许控制IEIE寄存器中各位设置:为寄存器中各位设置:为0 0时,时,禁止禁止中断;为中断;为1 1时,时,允许允许中断。中
3、断。系统复位后系统复位后IEIE寄存器中各位均寄存器中各位均为为0 0,禁止所有中断。,禁止所有中断。在在80C5180C51中有高、低两个中断优先级,通过中有高、低两个中断优先级,通过IPIP来设定。来设定。中断优先级寄存器中断优先级寄存器IP(IP(可位寻址可位寻址):):IPIP寄存器中各位设置:为寄存器中各位设置:为0 0时,为时,为低低中断优先级;为中断优先级;为1 1时,设时,设为为高高中断优先级。中断优先级。系统系统复位后复位后IPIP寄存器中各位均寄存器中各位均为为0 0,全部设定为低中断优先,全部设定为低中断优先级。级。5.3.3 5.3.3 中断优先级中断优先级中断源中断源
4、 中断矢量地址中断矢量地址 外部中断外部中断0(INT0INT0)0003H 定时器定时器/计数器计数器0(T0)000BH外部中断外部中断1(INT1INT1)0013H 定时器定时器/计数器计数器1(T1)001BH 串行口(串行口(RI、TI)0023H定时器定时器/计数器计数器2 002BH中断矢量地址中断矢量地址第六章第六章 单片微机的定时器单片微机的定时器/计数器计数器原理及应用原理及应用6.1 概述概述6.2 定时器定时器/计数器计数器T0、T16.3 定时器定时器/计数器计数器T26.4 监视定时器(看门狗)监视定时器(看门狗)T36.5 定时器定时器/计数器的应用编程计数器的
5、应用编程定时或计数方法:定时或计数方法:1硬件法:硬件法:定时功能完全由硬件电路完成,不占用定时功能完全由硬件电路完成,不占用CPU时间。时间。2软件法:软件法:软件定时是执行一段循环程序来进行时间延时。软件定时是执行一段循环程序来进行时间延时。3可编程定时器计数器:可编程定时器计数器:通过软件编程来实现定时时间的改通过软件编程来实现定时时间的改变,通过中断或查询方法来完成定时功能或计数功能。变,通过中断或查询方法来完成定时功能或计数功能。6-1 概述概述定时器资源:定时器资源:80C51:两个:两个16位的加位的加1定时器计数器:定时器计数器:T0和和T1;80C52:三个:三个16位的加位
6、的加1定时器计数器:定时器计数器:T0、T1、T2在在80C51系列的部分产品(如系列的部分产品(如Philips公司的公司的80C552)中,还)中,还包含有作看门狗的包含有作看门狗的8位位定时器定时器T3。定时器计数器的定时器计数器的核心核心是一个加是一个加1计数计数器其基本功能是器其基本功能是计数加计数加1。计数计数 是对单片微机的是对单片微机的T0、T1(或(或T2)引脚引脚 上输入的一个上输入的一个1到到0的跳变的跳变进行计数增进行计数增l。定时定时 是对单片微机内部的是对单片微机内部的机器周期机器周期进行计进行计 数,从而得到定时。数,从而得到定时。波特率发生器波特率发生器 80C
7、51的定时器的定时器/计数器还可计数器还可 用作串行接口的用作串行接口的波特率发生器波特率发生器。T0、T1 的内部结构简图示于的内部结构简图示于图图61中。中。T0、T1由以下几部分组成:由以下几部分组成:计数器计数器TH0、TL0和和TH1、TL1;特殊功能寄存器特殊功能寄存器TMOD、TCON;时钟分频器;时钟分频器;输入引脚输入引脚T0、T1。6.2 6.2 定时器计数器定时器计数器T0T0、T1T1 一、一、定时器计数器定时器计数器T0、T1 的控制寄存器的控制寄存器 1.TCON位地址位地址 8FH 8EH8DH8CH8BH8AH89H88H位功能位功能 TF1TR1TF0TR0I
8、E1IT1IE0IT0TF1TF1:T1T1的溢出标志的溢出标志。T1T1溢出时,该位由溢出时,该位由内部硬件置位内部硬件置位。若中断开放,即响应中断,进入中断服务程序后,若中断开放,即响应中断,进入中断服务程序后,由硬由硬 件自动清件自动清0 0;若中断禁止,可用于判跳,用软件清若中断禁止,可用于判跳,用软件清0 0。TR1TR1:T1T1的运行控制位的运行控制位。用软件控制,置用软件控制,置l l时,启动时,启动 T1T1;清;清0 0时,停止时,停止 T1T1。复位后复位后,TCONTCON的所有位均的所有位均清清0 0。T0T0和和T1T1均是关中断的。均是关中断的。D7 D6 D5
9、D4 D3 D2 D1 D0GATE C/TM1M0GATE C/TM1M0T1T0 GATE门控位门控位 GATE1时,由外部中断引脚时,由外部中断引脚INT0、INT1和和TR0、TR1共共同来启动定时器。当同来启动定时器。当INT0引脚为高电平时,引脚为高电平时,TR0置位启动定时器置位启动定时器T0;当引脚当引脚INT1为高电平时,为高电平时,TR1置位,启动定时器置位,启动定时器T1。GATE0时,仅由时,仅由TR0和和TR1置位来启动定时器置位来启动定时器T0和和T1。2.T0、T1 的方式寄存器的方式寄存器TMOD 中断条件:中断条件:TH0,TL0 由全由全1 全全0CT:功能
10、选择位:功能选择位 C/T1时,选择时,选择计数计数功能;功能;C/T0时,选择时,选择定时定时功能。功能。定时器,设置定时器,设置C/T0 脉冲源:振荡器(内部机器周期)脉冲源:振荡器(内部机器周期)计数频率:计数频率:fosc 定时时间:定时时间:t=脉冲数脉冲数*机器周期机器周期 (213-x)*121oscf12 计数器,设置计数器,设置C/T1脉冲源:外部引脚脉冲源:外部引脚T0(T1)计数:计数:T0 1 0 计计1(两个机器周期计一个数)两个机器周期计一个数)计数频率:计数频率:fosc 脉冲宽度:保持一个机器周期脉冲宽度:保持一个机器周期 241M1、M0:工作方式选择位。:工
11、作方式选择位。M1M0M1M0工作方式工作方式功能功能0000方式方式0 01313位计数器位计数器0101方式方式1 11616位计数器位计数器1010方式方式2 2两个两个8 8位计数器,初值自动装入位计数器,初值自动装入1111方式方式3 3两个两个8 8位计数器,仅适用位计数器,仅适用T0T03、计数器、计数器:TH0、TL0、TH1、TL11)TH0、TL0:定时器定时器/计数器计数器0高位字节和低位字节。高位字节和低位字节。字节地址:字节地址:8CH,8AH,可读可写,可读可写.2)TH1、TL1:定时器定时器/计数器计数器1高位字节和低位字节。高位字节和低位字节。字节地址:字节地
12、址:8DH,8BH,可读可写,可读可写.4、定时器、定时器/计数器中断:计数器中断:中断允许寄存器中断允许寄存器IE 中断优先级寄存器中断优先级寄存器IP 中断矢量中断矢量 方式方式0:13位定时器位定时器/计数器计数器(M10、M00)计数寄存器组成:计数寄存器组成:THxTHx 高高8 8位位和和TLxTLx的低的低5 5位位 (TLTL0 0-TL-TL4 4),共,共1313位。位。计数时,计数时,TLxTLx 的低的低5 5位溢出后向位溢出后向THxTHx进位,进位,THxTHx溢出溢出后将后将TFxTFx置位,并向置位,并向CPUCPU申请中断。申请中断。二、定时器计数器二、定时器
13、计数器T0、T1 的工作方式的工作方式 图62 方式0时,定时器/计数器T0、T1的逻辑结构图B=TRx(GATE+INTx)最大计数值:最大计数值:213=8192。最大定时时间:最大定时时间:Tmax(12M)=1us*213=8192us (8ms)Tmax(6M)=2us*213=16384 (16ms)定时初值计算:定时初值计算:初值初值 X=213-*t数据寄存器数据寄存器TH0、TL0(TH1/TL1)的赋值:)的赋值:12oscf 方式方式116位定时器位定时器/计数器计数器 由由TLx和和 THx组成,共组成,共16位。位。计数时:计数时:TLxTLx溢出后向溢出后向THxT
14、Hx进位,进位,THxTHx溢出后将溢出后将TFxTFx置位置位.最大计数值:最大计数值:216=65536 最大定时时间:最大定时时间:Tmax(12M)=1usTmax(12M)=1us*2 21616=65536us=65536us(65ms65ms)Tmax(6M)=130ms Tmax(6M)=130ms (130ms130ms)定时初值:定时初值:X=2X=21616-*t t 数据寄存器数据寄存器TH0、TL0(TH1/TL1)的赋值:)的赋值:12oscf图图63 方式方式1时,定时器时,定时器/计数器计数器T0、T1的逻辑结构图的逻辑结构图 方式方式2定时常数自动重装载的定时
15、常数自动重装载的8位定时器位定时器/计数器计数器 TLxTLx作为作为8 8位计数寄存器,位计数寄存器,THxTHx作为作为8 8位计数常数寄存器。位计数常数寄存器。8MOV TH0,#0AEHMOV TH0,#0AEHMOV TL0,#06HMOV TL0,#06HSETB TR0SETB TR0MOV TH0,#0AEHMOV TH0,#0AEHMOV TL0,#06HMOV TL0,#06H 当当TLxTLx计数溢出时,将计数溢出时,将TFxTFx置位,并向置位,并向CPUCPU申请中断;申请中断;将将THxTHx的内容重新装入的内容重新装入TLxTLx中,继续计数。中,继续计数。重新装
16、入不影响重新装入不影响THxTHx的内容。的内容。Tmax(12M)=1us*28=256usTmax(6M)=512us方式方式2适合于作为串行口波特率发生器使用。适合于作为串行口波特率发生器使用。图图64 64 方式方式2时定时器时定时器/计数器计数器T0、T1的结构图的结构图 方式方式3:3:只适用于只适用于T0T0()方式下()方式下将将T0T0分为一个分为一个8 8位定时器计数器位定时器计数器TL0TL0和一个和一个 8 8位定时器位定时器TH0TH0 。T1T1停止计数停止计数。TL0TL0:8 8位定时器计数器,它占用了位定时器计数器,它占用了T0T0的的GATEGATE、INT
17、0INT0、启动、启动 停止控制位停止控制位TR0TR0、T0T0引脚引脚 以及计数溢出标志位以及计数溢出标志位TF0TF0和和T0T0的中的中断矢量等。断矢量等。TH0TH0:作为:作为8 8位定时器用,此时的外部引脚位定时器用,此时的外部引脚T0T0已为定时器已为定时器 计数器计数器TL0TL0所占用。这时它占用了定时器计数器所占用。这时它占用了定时器计数器T1T1 的启动停止控制位的启动停止控制位TR1TR1、计数溢出标志位、计数溢出标志位TF1TF1及及T1T1中中 断矢量断矢量(地址为地址为001BH001BH)。图图65定时器定时器/计数器计数器T0方式方式3时的逻辑结构图时的逻辑
18、结构图图图66 66 定时器定时器/计数器计数器T0T0方式方式3 3时,时,T1T1的逻辑结构图的逻辑结构图 工作方式工作方式3下下 T1 T1的结构如的结构如图图66所示,所示,T1只能选方式只能选方式0、1或或2。作串行口波特率发生器时,。作串行口波特率发生器时,T1的计数输出直接去串行口,只需设置好工作方式,的计数输出直接去串行口,只需设置好工作方式,串行口波特率发生器串行口波特率发生器自动开始运行自动开始运行,如要停止工作如要停止工作,只需向只需向T1送一个送一个设为工作方式设为工作方式3的控制字即可。的控制字即可。定时器计数器的应用编程:定时器计数器的应用编程:如果采用中断方式如果
19、采用中断方式,应进行中断程序应进行中断程序入口地址设置入口地址设置 设置定时器计数器设置定时器计数器工作方式工作方式()()设置设置定时常数定时常数(和)(和)如果采用中断方式,如果采用中断方式,应允许定时器中断和中应允许定时器中断和中断断 定时器定时器启动启动()()如果采用中断方式:如果采用中断方式:编写中断服务子程序编写中断服务子程序 如果查询方式:需要用指令清除溢出标志如果查询方式:需要用指令清除溢出标志已知晶体振荡器的频率为已知晶体振荡器的频率为foscfosc=6MHz=6MHz。使用使用T0T0作定时器,设为方式作定时器,设为方式0 0,设定,设定1ms1ms的定时,的定时,每隔
20、每隔1ms1ms使使P1.0P1.0引脚上的电平变反。引脚上的电平变反。例要求在例要求在 P1.0P1.0引脚上产生周期为引脚上产生周期为2 ms2 ms的方波输出。的方波输出。应用举例应用举例(1)(1)解:定时常数计算解:定时常数计算振荡器的频率振荡器的频率foscfosc6MHz6MHz,机器周期为,机器周期为2s2s,方,方式式0 0计数器长度计数器长度L L13(213(213138192)8192),定时时间,定时时间 t t1ms1ms0.001s0.001s定时常数:定时常数:X=2X=21313-*10106 6*1 1*1010-3-3=1E0C1E0CH H126X为为7
21、6921E0CH,二进制数二进制数TCB0 0 0 1 1 1 1 0 0 0 0 0 1 1 0 0 B,取低取低13位,位,其中高其中高8位位THF0H,低,低5位为位为TL0CH.计数长度:计数长度:1E0CH=76921E0CH=7692,TH=0F0H,TL=0CHTH=0F0H,TL=0CH定时:定时:(81927692)2s=0.001STMODTMOD的设定的设定:T0:T0:方式,定时方式,定时(2)编编 程程:(中断方式中断方式)ORGORG0000H0000HAJMPAJMP MAIN MAINORGORG000BH000BH;T0T0中断矢量中断矢量AJMP INQPA
22、JMP INQPORGORG0030H0030H MAIN MAIN:MOV TMODMOV TMOD,00H 00H;设;设T0T0为定时器方式为定时器方式0 0 MOV MOV TH0TH0,0F0H 0F0H ;写定时常数写定时常数(定定时时1ms)1ms)MOV MOV TL0TL0,0CH0CH SETB SETB ET0 ET0 ;允许;允许T0T0中断中断 SETB SETB EA EA ;开放;开放CPUCPU中断中断SETB SETB TR0 TR0 ;启动;启动 T0T0 SJMP$SJMP$;定时中断等待;定时中断等待 ORGORG2000 H2000 H ;T0T0中断
23、服务程序中断服务程序 INQPINQP:MOV TH0MOV TH0,0F0H 0F0H ;重写定时常数;重写定时常数 MOV TL0MOV TL0,0CH0CH CPL P1 CPL P10 0 ;P1P10 0变反输出变反输出 RETI RETI ;中断返回中断返回 ORG 0100HORG 0100HST:MOV TMOD,#00HST:MOV TMOD,#00HMOV TH0MOV TH0,0F0H 0F0H MOV TL0MOV TL0,0CH0CHSETB P1.0SETB P1.0SETB TR0SETB TR0L0:L0:JBC TF0,L1JBC TF0,L1;时间到,清除溢
24、出标志;时间到,清除溢出标志AJMP L0AJMP L0L1:CPL P1.0L1:CPL P1.0MOV TH0MOV TH0,0F0H 0F0H ;重写定时常数;重写定时常数MOV TL0MOV TL0,0CH0CHAJMP L0AJMP L0 END END查询方式查询方式:【例例】已知晶振已知晶振12MHZ12MHZ,要求利用,要求利用定时器定时器T0T0使图中发使图中发光二极管光二极管D D进行进行秒闪烁秒闪烁。解:解:发光二极管进行秒闪烁。发光二极管进行秒闪烁。即亮即亮500ms500ms,暗,暗500 ms500 ms。晶振晶振12MHz12MHz,机器周期,机器周期1 1 s
25、s,T0T0方方式式1 1最大定时只能最大定时只能65ms65ms余。余。方法方法:取取T0T0方式,定时方式,定时50ms50ms,计数计数1010次,即可实现次,即可实现500ms500ms定定时。时。计算定时初值计算定时初值T0T0初值初值X=2X=21616-f-foscosc*t/12=2t/12=21616-50-50*10103 3=65536-50000=15536=65536-50000=15536 =3CB0=3CB0 TH0=3CHTH0=3CH;TL0=B0HTL0=B0H。设置设置TMODTMOD:00000000 0 0 0 0 0101 B=01H B=01H T
26、0 T0方式方式1 1 T0 T0 定时定时 与与 无关无关 T1T1控制位控制位INT0 编制程序编制程序如下:如下:ORGORG 0000H 0000H ;复位地址复位地址LJMPLJMP MAIN MAIN ;转主程序转主程序ORGORG 000BH 000BH ;T0;T0中断入口地址中断入口地址LJMPLJMP IT0 IT0 ;转转T0T0中断服务程序中断服务程序ORGORG 0100H 0100H ;主程序首地址主程序首地址MAIN:MOV MAIN:MOV TMOD,#01H TMOD,#01H ;置置T0T0定时器定时器方式方式1 1MOVMOV TH0,#3CH TH0,#
27、3CH ;置置T0T0初值初值50ms50msMOVMOV TL0,#0B0H TL0,#0B0H SETB EA ;SETB EA ;SETB ET0 ;SETB ET0 ;MOVMOV R7,#0AH R7,#0AH ;置置50ms50ms计数器初值计数器初值 SETBSETB TR0 TR0 ;T0;T0运行运行SJMPSJMP$;等待中断等待中断 ORG 0200HORG 0200HITOITO:MOV TH0MOV TH0,#3CH#3CH ;重置重置T0T0初值初值50ms50ms MOV TLO MOV TLO,#0BOH#0BOH DJNZ R7DJNZ R7,GORETGOR
28、ET ;判判500ms500ms到否到否?CPL P1.7 CPL P1.7 ;500ms500ms到,输出取反到,输出取反 MOV R7MOV R7,#0AH#0AH ;恢复恢复50ms50ms计数器初值计数器初值GORETGORET:RETIRETI 门控位门控位GATEGATE可用作对可用作对INTxINTx引脚上的高电平持续时间引脚上的高电平持续时间进行计量。进行计量。当当GATEGATE位设为位设为“1”1”:若:若TRxTRx为为“1”1”,定时器,定时器/计数计数器的启动取决于器的启动取决于INTxINTx引脚。引脚。当当INTxINTx引脚电平为引脚电平为“1”1”时,定时器才
29、工作,换另时,定时器才工作,换另一角度看,一角度看,定时器实际记录的时间就是相应定时器实际记录的时间就是相应INTxINTx引脚上引脚上高电平的持续时间。高电平的持续时间。门控位门控位GATEGATE的应用的应用通过通过反相器反相器,则可测得相应,则可测得相应INTxINTx引脚上低电平的持引脚上低电平的持续时间。续时间。二个时间的和即为二个时间的和即为INTxINTx引脚上输入波形的周期,其引脚上输入波形的周期,其倒数即为倒数即为INTxINTx引脚上输入波形的频率。还可算出占空比引脚上输入波形的频率。还可算出占空比等参数等参数。例利用定时器计数器测定图例利用定时器计数器测定图6 61111
30、所示波形的一个周期长所示波形的一个周期长度。度。利用利用门控信号门控信号GATEGATE启动定时器的方法启动定时器的方法。T1T1为定时器时,当为定时器时,当TR1=1TR1=1且为高电平时,才启动定时器;且为高电平时,才启动定时器;T1T1为计数器时,为计数器时,T1T1的电平由的电平由 1 1到到 0 0,计数器计数。,计数器计数。INT1(P3.3)TR1 置置1T1开始计时开始计时TR1清零清零 图图611 611 波形脉冲宽度测试原理波形脉冲宽度测试原理 查询法查询法ORG 0000HSTART:MOV TMOD,#90H;设置设置T1为定时器,为定时器,;方式;方式1,GATE位置
31、位置1MOV TL1,#00H;置为最大定时值置为最大定时值MOV TH1,#00HLP1:JBP3.3,LP1;P3.3为高电平,等待为高电平,等待 SETB TR1 ;当;当P3.3为低电平时,为低电平时,;置置TR1位为位为1LP2:JNBP3.3,LP2;当;当P3.3为低电平时,再等待为低电平时,再等待LP3:JBP3.3,LP3;当;当P3.3为高电平时,为高电平时,T1开始开始;定定时计数时计数CLRTR1;当;当P3.3为低电平时,高电平为低电平时,高电平;脉宽定脉宽定时计数结束时计数结束SJMP$当当fosc12MHz时,机器周期为时,机器周期为1s,最大被测脉冲宽最大被测脉
32、冲宽度为度为65536s(65.536ms)。若被测波形除了接至若被测波形除了接至P3.3,另外同时通过一个反相器接另外同时通过一个反相器接至至P3.2(INT0),则通过编程同时可以测得波形的高电平宽度则通过编程同时可以测得波形的高电平宽度和低电平宽度。和低电平宽度。80C5180C51可以随时读写计数寄存器可以随时读写计数寄存器TLxTLx和和THxTHx(x(x为为0 0或或1)1),用于,用于实时显示计数值实时显示计数值等。等。办法是:先读办法是:先读THxTHx,后读后读TLxTLx,再重读再重读THxTHx,若两次若两次读得的读得的THxTHx值是一样的,则可以确定读入的数据是正确
33、的;值是一样的,则可以确定读入的数据是正确的;若两次读得的若两次读得的THxTHx值不一致,则必须重读。值不一致,则必须重读。运行中读定时器运行中读定时器/计数器计数器例例.飞读飞读RDTIME:MOV A,TH0;读;读TH0MOV R0,TL0;读;读TL0并存入并存入R0CJNE A,TH0,RDTIME;再读再读TH0,与上次与上次;读入的;读入的TH0比较,若不等,重读比较,若不等,重读MOV R1,A;存;存TH0在在R1中中RET 实验五实验五 定时器定时器P1.0P1.0、P1.1P1.1接两个发光管,接两个发光管,INT0INT0接一启动按接一启动按键,启动后两个发光管一亮一灭,亮灭时间键,启动后两个发光管一亮一灭,亮灭时间为为1s1s,再按按键停止发光管。,再按按键停止发光管。ENDEND图图61 定时器定时器/计数器计数器T0、T1的内部结构框图的内部结构框图图62 方式0时,定时器/计数器T0、T1的逻辑结构图图图612 612 利用定时器利用定时器/计数器测脉冲周期计数器测脉冲周期