简易加减计数器和交通信号灯设计概述课件.ppt

上传人:小飞机 文档编号:3731927 上传时间:2023-03-18 格式:PPT 页数:98 大小:3.69MB
返回 下载 相关 举报
简易加减计数器和交通信号灯设计概述课件.ppt_第1页
第1页 / 共98页
简易加减计数器和交通信号灯设计概述课件.ppt_第2页
第2页 / 共98页
简易加减计数器和交通信号灯设计概述课件.ppt_第3页
第3页 / 共98页
简易加减计数器和交通信号灯设计概述课件.ppt_第4页
第4页 / 共98页
简易加减计数器和交通信号灯设计概述课件.ppt_第5页
第5页 / 共98页
点击查看更多>>
资源描述

《简易加减计数器和交通信号灯设计概述课件.ppt》由会员分享,可在线阅读,更多相关《简易加减计数器和交通信号灯设计概述课件.ppt(98页珍藏版)》请在三一办公上搜索。

1、单片机原理及应用,任务1 简易加减计数器的设计,1.技能要求 单片机输出口接3位数码管和三个独立按键,这3位数码管分别显示一个变量的个位、十位和百位,三个按键分别作为“加”、“减”和“清零”功能,当按下“加”键时,数码管显示的变量加1,当按下“减”键时,数码管显示的变量减1,当按下“清零”键时,数码管显示和变量为0。,知识链接一 键盘接口电路,独立联接式无编码键盘,独立联接式编码键盘,1、键盘的分类与结构,独立联接式键盘,矩阵联接式键盘,屏幕键盘(触摸屏),无编码键盘编码键盘,无编码,简单有效,键数较少时采用,编码,节省I/O口线,键数较多时采用,任务1 简易加减计数器的设计,1键盘的工作原理

2、及去抖动,对应任何按键来说,由于机械触点的弹性作用,触点在闭合和断开瞬间的电接触情况不稳定,造成了电压信号的抖动现象,如图所示。按键的抖动时间一般为5ms10ms。这种现象会引起单片机对于一次键操作进行多次处理,因此必须设法消除键接通或断开时的抖动现象。常用的去抖动方法有硬件和软件两种。,闭合稳定,任务1 简易加减计数器的设计,a)硬件去抖 硬件消抖可以采用R-S触发器或单稳电路构成去抖电路,分别如图所示。硬件消抖因为要增加硬件开销,造成电路复杂,除了在数字电路里使用外,在单片机系统中不太采用。,任务1 简易加减计数器的设计,b)软件去抖 在检测到有键按下时,执行一个10ms的延时程序后,再确

3、认该键是否保持闭合状态。另外一种方法是连续判断按键所在线路的电平,如果连续100次(甚至更多)都出现低电平(一般按键都是低电平表示按下),就认为按键已经稳定,可以进行识别,这是企业实际开发产品中常用的方法。以P1.0所接按键为例,其编程流程图如图所示.,任务1 简易加减计数器的设计,sbit key=P10;key=1;/P1.0置“1”,作输入口if(key=0)/判断按键是否按下delay10ms();/延时10msif(key=0)/再次判断按键是否按下 a+;/按键功能代码(变量a加“1”操作)while(key=0);/等待按键释放,任务1 简易加减计数器的设计,以单片机为基础的电子

4、产品设计中,键盘是一种最为常见的人机交互设备。通常,键数较少、键盘的功能简单。,1简单键盘的扫描程序设计,键盘扫描程序嵌入到主程序循环之中,与主程序一起构成主循环套。,键敲击速度约几次/S,设计键盘扫描程序时,必须保证约100mS内就要循环扫描1次。,任务1 简易加减计数器的设计,任务1 简易加减计数器的设计,任务1 简易加减计数器的设计,按键数量进一步增加时,采用矩阵联接式键盘可节省更多的口线,接口电路也更简单。,1.1.2矩阵连接键盘,键盘扫描程序的编写,(1)判别有无键按下。(2)延时。(3)键盘扫描取得闭合键的行、列值键值。(4)用计算法或查表法得到键号。*(5)判断闭合键是否释放,如

