《简易加减计数器和交通信号灯设计概述课件》由会员分享,可在线阅读,更多相关《简易加减计数器和交通信号灯设计概述课件(98页珍藏版)》请在金锄头文库上搜索。
1、单片机原理及应用项目三简易加减计数器和交通信号灯设计任务任务1简易简易加减计数器加减计数器的设计的设计1. 1. 技能要求技能要求 单片机输出口接单片机输出口接3 3位数码管和三个独立按键,这位数码管和三个独立按键,这3 3位数码管分别显位数码管分别显示一个变量的个位、十位和百位,三个按键分别作为示一个变量的个位、十位和百位,三个按键分别作为“加加”、“减减”和和“清零清零”功能,当按下功能,当按下“加加”键时,数码管显示的变量加键时,数码管显示的变量加1 1,当按下,当按下“减减”键时,数码管显示的变量减键时,数码管显示的变量减1 1,当按下,当按下“清零清零”键时,数码管显示和变量键时,数
2、码管显示和变量为为0 0。知识链接一知识链接一 键盘接口电路键盘接口电路独立联接式无编码键盘独立联接式无编码键盘独立联接式编码键盘独立联接式编码键盘1、键盘键盘的分的分类与类与结构结构独立联接式键盘独立联接式键盘矩阵联接式键盘矩阵联接式键盘屏幕键盘屏幕键盘( (触摸屏)触摸屏)无编码键盘无编码键盘编码键盘编码键盘无编码,简单有效,键数较少时采用无编码,简单有效,键数较少时采用编码,节省编码,节省I/OI/O口线,键数较多时采用口线,键数较多时采用任务任务1简易简易加减计数器加减计数器的设计的设计1 1键盘的工作原理及去抖动键盘的工作原理及去抖动 对应任何按键来说,由于机械触点的弹性作用,触点在
3、闭对应任何按键来说,由于机械触点的弹性作用,触点在闭合和断开瞬间的电接触情况不稳定,造成了电压信号的抖动现合和断开瞬间的电接触情况不稳定,造成了电压信号的抖动现象,象,如图如图所示。按键的抖动时间一般为所示。按键的抖动时间一般为5ms5ms10ms10ms。这种现象会。这种现象会引起单片机对于一次键操作进行多次处理,因此必须设法消除引起单片机对于一次键操作进行多次处理,因此必须设法消除键接通或断开时的抖动现象。常用的去抖动方法有硬件和软件键接通或断开时的抖动现象。常用的去抖动方法有硬件和软件两种。两种。闭合稳定理想波形实际波形前沿抖动后沿抖动任务任务1简易简易加减计数器加减计数器的设计的设计a
4、 a)硬件去抖)硬件去抖 硬件消抖可以采用硬件消抖可以采用R-SR-S触发器或单稳电路构成去抖电路,分别触发器或单稳电路构成去抖电路,分别如图所示。如图所示。 硬件消抖因为要增加硬件开销,硬件消抖因为要增加硬件开销, 造成电路复杂,除了在数字造成电路复杂,除了在数字电路里使用外,在单片机系统中不太采用。电路里使用外,在单片机系统中不太采用。 任务任务1简易简易加减计数器加减计数器的设计的设计ob b)软件去抖)软件去抖 在检测到有键按下时,执行一个在检测到有键按下时,执行一个10ms10ms的延时程序后,再确认该键是否保持闭的延时程序后,再确认该键是否保持闭合状态。另外一种方法是连续判断按键合
5、状态。另外一种方法是连续判断按键所在线路的电平,如果连续所在线路的电平,如果连续100100次(甚至次(甚至更多)都出现低电平(一般按键都是低更多)都出现低电平(一般按键都是低电平表示按下),就认为按键已经稳定,电平表示按下),就认为按键已经稳定,可以进行识别,这是企业实际开发产品可以进行识别,这是企业实际开发产品中常用的方法。中常用的方法。以以P1.0P1.0所接按键为例,所接按键为例,其编程流程图如图所示其编程流程图如图所示. . 任务任务1简易简易加减计数器加减计数器的设计的设计sbitkey=P10;key=1;/P1.0置置“1”,作输入口,作输入口if(key=0)/判断按键是否按
6、下判断按键是否按下delay10ms();/延时延时10msif(key=0)/再次判断按键是否按下再次判断按键是否按下a+;/按键功能代码(变量按键功能代码(变量a加加“1”操作)操作)while(key=0);/等待按键释放等待按键释放任务任务1简易简易加减计数器加减计数器的设计的设计 以以单单片片机机为为基基础础的的电电子子产产品品设设计计中中,键键盘盘是是一一种种最最为为常常见见的的人人机机交交互互设设备备。通通常常,键键数数较较少、键盘的功能简单。少、键盘的功能简单。1 1简单键盘的扫描程序设计简单键盘的扫描程序设计 键盘扫描程序嵌入到键盘扫描程序嵌入到主程序循环之中,与主主程序循环
7、之中,与主程序一起构成主循环套。程序一起构成主循环套。 键敲击速度约几次键敲击速度约几次/S, ,设计键盘扫描程序设计键盘扫描程序时时, ,必须保证约必须保证约100mS内就要循环扫描内就要循环扫描1次次。任务任务1简易简易加减计数器加减计数器的设计的设计任务任务1简易简易加减计数器加减计数器的设计的设计任务任务1简易简易加减计数器加减计数器的设计的设计读取值读取值输出值输出值键码键码 键名键名P1.7P1.7P1.6P1.6 P1.5P1.5 P1.4P1.4 P1.3P1.3 P1.2P1.2 P1.1P1.1 P1.0P1.01 11 11 10 01 11 11 10 0EEHEEH1
8、#1#1 11 10 01 11 11 11 10 0DEHDEH2 21 10 01 11 11 11 11 10 0BEHBEH3 30 01 11 11 11 11 11 10 07EH7EH4 41 11 11 10 01 11 10 01 1EDHEDH5 51 11 10 01 11 11 10 01 1DDHDDH6 61 10 01 11 11 11 10 01 1BDHBDH7 70 01 11 11 11 11 10 01 17DH7DH8 81 11 11 10 01 10 01 11 1EBHEBH9 91 11 10 01 11 10 01 11 1DBHDBH101
9、01 10 01 11 11 10 01 11 1BBHBBH11110 01 11 11 11 10 01 11 17BH7BH12121 11 11 10 00 01 11 11 1E7HE7H13131 11 10 01 10 01 11 11 1D7HD7H14141 10 01 11 10 01 11 11 1B7HB7H15150 01 11 11 10 01 11 11 177H77H16161 11 11 11 1F FH H无键无键 按键数量进一步增加时按键数量进一步增加时, , 采用采用矩阵联接式键盘可节省更多的口线矩阵联接式键盘可节省更多的口线, , 接口电路也更简单。接
10、口电路也更简单。 1.1.21.1.2矩阵连接键矩阵连接键盘盘u键盘扫描程序的编写键盘扫描程序的编写(1)(1)判别有无键按下。判别有无键按下。(2) (2) 延时。延时。(3) (3) 键盘扫描取得闭合键的行、列值键盘扫描取得闭合键的行、列值键值键值。(4) (4) 用计算法或查表法得到用计算法或查表法得到键号键号。*(5) *(5) 判断闭合键是否释放,如没释放则继续等待。判断闭合键是否释放,如没释放则继续等待。(6) (6) 将闭合键将闭合键键号键号保存保存, , 然后返回。然后返回。键盘扫描程序一般流程:键盘扫描程序一般流程:任务任务1简易简易加减计数器加减计数器的设计的设计矩阵式键盘
11、的工作原理矩阵式键盘的工作原理 当键盘有键按下时,要逐行或逐列扫描,以判断是哪当键盘有键按下时,要逐行或逐列扫描,以判断是哪一个键按下。通常扫描方式有两种:扫描法和反转法。一个键按下。通常扫描方式有两种:扫描法和反转法。任务任务1简易简易加减计数器加减计数器的设计的设计u矩阵连接键盘扫描矩阵连接键盘扫描知识链接二:数码管显示技术知识链接二:数码管显示技术任务任务1简易简易加减计数器加减计数器的设计的设计1.2.11.2.1七段七段LEDLED显示器显示器 通常的通常的7 7段段LEDLED显示块中有显示块中有8 8个发光二极管,故也叫做个发光二极管,故也叫做8 8段显示器。其中段显示器。其中7
12、 7个个发光二极管构成七笔字形发光二极管构成七笔字形“8 8”,一个发光二极管构成小数点。,一个发光二极管构成小数点。1. LED1. LED显示器的结构与原理显示器的结构与原理任务任务1简易简易加减计数器加减计数器的设计的设计2.LED2.LED显示器的显示方式显示器的显示方式(1 1)LEDLED静态显示方式静态显示方式每一位显示都占用单独的具有锁存功能的每一位显示都占用单独的具有锁存功能的I/O接口,接口,com端连接在一起。端连接在一起。(2 2)LEDLED动态显示方式动态显示方式 是将所有数码管的是将所有数码管的“a,b,c,d,e,f,g,dp”的同名端连在一起,的同名端连在一起
13、,每个数码管每个数码管的的COM为各自独立的位选信号为各自独立的位选信号。即在某一时刻,只让某一位的位选线处于选即在某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态通状态,而其他各位的位选线处于关闭状态。任务任务1简易简易加减计数器加减计数器的设计的设计u显示器由显示器由6个共阴极个共阴极LED数码管构成;数码管构成;P0口输出显示段码,经由一片口输出显示段码,经由一片74LS245驱动输出给驱动输出给LED管;管;P1口输出位码(片选),经由口输出位码(片选),经由74LS05输出给输出给LED管。管。u动态扫描过程动态扫描过程任务任务1简易简易加减计数器加减计数器的
14、设计的设计u首先从段选线上送出字型编码,再控制位选端,字符就首先从段选线上送出字型编码,再控制位选端,字符就显示在指定数码管上,其他位选端无效的数码管都处于显示在指定数码管上,其他位选端无效的数码管都处于熄灭状态,持续熄灭状态,持续1.5ms时间,然后关闭所有显示;时间,然后关闭所有显示;u接下来又送出新的字型编码,按照上述过程又显示在另接下来又送出新的字型编码,按照上述过程又显示在另外一位数码管上,直到每一位数码管都扫描完为止,外一位数码管上,直到每一位数码管都扫描完为止,这这一过程即为动态扫描显示一过程即为动态扫描显示。u数码管其实是轮流依次点亮的,但由于数码管其实是轮流依次点亮的,但由于
15、人的视觉驻留效人的视觉驻留效应,应,因此当每个数码管点亮的时间小到一定程度时,人因此当每个数码管点亮的时间小到一定程度时,人就感觉不出字符的移动或闪烁,觉得每位数码管都一直就感觉不出字符的移动或闪烁,觉得每位数码管都一直在显示,达到一种稳定的视觉效果。在显示,达到一种稳定的视觉效果。任务任务1简易简易加减计数器加减计数器的设计的设计u参考程序如下:参考程序如下:#includeunsignedcharcodeTab=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C;unsignedcharcodeCol=0xfe,0xfd,
16、0xfb,0xf7,0xef,0xdf;voidDelay()unsignedchari;for(i=0;i250;i+);voidmain()/同时显示同时显示123456unsignedcharj;while(1)for(j=1;j7;j+)P0=Tabj;P1=Colj-1;/开第一个(共阴)数码管开第一个(共阴)数码管Delay();P1=0xff;/关数码管关数码管Delay();任务任务1简易简易加减计数器加减计数器的设计的设计1.31.3数码管显示数码管显示4444键盘编号键盘编号1. 1. 技能要求技能要求单片机单片机P2P2接接1 1位数码管,位数码管,P1P1口接由口接由1
17、616个个按键组成的按键组成的4444行列键盘。当按下这行列键盘。当按下这1616个按键的其中之一时,数码管显示该按个按键的其中之一时,数码管显示该按键对应的键盘编号。键对应的键盘编号。任务任务1简易简易加减计数器加减计数器的设计的设计u. . 仿真电路图仿真电路图 数码管显示数码管显示4444键盘编号的电路图如键盘编号的电路图如下下图图所示,电路中的轻所示,电路中的轻触按键使用元件库中的触按键使用元件库中的“button”button”元件,特别元件,特别注意注意1616个按键的连接关个按键的连接关系及其和单片机之间的连接关系。系及其和单片机之间的连接关系。任务任务1简易简易加减计数器加减计
18、数器的设计的设计u.程序设计与调试程序设计与调试程序采用线翻转法识别闭合键,程序采用线翻转法识别闭合键,反转法原理:反转法原理:行作低电平输出,列作输入,行作低电平输出,列作输入,读列线;列作低电平输出,行作输入,读行线。数码管静态显示方式。读列线;列作低电平输出,行作输入,读行线。数码管静态显示方式。任务任务1简易简易加减计数器加减计数器的设计的设计intmain()while(1)keyScan();delay(unsignedinti)while(i-);voidkeyScan()unsignedchartemp,a;temp=0xff;P1=0xf0;if(P1!=0xf0)/判断是否
19、有按键按下判断是否有按键按下delay(1000);/延时去抖延时去抖if(P1!=0xf0)/再次判断是否有按键按下再次判断是否有按键按下P1=0xf0;/行作输出,列作输入行作输出,列作输入temp=P1;/读取列值读取列值P1=0x0f;/列作输出,行作输入列作输出,行作输入temp=temp|P1;/读取行值并和列值合并读取行值并和列值合并switch(temp)case0xee:a=0;break;case0xde:a=1;break;case0xbe:a=2;break;case0x7e:a=3; break;参考程序如下:参考程序如下:#includeunsignedcharco
20、deseg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,/09的段码的段码0x88,0x83,0xc6,0xa1,0x86,0x8e;/AF的段码的段码case0xed:a=4;break;case0xdd:a=5;break;case0xbd:a=6;break;case0x7d:a=7;break;case0xeb:a=8;break;case0xdb:a=9;break;case0xbb:a=10;break;case0x7b:a=11;break;case0xe7:a=12;break;case0xd7:a=13;break;ca
21、se0xb7:a=14;break;case0x77:a=15;break;P2=sega;/将键值对应的段码送到将键值对应的段码送到P2口口P1=0xf0;while(P1!=0xf0)delay(50);任务任务1简易简易加减计数器加减计数器的设计的设计(1 1)画出硬件电路图)画出硬件电路图u简易简易加减计数器加减计数器任务实施:任务实施:任务任务1简易简易加减计数器加减计数器的设计的设计(2).程序设计与调试程序设计与调试要获取一个变量的每一位数字的值,用到除法运算符要获取一个变量的每一位数字的值,用到除法运算符“/”/”和模运算符和模运算符“%”%”两个算术运算符。当两个整数作除法运
22、算时结果仍为整数,余数则会被两个算术运算符。当两个整数作除法运算时结果仍为整数,余数则会被丢弃,因此可作为取整操作;模运算丢弃,因此可作为取整操作;模运算“%”%”表示取余操作。表示取余操作。例如,求一个变量例如,求一个变量temptemp的的“百、十、个百、十、个”位,分别赋给变量位,分别赋给变量a a、b b、c c的操的操作如下:作如下:a=temp/100%10;a=temp/100%10;/除以除以100100,再对再对1010取余取余b=temp/10%10;b=temp/10%10;/求得求得temptemp的十位的十位c=temp%10;c=temp%10;/求得求得tempt
23、emp的个位的个位要在要在LEDLED数码管上显示变量数码管上显示变量temptemp的的“百、十、个百、十、个”位,可直接写作:位,可直接写作:P2=segtemp/100%10;P2=segtemp/100%10;P2=segtemp/10%10;P2=segtemp/10%10;P2=segtemp%10;P2=segtemp%10;其中其中segseg是存放是存放0 09 9段码的数组。段码的数组。任务任务1简易简易加减计数器加减计数器的设计的设计#include#includeunsignedchara;unsignedcharcodeseg=0xc0,0xf9,0xa4,0xb0,
24、0x99,0x92,0x82,0xf8,0x80,0x90;/0/09十个数字的共阳型段码十个数字的共阳型段码sbitk1=P10;sbitk2=P12;sbitk3=P14;voiddelay(unsignedintj)while(j-);display()unsigned char i,wk=0x01; /wkunsigned char i,wk=0x01; /wk变量作位控,初始选通右边第变量作位控,初始选通右边第1 1位位unsigned char buf3;unsigned char buf3; / /声明数码管显示字形缓冲数组声明数码管显示字形缓冲数组buf0=sega%10;bu
25、f0=sega%10; /a /a的个位的个位buf1=sega/10%10;buf1=sega/10%10; /a /a的十位的十位buf2=sega/100;buf2=sega/100; /a /a的百位,小于的百位,小于999999时可以不对时可以不对1010取余取余独立按键控制数码管加减计数的程序如下:独立按键控制数码管加减计数的程序如下:任务任务1简易简易加减计数器加减计数器的设计的设计for(i=0;i3;i+)P3=wk; /输出位控输出位控P2=bufi;/依次输出段码依次输出段码delay(50);/延时延时wk=_crol_(wk,1); /位控左移一位位控左移一位P2=0
26、xff; /熄灭所有数码管(消隐)熄灭所有数码管(消隐)voidbutton()k1=1;if(k1=0)delay(1000);if(k1=0)a+;while(k1=0)display(); k2=1;if(!k2)/如果如果k2为低电平的另一种写示为低电平的另一种写示delay(1000);if(!k2)a-;while(!k2)display();k3=1;if(k3=0)delay(1000);if(k3=0)a=0;while(k3=0)display();intmain()while(1)button();display();26任务任务3方波发生器的设计方波发生器的设计1. 1
27、. 技能要求技能要求 设晶振频率设晶振频率6MHz6MHz。利用单片机定时器。利用单片机定时器T0T0的方式的方式1 1,在,在P3.0P3.0端口端口上输出周期为上输出周期为1ms1ms的方波。的方波。2. 2. 仿真电路图仿真电路图 本任务仿真电路图如图所示。本任务仿真电路图如图所示。P3.0P3.0端口的示波器用于观察波形端口的示波器用于观察波形和计算信号频率。图中示波器的每小格为和计算信号频率。图中示波器的每小格为0.1ms0.1ms,因此信号周期为,因此信号周期为1ms1ms,频率为频率为1KHz1KHz。u 操作步骤:操作步骤:u图中右上角的就是模拟示波器,图中右上角的就是模拟示波
28、器,4 4踪。踪。 仿真时可以出现示波器界面,可以对其操作。仿真时可以出现示波器界面,可以对其操作。 操作方法与一般示波器相同。操作方法与一般示波器相同。u 图中最下部的是个频率计,运行仿真时可以显示测量到的方图中最下部的是个频率计,运行仿真时可以显示测量到的方波的频率值。波的频率值。l 添加这添加这2 2个虚拟仪器的方法是,个虚拟仪器的方法是,在软件左边点击虚拟仪器图标,在软件左边点击虚拟仪器图标,选择第一个就是虚拟示波器,第三个就是频率计。选择第一个就是虚拟示波器,第三个就是频率计。 把虚拟示波器的输入端接到把虚拟示波器的输入端接到P2P2口的任意引脚,虚拟频率计也口的任意引脚,虚拟频率计
29、也可以将输入端接入可以将输入端接入P2P2口任意引脚。口任意引脚。 在这幅图里,采用网络标号的形式接线,看起来图面整洁一在这幅图里,采用网络标号的形式接线,看起来图面整洁一点。点。任务任务3方波发生器的设计方波发生器的设计采用查询方式处理的程序:采用查询方式处理的程序:#includesbit P3_0=P30;voidmain()TMOD=0x01;TL0=0x06;TH0=0xff;TR0=1;while(1)while(!TF0);TF0=0;P3_0=P3_0;u频率为频率为1KHz的方波,其周期为的方波,其周期为1/1KHz,即即1ms。要在。要在P3.0端口上输出周期为端口上输出周
30、期为1ms的方波,需要使的方波,需要使P3.0端口每隔端口每隔0.5ms取反取反一次。我们可以通过定时器作一次。我们可以通过定时器作0.5ms定时,定时,定时时间到,在程序中对定时时间到,在程序中对P3.0取反。取反。(1)确定工作模式和工作方式)确定工作模式和工作方式定时器定时器T0工作方式工作方式1时:时:M1M0=01,c/T=0,GATE=0,高,高4位未使用,全部赋位未使用,全部赋0,则,则TMOD=0x01。(2)计算)计算0.5ms定时定时T0的初值。的初值。晶振频率晶振频率6MHz,则机器周期为,则机器周期为2s,设,设T0的的初值为初值为X,则:,则:X=(2165002)=
31、65036=FF06H因此,因此,TH0的初值为的初值为0xff,TL0的初值为的初值为0x06。3.程序设计与调试程序设计与调试任务任务3方波发生器的设计方波发生器的设计相关知识:利用定时器实现延时相关知识:利用定时器实现延时80518051单片机内部有两个单片机内部有两个1616位的可编程定时器位的可编程定时器/ /计数器,称为定计数器,称为定时器时器0 0(T0T0)和定时器)和定时器1 1(T1T1),可编程选择其作为定时器用或),可编程选择其作为定时器用或作为计数器用。作为计数器用。 8051 8051定时器定时器/ /计数器由定时器计数器由定时器T0T0、定时器、定时器T1T1、定
32、时器方式、定时器方式寄存器寄存器TMODTMOD和定时器控制寄存器和定时器控制寄存器TCONTCON组成。组成。TMODTMOD、TCONTCON与与T0T0、T1T1间通过内部总线及逻辑电路连接,间通过内部总线及逻辑电路连接,TMODTMOD用于设置定时器的工用于设置定时器的工作方式,作方式,TCONTCON用于控制定时器的启动与停止。用于控制定时器的启动与停止。基本思想基本思想:每隔:每隔1ms1ms在程序中对在程序中对P P3 3.0.0取反取反, ,如如此循环不止。此循环不止。任务任务3方波发生器的设计方波发生器的设计定时器定时器/ /计数器计数器结构结构如如图图6-16-1所示,定时
33、器所示,定时器/ /计数器计数器T0T0由特殊由特殊功能寄存器功能寄存器TH0TH0、TL0TL0构成,定时器构成,定时器/ /计数器计数器T1T1由特殊功能寄由特殊功能寄存器存器TH1TH1、TL1TL1构成。构成。30图6-1AT89S51单片机的定时器/计数器结构框图 定时器定时器/ /计数器的结构计数器的结构41.1.计数功能计数功能4计数器用于统计从计数器用于统计从TO(P3.4)TO(P3.4)和和TlTl(P3.5)(P3.5)两个引脚输入两个引脚输入脉冲的负跳变数量。脉冲的负跳变数量。负跳变是指前一个机器周期采样负跳变是指前一个机器周期采样为高电平,后一个机器周期为低电平。每输
34、入一个脉为高电平,后一个机器周期为低电平。每输入一个脉冲负跳变,计数器加冲负跳变,计数器加1 1。4输入脉冲的高电平与低电平至少应保持一个机器周期输入脉冲的高电平与低电平至少应保持一个机器周期时间,以确保正确采样时间,以确保正确采样,因此输入脉冲的频率最高为,因此输入脉冲的频率最高为单片机内部脉冲频率的一半。如果内部脉冲频率为单片机内部脉冲频率的一半。如果内部脉冲频率为1 1 MHZMHZ,则最高计数频率为,则最高计数频率为0.5 MHz0.5 MHz。定时器定时器/ /计数器的功能计数器的功能DATE: 2019/11/163142.2.定时功能定时功能4定时功能是单片机通过对内部机器脉冲信
35、号计数定时功能是单片机通过对内部机器脉冲信号计数实现的,计数值乘以机器周期就是相应的时间。实现的,计数值乘以机器周期就是相应的时间。例如,如果单片机采用例如,如果单片机采用12 MHz12 MHz的晶振,则机器内的晶振,则机器内部脉冲频率为部脉冲频率为1 MHz1 MHz,则机器周期为,则机器周期为1us1us,若共计,若共计数数10001000,则用时为,则用时为1ms1ms时间。时间。 定时器定时器/ /计数器的功能计数器的功能DATE: 2019/11/1632图图5-1TMOD格式格式8 8位分为两组,位分为两组,高高4 4位位控制控制T1T1,低低4 4位位控制控制T0T0。TMOD
36、TMOD各位的功能。各位的功能。(1 1)GATEGATE门控位门控位。00:仅由运行控制位仅由运行控制位TRTRx x(x x=0,1=0,1)来控制定时器)来控制定时器/ /计数器运行。计数器运行。11:用外中断引脚(用外中断引脚( 或或 )上的电平与运行控制位)上的电平与运行控制位TRTRx x共同来控制定共同来控制定时器时器/ /计数器运行。计数器运行。33 工作方式控制寄存器工作方式控制寄存器TMODTMOD(2)M1、M0工作方式选择位工作方式选择位M1、M0共有4种编码,对应于4种工作方式种工作方式的选择,如表所示。(3)C/计数器模式和定时器模式选择位计数器模式和定时器模式选择
37、位34 工作方式控制寄存器工作方式控制寄存器TMODTMOD0 0:为定时器工作模式:为定时器工作模式;1;1:为计数器工作模式,计数器对外部:为计数器工作模式,计数器对外部输入引脚输入引脚T0T0(P3.4P3.4)或)或T1T1(P3.5P3.5)的外部脉冲(负跳变)计)的外部脉冲(负跳变)计数。数。35 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式1 1 方式方式0 0M1M1、M0=00M0=00时,被设置为工作方式时,被设置为工作方式0 0,等效逻辑结构框图如图,等效逻辑结构框图如图6-6-4 4所示(以定时器所示(以定时器/ /计数器计数器T1T1为例,为例,TMO
38、D.5TMOD.5、MOD.4=00MOD.4=00)。)。【训练【训练1】T0方式方式0定时定时设设fosc=6Mhzfosc=6Mhz,定时器,定时器/ /计数器计数器T0T0以工作方式以工作方式0 0定时定时2ms2ms,编写初始化程序。,编写初始化程序。说明:说明:foscfosc即为晶振频率。即为晶振频率。首先计算计数初值。首先计算计数初值。 根据公式根据公式4-24-2有:有:定时时间定时时间= =(8192-8192-计数初值)计数初值)12/fosc12/fosc计数初值计数初值=8192-=8192-定时时间定时时间fosc/12fosc/12 =8192-20006Mhz/
39、12 =8192-20006Mhz/12 =7192 =7192 =1C18H= =1C18H=1110000011100000 1100011000B B将此二进制数补足将此二进制数补足1313位数(不够位数(不够1313位前面加位前面加0 0,这个,这个例子够了,不用补),将高例子够了,不用补),将高8 8位送给位送给TH0TH0,将低,将低5 5位送位送TL0TL0即可。即可。 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式1 1 方式方式0 0高高8位是:位是:11100000B=E0H,送给送给TH0低低5位是:位是:11000B=00011000B=18H送给送给TL
40、02方式方式1当当M1、M0=01时,定时器时,定时器/计数器工作于计数器工作于方式方式1,这时定时器,这时定时器/计数器的等效电路逻辑结构如计数器的等效电路逻辑结构如图图5-3所示。所示。方式方式1和方式和方式0的差别的差别仅仅在于仅仅在于计数器的位数计数器的位数不同,方式不同,方式1为为16位计数器位计数器,由,由THx高高8位和位和TLx低低8位构成(位构成(x=0,1),),方式方式0则为则为13位计数器,有关控制状态位的含义(位计数器,有关控制状态位的含义(GATE、C/、TFx、TRx)与方式)与方式0相同。相同。 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式38图
41、6-3定时器/计数器方式1逻辑结构框图 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式4实例6-2 欲采用8051单片机控制8个LED同时以1s为周期闪烁,设计电路原理图并编写程序。设置定时/计数器的过程: 1)先初始化工作方式寄存器TMOD 2)为定时/计数器赋初值 3)通过控制寄存器TCON中的TRO或TRl实现启动或停止。 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式DATE: 2019/11/1639#include / 将8051单片机头文件包含到文件中main(void ) unsigned char counter; /设置无符号字符型变量,存储定时
42、器中断次数。 TMOD=0x01; /设T0为定时模式,由TR0控制启动和停止,且工作于方式1TH0=(65536-46083)/256; /初始化T0的高8位TL0=(65536-46083)%256; /初始化T0的低8位TF0=0; /初始化定时器溢出标志P0=0xff; /关闭LED counter=0; /从0开始计数 TR0=1; /启动定时器0 while(1) while(TF0=1) /如果定时器溢出 counter+; /计时次数加1 if(counter=20) /计时时间达到1s P0=P0; / P0所有位取反,使LED闪烁 counter=0; /重新从0开始计数
43、TH0=(65536-46083)/256; /重新初始化T0的高8位 TL0=(65536-46083)%256; /重新初始化T0的低8位 TF0=0; /重新初始化定时器溢出标志 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式DATE: 2019/11/16403方式方式2方式0和方式1的最大特点是计数溢出后,计数器为全0。因此在循环定时或循环计数应用时就存在用指令反复装入存在用指令反复装入计数初值的计数初值的问题问题。这不仅影响定时精度,也给程序设计带来麻烦。方式2就是针对此问题而设置的。当M1、M0为10时,定时器/计数器处于工作方式2,这时定时器/计数器的等效逻辑结构
44、如图图6-6所示所示(以定时器T1为例,x=1)。 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式4方式方式3是为增加一个增加一个8 8位定时器位定时器/ /计数器计数器而设,使AT89S51单片机具有3 3个个定时器/计数器。方式方式3 3只适用于只适用于T0T0,T1T1不能工作在方式不能工作在方式3 3。T1处于方式3时相当于TR1=0,停止计数(此时T1可用来作为串行口波特率产生器)。1 1工作方式工作方式3 3下的下的T0T0TMODTMOD的低的低2 2位为位为1111时,T0的工作方式被选为方式3,各引脚与T0的逻辑关系如图图5-85-8所示所示。定时器/计数器T0
45、T0分为两个独立的分为两个独立的8 8位计数器位计数器TL0TL0和和TH0TH0,TL0使用T0的状态控制位C/ 、GATE、TR0、42 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式43图6-6定时器/计数器方式2逻辑结构框图 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式TF0,而TH0被固定为一个固定为一个8位定时器位定时器(不能作为外部计数模式),并使用定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断请求源TF1。2T0工作在方式工作在方式3时时T1的各种工作方式的各种工作方式一般情况下,当当T1用作串行口的波特率发生器时,用作串行口的波特
46、率发生器时,T0才工作才工作在方式在方式3。T0处于工作方式3时,T1可定为方式0、方式1和方式2,用来作为串行口的波特率发生器,或不需要中断的场合。 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式45图6-8定时器/计数器T0方式3的逻辑结构框图 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式M1、M0工作方式选择位工作方式选择位M1、M0共有4种编码,对应于4种工作方式种工作方式的选择,如表所示。46 4 4种工作方式总结种工作方式总结字节地址为字节地址为88H88H,可位寻址,位地址为,可位寻址,位地址为88H88H8FH8FH。格式。格式如如图图5-35-3
47、所示。所示。定时器定时器/ /计数器控制寄存器计数器控制寄存器TCONTCON(1 1)TF1TF1、TF0TF0计数溢出标志位。计数溢出标志位。当计数器计数溢出时,该位置当计数器计数溢出时,该位置“1 1”。使用中断方式时,此位作。使用中断方式时,此位作为中断请求标志位,进入中断服务程序后由硬件自动清为中断请求标志位,进入中断服务程序后由硬件自动清“0 0”。(2 2)TR1TR1、TR0TR0计数运行控制位。计数运行控制位。TR1TR1位(或位(或TR0TR0位)位)=1=1,启动定时器,启动定时器/ /计数器工作的必要条件。计数器工作的必要条件。TR1TR1位(或位(或TR0TR0位)位
48、)=0=0,停止定时器,停止定时器/ /计数器工作。该位可由软件计数器工作。该位可由软件置置“1”“1”或清或清“0”“0”。 例例5-15-1:设定时器:设定时器1 1为定时工作方式,按方式为定时工作方式,按方式2 2工作,定时工作,定时器器0 0为计数方式,按方式为计数方式,按方式1 1工作,均由程序单独控制启动和工作,均由程序单独控制启动和停止,请给出停止,请给出TMODTMOD控制字。控制字。解:解:定时器定时器1 1做定时器使用则做定时器使用则D6=0D6=0;按方式按方式2 2工作则工作则D5=1D5=1,D4=0D4=0;由程序单独控制启停则由程序单独控制启停则 D7=0 D7=
49、0 。定时器定时器0 0做计数器使用则做计数器使用则D2=1D2=1;按方式按方式1 1工作则工作则D0=0D0=0,D1=1D1=1;由程序单独控制启停则由程序单独控制启停则 D3=0D3=0。因此命令字因此命令字TMODTMOD的值应为的值应为00100101B00100101B,即,即25H25H。 定时器定时器/ /计数器控制计数器控制DATE: 2019/11/1648定时定时/计数器的控制计数器的控制4实例6-3 图6-4是产品包装生产线的计数系统,每个产品经过计数装置时由机械杆碰合按键S1一次。当第一次计满一包(5个)则D1亮,计满第二包则D2亮,计满第八包则D1D8全亮,八包包
50、装成一箱,此后重复以上过程。编写程序实现此功能。DATE: 2019/11/1649解:程序如下:#include/包含包含51单片机寄存器定义的头文件单片机寄存器定义的头文件unsignedcharcounter;/计数初值计数初值main(void)TMOD=0x60;/使用使用T1的工作方式的工作方式2TH1=256-5;/T1的高的高8位赋初值位赋初值TL1=256-5;/T1的低的低8位赋初值位赋初值counter=0;TR1=1;/启动启动T1while(1)while(TF1=1)/如果计满如果计满TF1=0;/计数器溢出后,将计数器溢出后,将TF1清清0counter+;/计数
51、加计数加15.3定时定时/计数器的控制计数器的控制DATE: 2019/11/1650 switch(counter)/检查中断计数值检查中断计数值case1:P0=0xfe;break;/则第则第1个灯亮个灯亮case2:P0=0xfd;break;/第第2个灯亮个灯亮case3:P0=0xfb;break;/第第3个灯亮个灯亮case4:P0=0xf7;break;/第第4个灯亮个灯亮case5:P0=0xef;break;/第第5个灯亮个灯亮case6:P0=0xdf;break;/第第6个灯亮个灯亮case7:P0=0xbf;break;/第第7个灯亮个灯亮case8:P0=0x00;
52、counter=0;break;/8个灯全亮个灯全亮 5.3定时定时/计数器的控制计数器的控制DATE: 2019/11/1651东西东西方方向向 信号 绿灯亮绿灯关闭黄灯闪亮 红灯亮 时间 20S 2S5次共2S 22S南北南北方方向向 信号 红灯亮 绿灯亮绿灯关闭黄灯闪亮 时间 22S 20S2S 5次共2S任务任务4十字路口交通信号灯设计十字路口交通信号灯设计系统控制要求如下:系统控制要求如下:(1 1) 正常情况下,首先东西方向绿灯亮,南北方向红灯亮正常情况下,首先东西方向绿灯亮,南北方向红灯亮20s20s;经过后南北方向绿灯亮;经过后南北方向绿灯亮, , 东西方向红灯亮东西方向红灯亮
53、20s20s。(2 2) 黄黄灯灯5 5次次闪烁闪烁绿绿灯灭灯灭2 s 2 s ,之后重复(,之后重复(1 1)()(2 2)。)。任务任务4十字路口交通信号灯设计十字路口交通信号灯设计任务任务4十字路口交通信号灯设计十字路口交通信号灯设计任务任务4十字路口交通信号灯设计十字路口交通信号灯设计1)对)对TMOD赋值,确定工作方式。赋值,确定工作方式。TMOD为为T1、T2的工作方式寄存器的工作方式寄存器任务任务4十字路口交通信号灯设计十字路口交通信号灯设计T1控制T0控制M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7TMOD(89H) TMOD=TMOD=0 0
54、0 0 0 10 1 0 0 0 00 0 0 0 软件启动软件启动 定时定时 方式方式1 T01 T0未使用未使用TMOD赋值为10H1.1.采用定时器设计一个采用定时器设计一个0.50.5秒的延时子程序秒的延时子程序2 2)预置定时器初值)预置定时器初值X X,将初值写入,将初值写入TH1TH1、TL1TL1中。中。 初值初值X=X=最大计数值最大计数值- -计数次数计数次数 若若f foscosc=12MHZ,=12MHZ,在方式在方式1 1中,定时器中,定时器T1T1的最大计数值为的最大计数值为6553665536,而,而定时定时50ms50ms需要完成需要完成5000050000次计
55、数。由此可计算出计数器的初始值。次计数。由此可计算出计数器的初始值。 初值初值X=65536-50000=15536D=3CB0H X=65536-50000=15536D=3CB0H 任务任务4十字路口交通信号灯设计十字路口交通信号灯设计3 3)启动定时)启动定时/ /计数器工作,当计数器工作,当GATE=0GATE=0时,只要用时,只要用“SETB SETB bit”bit”指令将指令将TCONTCON寄存器中的启动位寄存器中的启动位TR0TR0或或TR1TR1置置“1”1”即可,即可,使用使用“CLR bit”CLR bit”指令可停止定时器工作。指令可停止定时器工作。 任务任务4十字路
56、口交通信号灯设计十字路口交通信号灯设计0.5s延时子程序如下:延时子程序如下:DELAY:MOVR3,#0AH;循环次数循环次数MOVTMOD,#10H;定时器定时器T1,方式,方式1MOVTH1,#3CH;定时定时50ms的初值的初值MOVTL1,#0B0HSETBTR1;启动定时器启动定时器LP1:JBCTF1,LP2SJMPLP1LP2:MOVTH1,#3CH;重装初值重装初值MOVTL1,#0B0HDJNZR3,LP1RET单片机C语言程序设计:LED模拟交通灯#include#defineucharunsignedchar;sbitRED_B=P00;/北向灯sbitYELLOW_B
57、=P01;sbitGREEN_B=P02;sbitRED_X=P03;/西向灯sbitYELLOW_X=P04;sbitGREEN_X=P05;sbitRED_N=P20;/南向灯sbitYELLOW_N=P21;sbitGREEN_N=P22;sbitRED_D=P23;/东向灯sbitYELLOW_D=P24;sbitGREEN_D=P25;ucharFlash_Count=0,Operation_Type=1;voidDelayMS(unsignedintx)TMOD=0x01;TR0=1;while(x-)!=0)TH0=0X3C;TL0=0Xb0;while(!TF0);TF0=0;
58、任务任务4十字路口交通信号灯设计十字路口交通信号灯设计/交通灯切换voidTraffic_Light()switch(Operation_Type)case1:/东西向绿灯与南北向红灯亮RED_X=1;YELLOW_X=1;GREEN_X=0;RED_N=0;YELLOW_N=1;GREEN_N=1;RED_D=1;YELLOW_D=1;GREEN_D=0;RED_B=0;YELLOW_B=1;GREEN_B=1;DelayMS(400);Operation_Type=2;break;case2:/东西向黄灯闪烁,绿灯关闭DelayMS(40);YELLOW_D=YELLOW_D;GREEN_
59、D=1;YELLOW_X=YELLOW_X;GREEN_X=1;if(+Flash_Count!=10)return;/闪烁Flash_Count=0;Operation_Type=3;break;case3:/东西向红灯,南北向绿灯亮RED_X=0;YELLOW_X=1;GREEN_X=1;RED_N=1;YELLOW_N=1;GREEN_N=0;RED_D=0;YELLOW_D=1;GREEN_D=1;RED_B=1;YELLOW_B=1;GREEN_B=0;DelayMS(400);Operation_Type=4;break;case4:/南北向黄灯闪烁DelayMS(40);YELL
60、OW_N=YELLOW_N;GREEN_N=1;YELLOW_B=YELLOW_B;GREEN_B=1;if(+Flash_Count!=10)return;Flash_Count=0;Operation_Type=1;/主程序voidmain()while(1)Traffic_Light();任务任务4十字路口交通信号灯设计十字路口交通信号灯设计采用查询方式处理的程序:采用查询方式处理的程序:#includesbitP1_0=P10;voidmain()TMOD=0x02;TL0=0x06;TH0=0x06;TR0=1;while(1)while(!TF0);TF0=0;P1_0=P1_0;
61、定时器编程总结定时器编程总结一、定时器的初始化步骤一、定时器的初始化步骤1 1、选择工作模式和工作方式。、选择工作模式和工作方式。 设置设置TMODTMOD。2 2、设置定时器的计数初值、设置定时器的计数初值。 设置设置THxTHx和和TLxTLx。3 3、启动定时器启动定时器。二、定时器查询式应用步骤二、定时器查询式应用步骤1 1、选择工作模式和工作方式。、选择工作模式和工作方式。 设置设置TMODTMOD。2 2、设置定时器的计数初值、设置定时器的计数初值。 设置设置THxTHx和和TLxTLx。3 3、启动定时器、启动定时器。4、查询溢出标准查询溢出标准TFTFX X5 5、清零溢出标志
62、、清零溢出标志6 6、应用处理、应用处理7 7、重装初始值、重装初始值1 1、设计方案、设计方案选用AT89C51单片机芯片、时钟电路、复位电路、电源、12个发光二极管和一个按键构成最小系统,完成对交通信号灯有急救车通过时的智能控制。任务要求任务要求图3-17交通信号灯模拟控制系统设计框图任务任务4智能交通信号灯设计智能交通信号灯设计并并行行接接口口AT89C51单片机单片机电电源源时时钟钟电电路路复复位位电电路路红红黄黄绿绿灯灯发发光光二二极极管管按按键键2 2、硬件电路设计、硬件电路设计任务实施任务实施图2-24交通灯控制电路原理图电路所用仿真元器件:AT89C51:单片机RES:电阻CR
63、YSTAL:晶振CAP:电容CAP-ELEC:电解电容BUTTON:按钮LED-GREEN:绿色发光二极管LED-YELLOW:黄色发光二极管LED-RED:红色发光二极管任务任务4智能智能交通信号灯设计交通信号灯设计表表3-6交通灯控制口线分配及控制状态表交通灯控制口线分配及控制状态表任务任务4智能智能交通交通交通信号灯设计交通信号灯设计P1.5P1.4P1.3P1.2P1.1P1.0P1端口数据状态说明东西方向南北方向红灯黄灯绿灯红灯黄灯绿灯11100011011100,1交替111100011111111011100,1交替1F3HP1.3交替EBHDEHP1.0交替DDH东西向通行,南
64、北向禁行东西向警告,南北向禁行东西向警告,南北向禁行南北向通行,东西向禁行南北向警告,东西向禁行南北向警告,东西向禁行100111100111EDHDBH紧急情况相关知识:相关知识:中断的基本知识中断的基本知识1、中断的基本概念、中断的基本概念中断是指计算机在执行某一程序的过程中,由于计算机系统内、外的某种原因,而必须中止原程序的执行,转去执行相应的处理程序,待处理结束之后,再回来继续执行被中止的原程序的过程。中断需要解决两个主要问题:如何从主程序转到中断服务程序和如何从中断服务程序返回主程序。(1)概念)概念图3-1中断的示意图任务任务4智能交通智能交通交通信号灯设计交通信号灯设计1) 1)
65、 分时操作分时操作: :解决了快速解决了快速CPUCPU与慢速外设之间的矛盾与慢速外设之间的矛盾, ,可使可使CPUCPU与外设并行工作。与外设并行工作。这样,这样,CPUCPU可启动多个外设同时工作,大大提高了工作效率。可启动多个外设同时工作,大大提高了工作效率。2) 2) 实时处理实时处理: :实时处理控制系统中许多随机产生的参数与信息实时处理控制系统中许多随机产生的参数与信息, ,即计算机具有实即计算机具有实时处理的能力时处理的能力, ,从而提高了控制系统的性能。从而提高了控制系统的性能。3) 3) 故障处理故障处理: :使系统具备处理故障的能力,如出现掉电、存储出错、运算溢出等使系统具
66、备处理故障的能力,如出现掉电、存储出错、运算溢出等故障故障, ,从而提高了系统自身的可靠性。从而提高了系统自身的可靠性。 (2)特点)特点(3)与中断相关的几个概念)与中断相关的几个概念1 1)中断服务子程序)中断服务子程序: :中断之后处理的程序,也称为中断处理子程序。中断之后处理的程序,也称为中断处理子程序。2 2)主程序)主程序: :原来正常执行的程序。原来正常执行的程序。3 3)中断源)中断源: :发出中断申请的信号或引起中断的事件。发出中断申请的信号或引起中断的事件。4 4)中断请求)中断请求:CPU:CPU接收到中断源发出的申请信号。接收到中断源发出的申请信号。5 5)中断响应)中
67、断响应: :接收中断申请,转到相应中断服务子程序处执行。接收中断申请,转到相应中断服务子程序处执行。6 6)断点)断点: :主程序被断开的位置(即地址),转入中断程序的位置。主程序被断开的位置(即地址),转入中断程序的位置。7 7)中断入口地址)中断入口地址: :中断响应后,中断程序执行的首地址。中断响应后,中断程序执行的首地址。8 8)中断返回)中断返回: :从中断服务程序返回到主程序。从中断服务程序返回到主程序。 任务任务4智能交通智能交通交通信号灯设计交通信号灯设计 IE0TCONSCONINT0IT0=0IT0=1INT1IT1=0IT1=1TF0 IE1TF1T0T1TIRITXDR
68、XDESET0EX0EX1ET1EA自自然然优优先先级级矢量地址高高级级中中断断请请求求自自然然优优先先级级矢量地址低低级级中中断断请请求求PX0PT0PX1PT1PSIEIP中断标志位中断源允许总允许中断优先级(P3.2)(P3.3)(P3.0)(P3.1)(P3.5)(P3.4)2 2、MCS-51单片机的中断系统及其管理单片机的中断系统及其管理(1)MCS-51中断系统的结构中断系统的结构任务任务4智能交通智能交通交通信号灯设计交通信号灯设计(2)中断源)中断源图3-1中断的示意图8051单片机有5个个中断请求源:单片机单片机INT0或 外部外部输入中断源INT0(P3.2)INT1或
69、外部外部输入中断源INT1(P3.3)T0 片内片内定时器T0的溢出(P3.4)T1 片内片内定时器T1的溢出(P3.5)串行口 片内片内串行口发送或接收中断源任务任务4智能交通智能交通交通信号灯设计交通信号灯设计(3)特殊功能寄存器)特殊功能寄存器TCON和和SCON1) 中断控制寄存器TCON TF1 TF0 IE1 IT1 IE0 IT0TCON7654321088H8F 8D 8B8A89 88位地址位地址T1溢出中断标志溢出中断标志(TCON.7): T1启动计数后,计满溢出由硬件置位TF1=1,向CPU请求中断,此标志一直保持到CPU响应中断后,才由硬件自动清0。也可用软件查询该标
70、志,并由软件清0。任务任务4智能交通智能交通交通信号灯设计交通信号灯设计 TF1 TF0 IE1 IT1 IE0 IT0TCON 88H外部中断外部中断INT1中断标志中断标志位位(TCON.3): IE11,外部中断1向CPU申请中断外部中断外部中断INT1(P3.3)触发方式控制位触发方式控制位(TCON.2):IT1=0,电平触发方式 IT1=1, 下降沿触发方式76543210注意:该寄存器可以位寻址。任务任务4智能交通智能交通交通信号灯设计交通信号灯设计2) 串行口控制寄存器SCON 返回 TI (SCON.1)串行发送中断标志。 RI (SCON.0)串行接收中断标志。 TI RI
71、SCON 98H76543210注意:该寄存器可以位寻址。 99 98位地址位地址任务任务4智能交通智能交通交通信号灯设计交通信号灯设计(4)中断的开放与禁止)中断的开放与禁止MCS-51系列单片机的5个中断源都是可屏蔽中断,由中断系统内部的专用寄存器IE负责控制各中断源的开放或屏蔽。 IE A8H EA ESET1EX1 ET0EX0例:允许定时器T0中断: SETB EA 位操作指令位操作指令 SETB ET0 或 MOV IE,#82H 字节操作指令字节操作指令或 MOV 0A8H,#82H76543210注意:该寄存器可以位寻址。AF ACABAAA9A8位地址位地址任务任务4智能交通
72、智能交通交通信号灯设计交通信号灯设计(5)中断优先权的处理)中断优先权的处理MCS-51中断系统设立了两极优先级高优先级和低优先级,可以程序设置5个中断源优先级,由中断优先级寄存器IP进行控制。 51单片机有两个中断优先级高级和低级 专用寄存器IP为中断优先级寄存器,用户可用软件设定 相应位为1,对应的中断源被设置为高优先级,相应位为0,对应的中断源被设置为低优先级 系统复位时,均为低优先级 该寄存器可以位寻址 PSPT1PX1PT0PX0 IP B8H 76543210 BCBBBAB9B8位地址位地址任务任务4智能交通智能交通交通信号灯设计交通信号灯设计同一级中的同一级中的5个中断源的优先
73、顺序是:个中断源的优先顺序是:INT0中断中断T0溢出中断溢出中断INT1中断中断T1溢出中断溢出中断串口中断串口中断高高低低出厂前已由厂家固化顺序出厂前已由厂家固化顺序事先约定事先约定中断优先原则:(概括为四句话)中断优先原则:(概括为四句话)1 1、低级不打断高级、低级不打断高级2 2、高级不睬低级、高级不睬低级3 3、同级不能打断、同级不能打断4 4、同级、同时中断,事先约定。、同级、同时中断,事先约定。 任务任务4智能交通智能交通交通信号灯设计交通信号灯设计4例例6-16-1,如如果果IPIP的的值值设设为为06H06H,如如果果5 5个个中中断断请请求求同同时时发发生生,求中断响应的
74、次序。求中断响应的次序。4解解:06H06H化化为为二二进进制制是是00000110B00000110B,根根据据表表6-46-4知知,定定时时器器T0T0和和外外中中断断 被被设设置置成成高高优优先先级级中中断断,因因此此如如果果5 5个个中中断断请请求求同同时时发发生生,中中断断响响应应的的先先后后次次序序是是:定定时时器器T0T0外外中中断断INT1INT1外中断外中断 定时器定时器T1T1串行中断。串行中断。任务任务4智能交通智能交通交通信号灯设计交通信号灯设计DATE: 2019/11/163、中断处理过程、中断处理过程(1)中断响应)中断响应 中断处理过程分为三个阶段:中断响应、中
75、断处理和中断返回。v 中断响应v 中断处理(又称中断服务)v 中断返回v 中断请求的撤除中断请求的撤除 中断响应中断返回任务任务4智能交通智能交通交通信号灯设计交通信号灯设计中断响应(以外部中断0为例)中断响应:在满足CPU的中断响应条件之后,CPU对中断源中断请求予以处理。中断响应过程: 保护断点地址;中断响应 把程序转向中断服务程序的入口地址(通常称矢量地址)。特别注意:这些工作是硬件自动完成的! 断点地址中断服务子程序的入口地址外部中断外部中断0 0 入口地址入口地址0003ZD0AJMPORG0003HAJMPZD0ZD0任务任务4智能交通智能交通交通信号灯设计交通信号灯设计中断响应中
76、断服务子程序入口地址又称为中断矢量或中断向量。中断响应单片机中5个中断源的矢量地址是固定固定的,不能改动。断点地址中断服务子程序的入口地址入口地址任务任务4智能交通智能交通交通信号灯设计交通信号灯设计任务任务4智能交通智能交通交通信号灯设计交通信号灯设计程序存储器程序存储器ROMROM0000H:复位后,程序的入口地址(PC=0000H)0023H:串行口中断入口0003H:外部中断0入口-INT0000BH:定时器0溢出中断入口-T00013H:外部中断1入口-INT1001BH:定时器1溢出中断入口-T18字节8字节8字节002AH使用时,通常在这些入口地址使用时,通常在这些入口地址处存放
77、一条跳转指令,使程序处存放一条跳转指令,使程序跳转到用户安排的中断服务程跳转到用户安排的中断服务程序起始地址上去!序起始地址上去!中断处理中断处理中断服务程序从中断子程序入入口地址口地址开始执行,直到返回指令RETI为止,这个过程称为中断处理(或中断服务)。中断服务子程序一般包括两部分内容:一是保护和恢复现场,二是处理中断源的请求。中断响应入口地址入口地址RETI任务任务4智能交通智能交通交通信号灯设计交通信号灯设计中断处理中断处理INTT0: PUSH ACC PUSH DPH PUSH DPL PUSH PSW 中断源服务 POP PSW POP DPL POP DPH POP ACC R
78、ETI保护现场恢复现场任务任务4智能交通智能交通交通信号灯设计交通信号灯设计中断返回 中断返回是指中断服务完后,计算机返回到原来暂停的位置(即断点),继续执行原来的程序。 中断返回由专门的中断返回指令RETI来实现。中断响应中断返回任务任务4智能交通智能交通交通信号灯设计交通信号灯设计中断返回 RETI指令功能:把断点地断点地址取出,送回到程序计数器址取出,送回到程序计数器PC中去。另外,它还通知中断系统已完成中断处理,将清除优先级状态触发器。 特别注意:不能用不能用RET指令代替指令代替RETI指令!指令!中断响应中断返回断点地址任务任务4智能交通智能交通交通信号灯设计交通信号灯设计中断请求
79、的撤除 CPU响应某中断请求后,在中断返回前,应该撤除该中断请求,否则会引起另一次中断。 定时器0或1溢出:CPU在响应中断后,硬件硬件清除了有关的中断请求标志TF0或TF1,即中断请求是自动撤除的中断请求是自动撤除的。 边沿触发的外部中断(IT0或IT1=1):CPU在响应中断后,也是用硬件自动清除用硬件自动清除有关的中断请求标志IE0或IE1。 串行口中断:CPU响应中断后,没有用硬件清除TI、RI,故这些中断不能自动撤除,而要靠软件来清除相应的标志要靠软件来清除相应的标志。任务任务4智能交通智能交通交通信号灯设计交通信号灯设计三、中断系统的编程三、中断系统的编程中断函数的定义:void
80、函数名(void) interrupt n using m中断函数内容 修饰符interrupt n表明该中断服务程序所对应中断源的中断号,编译器会把该函数转化为中断函数,并在对应的中断入口地址处添加跳转指令,以便转入本中断函数。修饰符using m 用于指定本函数内部使用的工作寄存器组,m的取值为03。该修饰符可省略,由编译器去分配。任务任务4智能交通智能交通交通信号灯设计交通信号灯设计DATE: 2019/11/16854编写中断函数时,应注意以下几点:编写中断函数时,应注意以下几点:(1 1)中断函数不带任何参数,否则会导致编译出错。)中断函数不带任何参数,否则会导致编译出错。(2 2)
81、中断函数不能有返回值,所以函数类型应为)中断函数不能有返回值,所以函数类型应为voidvoid。(3 3)中断函数必须由中断源触发而自动调用,不得直接调)中断函数必须由中断源触发而自动调用,不得直接调用,因此也不用提前声明。用,因此也不用提前声明。(4 4)中断函数要精简,避免因执行时间过长影响其它中断)中断函数要精简,避免因执行时间过长影响其它中断的响应。的响应。任务任务4智能交通智能交通交通信号灯设计交通信号灯设计DATE: 2019/11/1686例例6-26-2 如图所示,将如图所示,将P1P1口的口的P1.4P1.4P1.7P1.7作为作为输入输入位,位,P1.0P1.0P1.3P1
82、.3作为作为输出输出位。位。要求利用要求利用89C5289C52将将开关所设的数开关所设的数据读入据读入单片机内,并依次单片机内,并依次通过通过P1.0P1.0P1.3P1.3输出输出,驱动发光二极,驱动发光二极管,以检查管,以检查P1.4P1.4P1.7P1.7输入的电输入的电平情况(若平情况(若输入为高电平则相应输入为高电平则相应的的LEDLED亮亮)。)。 要求采用要求采用中断边沿触发方式中断边沿触发方式,中断一次,完成一次读中断一次,完成一次读/ /写操作。写操作。任务任务4智能交通智能交通交通信号灯设计交通信号灯设计分析:分析:5-9中,用外部中断中,用外部中断0,中断请求从,中断请
83、求从P3.2输入,并采用去抖动电输入,并采用去抖动电路。当路。当P1.0P1.3的某一位输出为的某一位输出为0时,相应的发光二极管就会发光。当开关时,相应的发光二极管就会发光。当开关S1来回拨动一次时,将产生一个下降沿信号,发出中断请求。中断服务程序来回拨动一次时,将产生一个下降沿信号,发出中断请求。中断服务程序的入口地址为的入口地址为0003H。C语言程序语言程序:#includevoidmain()EX0=1;/允许外部中断允许外部中断0中断中断IT0=1;/选边沿触发方式选边沿触发方式EA=1;/CPU开中断开中断while(1);/等待中断等待中断voidint0_int(void)i
84、nterrupt0unsignedchar datad;P1=0xf0;/设设P1.4P1.7为输入为输入d=P1;/取开关数取开关数P1=(d4);/驱动驱动LED发光发光任务任务4智能交通智能交通交通信号灯设计交通信号灯设计4例例6-3 6-3 如图如图6-26-2所示,所示,P0P0口连接了口连接了8 8个发光二个发光二极管,极管, 引脚上接了一引脚上接了一个按键,要求每次按键个按键,要求每次按键均能改变发光二级管的均能改变发光二级管的亮灭。亮灭。任务任务4智能交通智能交通交通信号灯设计交通信号灯设计#include#defineLEDP0sbitKEY=P33;bitflag=0;/延
85、时子函数延时子函数;voiddelay(unsignedcharn) unsignedchara;for(a=0;an;a+);main(void)IT1=1;/设置边沿触发方式设置边沿触发方式EA=1;EX1=1;LED=0xff;/发光二极管灭发光二极管灭while(1)if(flag=1)/有外部中断的按键有外部中断的按键delay(100);/延迟一段时间判断是否为抖动延迟一段时间判断是否为抖动if(!KEY=0)/还有按键,说明不是抖动还有按键,说明不是抖动while(!KEY);/等待按键松开等待按键松开LED=LED;/改变发光二级管的亮灭改变发光二级管的亮灭flag=0;EX1
86、=1;/再次开放外部中断再次开放外部中断voidint1(void)interrupt2 /中断服务程序中断服务程序flag=1;/设置中断标志变量为真,表明有按键闭设置中断标志变量为真,表明有按键闭合合EX1=0;/暂时不允许再次产生外部中断暂时不允许再次产生外部中断任务任务4智能交通智能交通交通信号灯设计交通信号灯设计DATE: 2019/11/1690u编编写写中中断断服服务务程程序序时时,应应避避免免使使中中断断时时间间过过长长的的操操作作,如如果果本本例例中断服务程序编成如下形式:中断服务程序编成如下形式:voidint1(void)interrupt2/中断服务程序中断服务程序de
87、lay(100);/延迟一段时间,判断是否为抖动延迟一段时间,判断是否为抖动if(KEY=0) /还有按键,说明不是抖动还有按键,说明不是抖动while(!KEY);/等待按键松开等待按键松开LED=LED;/改变发光二级管的亮灭改变发光二级管的亮灭 由由于于中中断断函函数数里里有有去去除除按按键键抖抖动动以以及及等等待待按按键键松松开开的的处处理理,当当按按键键时时间间过过长长时时,程程序序会会陷陷入入执执行行语语句句while(!KEY)不不得得退退出出,有有可可能能造造成成程程序序逻逻辑辑错错误误。如如果果此此时时系系统统中中同同时时使使用用串串口口中中断断收收发发数数据据,会会使使串串
88、口口中中断断请请求求得得不不到到CPU及及时时响响应应,造造成成串串口口数据收发错误。数据收发错误。任务任务4智能交通智能交通交通信号灯设计交通信号灯设计任务实施任务实施图2-24交通灯控制电路原理图电路所用仿真元器件:AT89C51:单片机RES:电阻CRYSTAL:晶振CAP:电容CAP-ELEC:电解电容BUTTON:按钮LED-GREEN:绿色发光二极管LED-YELLOW:黄色发光二极管LED-RED:红色发光二极管任务任务4智能智能交通信号灯设计交通信号灯设计2 2、硬件电路设计、硬件电路设计任务任务4智能交通智能交通交通信号灯设计交通信号灯设计P1.5P1.4P1.3P1.2P1
89、.1P1.0P1端口数据状态说明东西方向南北方向红灯黄灯绿灯红灯黄灯绿灯11100011011100,1交替111100011111111011100,1交替1F3HP1.3交替EBHDEHP1.0交替DDH东西向通行,南北向禁行东西向警告,南北向禁行东西向警告,南北向禁行南北向通行,东西向禁行南北向警告,东西向禁行南北向警告,东西向禁行100111100111EDHDBH紧急情况任务实施任务实施图3-19交通信号灯模拟控制主程序流程图任务任务4智能智能交通交通交通信号灯设计交通信号灯设计3 3、源程序设计、源程序设计根据任务要求,程根据任务要求,程序设计思路:序设计思路:(1)正常情况下运)
90、正常情况下运行主程序,采用行主程序,采用0.5秒延时子程序的反秒延时子程序的反复调用来实现各种复调用来实现各种定时时间;定时时间;(2)有紧急车辆通)有紧急车辆通过时,采用外部中过时,采用外部中断断0方式进入与其相方式进入与其相应的中断服务程序。应的中断服务程序。步骤步骤1:流程图设计:流程图设计任务实施任务实施图3-20延时子程序流程图图3-21中断服务程序流程图任务任务4智能智能交通交通交通信号灯设计交通信号灯设计3 3、源程序设计、源程序设计LED模拟智能智能交通灯程序:#includevoid DelayMS(unsigned int x)TMOD=0x10;TR1=1; while(
91、x-)!=0) TH1=0X3C;50ms定时初值。TL1=0Xb0; while(!TF1); TF1=0; void int_0( ) interrupt 0 /急救车情况unsigned char i,j,g,l,m,n;EA=0; i=P1;j=x; g=k;l=TH1;m=TL1;EA=1; for(n=0;n10;n+)P1=0xed;DelayMS(10);P1=0xdb;DelayMS(10);EA=0; P1=i; x=j;g=k;TH1=1;TL1=m;EA=1; 任务任务4智能交通智能交通信号灯设计信号灯设计void main()unsigned char k;TMOD=
92、0x10; EA=1; EX0=1; IT0=1;EX1=1; IT1=1;while(1) P1=0xf3; DelayMS(1100);for(k=0;k3;k+) P1=0xf3; DelayMS(10); P1=0xfb; DelayMS(10); P1=0xeb; DelayMS(40); P1=0xde; DelayMS(1100); for(k=0;k3;k+) P1=0xde; DelayMS(10); P1=0xdf; DelayMS(10); P1=0xdd; DelayMS(40);任务任务4智能交通智能交通交通信号灯设计交通信号灯设计4 4、软、硬件调试与仿真、软、硬件调试与仿真任务实施任务实施图3-22交通信号灯模拟控制电路全速仿真图片段任务任务4智能智能交通信号灯设计交通信号灯设计