
《第3章 MCS-51中断系统与内部定时计数器》由会员分享,可在线阅读,更多相关《第3章 MCS-51中断系统与内部定时计数器(50页珍藏版)》请在文档大全上搜索。
1、第三章第三章 MCS-51中断系统与内中断系统与内部定时部定时/计数器计数器 单片机与外部设备之间数据交换可以采用两种方单片机与外部设备之间数据交换可以采用两种方式,即式,即查询方式和中断方式查询方式和中断方式。在程序的执行过程中,由于某种外界的在程序的执行过程中,由于某种外界的原因,必须终止原因,必须终止,而去执行相应的处,而去执行相应的处理程序,待处理结束后,再回来继续执行理程序,待处理结束后,再回来继续执行。这个过程叫中断。这个过程叫中断。 中断的概念 执行主程序主程序继续执行主程序断点中断请求中断响应执行中断处理程序中断返回,可实现二,可实现二级中断服务程序的嵌套。允许或禁止向级中断服
2、务程序的嵌套。允许或禁止向CPUCPU请求中断。请求中断。有关的特殊功能寄存器(有关的特殊功能寄存器(SFRSFR)有:)有:中断允许寄存器中断允许寄存器IEIE中断优先级控制寄存器中断优先级控制寄存器IPIP中断源寄存器(中断源寄存器(TCONTCON、SCONSCON中的有关位)中的有关位)注:均可位寻址。注:均可位寻址。中断系统结构 IE0TF0IE1TF1TIRI中断请求标志EX0ET0EX1ET1ES1PX0PT0PX1PT1PS高级低级内部查询内部查询入口地址入口地址INT0INT1T0T1TIRI中断允许控制中断优先级EA中断源中断系统结构图80518051单片机共有单片机共有5
3、 5个中断源,分个中断源,分别是别是2 2个个外部中断外部中断、 2 2个个定时中定时中断断和和1 1个个串行中断。串行中断。外部中断是:外部中断是:外部中断外部中断0-INT00-INT0,由,由P3.2P3.2提供,提供,外部中断外部中断1INT11INT1,由,由P3.3P3.3提供,提供,外部中断有两种触发方式,即外部中断有两种触发方式,即。定时器和串行口中断分别是:定时器和串行口中断分别是:T0T0溢出中断溢出中断; 由片内定时由片内定时/ /计数器计数器0 0提供提供T1T1溢出中断溢出中断; 由片内定时由片内定时/ /计数器计数器1 1提供提供串行口中断串行口中断RI/TIRI/
4、TI; 由片内串行口提供由片内串行口提供 中断源与中断有关的特殊功能寄存器 与中断有关的特殊功能寄存器有四个:与中断有关的特殊功能寄存器有四个:TCON-TCON-定时控制寄存器,定时控制寄存器, IE-IE-中断允许控制寄存器,中断允许控制寄存器,IP-IP-中断优先级控制寄存器,中断优先级控制寄存器,SCON-SCON-及串行口控制寄存器。及串行口控制寄存器。(1)定时控制寄存器TCON D7D6D5D4D3D2D1D0TF1TF0IE1IT1IE0IT0中断请求标志l注意:电平触发时,在中断返回前应撤除中断源。注意:电平触发时,在中断返回前应撤除中断源。(2)串行口控制寄存器SCON D
5、7D6D5D4D3D2D1D0TIRI(3)中断允许控制寄存器IE D7D6D5D4D3D2D1D0EAESET1EX1ET0EX0(4)中断优先级控制寄存器(IP) D7D6D5D4D3D2D1D0PSPT1PX1PT0PX0实现两级控制实现两级控制 注意:复位时,禁止所有中断注意:复位时,禁止所有中断每一中断源可编程为高优先级或低优先级中断,以实现二级嵌套。每一中断源可编程为高优先级或低优先级中断,以实现二级嵌套。默默认的优先次序为:认的优先次序为:INT0INT0、C/T0C/T0、INT1INT1、C/T1C/T1、串行口中断(依次从高、串行口中断(依次从高到低)到低)中断响应 当有某
6、个中断源请求中断,同时特殊功能寄存器,则CPU可以响应中断;若有多个中断源,则CPU响应中断级别最高若中断源;若优先级相同,则8051单片机按如下优先级顺序进行响应。 80518051单片机接收到中断申请后,把申请单片机接收到中断申请后,把申请锁定在各自的中断标志锁定在各自的中断标志位位中,在下一个机器周期中,在下一个机器周期查询中断标志,并在查询中断标志,并在下一个机器周期完成检测和优先级排队,以决定响应哪个中断下一个机器周期完成检测和优先级排队,以决定响应哪个中断源,响应中断过程包括三部分工作:源,响应中断过程包括三部分工作:单片机响应中断后,自动执行下列操作:中断程序的入口地址称为中断程
7、序的入口地址称为,80518051单片机一单片机一旦响应中断就会根据不同的中断源转入相应的旦响应中断就会根据不同的中断源转入相应的执行中断服务程序。执行中断服务程序。不同中断源对应的中断服务程序入口地址如下:不同中断源对应的中断服务程序入口地址如下: 中断源中断源 入口地址入口地址 INT0INT0 0003 0003 T0T0 000BH 000BH INT1 INT1 0013H 0013H T1 T1 001BH 001BH RI/TI RI/TI 0023H 0023H 中断响应后,中断响应后,TCON和和SCON的中断请求标志位应及时撤除的中断请求标志位应及时撤除,否则系统在下一个机
8、器周期查询到中断标志位仍然有效后,便否则系统在下一个机器周期查询到中断标志位仍然有效后,便会重复响应。中断源不同,中断请求撤除的方式也不同:会重复响应。中断源不同,中断请求撤除的方式也不同:系统自动将系统自动将TF0/TF1标志位清零标志位清零,不需要用户参与。,不需要用户参与。需要软件清零。需要软件清零。系统自动将外部系统自动将外部。系统响应中断后自动将系统响应中断后自动将,但是,但是如果连接外部中断引脚(如果连接外部中断引脚(INT0/INT1)的低电平不撤除,在以)的低电平不撤除,在以后的周期采样时,系统便会重复响应。后的周期采样时,系统便会重复响应。中断服务函数中断服务函数 Keil
9、C51编译器支持在C语言源程序中直接编写8051单片机的中断服务函数程序,一般形式为:函数类型函数类型 函数名函数名( (形式参数表形式参数表) interrupt n ) interrupt n 关键字intrrupt后面的n是中断号, n的取值范围为031。编译器从8n+3处产生中断向量, 具体的中断号n和中断向量取决于8051系列单片机芯片型号。 常用中断号与中断向量常用中断号与中断向量 中断号 n中 断 源中断向量 8n+30外部中断 00003H1定时器 0000BH2外部中断 10013H3定时器 1001BH4串行口0023H1.1.开相应中断源的中断。开相应中断源的中断。2.2
10、.设定中断优先级。设定中断优先级。3.3.若为外部中断,设定外部中断的触发方式。若为外部中断,设定外部中断的触发方式。定时器定时器/计数器的工作方式与控制计数器的工作方式与控制 80518051单片机有单片机有:定:定时器时器0 0(T0T0)和定时器)和定时器1 1(T1T1)。它们都有定时)。它们都有定时器或事件计数的功能,可用于定时控制、延时、器或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。对外部事件计数和检测等场合。 T0T0由由2 2个特殊功能寄存器个特殊功能寄存器构成,构成,T1T1则由则由构成。见构成。见P8P8定时定时/计数器结构计数器结构一、定时器/计数
11、器的功能 1. 1. 定时功能定时功能-计数输入信号是内部时钟脉内部时钟脉冲冲fosc/12fosc/12,每个使计数器的值加1。2. 2. 计数功能计数功能-计数脉冲来自相应的外部输入引外部输入引脚脚T0为P3.4,T1为P3.5。输入脉冲负跳变时,负跳变时,计数器值加计数器值加1 1。计数的最高频率一般不超过计数的最高频率一般不超过),高低电平至少保持),高低电平至少保持一个机器周期一个机器周期定时/计数器的核心部件是1616位二进制加位二进制加1 1计数器计数器(TH0、TL0或TH1、TL1) 。具有两个功能:二、定时器计数器的特殊功能寄存器 与定时器计数器有关的特殊功能寄存器有:T1
12、控制T0控制M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7门控位。若为1测量外部中断引脚正脉冲宽度,一般为0计数/定时选择。0 0:定时器模式,:定时器模式,1 1:计数器模式。:计数器模式。工作方式选择00:方式:方式001:方式:方式110:方式:方式211:方式:方式3D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0启动定时/计数器0 停止停止1 启动启动定时/计数器中断标志TF0:T0中断标志位中断标志位TF1:T1中断标志位中断标志位计数脉冲输入三、定时器计数器的工作方式 定时器计数器共有四种工作方式 (1)方式0:13位
13、定时/计数器方式 TF0T0TR0GATEINT011&C/T=1振荡器1/12C/T=0TL0 TH08位低5位13位计数器定时器计数器fosc/12输入被置为1(2)方式1:16位计数器方式 振荡器1/12TL0 TH0TF011&T0TR0GATEINT0C/T=0C/T=18位8位16位计数器(3)方式2:8位自动装入时间常数方式 TF0振荡器1/1211&T0TR0GATEINT0C/T=0C/T=1 TL0(8位) TH0(8位)常数缓冲器计数器(4)方式3:双8位方式 仅T0可以工作在方式3此时T0分成2个独立的计数器TL0和TH0 ,前者用原来T0的控制
14、信号(TR0、TF0),后者用原来T1的控制信号(TR1、TF1)。(1)计数器初值的计算计数器初值的计算 计数器采用加1计数,计数器的初值并不是要求计数的计数值,(根据不同工作方式,M可以是213、216或28),则计数器初值X的公式如下: X=M-要求的计数值要求的计数值 四、定时/计数器常数的计算(2)定时器初值的计算 在定时器模式下,计数器由单片机主脉冲fosc经12分频后计数(1 1个机器周期)个机器周期)。 (根据不同工作方式,M可以是213、216或28)定时器初值的计算定时器初值的计算 追问:若采用方式追问:若采用方式0 0定时,则定时器初值是多少?定时,则定时器初值是多少?五
15、、定时器的最大定时时间六、定时器/计数器的应用定时器定时器/计数器在应用前需要进行初始化:计数器在应用前需要进行初始化:确定TMOD控制字:编程时将控制字送TMOD; 计算计数器的计数初值:编程时将计数初值开中断(如果使用中断方式)置位EA、ETTR位置位,控制定时器的启动和停止。M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7D7D6D5D4D3D2D1D0EAESET1EX1ET0EX0M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7(3)分析:)分析:D7D6D5D4D3D2D1D0EAESET1EX1ET0EX0void Time
16、r_Init()TMOD = 0 x01; /T0采用方式采用方式1TH0 = 0 xB1; /T0赋初值,一次定时赋初值,一次定时20msTL0 = 0 xE0;ET0 = 1;/开定时器开定时器0中断中断EA = 1;/开总中断开总中断TR0 = 1;/启动定时器定时启动定时器定时(3 3)初始化语句如下:)初始化语句如下:(4)分析:)分析:void main() uchar count = 50; INI0_Init(); /外部中断初始化外部中断初始化 Timer_Init();/定时器初始化定时器初始化 P3 = 0 xff; /读引脚先写读引脚先写1 b_alarm = 1; w
17、hile(stop); TR0 = 1; /启动定时启动定时 while(1)P1 = temp; /从第一道工序从第一道工序开始开始 void TIMER0_INT() interrupt 1 TH0 = 0 xB1; /重装重装T0初值初值 TL0 = 0 xE0; if(-count=0)count = 50;temp = _crol_(temp,1); /计满计满1s后循环左移一位后循环左移一位 (见演示)(见演示)7 7段数码管和段数码管和74HC59574HC595芯片芯片7 7段段LEDLED数码显示器数码显示器LED数码显示器结构与原理数码显示器结构与原理 LED数码显示器是由
18、发光二极管显示字段的显示器件。在应用数码显示器是由发光二极管显示字段的显示器件。在应用系统中通常使用的是七段系统中通常使用的是七段LED数码显示器。这种显示块有数码显示器。这种显示块有共阴极共阴极与与共阳极共阳极两种,如下图所示。两种,如下图所示。abcdegGNDfdpGNDabcefgddpabcdefgdpdpgfedcba5V(a)(b) 使用LED显示器时,要注意区分共阴极和共阳极两种不同的接法。为了显示数字或字符,必须为了显示数字或字符,必须对数字或字符进行编码,简称对数字或字符进行编码,简称。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的段码正好是一个字节。 实际使
19、用中,通常通过单片机向LED显示接口输出不同段码,即可显示相应的数字。显示数字显示数字共阳极接法共阳极接法gfedcba共阴极接法共阴极接法gfedcba179H06H512H6DHLEDLED数码显示器共阴极和共阳极段码数码显示器共阴极和共阳极段码 存储器存储器地址地址显示显示数字数字共阴极接法的七段状态共阴极接法的七段状态g f e d c b ag f e d c b a共阴极接法共阴极接法段码段码( (十六进制数十六进制数) )共阳极接法共阳极接法段码段码( (十六进制数十六进制数) )SEGSEG0 00 1 1 1 1 1 10 1 1 1 1 1 13F3F4040SEG+1SE
20、G+11 10 0 0 0 1 1 00 0 0 0 1 1 006067979SEG+2SEG+22 21 0 1 1 0 1 11 0 1 1 0 1 15B5B2424SEG+3SEG+33 31 0 0 1 1 1 11 0 0 1 1 1 14F4F3030SEG+4SEG+44 41 1 0 0 1 1 01 1 0 0 1 1 066661919SEG+5SEG+55 51 1 0 1 1 0 11 1 0 1 1 0 16D6D1212SEG+6SEG+66 61 1 1 1 1 0 11 1 1 1 1 0 17D7D0202SEG+7SEG+77 70 0 0 0 1 1
21、1 0 0 0 0 1 1 1 07077878SEG+8SEG+88 81 1 1 1 1 1 11 1 1 1 1 1 17F7F0000SEG+9SEG+99 91 1 0 0 1 1 11 1 0 0 1 1 167671818SEG+10SEG+10A A1 1 1 0 1 1 11 1 1 0 1 1 177770808SEG+11SEG+11B B1 1 1 1 1 0 01 1 1 1 1 0 07C7C0303SEG+12SEG+12C C0 1 1 1 0 0 10 1 1 1 0 0 139394646SEG+13SEG+13D D1 0 1 1 1 1 01 0 1 1
22、 1 1 05E5E2121SEG+14SEG+14E E1 1 1 1 0 0 11 1 1 1 0 0 179790606SEG+15SEG+15F F1 1 1 0 0 0 11 1 1 0 0 0 171710E0E将显示的数字或字符转换成的过程。具体分为和。该数码管内部集成硬件译码器将输入的该数码管内部集成硬件译码器将输入的BCD码转换成码转换成采用普通的采用普通的,单片机通过,单片机通过8根数据线和一位根数据线和一位数码管相连,根据单片机和数码管的连接方式,利用软件数码管相连,根据单片机和数码管的连接方式,利用软件查表方式得到显示数值的查表方式得到显示数值的。uint code u
23、int code table=0 x3f,0 x06,0 x5b,0 x4f,table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x670 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x67; /; /段码表段码表main() main() while(1)while(1)uchar i;uchar i;for(i=0;i10;i+)for(i=0;i10;i+)P0=tablei;P0=tablei;delay();delay(); 动态扫描技术采用软件译码的数码管显示电路中,由于每一位数码管都采用软件译
24、码的数码管显示电路中,由于每一位数码管都需要需要8根数据线与其相连,根数据线与其相连,74HC595芯片介绍Q015Q11Q22Q33Q44Q55Q66Q77Q79SH_CP11ST_CP12DS14MR10OE13U574HC59574HC595引脚介绍引脚介绍八位并行输出端,直接和数码管的段码八位并行输出端,直接和数码管的段码控制端和位选控制端相连。控制端和位选控制端相连。级联输出端,和下一个级联输出端,和下一个595芯片的芯片的SI端相连端相连。SI(DS):串行数据输入线串行数据输入线MR:数据清零端,低电平有效。数据清零端,低电平有效。SH_CP:上升沿数据进入移位寄存器上升沿数据进入移位寄存器,下降沿移,下降沿移位寄存器数据不变,位寄存器数据不变,ST_CP:上升沿移位寄存器的数据进入存储寄存上升沿移位寄存器的数据进入存储寄存器。使用时现将此端置为低电平,当器。使用时现将此端置为低电平,当数据移位结数据移位结束后,发送一个正脉冲,更新数据束后,发送一个正脉冲,更新数据OE:使能输出端,低电平有效使能输出端,低电平有效