5、没释放则继续等待。(6)将闭合键键号保存,然后返回。,键盘扫描程序一般流程:,任务1 简易加减计数器的设计,矩阵式键盘的工作原理 当键盘有键按下时,要逐行或逐列扫描,以判断是哪一个键按下。通常扫描方式有两种:扫描法和反转法。,任务1 简易加减计数器的设计,矩阵连接键盘扫描,知识链接二:数码管显示技术,任务1 简易加减计数器的设计,1.2.1七段LED显示器,通常的7段LED显示块中有8个发光二极管,故也叫做8段显示器。其中7个发光二极管构成七笔字形“8”,一个发光二极管构成小数点。1.LED显示器的结构与原理,任务1 简易加减计数器的设计,2.LED显示器的显示方式(1)LED静态显示方式每一

6、位显示都占用单独的具有锁存功能的I/O接口,com端连接在一起。(2)LED动态显示方式 是将所有数码管的“a,b,c,d,e,f,g,dp”的同名端连在一起,每个数码管的COM为各自独立的位选信号。即在某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态。,任务1 简易加减计数器的设计,显示器由6个共阴极LED数码管构成;P0口输出显示段码,经由一片74LS245驱动输出给LED管;P1口输出位码(片选),经由74LS05输出给LED管。,动态扫描过程,任务1 简易加减计数器的设计,首先从段选线上送出字型编码,再控制位选端,字符就显示在指定数码管上,其他位选端无效的数码管

7、都处于熄灭状态,持续1.5ms时间,然后关闭所有显示;接下来又送出新的字型编码,按照上述过程又显示在另外一位数码管上,直到每一位数码管都扫描完为止,这一过程即为动态扫描显示。数码管其实是轮流依次点亮的,但由于人的视觉驻留效应,因此当每个数码管点亮的时间小到一定程度时,人就感觉不出字符的移动或闪烁,觉得每位数码管都一直在显示,达到一种稳定的视觉效果。,任务1 简易加减计数器的设计,参考程序如下:#include unsigned char code Tab=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F,0 x77,0 x7

8、C;unsigned char code Col=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf;void Delay()unsigned char i;for(i=0;i250;i+);void main()/同时显示123456 unsigned char j;while(1)for(j=1;j7;j+)P0=Tabj;P1=Colj-1;/开第一个(共阴)数码管 Delay();P1=0 xff;/关数码管 Delay();,任务1 简易加减计数器的设计,1.3数码管显示44键盘编号,1.技能要求单片机P2接1位数码管,P1口接由16个按键组成的44行列键盘。当按

9、下这16个按键的其中之一时,数码管显示该按键对应的键盘编号。,任务1 简易加减计数器的设计,.仿真电路图,数码管显示44键盘编号的电路图如下图所示,电路中的轻触按键使用元件库中的“button”元件,特别注意16个按键的连接关系及其和单片机之间的连接关系。,任务1 简易加减计数器的设计,.程序设计与调试程序采用线翻转法识别闭合键,反转法原理:行作低电平输出,列作输入,读列线;列作低电平输出,行作输入,读行线。数码管静态显示方式。,任务1 简易加减计数器的设计,int main()while(1)keyScan();,delay(unsigned int i)while(i-);void key

10、Scan()unsigned char temp,a;temp=0 xff;P1=0 xf0;if(P1!=0 xf0)/判断是否有按键按下delay(1000);/延时去抖if(P1!=0 xf0)/再次判断是否有按键按下P1=0 xf0;/行作输出,列作输入temp=P1;/读取列值P1=0 x0f;/列作输出,行作输入temp=temp|P1;/读取行值并和列值合并switch(temp)case 0 xee:a=0;break;case 0 xde:a=1;break;case 0 xbe:a=2;break;case 0 x7e:a=3;break;,参考程序如下:#include

11、unsigned char code seg=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,/09的段码0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e;/AF的段码,case 0 xed:a=4;break;case 0 xdd:a=5;break;case 0 xbd:a=6;break;case 0 x7d:a=7;break;case 0 xeb:a=8;break;case 0 xdb:a=9;break;case 0 xbb:a=10;break;case 0 x7b:a=11;brea

