交通灯
交通灯,交通灯
实践的目的及意义一、实践的目的本次设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及D8255 芯片单片机的资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。 二、实践的意义(1) 通过硬件实践达到巩固消化课程的内容;(2)进一步加强综合应用能力及单片机应用系统开发和设计能力的训练,启发创新思维;(3)使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程;(4)使知识转化为能力和能力转化为工程素质的重要过程。三、课题研究的基本思路设计并绘制交通灯控制系统原理图,动手制作电路板,编写控制程序,用仿真器对程序进行调试,最后用编程器把控制程序烧录到单片机中。硬件电路原理8255 端口分配:PA 口LED 显示器段选口PB 口LED 显示器位选口 PC 口高 4 位键盘列线输入PC 口低 4 位键盘行线输出8255 端口地址: 7CH7FH片内数据存储器分配40H43H:100MS,秒、分、时单元45H:数码管闪烁位置暂存器49H:各位允许最大值暂存单元4AH,4BH:修改后时间写回时 R0,R1 暂存单元4CH:闪烁时间计算器50H57H:显示缓冲区位地址分配:00H:设置时间标志,0 正常计时状态,1 修改时间状态01H:数码管闪烁标志,0 亮,1 灭端口地址:LED 段选口地址:8255APA 口,7CHLED 位选口地址:8255APB 口,7BH8255A 控制口地址:7FH电路原理图:当然,还有很多的 8255 芯片的知识需要了解。例如 8255 的基本功能:8255 具有 2 个独立的 8 位 I/O 口(A 口和 B 口)和 2 个独立的 4 位 I/O(C 口上半部和 C 口下半部) ,提供 TTL 兼容的并行接口。作为输入时提供三态缓冲器的功能,作为输出时提供数据锁存功能。其中,A 口具有双向传输功能。8255 有 3 种工作方式,方式 0、方式 1 和方式 2,能使用多种数据传送方式完成 CPU 与 I/O 设备之间的数据交换,如无条件方式、查询方式和中断方式。B 口和 C 口的引脚具有达林顿复合晶体管驱动能力,在 1.5V 时输出 1mA 电流,适于做输出端口。C 口除用做数据口外,当 8255 工作在方式 1 和方式 2 时,C 口的部分引脚作为固定的联络信号线。8255 的三种工作方式:方式 0,为一种简单的输入/输出方式,在这种方式下,3 个口中的任何一个都可提供简单的输入和输出操作,即前已介绍的无条件传送方式。它不需要应答式联络信号,外设总是处于准备好的状态。方式 0 是单向传送,一次初始化只能设置在一个方向上传送数据。方式 0 一般用于无条件传送的场合,也可以用做查询式传送。方式 1,是一种选通输入/输出方式。A 口和 B 口均可工作在这种方式。在这种方式下,A 口和 B 口仍作为两个独立的 8 位 I/O 数据通道,C 口要有 6 位分别作为 A 口和 B 口的应答联络线,其余 2 位仍可作为方式 0 的输入/输出。方式 1也是单向传送。方式 2,为双向选通 I/O 方式,只有 A 口才有此方式。这时,C 口有 5 根线用做 A 口的应答联络信号,其余 3 根线可用做方式 0,也可用做 B口方式 1 的应答联络线。方式 2 实际上就是方式 1 的输入与输出方式的组合,各应答信号的功能也相同。输入/输出的先后顺序是任意的,根据实际传送数据的需要选定。硬件调试过程中遇到的问题及解决方法(1)LED 显示屏不亮的问题解决方法:将系统的所有芯片插好(包括单片机和 存储器) ,反复检查联接线路并进行调试(2)电路版上按键不灵敏的问题解决方法:通过检查电路版后面的按键焊点,看是否是焊点漏焊或焊点脱焊(3)测量电压的问题解决方法:用万用表的二极管挡测量系统电源端与接地端是否短路。若短路,必须先检查硬件电路,找出短路原因,否则不能上电。若不短路,进一步检查每块芯片的电源线、地线是否接好,尤其是 CPU 芯片。(4)是否能注入信号的问题解决方法:将信号源加至输入端,然后依次往后测量各点的波形,看是否正常,以找到故障点。 当然,还有很多其它的寻找故障点的方法,例如看、听、闻、摸等。“看”就是看元件有无明显的机械损坏,例如破裂、烧黑、变形等;“听”就是听工作声音是否正常,例如一些不该响的东西在响,该响的地方不响或者声音不正常等;“闻”就是检查是否有异味,例如烧焦的味道、电容电解液的味道等,对于一个有经验的电子维修人员来说,对这些气味是很敏感的;“摸”就是用手去试探器件的温度是否正常,例如太热,或者太凉。一些功率器件,工作起来时会发热,如果摸上去是凉的,则基本上可以判断它没有工作起来。但如果不该热的地方热了或者该热的地方太热了,那也是不行的。(注意要先试探性的去摸,千万别把手烫伤了)。软件设计思想及流程图假设:A、B 两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为 A、B 两干道的公共停车时间。设 A 道比 B 道的车流量大,指示灯燃亮的方案如表说明:(1)当为黄灯时 A、B 两道同时为黄灯;以提示行人或车辆下一个灯色即将到来 时间 3 秒。 (2)当 A 到为红灯,A 道车辆禁止通行,A 道行人可通过;B 道为绿灯,B 道车辆通过,行人禁止通行。时间为 60 秒。(3)当 A 道绿灯,A 道车辆通行;B 道为红灯,B 道车辆禁止通过,行人通行。时间为 80 秒。 A 道车流大 通行时间长(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。(5)此表可根据车流量动态设定一、系统的工作原理(1)开关键盘输入交通灯初始时间,通过 8031 单片机 P1 输入到系统(2) 由 8031 单片机的定时器每秒钟通过 P0 口向 8255 的数据口送信息,由 8255 的 PC 口显示红、绿、黄灯的燃亮情况;由 8255 的 PA、PB 口显示每个灯的燃亮时间。(3)8031 通过 设置 各个信号等的燃亮时间、通过 8031 设置,黄、绿、红时间依次为 3 秒、60 秒、3 秒、80 秒、3 秒循环由 8031 的 P0 口向 8255 的数据口输出。(4) 通过 8031 单片机的 P3.0 位来控制系统是工作或设置初值,当.牌位0 就对系统进行初始化,为 1 系统就开始工作。(5)8255口用于输出时间的个位,口用于输出时间的十位,由747S07 驱动芯片驱动;而口用于输出各个灯的情况,它的末段连接双向晶闸管采用 220V 交流电压驱动。(6)在交通控制程序中加入看门狗指令,当系统出现异常看门狗将发出溢出中断。通过专用端口输入到 MAX692 看门狗芯片的 WDI 引角引起 RESET 复位信号复位系统1、控制器的软件设计每秒钟的设定3 60 3 80 3 60 A 道 黄灯亮 红灯亮 黄灯亮 绿灯亮 黄灯亮 红灯亮 B 道 黄灯亮 绿灯亮 黄灯亮 红灯亮 黄灯亮 绿灯亮 延时方法可以有两种一中是利用 MCS-51 内部定时器才生溢出中断来确定 1秒的时间,另一种是采用软延时的方法。计数器硬件延时(1) 计数器初值计算定时器工作时必须给计数器送计数器初值,这个值是送到 TH 和 TL 中的。他是以加法记数的,并能从全 1 到全 0 时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值设定为 C 和计数初值设定为 TC 可得到如下计算通式:TC=M-C式中,M 为计数器摸值,该值和计数器工作方式有关。在方式 0 时 M 为 213 ;在方式 1 时 M 的值为 216;在方式 2 和 3 为 28(2) 计算公式T=(MTC)T 计数或T 计数T 计数是单片机时钟周期的倍;为定时初值如单片机的主脉冲频率为,经过分频方式213微秒毫秒方式216微秒毫秒显然秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题(3) 秒的方法我们采用在主程序中设定一个初值为的软件计数器和使定时毫秒这样每当到毫秒时就响应它的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,先使软件计数器减,然后判断它是否为零。为零表示秒已到可以返回到输出时间显示程序。二、相应程序代码1、主程序定时器需定时毫秒,故工作于方式。初值: T 计数ms/1us=15536=3CBOHORG 1000HSTART: MOV TMOD, #01H ; 令为定时器方式MOV TH0, #3CH ;装入定时器初值MOV TL0, #BOH;MOV IE,#82H ;开中断SEBT TO;启动计数器MOV RO,#14H;软件计数器赋初值LOOP:SJMP $;等待中断2、中断服务子程序:DJNZ ,AJMP TIME ; 跳转到时间及信号灯显示子程序 DJNZ:,;恢复值MOV TH0, #3CH ;重装入定时器初值MOV TL0, #BOH;MOV IE,#82H 三、 软件延时MCS-51 的工作频率为 2-12MHZ,我们选用的 8031 单片机的工作频率为 6MHZ。机器周期与主频有关,机器周期是主频的 12 倍,所以一个机器周期的时间为12*(1/6M)=2us。我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定 1 秒的时间。具体的延时程序分析:DELAY:MOV R4,#08H 延时 1 秒子程序DE2:LCALL DELAY1 DJNZ R4,DE2RETDELAY1:MOV R6,#0 延时 125ms 子程序MOV R5,#0DE1: DJNZ R5,$DJNZ R6,DE1RETMOV RN,#DATA 字节数数为 2 机器周期数为 1所以此指令的执行时间为 2ms DELAY1 为一个双重循坏 循环次数为 256*256=65536 所以延时时间=65536*2=131072us 约为 125us DELAY R4 设置的初值为 8 主延时程序循环 8 次,所以 125us*8= 1 秒由于单片机的运行速度很快其他的指令执行时间可以忽略不计。四、 时间及信号灯的显示1、 8031 并行口的扩展8031 虽然有 4 个 8 位 I/O 端口,但真正能提供借用的只有 P1 口,因为 P2 和P0 口通常用于传送外部传送地址和数据,P3 口也有它的第二功能。因此,8031通常需要扩展。由于我们用外输出时间时,时间的个位、十位、信号灯的显示都要用到一个 I/O 端口,显然 8031 的端口是不够,需要扩展。扩展的方法有两种:(1)借用外部 RAM 地址来扩展 I/O 端口;(2)采用I/O 接口新片来扩充。 , 我们用 8255 并行接口信片来扩展 I/O 端口。2、显示原理:当定时器定时为 1 秒,时程序跳转到时间显示及信号灯显示子程序,它将依次显示信号灯时间 ,同时一直显示信号灯的颜色,这时在返回定时子程序定时一秒,在显示黄灯的下一个时间,这样依次把所有的灯色的时间显示完后在重新给时间计数器赋初值 ,重新进入循环。 3、8255 输出信号的放大:要使行人能看见信号灯的情况,必须把 8255 输出的信号进行放大,这里我们用 VT 为双向晶闸管,当门极为高电平时晶闸管导通,该支路指示灯亮;当门极为低电平时关断,该支路指示灯灭。如图 2我们用连接 7 段数码管的方法来连接晶闸管 4、 8255 输出信号与信号灯的连接:LED 灯的显示原理:通过同名管脚上所加电平的高低来控制发光二极管是否点量而显示不同的字形如 SP,g,f,e,d,c,b,a 管角上加上所以上为伏,不亮其余为高电平,全亮则显示为采用共阴级连接:其中 PA0PB0-a,PA1PB1-b, PA2PB2-c,PA3PB3-d,PA4PB4-e, PA5PB5-f,PA6PB6-gPA7PB7 -SP 接地显示数值 dop g f e d c b a 驱动代码(16 进制)0 0 0 1 1 1 1 1 1 3FH1 0 0 0 0 0 1 1 0 06H2 0 1 0 1 1 0 1 1 5BH3 0 1 0 0 1 1 1 1 4FH4 0 1 1 0 0 1 1 0 66H5 0 1 1 0 1 1 0 0 6DH6 0 1 1 1 1 1 0 0 7DH7 0 0 0 0 0 1 1 1 07H8 0 1 1 1 1 1 1 1 7FH表 3 驱动代码表(5)8255 与 8031 的连接:用 8031 的 P0 口的 p0.7 连接 8255 的片选信号 cs 我们用 8031 的地址采用全译码方式,当 p0.7 =0 时片选有效, 其他无效, p0.1 p0.1 用于选择8255 端口P0.7 p0.6 p0.5 p0.4 p0.3 p0.2 P0.1 P0.0A7 A6 A5 A4 A3 A2 A1 A01 X X X X X 0 0 00H 为 8255 的 PA 口1 X X X X X 0 1 01H 为 8255 的 PB 口1 X X X X X 1 0 02H 为 8255 的 PC 口1 X X X X X 1 1 03H 为 8255 的控制口由于 8031 是分时对 8255 和储存器进行访问所以 8031 的 P0 口不会发生冲突五、 程序设计1、流程图如图所示开始初始化等待键盘事件键盘事件处理显示程序处理 图 8图 9 程序流程图六、软件设计过程中遇到的问题及解决方法1键盘扫描中对于键位的设置问题?解决方法:从新理清顺序,参看书上的一些有关的程序,从键位的功能和要实现的效果来分析;从新定义键位,按照硬部件电路原理图上所给出的信息,自己先在纸上自己定义好相关键,然后在用程序具体的实现,最后,仔细检查编好的代码,反复的调试,直到能得到理想的效果。七、系统测试数据及结果分析1状态灯显示测试当电路连接完毕后,将写好的测试程序刷写到芯片内,K1 和 K2 分别给端口送高电平和低电平,通电即可检测。输入数据:按 K1、K2 键显示结果:当按 K1 键时,程序执行;当按 K2 键时自动返回主程序。正确性分析:通过反复测试,K1、K2 定义功能基本实现;K1 通过送出的高电平来激活端口,使程序正常执行;K2 通过送出的低电平,来激活端口使其能从某一执行点处正常返回到主程序。八、收获与体会通过这次硬部件实践让我了解单片机的整体结构和它的核心原理及工作流程,还有它的中断系统和定时器的使用方法及应用技巧;使我对单片机有了更进一步的认识和体会;由于使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合;这使得我设计起来更加的灵活,从而给予了我很多的设计思路,可以从各个不同的方面进行考虑;从而达到更加完善。但是在我们设计和调试的过程中,也发现了一些问题,譬如红灯和绿灯的切换还不够迅速,红绿灯规则的效率还不是很高,这需要在实践中进一步完善。程序原代码利用 P1 口输入开关量ORG 0000HLJMP MAINORG 0100HMAIN: MOV DPTR,#0C63HMOV A,#82HLCALL 0F4E0HAGAIN: MOV P1,#80HMOV A,P1JB ACC.7, NEXT0AGAIN1: MOV P1,#40HMOV A,P1JB ACC.6, REDMOV P1,#0FHMOV A,P1ANL A,#0FHMOV R3,AAJMP AGAIN1RED: MOV P1,#0FHMOV A,P1ANL A,#0FHMOV R2,AAJMP AGAINNEXT0: MOV R0,#03H NEXT1: MOV DPTR,#TABMOV A,R0MOVC A,A+DPTRMOV DPTR,#0C60HLCALL 0F4E0HMOV DPTR,#0C62H MOV A,#00HLCALL 0F4E0HACALL DELAYDJNZ R0,NEXT1MOV A,R3MOV R0,A NEXT2:MOV DPTR,#TABMOV A,R0MOVC A,A+DPTRMOV DPTR,#0C60HLCALL 0F4E0HMOV DPTR,#0C62HMOV A,#02HLCALL 0F4E0HACALL DELAYDJNZ R0,NEXT2MOV A,R2MOV R0,A NEXT3:MOV DPTR,#TABMOV A,R0MOVC A,A+DPTRMOV DPTR,#0C60HLCALL 0F4E0HMOV DPTR,#0C62HMOV A,#04HLCALL 0F4E0HACALL DELAYDJNZ R0,NEXT3AJMP NEXT0DELAY:MOV R4,#08H DE2:LCALL DELAY1DJNZ R4,DE2RETDELAY1:MOV R6,#0 MOV R5,#0DE1: DJNZ R5,$DJNZ R6,DE1RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HEND实践的目的及意义一、实践的目的本次设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及D8255 芯片单片机的资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。 二、实践的意义(1) 通过硬件实践达到巩固消化课程的内容;(2)进一步加强综合应用能力及单片机应用系统开发和设计能力的训练,启发创新思维;(3)使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程;(4)使知识转化为能力和能力转化为工程素质的重要过程。三、课题研究的基本思路设计并绘制交通灯控制系统原理图,动手制作电路板,编写控制程序,用仿真器对程序进行调试,最后用编程器把控制程序烧录到单片机中。硬件电路原理8255 端口分配:PA 口LED 显示器段选口PB 口LED 显示器位选口 PC 口高 4 位键盘列线输入PC 口低 4 位键盘行线输出8255 端口地址: 7CH7FH片内数据存储器分配40H43H:100MS,秒、分、时单元45H:数码管闪烁位置暂存器49H:各位允许最大值暂存单元4AH,4BH:修改后时间写回时 R0,R1 暂存单元4CH:闪烁时间计算器50H57H:显示缓冲区位地址分配:00H:设置时间标志,0 正常计时状态,1 修改时间状态01H:数码管闪烁标志,0 亮,1 灭端口地址:LED 段选口地址:8255APA 口,7CHLED 位选口地址:8255APB 口,7BH8255A 控制口地址:7FH电路原理图:当然,还有很多的 8255 芯片的知识需要了解。例如 8255 的基本功能:8255 具有 2 个独立的 8 位 I/O 口(A 口和 B 口)和 2 个独立的 4 位 I/O(C 口上半部和 C 口下半部) ,提供 TTL 兼容的并行接口。作为输入时提供三态缓冲器的功能,作为输出时提供数据锁存功能。其中,A 口具有双向传输功能。8255 有 3 种工作方式,方式 0、方式 1 和方式 2,能使用多种数据传送方式完成 CPU 与 I/O 设备之间的数据交换,如无条件方式、查询方式和中断方式。B 口和 C 口的引脚具有达林顿复合晶体管驱动能力,在 1.5V 时输出 1mA 电流,适于做输出端口。C 口除用做数据口外,当 8255 工作在方式 1 和方式 2 时,C 口的部分引脚作为固定的联络信号线。8255 的三种工作方式:方式 0,为一种简单的输入/输出方式,在这种方式下,3 个口中的任何一个都可提供简单的输入和输出操作,即前已介绍的无条件传送方式。它不需要应答式联络信号,外设总是处于准备好的状态。方式 0 是单向传送,一次初始化只能设置在一个方向上传送数据。方式 0 一般用于无条件传送的场合,也可以用做查询式传送。方式 1,是一种选通输入/输出方式。A 口和 B 口均可工作在这种方式。在这种方式下,A 口和 B 口仍作为两个独立的 8 位 I/O 数据通道,C 口要有 6 位分别作为 A 口和 B 口的应答联络线,其余 2 位仍可作为方式 0 的输入/输出。方式 1也是单向传送。方式 2,为双向选通 I/O 方式,只有 A 口才有此方式。这时,C 口有 5 根线用做 A 口的应答联络信号,其余 3 根线可用做方式 0,也可用做 B口方式 1 的应答联络线。方式 2 实际上就是方式 1 的输入与输出方式的组合,各应答信号的功能也相同。输入/输出的先后顺序是任意的,根据实际传送数据的需要选定。硬件调试过程中遇到的问题及解决方法(1)LED 显示屏不亮的问题解决方法:将系统的所有芯片插好(包括单片机和 存储器) ,反复检查联接线路并进行调试(2)电路版上按键不灵敏的问题解决方法:通过检查电路版后面的按键焊点,看是否是焊点漏焊或焊点脱焊(3)测量电压的问题解决方法:用万用表的二极管挡测量系统电源端与接地端是否短路。若短路,必须先检查硬件电路,找出短路原因,否则不能上电。若不短路,进一步检查每块芯片的电源线、地线是否接好,尤其是 CPU 芯片。(4)是否能注入信号的问题解决方法:将信号源加至输入端,然后依次往后测量各点的波形,看是否正常,以找到故障点。 当然,还有很多其它的寻找故障点的方法,例如看、听、闻、摸等。“看”就是看元件有无明显的机械损坏,例如破裂、烧黑、变形等;“听”就是听工作声音是否正常,例如一些不该响的东西在响,该响的地方不响或者声音不正常等;“闻”就是检查是否有异味,例如烧焦的味道、电容电解液的味道等,对于一个有经验的电子维修人员来说,对这些气味是很敏感的;“摸”就是用手去试探器件的温度是否正常,例如太热,或者太凉。一些功率器件,工作起来时会发热,如果摸上去是凉的,则基本上可以判断它没有工作起来。但如果不该热的地方热了或者该热的地方太热了,那也是不行的。(注意要先试探性的去摸,千万别把手烫伤了)。软件设计思想及流程图假设:A、B 两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为 A、B 两干道的公共停车时间。设 A 道比 B 道的车流量大,指示灯燃亮的方案如表说明:(1)当为黄灯时 A、B 两道同时为黄灯;以提示行人或车辆下一个灯色即将到来 时间 3 秒。 (2)当 A 到为红灯,A 道车辆禁止通行,A 道行人可通过;B 道为绿灯,B 道车辆通过,行人禁止通行。时间为 60 秒。(3)当 A 道绿灯,A 道车辆通行;B 道为红灯,B 道车辆禁止通过,行人通行。时间为 80 秒。 A 道车流大 通行时间长(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。(5)此表可根据车流量动态设定一、系统的工作原理(1)开关键盘输入交通灯初始时间,通过 8031 单片机 P1 输入到系统(2) 由 8031 单片机的定时器每秒钟通过 P0 口向 8255 的数据口送信息,由 8255 的 PC 口显示红、绿、黄灯的燃亮情况;由 8255 的 PA、PB 口显示每个灯的燃亮时间。(3)8031 通过 设置 各个信号等的燃亮时间、通过 8031 设置,黄、绿、红时间依次为 3 秒、60 秒、3 秒、80 秒、3 秒循环由 8031 的 P0 口向 8255 的数据口输出。(4) 通过 8031 单片机的 P3.0 位来控制系统是工作或设置初值,当.牌位0 就对系统进行初始化,为 1 系统就开始工作。(5)8255口用于输出时间的个位,口用于输出时间的十位,由747S07 驱动芯片驱动;而口用于输出各个灯的情况,它的末段连接双向晶闸管采用 220V 交流电压驱动。(6)在交通控制程序中加入看门狗指令,当系统出现异常看门狗将发出溢出中断。通过专用端口输入到 MAX692 看门狗芯片的 WDI 引角引起 RESET 复位信号复位系统1、控制器的软件设计每秒钟的设定3 60 3 80 3 60 A 道 黄灯亮 红灯亮 黄灯亮 绿灯亮 黄灯亮 红灯亮 B 道 黄灯亮 绿灯亮 黄灯亮 红灯亮 黄灯亮 绿灯亮 延时方法可以有两种一中是利用 MCS-51 内部定时器才生溢出中断来确定 1秒的时间,另一种是采用软延时的方法。计数器硬件延时(1) 计数器初值计算定时器工作时必须给计数器送计数器初值,这个值是送到 TH 和 TL 中的。他是以加法记数的,并能从全 1 到全 0 时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值设定为 C 和计数初值设定为 TC 可得到如下计算通式:TC=M-C式中,M 为计数器摸值,该值和计数器工作方式有关。在方式 0 时 M 为 213 ;在方式 1 时 M 的值为 216;在方式 2 和 3 为 28(2) 计算公式T=(MTC)T 计数或T 计数T 计数是单片机时钟周期的倍;为定时初值如单片机的主脉冲频率为,经过分频方式213微秒毫秒方式216微秒毫秒显然秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题(3) 秒的方法我们采用在主程序中设定一个初值为的软件计数器和使定时毫秒这样每当到毫秒时就响应它的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,先使软件计数器减,然后判断它是否为零。为零表示秒已到可以返回到输出时间显示程序。二、相应程序代码1、主程序定时器需定时毫秒,故工作于方式。初值: T 计数ms/1us=15536=3CBOHORG 1000HSTART: MOV TMOD, #01H ; 令为定时器方式MOV TH0, #3CH ;装入定时器初值MOV TL0, #BOH;MOV IE,#82H ;开中断SEBT TO;启动计数器MOV RO,#14H;软件计数器赋初值LOOP:SJMP $;等待中断2、中断服务子程序:DJNZ ,AJMP TIME ; 跳转到时间及信号灯显示子程序 DJNZ:,;恢复值MOV TH0, #3CH ;重装入定时器初值MOV TL0, #BOH;MOV IE,#82H 三、 软件延时MCS-51 的工作频率为 2-12MHZ,我们选用的 8031 单片机的工作频率为 6MHZ。机器周期与主频有关,机器周期是主频的 12 倍,所以一个机器周期的时间为12*(1/6M)=2us。我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定 1 秒的时间。具体的延时程序分析:DELAY:MOV R4,#08H 延时 1 秒子程序DE2:LCALL DELAY1 DJNZ R4,DE2RETDELAY1:MOV R6,#0 延时 125ms 子程序MOV R5,#0DE1: DJNZ R5,$DJNZ R6,DE1RETMOV RN,#DATA 字节数数为 2 机器周期数为 1所以此指令的执行时间为 2ms DELAY1 为一个双重循坏 循环次数为 256*256=65536 所以延时时间=65536*2=131072us 约为 125us DELAY R4 设置的初值为 8 主延时程序循环 8 次,所以 125us*8= 1 秒由于单片机的运行速度很快其他的指令执行时间可以忽略不计。四、 时间及信号灯的显示1、 8031 并行口的扩展8031 虽然有 4 个 8 位 I/O 端口,但真正能提供借用的只有 P1 口,因为 P2 和P0 口通常用于传送外部传送地址和数据,P3 口也有它的第二功能。因此,8031通常需要扩展。由于我们用外输出时间时,时间的个位、十位、信号灯的显示都要用到一个 I/O 端口,显然 8031 的端口是不够,需要扩展。扩展的方法有两种:(1)借用外部 RAM 地址来扩展 I/O 端口;(2)采用I/O 接口新片来扩充。 , 我们用 8255 并行接口信片来扩展 I/O 端口。2、显示原理:当定时器定时为 1 秒,时程序跳转到时间显示及信号灯显示子程序,它将依次显示信号灯时间 ,同时一直显示信号灯的颜色,这时在返回定时子程序定时一秒,在显示黄灯的下一个时间,这样依次把所有的灯色的时间显示完后在重新给时间计数器赋初值 ,重新进入循环。 3、8255 输出信号的放大:要使行人能看见信号灯的情况,必须把 8255 输出的信号进行放大,这里我们用 VT 为双向晶闸管,当门极为高电平时晶闸管导通,该支路指示灯亮;当门极为低电平时关断,该支路指示灯灭。如图 2我们用连接 7 段数码管的方法来连接晶闸管 4、 8255 输出信号与信号灯的连接:LED 灯的显示原理:通过同名管脚上所加电平的高低来控制发光二极管是否点量而显示不同的字形如 SP,g,f,e,d,c,b,a 管角上加上所以上为伏,不亮其余为高电平,全亮则显示为采用共阴级连接:其中 PA0PB0-a,PA1PB1-b, PA2PB2-c,PA3PB3-d,PA4PB4-e, PA5PB5-f,PA6PB6-gPA7PB7 -SP 接地显示数值 dop g f e d c b a 驱动代码(16 进制)0 0 0 1 1 1 1 1 1 3FH1 0 0 0 0 0 1 1 0 06H2 0 1 0 1 1 0 1 1 5BH3 0 1 0 0 1 1 1 1 4FH4 0 1 1 0 0 1 1 0 66H5 0 1 1 0 1 1 0 0 6DH6 0 1 1 1 1 1 0 0 7DH7 0 0 0 0 0 1 1 1 07H8 0 1 1 1 1 1 1 1 7FH表 3 驱动代码表(5)8255 与 8031 的连接:用 8031 的 P0 口的 p0.7 连接 8255 的片选信号 cs 我们用 8031 的地址采用全译码方式,当 p0.7 =0 时片选有效, 其他无效, p0.1 p0.1 用于选择8255 端口P0.7 p0.6 p0.5 p0.4 p0.3 p0.2 P0.1 P0.0A7 A6 A5 A4 A3 A2 A1 A01 X X X X X 0 0 00H 为 8255 的 PA 口1 X X X X X 0 1 01H 为 8255 的 PB 口1 X X X X X 1 0 02H 为 8255 的 PC 口1 X X X X X 1 1 03H 为 8255 的控制口由于 8031 是分时对 8255 和储存器进行访问所以 8031 的 P0 口不会发生冲突五、 程序设计1、流程图如图所示开始初始化等待键盘事件键盘事件处理显示程序处理 图 8图 9 程序流程图六、软件设计过程中遇到的问题及解决方法1键盘扫描中对于键位的设置问题?解决方法:从新理清顺序,参看书上的一些有关的程序,从键位的功能和要实现的效果来分析;从新定义键位,按照硬部件电路原理图上所给出的信息,自己先在纸上自己定义好相关键,然后在用程序具体的实现,最后,仔细检查编好的代码,反复的调试,直到能得到理想的效果。七、系统测试数据及结果分析1状态灯显示测试当电路连接完毕后,将写好的测试程序刷写到芯片内,K1 和 K2 分别给端口送高电平和低电平,通电即可检测。输入数据:按 K1、K2 键显示结果:当按 K1 键时,程序执行;当按 K2 键时自动返回主程序。正确性分析:通过反复测试,K1、K2 定义功能基本实现;K1 通过送出的高电平来激活端口,使程序正常执行;K2 通过送出的低电平,来激活端口使其能从某一执行点处正常返回到主程序。八、收获与体会通过这次硬部件实践让我了解单片机的整体结构和它的核心原理及工作流程,还有它的中断系统和定时器的使用方法及应用技巧;使我对单片机有了更进一步的认识和体会;由于使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合;这使得我设计起来更加的灵活,从而给予了我很多的设计思路,可以从各个不同的方面进行考虑;从而达到更加完善。但是在我们设计和调试的过程中,也发现了一些问题,譬如红灯和绿灯的切换还不够迅速,红绿灯规则的效率还不是很高,这需要在实践中进一步完善。程序原代码利用 P1 口输入开关量ORG 0000HLJMP MAINORG 0100HMAIN: MOV DPTR,#0C63HMOV A,#82HLCALL 0F4E0HAGAIN: MOV P1,#80HMOV A,P1JB ACC.7, NEXT0AGAIN1: MOV P1,#40HMOV A,P1JB ACC.6, REDMOV P1,#0FHMOV A,P1ANL A,#0FHMOV R3,AAJMP AGAIN1RED: MOV P1,#0FHMOV A,P1ANL A,#0FHMOV R2,AAJMP AGAINNEXT0: MOV R0,#03H NEXT1: MOV DPTR,#TABMOV A,R0MOVC A,A+DPTRMOV DPTR,#0C60HLCALL 0F4E0HMOV DPTR,#0C62H MOV A,#00HLCALL 0F4E0HACALL DELAYDJNZ R0,NEXT1MOV A,R3MOV R0,A NEXT2:MOV DPTR,#TABMOV A,R0MOVC A,A+DPTRMOV DPTR,#0C60HLCALL 0F4E0HMOV DPTR,#0C62HMOV A,#02HLCALL 0F4E0HACALL DELAYDJNZ R0,NEXT2MOV A,R2MOV R0,A NEXT3:MOV DPTR,#TABMOV A,R0MOVC A,A+DPTRMOV DPTR,#0C60HLCALL 0F4E0HMOV DPTR,#0C62HMOV A,#04HLCALL 0F4E0HACALL DELAYDJNZ R0,NEXT3AJMP NEXT0DELAY:MOV R4,#08H DE2:LCALL DELAY1DJNZ R4,DE2RETDELAY1:MOV R6,#0 MOV R5,#0DE1: DJNZ R5,$DJNZ R6,DE1RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HEND
收藏