第3章单片机中断与定时.ppt





《第3章单片机中断与定时.ppt》由会员分享,可在线阅读,更多相关《第3章单片机中断与定时.ppt(135页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 3.1单片机中断与定时系统单片机中断与定时系统知识第第3章章 单片机中断与定时单片机中断与定时1.什么是中断? 比如,你正在家中做作业,突然门铃响了,有快递,你放下书,去接快递的同时,厨房煤气灶上汤烧开了,这时,你会先去关了煤气灶,再去接快递,然后继续做作业。这就是生活中的“中断”的现象,就是正常的过程被外部的事件打断了。 “有快递”、“汤烧开了”等是中断源; “汤烧开了”比“有快递”急,所以要先去响应,这就是中断优先级; “关煤气灶”、“接快递”等就是中断响应。2.中断源中断源(哪些信号可以引起单片机中断?)中断源数量和种类越多,中断源数量和种类越多,MCU处理突发事件的能力就越强。处理突
2、发事件的能力就越强。80C51单片机共有单片机共有5种中断源。种中断源。中断源分为三类:2个外部中断,2个定时器/计数器中断,1个串行口中断。(1)外部中断INT0:外部中断0,由引脚P3.2输入,可选择低电平或者下降沿触发。INT1:外部中断1,由引脚P3.3输入,可选择低电平或者下降沿触发。(2)定时器/计数器中断 T0:定时器/计数器0中断,定时器0提供片内计数溢出触发,或者P3.4引脚提供片外计数触发。 T1:定时器/计数器1中断,定时器1提供片内计数溢出触发,或者P3.5引脚提供片外计数触发。(3)RX、TX为串行口中断所用,由片内串口提供,分为发送中断和接收中断,当串口完成一帧发送
3、或接收时,触发中断。3.中断请求标志中断请求标志(单片机如何知道中断信号出现了?)(单片机如何知道中断信号出现了?)当中断信号出现时,单片机中的某些位寄存器当中断信号出现时,单片机中的某些位寄存器(中断请求标志位中断请求标志位)可被硬件置)可被硬件置1。CPU通过定期查看中断请求标志位是否为通过定期查看中断请求标志位是否为1,便可,便可知道有无中断请求。知道有无中断请求。 TCON寄存器寄存器定时定时/计数器的控制寄存器计数器的控制寄存器(Timer/Counter Control Register),),可位寻址。可位寻址。 SCON寄存器寄存器IE寄存器寄存器51单片机复位,IE各位清0,
4、所有中断被禁止。每个位开关赋值为1则开中断,赋值为0则关中断。只有打开总中断位开关,其它各位的开关才可以开启。可以整体赋值,如:IE=0 x81;表示开启总中断,打开外部中断0可以单独赋值:如:EA=1;EX0=1;也表示开启总中断,打开外部中断0。 IP 寄存器寄存器51单片机复位,IP各位清0,所有中断同为低优先级。每位可赋值为1,则高优先级,赋值为0,则低优先级,同级按自然优先级排序执行。自然优先级顺序由高到低排列为:外部中断0、定时器/计数器0中断、外部中断1、定时器/计数器1中断、个串行口中断。可以整体赋值,如:IP=0 x02;表示定时器/计数器0中断为高优先级中断。可以单独赋值:
5、如:PT0=1;也表示定时器/计数器0中断为高优先级中断。优先级原则小结:优先级原则小结:1)高级中断请求可以打断正在执行的低级中断;)高级中断请求可以打断正在执行的低级中断;2)同级或低级中断请求不能打断正在执行的中断;)同级或低级中断请求不能打断正在执行的中断;3)同级中断源同时提出请求时按自然优先级响应:)同级中断源同时提出请求时按自然优先级响应: INT0 T0 INT1T1TI/RI4)单片机复位时,)单片机复位时,IP各位都被置各位都被置0, 所有中断源为低级中断所有中断源为低级中断4.中断系统的组成中断系统的组成(影响中断的因素?)5.中断系统的组成中断系统的组成(影响中断的因素
6、?)定时定时/计数器的结构与原理计数器的结构与原理 8051单片机内部有两个16位的可编程定时/计数器,称为T0(T0)和T1(T1) 应用1:T0/T1用作计数对芯片对芯片引脚引脚T0/T1上上输入的脉冲计数,输入的脉冲计数,每输入一个脉冲,每输入一个脉冲,加法计数器加加法计数器加120VSS19XTAL118XTAL217/P3.716/P3.615T1/P3.514T0/P3.413/P3.312/P3.211TXD/P3.110RXD/P3.09RST/VPD8P1.77P1.66P1.55P1.44P1.33P1.22P1.11P1.0P2.021P2.122P2.223P2.324
7、P2.425P2.526P2.627P2.72829ALE/ 30 /VPP31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VCC401INTW RRDEAPROGPSEN80318051875189C510INTT0外部计数应用应用2:T0/T1用作内部定时用作内部定时对内部机器周期脉冲计数,由于机器对内部机器周期脉冲计数,由于机器周期是定值,所以可周期是定值,所以可设定初值设定初值进行定进行定时。时。内部定时内部定时/ /计数器的启动计数器的启动 INT1 0INT 或启动定时/计数器 根据设置的定时/计数器启动方式,启动定时/计数器。
8、如果采用软件启动: 1.TR0或TR1置1; 如果采用硬软共同启动方式: 1.控制寄存器中的TR0或TR1置1, 2.外部启动信号 为高电平。INT1 0INT 或定时/计数器的初值 设置计数初值pT0T0、T1T1是是1616位加法计数器,分别由两个位加法计数器,分别由两个8 8位专用寄存器组成,位专用寄存器组成,T0T0由由TH0TH0和和TL0TL0组成,组成,T1T1由由TH1TH1和和TL1TL1组成。组成。p在计数器允许的计数范围内,计数器可以从任何值开始计数,在计数器允许的计数范围内,计数器可以从任何值开始计数,对于加对于加1 1计数器,当计到最大值时(对于计数器,当计到最大值时
9、(对于8 8位计数器,当计数值位计数器,当计数值从从255255再加再加1 1时,计数值变为时,计数值变为0 0),产生溢出。),产生溢出。p定时定时/ /计数器允许用户编程设定开始计数的数值,称为赋初值。计数器允许用户编程设定开始计数的数值,称为赋初值。初值不同,则计数器产生溢出时,计数个数也不同。初值不同,则计数器产生溢出时,计数个数也不同。 1 定时器工作方式寄存器(定时器工作方式寄存器(TMOD,89H)作用:设置两个定时器作用:设置两个定时器/计数器工作方式。计数器工作方式。但但TMOD寄存器不能位寻址,只能用字节传送指令设置寄存器不能位寻址,只能用字节传送指令设置其内容。其内容。位
10、序号位序号 D7D6D5D4 D3D2D1D0位符号位符号 GATEC/TM1M0GATEC/TM1M0 T1 T0 M1、M0工作方式选择位。工作方式选择位。M1 M0工作方式工作方式功功 能能 描描 述述0 00 11 01 1方式方式 0方式方式1方式方式2方式方式313位计数器位计数器16位计数器位计数器自动再装入自动再装入8位计数器位计数器定时器定时器0:分成两个:分成两个8位计数器位计数器定时器定时器1:停止计数:停止计数 定时方式或计数方式选择位定时方式或计数方式选择位 0定时工作方式定时工作方式1计数工作方式计数工作方式T/CT/CT/C位序号位序号 D7D6D5D4 D3D2
11、D1D0位符号位符号 GATEC/TM1M0GATEC/TM1M0 GATE门控位门控位 GATE0 以运行控制位以运行控制位TR0(TR1)启动定时器)启动定时器 GATE1 以外中断请求信号以外中断请求信号 启动定时器启动定时器 INT1 0INT 或 复位后,复位后,TMOD0。位序号位序号 D7D6D5D4 D3D2D1D0位符号位符号GATE 0C/T0M11M00GATE0C/T1M10M01例例: 设定时器设定时器1为定时工作方式,要求由为定时工作方式,要求由TR1启动定时器启动定时器1,按方式按方式2工作。定时器工作。定时器0为计数方式,要求由为计数方式,要求由TR0启动定时启
12、动定时器器0,按方式,按方式1工作。工作。TMOD=0 x25定时器控制寄存器(定时器控制寄存器(TCON,88H)位地址位地址8F8E8D8C8B8A8988位符号位符号TF1TR1TF0TR0IE1IT1IE0IT0位地址位地址8F8E8D8C8B8A8988位符号位符号TF1TR1TF0TR0IE1IT1IE0IT0TR0(TR1): 定时器运行控制位。定时器运行控制位。定时器的初始值的计算对于不同的工作方式,计数器位数不同,故最大计数值对于不同的工作方式,计数器位数不同,故最大计数值M也不同:也不同: 方式方式0:M=213=8192 方式方式1:M=216=65536 方式方式2:M
13、=28=256 方式方式3:定时器:定时器0分为分为2个个8位计数器,每个位计数器,每个M均为均为256。因为定时因为定时/计数器是作加计数器是作加1计数,并在计满溢出时产生中断,因此初计数,并在计满溢出时产生中断,因此初值值X的计算如下:的计算如下: X = M 计数值计数值 计算出来的结果计算出来的结果X转换为转换为16进制数后分别写入进制数后分别写入TL0(TL1)、)、TH0(TH1)。)。注意!方式注意!方式0时初始值写入时,对于时初始值写入时,对于TL不用的高不用的高3位应填入位应填入0!举例1 用用T1、工作方式、工作方式1实现实现1秒延时函数,晶振秒延时函数,晶振频率为频率为1
14、2MHz。 方式方式1采用采用16位计数器,其最大定时时间为:位计数器,其最大定时时间为:655361 s = 65.536ms,因此,定时时间选择定时时间为,因此,定时时间选择定时时间为50ms,再循环,再循环20次。次。 定时时间为定时时间为50ms,则计数值为,则计数值为50ms/1 s =50000,T1的初的初值为:值为: X = M 计数值计数值= 65536 50000 = 15536 = 0 x3CB0 = 所以:所以: TH1=0 x3C ;TL1=0 xB0;TMOD=0 x10;用用T1T1、工作方式、工作方式2 2实现实现1 1秒延时,晶振频率为秒延时,晶振频率为12M
15、Hz12MHz。因工作方式因工作方式2 2是是8 8位计数器,其最大定时时间为:位计数器,其最大定时时间为:2562561 1 s s = 256= 256 s s,为实现,为实现1 1秒延时,可选择定时时间为秒延时,可选择定时时间为250250 s s,再,再循环循环40004000次。次。 定时时间选定后,可确定计数值为定时时间选定后,可确定计数值为250250,则,则T1T1的初值的初值为:为:X = M X = M 计数值计数值=256 =256 250 = 6 = 0 x6 250 = 6 = 0 x6。采用。采用T1T1方式方式2 2工作,因此,工作,因此,TMOD =0 x20T
16、MOD =0 x20。举 例2 3.2 简易秒表项目设计简易秒表项目设计项目动手做动手做画出硬件电路图画出硬件电路图 简易秒表的程序设计如下。#include #define uchar unsigned char void delay(uchar); void watch(uchar,uchar);uchar i,l,msecond,second; uchar led=0 x3f,0 x6,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x7,0 x7f,0 x6f; /09码表/*主程序*/void main()TMOD=0 x01; /T0,工作方式1,16位TL0=-5
17、0000%256; /T0初值低8位,定时50毫秒TH0=-50000/256; /T0初值高8位,定时50毫秒IE=0 x82; /T0允许,总中断允许TR0=1; /运行T0while(1) watch(i,l); /秒表数码管显示/*秒表数码管显示*/void watch(uchar m,uchar n)P2=0 x08; P0=ledm; /数码管1显示十位delay(5);P2=0 x09; P0=ledn; /数码管2显示个位 delay(5);/*T0中断服务程序,中断号为1*/ void Time0() interrupt 1 TL0=-50000%256; /T0初值低8位,
18、定时50毫秒TH0=-50000/256; /T0初值高8位,定时50毫秒msecond+;if(msecond=20) /1秒时间到msecond=0;second+;if(second=60) /等于60秒归零second=0;i=second/10; /十位:整除求商 l=second%10; /个位:整除求余/*延时函数t(ms)*/void delay(uchar t ) uchar j,k; for(j=0;jt;j+) for(k=0;k255;k+) 语句“TL0=-50000%256;”,完整的表达为“TL0=(65536-50000)%256;”。由于T0工作方式为1,是十
19、六位,所以最大为216,即65536,语句中50000表示计数次数,实现50毫秒。将十进制换成十六进制,采用余运算,即%256,得到T0初值低8位。 同理,求商运算,即/256,得到T0初值高8位。 语句“i=second/10;”表示整除求商,得到秒时间的十位,语句“l=second%10;”表示整除求余,得到个位。 同理,可以利用“整除求商求余”来拆分提取一个数的个十百千位。 求商求余运算符,不仅能用在数学运算中,还可以用来拆分提取一个数的个十百千位。在单片机显示程序中,不管是液晶屏还是数码管,必须用到这种提取算法,先把一个数的个十百千位一个个拆分提取出来,然后再送到显示屏上显示,所以这种
20、算法很常见和实用。“个,十,百,千”位只是一个虚数,具体是多少应该根据实际项目而定,也有可能是“个,十,百,千,万,十万,百万.”等位,但是处理的思路和方法都是一致的。 拆分提取的思路。比如97532这个数,万位是9,千位是7,百位是5,十位是3,个位是2。可以依次进行如下运算。9=97532/10000;7=7532/1000;5=532/100;3=32/10;2=2/1; 上述用到了整除求商,但是7532、532、32、2又是如何通过97532分解得到的呢?需要用到整除求余,运算如下。7532=97532%10000;532=97532%1000;32=97532%100;2=97532
21、%10; 最后综合在一起,连在一起写:9=97532/10000;7=(97532%10000)/1000;5=(97532%1000)/100;3=(97532%100)/10;2=(97532%10)/1;因为,预先知道了这个数最大位是万位,所以万位直接整除10000求商就可以了。实际项目中,只是用某个变量,而这个变量的大小并不知道具体是什么,它的最大位可能并不止万位,也有可能是十万位,所以需要把上述最高位的万位也做一下100000整除余数,然后在整除10000求商,计算如下。9=(97532%100000)/10000;7=(97532%10000)/1000;5=(97532%1000
22、)/100;3=(97532%100)/10;2=(97532%10)/1;以此类推,如果求十万,百万,也是用一样的方法。有一些单片机的C编译器可能不支持long类型数据的求余求商连写在一起,那么就要用一个中间变量分两步走,先求余,再求商,分开来操作,表达如下。9=(97532%100000)/10000;分成如下两步走。a=97532%100000;a=a/10000;上述的变量a就是引入的中间变量。以5位数x为例,拆分得到各位数字的程序如下。unsigned char a,b,c,d,e; unsigned long int x; a=(x%100000)/10000; /拆分提取万位b=
23、(x%10000)/1000; /拆分提取千位c=(x%1000)/100; /拆分提取百位d=(x%100)/10; /拆分提取十位e=(x%10)/1; /拆分提取个位由于x是5位数,必须是unsigned long int类型以上。x不能是unsigned char类型,它的最大范围是255,不够;也不能是unsigned int,最大范围为65536,也不够。仿真运行图 3.3 时分秒的计时项目设计时分秒的计时项目设计项目动手做动手做画出硬件电路图画出硬件电路图 时分秒的计时程序设计如下。#include #define uchar unsigned charvoid delay(uc
24、har);void watch(uchar,uchar,uchar,uchar,uchar,uchar); /数码管显示函数声明uchar s1,s2,m1,m2,h1,h2,msecond,second,minute,hour; uchar led=0 x3f,0 x6,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x7,0 x7f,0 x6f; /09段码/*主程序*/void main()TMOD=0 x01; /T0工作方式1TL0=-50000%256; /50ms初值低8位TH0=-50000/256; /50ms初值高8位 IE=0 x82; /定时中断允许TR
25、0=1; /启动定时中断while(1) watch(s1,s2,m1,m2,h1,h2); /数码管显示时分秒/*数码管显示时分秒*/void watch(uchar ss1,uchar ss2,uchar mm1,uchar mm2,uchar hh1,uchar hh2)P2=0 x08; P0=ledhh1; delay(1);P2=0 x09; P0=ledhh2; /数码管显示时delay(1);P2=0 x0a; P0=ledmm1; delay(1);P2=0 x0b; P0=ledmm2; /数码管显示分delay(1);P2=0 x0c; P0=ledss1; delay(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 中断 定时

限制150内