12、k;case 0 xe7:a=12;break;case 0 xd7:a=13;break;case 0 xb7:a=14;break;case 0 x77:a=15;break;P2=sega;/将键值对应的段码送到P2口P1=0 xf0;while(P1!=0 xf0)delay(50);,任务1 简易加减计数器的设计,(1)画出硬件电路图,简易加减计数器任务实施:,任务1 简易加减计数器的设计,(2).程序设计与调试,要获取一个变量的每一位数字的值,用到除法运算符“/”和模运算符“%”两个算术运算符。当两个整数作除法运算时结果仍为整数,余数则会被丢弃,因此可作为取整操作;模运算“%”表示

13、取余操作。,例如,求一个变量temp的“百、十、个”位,分别赋给变量a、b、c的操作如下:a=temp/100%10;/除以100,再对10取余b=temp/10%10;/求得temp的十位c=temp%10;/求得temp的个位要在LED数码管上显示变量temp的“百、十、个”位,可直接写作:P2=segtemp/100%10;P2=segtemp/10%10;P2=segtemp%10;其中seg是存放09段码的数组。,任务1 简易加减计数器的设计,#include#include unsigned char a;unsigned char code seg=0 xc0,0 xf9,0 x

14、a4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;/09十个数字的共阳型段码sbit k1=P10;sbit k2=P12;sbit k3=P14;void delay(unsigned int j)while(j-);display()unsigned char i,wk=0 x01;/wk变量作位控,初始选通右边第1位unsigned char buf3;/声明数码管显示字形缓冲数组buf0=sega%10;/a的个位buf1=sega/10%10;/a的十位buf2=sega/100;/a的百位,小于999时可以不对10取余,独立按键控制数码管加减

15、计数的程序如下:,任务1 简易加减计数器的设计,for(i=0;i3;i+)P3=wk;/输出位控P2=bufi;/依次输出段码delay(50);/延时wk=_crol_(wk,1);/位控左移一位P2=0 xff;/熄灭所有数码管(消隐)void button()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;wh

16、ile(k3=0)display();,int main()while(1)button();display();,26,任务3 方波发生器的设计,1.技能要求 设晶振频率6MHz。利用单片机定时器T0的方式1,在P3.0端口上输出周期为1ms的方波。2.仿真电路图 本任务仿真电路图如图所示。P3.0端口的示波器用于观察波形和计算信号频率。图中示波器的每小格为0.1ms,因此信号周期为1ms,频率为1KHz。,操作步骤:图中右上角的就是模拟示波器,4踪。仿真时可以出现示波器界面,可以对其操作。操作方法与一般示波器相同。图中最下部的是个频率计,运行仿真时可以显示测量到的方波的频率值。添加这2个虚

17、拟仪器的方法是,在软件左边点击虚拟仪器图标,选择第一个就是虚拟示波器,第三个就是频率计。把虚拟示波器的输入端接到P2口的任意引脚,虚拟频率计也可以将输入端接入P2口任意引脚。在这幅图里,采用网络标号的形式接线,看起来图面整洁一点。,任务3 方波发生器的设计,采用查询方式处理的程序:#include sbitP3_0=P30;void main()TMOD=0 x01;TL0=0 x06;TH0=0 xff;TR0=1;while(1)while(!TF0);TF0=0;P3_0=P3_0;,频率为1KHz的方波,其周期为1/1KHz,即1ms。要在P3.0端口上输出周期为1ms的方波,需要使P

18、3.0端口每隔0.5ms取反一次。我们可以通过定时器作0.5ms定时,定时时间到,在程序中对P3.0取反。(1)确定工作模式和工作方式定时器T0工作方式1时:M1M0=01,c/T=0,GATE=0,高4位未使用,全部赋0,则TMOD=0 x01。(2)计算0.5ms定时T0的初值。晶振频率6MHz,则机器周期为2s,设T0的初值为X,则:X=(2165002)=65036=FF06H因此,TH0的初值为0 xff,TL0的初值为0 x06。,3.程序设计与调试,任务3 方波发生器的设计,8051单片机内部有两个16位的可编程定时器/计数器,称为定时器0(T0)和定时器1(T1),可编程选择其

19、作为定时器用或作为计数器用。8051定时器/计数器由定时器T0、定时器T1、定时器方式寄存器TMOD和定时器控制寄存器TCON组成。TMOD、TCON与T0、T1间通过内部总线及逻辑电路连接,TMOD用于设置定时器的工作方式,TCON用于控制定时器的启动与停止。,基本思想:每隔1ms在程序中对P3.0取反,如此循环不止。,任务3 方波发生器的设计,定时器/计数器结构如图6-1所示,定时器/计数器T0由特殊功能寄存器TH0、TL0构成,定时器/计数器T1由特殊功能寄存器TH1、TL1构成。,30,图6-1 AT89S51单片机的定时器/计数器结构框图,定时器/计数器的结构,DATE:2019/1

20、1/16,31,1.计数功能计数器用于统计从TO(P3.4)和Tl(P3.5)两个引脚输入脉冲的负跳变数量。负跳变是指前一个机器周期采样为高电平,后一个机器周期为低电平。每输入一个脉冲负跳变,计数器加1。输入脉冲的高电平与低电平至少应保持一个机器周期时间,以确保正确采样,因此输入脉冲的频率最高为单片机内部脉冲频率的一半。如果内部脉冲频率为1 MHZ,则最高计数频率为0.5 MHz。,定时器/计数器的功能,DATE:2019/11/16,32,2.定时功能定时功能是单片机通过对内部机器脉冲信号计数实现的,计数值乘以机器周期就是相应的时间。例如,如果单片机采用12 MHz的晶振,则机器内部脉冲频率

21、为1 MHz,则机器周期为1us,若共计数1000,则用时为1ms时间。,定时器/计数器的功能,图5-1 TMOD格式8位分为两组,高4位控制T1,低4位控制T0。TMOD各位的功能。(1)GATE门控位。0:仅由运行控制位TRx(x=0,1)来控制定时器/计数器运行。1:用外中断引脚(或)上的电平与运行控制位TRx共同来控制定时器/计数器运行。,33,工作方式控制寄存器TMOD,(2)M1、M0工作方式选择位M1、M0共有4种编码,对应于4种工作方式的选择,如表所示。(3)C/计数器模式和定时器模式选择位,34,工作方式控制寄存器TMOD,0:为定时器工作模式;1:为计数器工作模式,计数器对

22、外部输入引脚T0(P3.4)或T1(P3.5)的外部脉冲(负跳变)计数。,35,定时器/计数器的4种工作方式,1 方式0,M1、M0=00时,被设置为工作方式0,等效逻辑结构框图如图6-4所示(以定时器/计数器T1为例,TMOD.5、MOD.4=00)。,【训练1】T0方式0定时设fosc=6Mhz,定时器/计数器T0以工作方式0定时2ms,编写初始化程序。说明:fosc即为晶振频率。首先计算计数初值。根据公式4-2有:定时时间=(8192-计数初值)12/fosc计数初值=8192-定时时间fosc/12=8192-20006Mhz/12=7192=1C18H=11100000 11000B

23、将此二进制数补足13位数(不够13位前面加0,这个例子够了,不用补),将高8位送给TH0,将低5位送TL0即可。,定时器/计数器的4种工作方式,1 方式0,高8位是:1110 0000B=E0H,送给TH0低5位是:11000B=0001 1000B=18H 送给TL0,2 方式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相同。,定时器

24、/计数器的4种工作方式,38,图6-3 定时器/计数器方式1逻辑结构框图,定时器/计数器的4种工作方式,DATE:2019/11/16,39,实例6-2 欲采用8051单片机控制8个LED同时以1s为周期闪烁,设计电路原理图并编写程序。,设置定时/计数器的过程:1)先初始化工作方式寄存器TMOD 2)为定时/计数器赋初值 3)通过控制寄存器TCON中的TRO或TRl实现启动或停止。,定时器/计数器的4种工作方式,DATE:2019/11/16,40,#include/将8051单片机头文件包含到文件中main(void)unsigned char counter;/设置无符号字符型变量,存储定

25、时器中断次数。TMOD=0 x01;/设T0为定时模式,由TR0控制启动和停止,且工作于方式1TH0=(65536-46083)/256;/初始化T0的高8位TL0=(65536-46083)%256;/初始化T0的低8位TF0=0;/初始化定时器溢出标志P0=0 xff;/关闭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开始计数 TH0=(65536-4

26、6083)/256;/重新初始化T0的高8位 TL0=(65536-46083)%256;/重新初始化T0的低8位 TF0=0;/重新初始化定时器溢出标志,定时器/计数器的4种工作方式,3 方式2方式0和方式1的最大特点是计数溢出后,计数器为全0。因此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题。这不仅影响定时精度,也给程序设计带来麻烦。方式2就是针对此问题而设置的。当M1、M0为10时,定时器/计数器处于工作方式2,这时定时器/计数器的等效逻辑结构如图6-6所示(以定时器T1为例,x=1)。,定时器/计数器的4种工作方式,4 方式3是为增加一个8位定时器/计数器而设,使AT8

27、9S51单片机具有3个定时器/计数器。方式3只适用于T0,T1不能工作在方式3。T1处于方式3时相当于TR1=0,停止计数(此时T1可用来作为串行口波特率产生器)。1工作方式3下的T0TMOD的低2位为11时,T0的工作方式被选为方式3,各引脚与T0的逻辑关系如图5-8所示。定时器/计数器T0分为两个独立的8位计数器TL0和TH0,TL0使用T0的状态控制位C/、GATE、TR0、,42,定时器/计数器的4种工作方式,43,图6-6 定时器/计数器方式2逻辑结构框图,定时器/计数器的4种工作方式,TF0,而TH0被固定为一个8位定时器(不能作为外部计数模式),并使用定时器T1的状态控制位TR1

28、和TF1,同时占用定时器T1的中断请求源TF1。2T0工作在方式3时T1的各种工作方式一般情况下,当T1用作串行口的波特率发生器时,T0才工作在方式3。T0处于工作方式3时,T1可定为方式0、方式1和方式2,用来作为串行口的波特率发生器,或不需要中断的场合。,定时器/计数器的4种工作方式,45,图6-8 定时器/计数器T0方式3的逻辑结构框图,定时器/计数器的4种工作方式,M1、M0工作方式选择位M1、M0共有4种编码,对应于4种工作方式的选择,如表所示。,46,4种工作方式总结,字节地址为88H,可位寻址,位地址为88H8FH。格式如图5-3所示。,定时器/计数器控制寄存器TCON,(1)T

29、F1、TF0计数溢出标志位。当计数器计数溢出时,该位置“1”。使用中断方式时,此位作为中断请求标志位,进入中断服务程序后由硬件自动清“0”。(2)TR1、TR0计数运行控制位。TR1位(或TR0位)=1,启动定时器/计数器工作的必要条件。TR1位(或TR0位)=0,停止定时器/计数器工作。该位可由软件置“1”或清“0”。,DATE:2019/11/16,48,例5-1:设定时器1为定时工作方式,按方式2工作,定时器0为计数方式,按方式1工作,均由程序单独控制启动和停止,请给出TMOD控制字。解:定时器1做定时器使用则D6=0;按方式2工作则D5=1,D4=0;由程序单独控制启停则 D7=0。定

30、时器0做计数器使用则D2=1;按方式1工作则D0=0,D1=1;由程序单独控制启停则 D3=0。因此命令字TMOD的值应为00100101B,即25H。,定时器/计数器控制,DATE:2019/11/16,49,定时/计数器的控制,实例6-3 图6-4是产品包装生产线的计数系统,每个产品经过计数装置时由机械杆碰合按键S1一次。当第一次计满一包(5个)则D1亮,计满第二包则D2亮,计满第八包则D1D8全亮,八包包装成一箱,此后重复以上过程。编写程序实现此功能。,DATE:2019/11/16,50,解:程序如下:#include/包含51单片机寄存器定义的头文件unsigned char cou

31、nter;/计数初值main(void)TMOD=0 x60;/使用T1的工作方式2TH1=256-5;/T1的高8位赋初值TL1=256-5;/T1的低8位赋初值 counter=0;TR1=1;/启动T1while(1)while(TF1=1)/如果计满 TF1=0;/计数器溢出后,将TF1清0 counter+;/计数加1,5.3定时/计数器的控制,DATE:2019/11/16,51,switch(counter)/检查中断计数值 case 1:P0=0 xfe;break;/则第1个灯亮 case 2:P0=0 xfd;break;/第2个灯亮 case 3:P0=0 xfb;bre

32、ak;/第3个灯亮 case 4:P0=0 xf7;break;/第4个灯亮 case 5:P0=0 xef;break;/第5个灯亮 case 6:P0=0 xdf;break;/第6个灯亮 case 7:P0=0 xbf;break;/第7个灯亮 case 8:P0=0 x00;counter=0;break;/8个灯全亮,5.3定时/计数器的控制,任务4 十字路口交通信号灯设计,系统控制要求如下:(1)正常情况下,首先东西方向绿灯亮,南北方向红灯亮20s;经过后南北方向绿灯亮,东西方向红灯亮20s。(2)黄灯5次闪烁绿灯灭2 s,之后重复(1)(2)。,任务4 十字路口交通信号灯设计,任

33、务4 十字路口交通信号灯设计,任务4 十字路口交通信号灯设计,1)对TMOD赋值,确定工作方式。TMOD为T1、T2的工作方式寄存器,任务4 十字路口交通信号灯设计,T1控制,T0控制,TMOD(89H),TMOD赋值为10H,1.采用定时器设计一个0.5秒的延时子程序,2)预置定时器初值X,将初值写入TH1、TL1中。初值X=最大计数值-计数次数 若fosc=12MHZ,在方式1中,定时器T1的最大计数值为65536,而定时50ms需要完成50000次计数。由此可计算出计数器的初始值。初值X=65536-50000=15536D=3CB0H,任务4十字路口交通信号灯设计,3)启动定时/计数器

34、工作,当GATE=0时,只要用“SETB bit”指令将TCON寄存器中的启动位TR0或TR1置“1”即可,使用“CLR bit”指令可停止定时器工作。,任务4 十字路口交通信号灯设计,0.5s延时子程序如下:DELAY:MOV R3,#0AH;循环次数MOV TMOD,#10H;定时器T1,方式1MOV TH1,#3CH;定时50ms的初值MOV TL1,#0B0HSETB TR1;启动定时器LP1:JBC TF1,LP2 SJMP LP1LP2:MOV TH1,#3CH;重装初值MOV TL1,#0B0HDJNZ R3,LP1 RET,单片机C语言程序设计:LED 模拟交通灯#includ

35、e#define uchar unsigned char;sbit RED_B=P00;/北向灯sbit YELLOW_B=P01;sbit GREEN_B=P02;sbit RED_X=P03;/西向灯sbit YELLOW_X=P04;sbit GREEN_X=P05;sbit RED_N=P20;/南向灯sbit YELLOW_N=P21;sbit GREEN_N=P22;sbit RED_D=P23;/东向灯sbit YELLOW_D=P24;sbit GREEN_D=P25;uchar Flash_Count=0,Operation_Type=1;,void DelayMS(unsi

36、gned int x)TMOD=0 x01;TR0=1;while(x-)!=0)TH0=0X3C;TL0=0Xb0;while(!TF0);TF0=0;,任务4 十字路口交通信号灯设计,/交通灯切换void Traffic_Light()switch(Operation_Type)case 1:/东西向绿灯与南北向红灯亮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

37、_Type=2;break;case 2:/东西向黄灯闪烁,绿灯关闭DelayMS(40);YELLOW_D=YELLOW_D;GREEN_D=1;YELLOW_X=YELLOW_X;GREEN_X=1;if(+Flash_Count!=10)return;/闪烁Flash_Count=0;Operation_Type=3;break;,case 3:/东西向红灯,南北向绿灯亮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;GREE

38、N_B=0;DelayMS(400);Operation_Type=4;break;case 4:/南北向黄灯闪烁 DelayMS(40);YELLOW_N=YELLOW_N;GREEN_N=1;YELLOW_B=YELLOW_B;GREEN_B=1;if(+Flash_Count!=10)return;Flash_Count=0;Operation_Type=1;/主程序void main()while(1)Traffic_Light();,任务4 十字路口交通信号灯设计,采用查询方式处理的程序:#include sbitP1_0=P10;void main()TMOD=0 x02;TL0=

39、0 x06;TH0=0 x06;TR0=1;while(1)while(!TF0);TF0=0;P1_0=P1_0;,定时器编程总结,一、定时器的初始化步骤1、选择工作模式和工作方式。设置TMOD。2、设置定时器的计数初值。设置THx和TLx。3、启动定时器。二、定时器查询式应用步骤1、选择工作模式和工作方式。设置TMOD。2、设置定时器的计数初值。设置THx和TLx。3、启动定时器。4、查询溢出标准TFX5、清零溢出标志6、应用处理7、重装初始值,1、设计方案,选用AT89C51单片机芯片、时钟电路、复位电路、电源、12个发光二极管和一个按键构成最小系统,完成对交通信号灯有急救车通过时的智能

40、控制。,图3-17 交通信号灯模拟控制系统设计框图,任务4 智能交通信号灯设计,2、硬件电路设计,图2-24 交通灯控制电路原理图,电路所用仿真元器件:AT89C51:单片机RES:电阻 CRYSTAL:晶振CAP:电容CAP-ELEC:电解电容BUTTON:按钮LED-GREEN:绿色发光二极管LED-YELLOW:黄色发光二极管LED-RED:红色发光二极管,任务4 智能交通信号灯设计,表3-6 交通灯控制口线分配及控制状态表,任务4 智能交通交通信号灯设计,1、中断的基本概念,中断是指计算机在执行某一程序的过程中,由于计算机系统内、外的某种原因,而必须中止原程序的执行,转去执行相应的处理

41、程序,待处理结束之后,再回来继续执行被中止的原程序的过程。中断需要解决两个主要问题:如何从主程序转到中断服务程序和如何从中断服务程序返回主程序。,(1)概念,图3-1 中断的示意图,任务4 智能交通交通信号灯设计,1)分时操作:解决了快速CPU与慢速外设之间的矛盾,可使CPU与外设并行工作。这样,CPU可启动多个外设同时工作,大大提高了工作效率。2)实时处理:实时处理控制系统中许多随机产生的参数与信息,即计算机具有实时处理的能力,从而提高了控制系统的性能。3)故障处理:使系统具备处理故障的能力,如出现掉电、存储出错、运算溢出等故障,从而提高了系统自身的可靠性。,(2)特点,(3)与中断相关的几

42、个概念,1)中断服务子程序:中断之后处理的程序,也称为中断处理子程序。2)主程序:原来正常执行的程序。3)中断源:发出中断申请的信号或引起中断的事件。4)中断请求:CPU接收到中断源发出的申请信号。5)中断响应:接收中断申请,转到相应中断服务子程序处执行。6)断点:主程序被断开的位置(即地址),转入中断程序的位置。7)中断入口地址:中断响应后,中断程序执行的首地址。8)中断返回:从中断服务程序返回到主程序。,任务4智能交通交通信号灯设计,IE0,TCON,SCON,TF0,IE1,TF1,T0,T1,TI,RI,TXD,RXD,ES,ET0,EX0,EX1,ET1,EA,自然优先级,矢量地址,

43、高级中断请求,自然优先级,矢量地址,低级中断请求,PX0,PT0,PX1,PT1,PS,IE,IP,中断标志位,中断源允许,总允许,中断优先级,(P3.2),(P3.3),(P3.0),(P3.1),(P3.5),(P3.4),2、MCS-51单片机的中断系统及其管理,(1)MCS-51中断系统的结构,任务4 智能交通交通信号灯设计,(2)中断源,图3-1 中断的示意图,8051单片机有5个中断请求源:,单片机,任务4 智能交通交通信号灯设计,(3)特殊功能寄存器TCON和SCON,1)中断控制寄存器TCON,TCON,88H,位地址,T1溢出中断标志(TCON.7):T1启动计数后,计满溢出

44、由硬件置位TF1=1,向CPU请求中断,此标志一直保持到CPU响应中断后,才由硬件自动清0。也可用软件查询该标志,并由软件清0。,任务4 智能交通交通信号灯设计,TCON 88H,外部中断INT1中断标志位(TCON.3):IE11,外部中断1向CPU申请中断,外部中断INT1(P3.3)触发方式控制位(TCON.2):IT1=0,电平触发方式 IT1=1,下降沿触发方式,注意:该寄存器可以位寻址。,任务4 智能交通交通信号灯设计,2)串行口控制寄存器SCON,返回,TI(SCON.1)串行发送中断标志。RI(SCON.0)串行接收中断标志。,SCON 98H,注意:该寄存器可以位寻址。,位地

45、址,任务4 智能交通交通信号灯设计,(4)中断的开放与禁止,MCS-51系列单片机的5个中断源都是可屏蔽中断,由中断系统内部的专用寄存器IE负责控制各中断源的开放或屏蔽。,IE A8H,例:允许定时器T0中断:SETB EA 位操作指令 SETB ET0 或 MOV IE,#82H 字节操作指令或 MOV 0A8H,#82H,注意:该寄存器可以位寻址。,位地址,任务4 智能交通交通信号灯设计,(5)中断优先权的处理,MCS-51中断系统设立了两极优先级高优先级和低优先级,可以程序设置5个中断源优先级,由中断优先级寄存器IP进行控制。,51单片机有两个中断优先级高级和低级 专用寄存器IP为中断优

46、先级寄存器,用户可用软件设定 相应位为1,对应的中断源被设置为高优先级,相应位为0,对应的中断源被设置为低优先级 系统复位时,均为低优先级 该寄存器可以位寻址,IP B8H,位地址,任务4 智能交通交通信号灯设计,同一级中的5个中断源的优先顺序是:,中断优先原则:(概括为四句话)1、低级不打断高级2、高级不睬低级3、同级不能打断4、同级、同时中断,事先约定。,任务4 智能交通交通信号灯设计,DATE:2019/11/16,例6-1,如果IP的值设为06H,如果5个中断请求同时发生,求中断响应的次序。解:06H化为二进制是00000110B,根据表6-4知,定时器T0和外中断 被设置成高优先级中

47、断,因此如果5个中断请求同时发生,中断响应的先后次序是:定时器T0外中断INT1外中断 定时器T1串行中断。,任务4 智能交通交通信号灯设计,3、中断处理过程,(1)中断响应,中断处理过程分为三个阶段:中断响应、中断处理和中断返回。中断响应 中断处理(又称中断服务)中断返回 中断请求的撤除,任务4 智能交通交通信号灯设计,中断响应(以外部中断0为例),中断响应:在满足CPU的中断响应条件之后,CPU对中断源中断请求予以处理。中断响应过程:保护断点地址;,把程序转向中断服务程序的入口地址(通常称矢量地址)。,特别注意:这些工作是硬件自动完成的!,断点地址,中断服务子程序的入口地址,外部中断0 入

48、口地址,ZD0AJMP,ORG 0003H,AJMP ZD0,ZD0,任务4 智能交通交通信号灯设计,中断响应,中断服务子程序入口地址又称为中断矢量或中断向量。,单片机中5个中断源的矢量地址是固定的,不能改动。,断点地址,中断服务子程序的入口地址,任务4 智能交通交通信号灯设计,任务4 智能交通交通信号灯设计,程序存储器ROM,0000H:复位后,程序的入口地址(PC=0000H),0023H:串行口中断入口,0003H:外部中断0入口-INT0,000BH:定时器0溢出中断入口-T0,0013H:外部中断1入口-INT1,001BH:定时器1溢出中断入口-T1,8字节,8字节,8字节,002

49、AH,使用时,通常在这些入口地址处存放一条跳转指令,使程序跳转到用户安排的中断服务程序起始地址上去!,中断处理,中断服务程序从中断子程序入口地址开始执行,直到返回指令RETI为止,这个过程称为中断处理(或中断服务)。中断服务子程序一般包括两部分内容:一是保护和恢复现场,二是处理中断源的请求。,入口地址,RETI,任务4 智能交通交通信号灯设计,中断处理,INTT0:PUSH ACC PUSH DPH PUSH DPL PUSH PSW 中断源服务 POP PSW POP DPL POP DPH POP ACC RETI,保护现场,恢复现场,任务4 智能交通交通信号灯设计,中断返回,中断返回是指

50、中断服务完后,计算机返回到原来暂停的位置(即断点),继续执行原来的程序。中断返回由专门的中断返回指令RETI来实现。,任务4 智能交通交通信号灯设计,中断返回,RETI指令功能:把断点地址取出,送回到程序计数器PC中去。另外,它还通知中断系统已完成中断处理,将清除优先级状态触发器。特别注意:不能用RET指令代替RETI指令!,断点地址,任务4 智能交通交通信号灯设计,中断请求的撤除,CPU响应某中断请求后,在中断返回前,应该撤除该中断请求,否则会引起另一次中断。定时器0或1溢出:CPU在响应中断后,硬件清除了有关的中断请求标志TF0或TF1,即中断请求是自动撤除的。边沿触发的外部中断(IT0或

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号