资源描述
,Click to edit the title text format,Click to edit the title text format,Click to edit the outline text format,Second Outline Level,Third Outline Level,Fourth Outline Level,Fifth Outline Level,Sixth Outline Level,Seventh Outline Level,Eighth Outline Level,Ninth Outline Level,*,任务7 用单片机和 8255控制交通灯,教学导航,教,知识重点,(1)外部总线结构、锁存器、总线驱动器,(2)存储器芯片结构及存储器的扩展,(3)8255A结构及工作方式、控制字的设置,知识难点,存储器扩展芯片地址确定、8255A工作方式的应用,推荐教学方式,以任务入手,通过8255A控制交通灯系统这一任务的实现,让读者掌握单片机输入/输出口扩展、存储器扩展、8255A的应用。,建议学时,8学时,学,推荐学习方法,通过硬件电路设计及制作、软件编程、仿真调试与系统运行,理解相关理论知识,学会应用。,必须掌握的理论知识,(1)外部总线结构、锁存器、总线驱动器 (2)存储器芯片结构及存储器扩展的方法,(3)扩展的存储器芯片地址范围的确定 (4)8255A结构及工作方式、控制字的设置,必须掌握的技能,(1)利用相关芯片扩展I/O口及存储器扩展技术;(2)8255A三种工作方式的应用,任务单,任务描述,用8255做输出口,控制十二个发光二极管亮灭,模拟交通灯系统。初始态为四个路口的红灯全亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车;延时20s,东西路口的绿灯闪烁3次后熄灭,黄灯亮3s后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车;南北路口的绿灯闪烁3次后熄灭,黄灯亮3s后,再切换到南北路口红灯亮,东西路口的绿灯亮,东西方向通车;之后重复以上过程。,任务要求,1、自行设计利用8255做输出口连接十二个发光二极管实现交通灯功能的电路图;,2、按上述设计的电路图设计交通灯控制系统程序。,实现方法,(1)利用Proteus仿真软件对设计的电路及程序进行调试;,(2)绘制电路板,焊接元件;,(3)硬件仿真,烧录程序。,任务准备,7.1 单片机简单I/O扩展,7.2 存储器的扩展,7.3 8255A可编程并行I/O接口,7.1 MCS-51单片机的简单扩展,7.1.1 外部总线结构,地址,锁存器,A15A8,A7A0,D7D0,数据总线DB,控制总线CB,并行,串行,中断输入,计数脉冲,复位,RXD,TXD,INT0,INT1,T0,T1,RESET,P1,P2,P0,ALE,WR,RD,PSEN,EA,8,0,5,1,地址总线AB,7.1.1 外部总线结构,1.地址总线,传送存储单元或外设的地址,P0口低8位地址总线,(一般需要加一级锁存器),P2口高8位地址总线,2.数据总线,P0提供数据线,传送数据、指令和信息,P0,口,分时复用,的,双向数据总线,和,低8位地址总线,3.控制总线,3.控制总线,用来传送各种控制信息,/:片外数据存储器RAM和外设接口的读写控制信号。,PSEN:片外程序存储器的读控制;,ALE:地址锁存控制;下降沿锁存P0口的低8位地址,EA:片内/片外程序存储器选择信号,EA=0时,只访问外部程序存储器,74LS373功能表,8282的功能表和74LS373相似,表中的G端和8282的STB端对应,输入,输出,OE,LE,D,Q,L,H,H,H,L,H,L,L,L,L,Q不变,H,高阻态,74LS273功能表,74LS273只有清除端为高电平才具锁存功能,,锁存器控制为CLK,上升沿锁存数据。单片机ALE(下降沿锁存地址)引脚需接反相器,输入,输出,CLR,CLK,D,Q,L,L,H,H,H,H,L,L,H,L,Q不变,2.总线驱动器,当单片机外接芯片较多,超出总线负载能力,必须加 总线驱动器。驱动器可增强单片机对外围接口电路的驱动能力,而且可以起到对负载波动的隔离作用,根据,驱动的方向可分为单向总线驱动器和双向总线驱动器,单向驱动器,74LS244,、,74LS241,用于地址总线驱动,双向驱动器,74LS245,用于数据总线驱动,总线驱动器芯片管脚,1A1,2,1A2,4,1A3,6,1A4,8,2A1,11,2A2,13,2A3,15,2A4,17,1Y1,18,1Y2,16,1Y3,14,1Y4,12,2Y1,9,2Y2,7,2Y3,5,2Y4,3,1G,1,2G,19,74LS244,10,2,3,16,17,1,9,8,7,6,5,4,18,19,11,12,13,14,15,&,A0,A1,B0,A2,A3,A4,A5,A6,A7,DIR,B3,B4,B5,B6,B7,20,B1,B2,7,4,L,S,2,4,5,+5V,PSEN,RD,G,GND,7.1.3 并行I/O口简单扩展,1、用锁存器扩展简单输出口,(1)用74LS377扩展8位输出口,图7-4为利用锁存器74LS377扩展的简单输出口的接口电路。74LS377为带有允许输出端的8D锁存器。D7D0为其输入端口,输出端口为Q7Q0,CLK为时钟控制端,上升沿锁存。图中P0口的P0.0和P0.1引脚分别作为地址选择线与两个74LS377的片选控制端相连,使得两个74LS377的口地址分别为0XFFFE和0XFFFD。当某一个74LS377该输出口被选中,且CLK端电平正跳时,P0口数据锁存到74LS377的输出端,从而实现数码管的静态显示。,案例12 用单片机扩展口控制秒表,源程序清单:,#include,#include,#define addr377_1 XBYTE0XFFFE,#define addr377_2 XBYTE0XFFFD,unsigned char led10=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;,unsigned time=0,count=20;,主函数和中断服务函数,void main(),addr377_1=,addr377_2=led0;,TMOD=01;,TH0=-500008;,TL0=-50000;,EA=1;ET0=1;TR0=1;,while(1);,void isr_time()interrupt 1,TH0=-500008;TL0=-50000;,count-;,if(count=0),count=20;,time=(time+1)%60;,addr377_1=ledtime/10;,addr377_2=ledtime%10;,(2)74LS373扩展简单的8位输出口,案例13:用单片机扩展口控制流水灯 P2.7、P2.6引脚分别与片选控制G端相连,以选通锁存器,案例13:用单片机扩展,口控制流水灯利用该电路使16个发光二极管实现从左至右逐一点亮的流水灯效果的程序,#include,sbit p27=P27;,sbit p26=P26;,sbit p36=P36;,unsigned char cword=0 xfe;,void main(),unsigned int i,j;,p27=1;p26=0;p36=0;,while(1),for(i=0;i0;j-);,cword=(cword1)|1;,P0=cword;,cword=0 xfe;,p27=p27;p26=p26;,2、用三态门74LS244扩展8位输入口,P2.7和 相“或”控制信息的输入,案例14 用单片机扩展输入口进行开关控制,#include,#include,#define addr244 XBYTE0X3FFF /74LS244的地址为3FFFH,void main(),unsigned char mdata;,while(1),mdata=addr244;/从74LS244中读取数据(按键的开合状态),P1=mdata;,7.2 存储器的扩展,7.2.1 程序存储器的扩展,7.2.2 数据存储器的扩展,7.2.3 存储器的综合扩展,7.2.1 程序存储器的扩展,外扩的存储器芯片通过地址总线、数据总线和控制总线同单片机相连,地址总线是单向输入的,其数目与芯片容量有关。,如容量为2K8时,地址线有11根,即2,11,=2048。,容量为16K8时,地址线有14根,即2,14,。,数据线是双向的,即可输入,也可输出,其数目与数据位数有关。,如2K8的芯片,其数据线有8根;,控制线主要有读/写控制线与片选线两种。由于可以扩展多个存储芯片,需要用片选信号来确定哪个芯片被选中。读/写控制线决定芯片进行读/写操作。,1.程序存储器芯片,Mask ROM型:掩膜ROM,OPTROM型:一次可编程ROM,EPROM型:可擦除可编程ROM,E,2,PROM型:电可擦除可编程ROM,Flash ROM型:闪速只读存储器,1.程序存储器芯片,典型的EPROM芯片(Intel公司):,2716(2K8)、2732(4,K8)、2764(8,K8)、27128(16,K8)、27256(32,K8)、27512(64,K8)等。,在这些芯片上均设有玻璃窗口,在紫外线下照射20分钟左右,存储器的各位信息均变为1,通过相应的编程器将工作程序固化到这些芯片中,便可成为MCS-51的外部程序存储器。,(1)并行2716 EPROM的特点,2716的存储容量为16384(2K8)位,24线的双列直插式器件,单一5V供电,运行时最大功耗为252mW,维持功耗为132mW,读出时间最大为450ns。,(2)引脚说明,O0O7,数据线:传送存储单元内容。根数与单元数据位数相同。,A0A10,地址线:选择芯片内部一个存储单元。根数由存储器容量决定。,CE,片选线:选择存储器芯片。CE无效,其他信号线不起作用。,OE:,数据读选通线,,Vcc:+5V主电源,Vpp:编程电源(+25V),GND:接地端,(3)2716的工作方式,P2.2,P2.0,P0.7,8031,P0.0,ALE,PSEN,2.单片程序存储器扩展,.,.,.,D7 Q7,373,D0 Q0,G,控制线,11根地址线,8根数据线,(1)单片2716存储器扩展电路,A10,A8,A7,A0,2716,O7,O0,OE CE GND,EA,总线连接,1),地址总线的连接,P0.0,P0.7,和,P2.0,P2.2,连接地址总线,A0,A10,低,8,位地址信号,AB0,AB7,,高,3,位地址信号,AB8,AB10,2),数据总线的连接,P0.0,P0.7,连接数据总线,D0,D7,3)片选端及控制总线的连接,PSEN,连接,OE,:,片外程序存储器读控制信号,ALE,连接,锁存器,G,:,地址锁存允许控制信号,EA,接地,:选择片外程序存储器,(2)读取外部程序存储器的时序,不执行MOVX指令,数据输入,执行MOVX指令,3.多片程序存储器扩展,最大扩展容量,64K,外扩多片存储器进行的选择:,片选:选存储器芯片,片选信号区别不同芯片的地址空间。,字选:选中该芯片中的相应存储器单元,片选方法:,(,1,)线选法,单片机剩余高位地址总线直接连接各存储器片选线。,各芯片间地址不连续,有相当数量的地址不能使用,否则造成片选混乱,(,2,)地址译码法,单片机剩余高位地址总线通过地址译码器输出片选信号。,(1)线选法,各存储器芯片的地址空间:,AB,i:,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,:,110,0 0,000 0000 0000,110,0,0,111 1111 1111=C000HC7FFH,:,101,0,0,000 0000 0000,101,0,0,111 1111 1111=A000HA7FFH,:,011,0,0,000 0000 0000,011,0,0,111 1111 1111=6000H67FFH,A0A7 A8A10,D0D7,CE,OE,2716(I),A0A7 A8A10,D0D7,CE,OE,2716(II),A0A7 A8A10,D0D7,CE,OE,2716(III),O0O7,G,D0D7,OE,74LS373,P0.0P0.7,PSEN,P2.7,P2.6,P2.5,ALE,P2.2P2.0,8051,(2)地址译码法,3-8,地址译码器:,74LS138,地址译码法原理,译码法选址就是利用地址译码器对系统的片外高位地址进行译码,以其译码输出作为存储器芯片的片选信号,将地址划分为连续的地址空间块,避免了地址的间断。,(1)完全译码:地址译码器使用了全部地址线,地址与存储单元一一对应。,(2)部分译码:地址译码器仅使用了部分地址,地址与存储单元不是一一对应。部分译码也会浪费大量的存储单元,对于要求存储器容量较大的微机系统,一般不采用。但对于单片机系统来说,由于实际需要的存储器容量不大,采用部分译码器可以简化译码电路。,A0A7 A8A10,D0D7,CE,OE,2716(III),A0A7 A8A10,D0D7,CE,OE,2716(II),A0A7 A8A10,D0D7,CE,OE,2716(I),O0O7,G,D0D7,OE,74LS373,P0.0P0.7,PSEN,P2.5,P2.4,P2.3,ALE,P2.2P2.0,8051,各存储器芯片的地址空间:,Ab,i:,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,:,00,00 0,000 0000 0000,00,00,0,111 1111 1111=0000H07FFH,:,00,00,1,000 0000 0000,00,00,1,111 1111 1111=0800H0FFFH,:,00,01,0,000 0000 0000,00,01,0,111 1111 1111=1000H17FFH,C Y,0,B Y,1,A Y,2,G,2A,G,2B,G1,+5V,1,3,8,7.2.2 数据存储器的扩展,MCS-51,系列单片机的内部一般都仅有,128,字节或,256,字节的,RAM,数据存储器。,数据存储器和程序存储器使用相同的,64KB,地址空间,但两者却是相互独立的的存储空间,具有各自独立的控制信号线和读写操作指令。同时,外部的数据存储器和其它,I/O,接口芯片的扩展统一编址。,1.数据存储器芯片,典型的SRAM芯片有Intel公司的:,6216(2K8)、6264(8,K8)、62128(16,K8)等,存储器的外部信号线:,I/O0I/O7:8位,数据线,A0A12:,13位,地址线:,CE,1,片选线1:低电平有效,CE2片选线2:高电平有效,OE:读选通信号输入线,WE:写允许信号输入线,CE1,CE2,WE,OE,方式,D,0,D,7,1,未选中,高阻抗,0,未选中,高阻抗,0,1,1,1,输出禁止,高阻抗,0,1,0,1,写,D,in,0,1,1,0,读,D,out,6264的工作方式,2.数据存储器扩展,(1)单片6264数据存储器扩展,(2)多片6264数据存储器扩展,AB,i:,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,:,010,0 0000 0000 0000,010,0 0111 1111 1111=4000H5FFFH,:,001,0 1000 0000 0000,001,0 1111 1111 1111=2000H3FFFH,:,000,0 0000 0000 0000,000,1 1111 1111 1111=0000H1FFFH,O0O7,G,D0D7,OE,74LS373,+5V,C Y,0,B Y,1,A Y,2,G,2A,G,2B,G1,1,3,8,A0A7 A8A10,D0D7,CE1,OE,6264(I),WE,A0A7 A8A10,D0D7,CE1,OE,6264(II),WE,A0A7 A8A10,D0D7,CE1,OE,6264(III),WE,P0.0P0.7,RD,P2.7,P2.6,P2.5,ALE,P2.4P2.0,8051,WR,(3)外部数据存储器的数据传送,#include,unsigned char xdata DATABUFF100 _at_ 0 x00;/外部RAM,地址从0000H开始,void delay();,void main(),unsigned char cword;,int i;,for(i=0;i100;i+),DATABUFFi=i;,for(i=0;i0;i-),for(j=100;j0;j-);,利用Proteus调试程序的方法:,(1)点击仿真按钮,系统开始全速运行,可以看到写入P1的数据由P1连接的发光二极管以二进制形式显示。,(2)点击暂停按钮,系统暂时停下来了,点击“Debug”菜单下的“Memory Contents-U3”子菜单,这时系统将弹出“Memory Contents-U3”窗口,,(4)读取外部存储器的时序,1)外部数据存储器读周期,2)外部数据存储器写周期,7.2.3 存储器的综合扩展,地址总线和数据总线公用,片外,ROM,用到,PSEN,,,片外,RAM,用到,RD,与,WE,各芯片地址是多少?,7.3 8255A可编程并行I/O接口,7.3.1 8255A的结构及引脚,数据端口,A,、,B,、,C,(,包含,I/O,数据锁存器,控制寄存器和状态寄存器),端口,A,:,包括一个,8,位的数据输出锁存,/,缓冲器和一个,8,位的数据输入锁存器,可作为数据输入或输出端口,并工作于三种方式中的任何一种。,端,口,B,:,包括一个,8,位的数据输出锁存,/,缓冲器和一个,8,位的数据输入缓冲器,可作为数据输入或输出端口,作数据输入口时,没有锁存功能。端口,B,不能工作于方式,2,。,端口,C,:,结构和,B,口相同,但在,方式字控制下分为两个,4,位的端口,每个,4,位端口都有,4,位的锁存器,用来配合端口,A,与端口,B,锁存输出控制信号和输入状态信号,1.8255A组成结构,A,组控制和,B,组控制电路,实现对,8255A,端口工作方式的控制,A,组:,PA,和,PC,4,7,B,组:,PB,和,PC,0,3,数据总线缓冲器,三态双向,8,位缓冲器,,8255A,和单片机数据总线接口,读,/,写控制逻辑电路,单片机控制信号(,RD,、,WR,、,RESET,),地址总线控制信号,(,A1,、,A0,),片选信号(,CS,),1.8255A组成结构,2.8255A的引脚,电源和地线:,VCC,、,GND,与单片机相连的引脚(,14,条),RESET,复位信号,高电平有效,CS,片选信号,低电平有效,RD,读信号,低电平有效,WR,写信号,低电平有效,D7,D0,双向三态数据线,和单片机数据总线相连,A1,、,A0,端口选择信号,与外设相连的引脚(,24,条),PA7,PA0,:,A,口输入,/,输出引脚,PB7,PB0,:,B,口输入,/,输出引脚,PC7,PC0,:,C,口输入,/,输出引脚,8255A的控制信号与端口工作状态,CS,A1,A0,RD,WR,工作状态,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,读A口,读B口,读C口,写A口,写B口,写C口,写控制字寄存器,芯片未选中,非法状态,非法状态,7.3.2 8255A的工作方式,1.方式0基本的输入/输出方式,不需要任何联络(选通、握手)信号,相当于该端口在单片机与外设之间建立一个直接的数据通信,端口,A,、,B,、,C,都可作为输入或输出口使用。,应用场合:,无条件传送数据:默认为传送数据的双方均已准备好。,查询方式传送数据:可以由程序定义,C,口的某些位作为联络信号线,以配合,A,口、,B,口完成查询方式下的数据传送。,2.方式1选通的输入/输出方式,无论是输入还是输出都通过应答关系实现,这时端口,A,或,B,用作数据口,端口,C,的一部分引脚用作握手信号线与中断请求线。,若端口,A,、,B,只有一个工作于方式,1,另一个端口和端口,C,的其它位可工作于方式,0,若端口,A,和,B,同时工作于方式,1,端口,C,余下的两位还可用于传送数据或控制信号等。,A,口方式,1,输入组态,B口方式1输入组态,A,口方式,1,输出组态,B口方式1输出组态,INTE,:,中断允许信号,INTR,:,中断请求信号,项 目,PC7,PC6,PC5,PC4,PC3,PC2,PC1,PC0,输入方式,I/O,I/O,IBF,A,STB,A,INTR,A,STB,B,IBF,B,INTR,B,输出方式,OBF,A,ACK,A,I/O,I/O,INTR,A,ACK,B,OBF,B,INTR,B,输入选通信号,有效时,外设把数据送至A口或B口的输入锁存器,输入缓冲器满信号,有效时,表示数据已送入输入锁存器,尚未被单片机取走。它由 信号置位,由 信号的上升沿复位。,输出缓冲器满信号,有效时,表示A口或B口已经接收到了来自单片机的数据,外设可以取走该数据。它由 信号上升沿置为有效,由 的有效信号置为高电平。,外设收到输出数据后的响应信号,有效时,表示外设已经接收到了A口或B口的数据,同时置位 信号。,方式1的输入过程,方式1的输出过程,方式2 双向传送方式,仅适用于端口,A,,,PA7,PA0,作为双向的数据总线,端口,C,有,5,条引脚用作,A,的握手信号线和中断请求线,B,口和,C,口余下的,3,位仍可工作于方式,0,或,1,A组,方式选择,0 0 方式0,0 1方式1,1方式2,端口A,1输入,0输出,端口C(上半部,1输入,0输出,7.3.3 8255A的控制字,1.方式选择控制字,B组,方式选择,0方式0,1方式1,端口B,1输入,0输出,端口C(下半部),1输入,0输出,标志位D,7,1,D,7,D,6,D,5,D,4,D,3,D,2,D,1,D,0,2.C口按位置位/复位控制字,D,7,D,6,D,5,D,4,D,3,D,2,D,1,D,0,标志位D,7,0,未使用,位选择,000PC,0,001PC,1,010PC,2,011PC,3,100PC,4,101PC,5,110PC,6,111PC,7,0复位,1置位,7.3.4 8255A应用实例,8255A,各端口的地址,A口:0111 1111 1111 1100B 7FFCH,B口:0111 1111 1111 1101B 7FFDH,C口:0111 1111 1111 1110B 7FFEH,D口:0111 1111 1111 1111B 7FFFH,1.8255工作方式设定,实例7-1:用8255A芯片扩展MCS51单片机的并行I/O接口,由图示可知8255A芯片A口、B口、C口和控制字寄存器的地址分别为7FFCH、7FFDH、7FFEH和7FFFH,现要求其3个数据端口均工作在方式0,其中A口和C口的高4位作为输出口,B口和C口的低4位作为输入口。,实例7-1,根据题意,A口方式0输出:D6D5D4000,B口方式0输入:D2D101,C口的高4位输出:D30,C口的低4位输出:D01,因此8255A的工作方式控制字为10000011B,即83H,实例7-1,#include,#include,#define addrc XBYTE0 x7FFF,void main(),addrc=0 x83;,例6-2:同上题8255A芯片,要求对C口的PC7位置0,PC5位置1。,解:根据C口按位置位/复位控制字的格式,对PC7位置0其控制字为0EH,对PC5位置1其控制字为0BH。,#include,#include,#define addrc XBYTE0 x7FFF,void main(),addrc=0 x0E;,addrc=0 x0B;,2.工作方式,0,的应用,8255A工作在基本的输入输出方式下,A口、B口均可置为输入方式或输出方式,但不能既作输入又作输出;在工作方式0下,C口不提供固定的联络信号,C口的高4位和低4位也可分别设置为输入方式或输出方式。,实例7-4 从8255A的A口读入8个按钮状态,送到8255A的B口输出,当某一按钮按下则对应发光二极管亮,否则灭。,实例7-4,#include,#include,#define addra XBYTE0 xFFF8,#define addrb XBYTE0 xFFF9,#define addrcon XBYTE0 xFFFB,void main(),unsigned char cdata;,addrcon=0 x90;,while(1),cdata=addra;,addrb=cdata;,小技巧:,18255A的负载能力有限,因此外接I/O设备时要接总线驱动器,本例用的是74LS240。,28255A的、A1、A0分别接74LS373的Q2、Q1、Q0,则其A口、B口、控制字寄存器的地址的最后三位为000、001和011,不用地址位设为1,则地址分别为FFF8H、FFF9H、FFFBH。,3.工作方式,1,的应用,8255A工作在选通的输入输出方式下,A口、B口由编程可分别设定为输入口或输出口,而C口则分为两部分,分别用作A口和B口的控制信号和同步信号,为8255A与CPU或外部设备之间传送状态信息及中断请求信号。,7.3.5 单片机应用系统设计方法,(1)确定任务:,开发任何一个应用系统,都必须以市场需求为前提。因此,在系统设计前,首先要进行广泛的市场调查,了解该系统的市场应用概况,分析系统当前存在的问题,研究系统的市场前景,确定系统开发设计的目的和目标。在此基础上,再对系统的具体实现进行规划,包括应该采集的信号的种类、数量、范围,输出信号的匹配和转换,控制算法的选择,技术指标的确定等。,(2)总体设计,在对应用系统进行总体设计时,应根据应用系统提出的各项技术性能指标,拟订出性价比最高的一套方案。首先,应根据任务的繁杂程度和技术指标要求选择机型。选定机型后,再选择系统中要用到的其它外围元器件,如传感器、执行器件等。,在总体方案设计过程中,对软件和硬件进行分工是一个重要的环节。用硬件实现速度比较快,节省CPU的时间,但系统的硬件接线复杂、系统成本较高。用软件实现则较为经济,但要更多地占用CPU的时间,原则上,能够由软件实现的任务就尽量用软件来实现,以降低成本,简化硬件结构。如果系统回路多、实时性要求强,则要考虑用硬件完成。同时,还要求大致规定各接口电路的地址、软件的结构和功能、上下位机的通信协议、程序的驻留区域及工作缓冲区等。总体方案一旦确定,系统的大致规模及软件的基本框架就确定了。,(3)硬件电路图设计,硬件的设计是根据总体设计要求,在选择完单片机机型的基础上,具体确定系统中所要使用的元件,并设计出系统的电路原理图,经过必要的实验后完成工艺结构设计、电路板制作和样机的组装。主要硬件设计包括:,1)单片机电路设计:主要完成时钟电路、复位电路、供电电路的设计。,2)扩展电路和输入/输出通道设计:主要完成程序存储器、数据存储器、I/O接口电路、传感器电路、放大电路、多路开关、A/D转换电路、开关量接口电路、驱动及执行机构的设计。,3)控制面板设计:主要完成按键、开关、显示器、报警等电路的设计。,4)软件设计,单片机应用系统的软件设计是研制过程中任务最繁重的一项工作,难度也比较大。单片机应用系统的软件主要包括两大部分:用于管理单片机微机系统工作的监控程序和用于执行实际具体任务的功能程序。对于前者,应尽可能利用现成微机系统的监控程序。为了适应各种应用的需要,许多单片机开发系统的监控软件功能相当强,并附有丰富的实用子程序,可供用户直接调用,例如键盘管理程序、显示程序等。因此,在设计系统硬件逻辑和确定应用系统的操作方式时,就应充分考虑这一点。这样可大大减少软件设计的工作量,提高编程效率。后者要根据应用系统的功能要求来编程序。例如,外部数据采集、控制算法的实现、外设驱动、故障处理及报警程序等等。软件设计通常采用模块化程序设计、自顶向下的程序设计方法。,(5)系统调试,包括硬件调试和软件调试。硬件调试的任务是排除系统的硬件电路故障,包括设计性错误和工艺性故障。软件调试是利用开发工具进行在线仿真调试,除发现和解决程序错误外,也可以发现硬件故障。,案例15 单片机控制简单智能设备,假设8255A连接一台智能设备(该智能设备由89C51控制,例如打印机等),主控机U1向8255A分别传送09,8255A接收到将该数字在智能设备的数码管中闪烁5次,如果8255A工作在方式1,请实现之。,请单击左图,(1)控制字分析:,8255A的A口PA0PA7,连接智能外部设备的8根数据线(本例是U3的P2口),作为输出口;工作在方式1的中断方式下,方式控制字为10100000B,即A0H;根据产生中断的条件,应先置PC6(INTEA)为1,因此,C口的控制字为0DH。,(2)源程序:,#include,#include,#define addra XBYTE0 xFFF8,#define addrcon XBYTE0 xFFFB,unsigned char cword=0;,void main(),addrcon=0 x0D;,/PC6(INTEA)置1,允许B口中断,addrcon=0 xA0;/A口的输出方式1,IT1=0;EX1=1;EA=1;,addra=cword;,while(1);,中断服务函数,void isr_int1()interrupt 2,cword+;,if(cword10),addra=cword;,else,EX1=0;,/*中断服务函数:当一个数字输出到8255A处理完后,再将下一个数字送到8255A再进行处理,依次类推,直到将9送到8255A处理完成后停止传送数据。*/,智能设备程序:,本例中的智能设备是由89C51控制的,要把从8255A的A口收到的数据从P2口接收,再从P1口输出到数码管显示。为了配合8255A的方式1,8255A的PC7连接U3(89C51)的P3.3(外部中断1的输入端),PC6连接U3的P3.0,当8255A的A口接收到数据,则将PC7()变为低电平,即可向U3发出中断请求,在中断服务程序中,读取P2的值,将P2的值显示在数码管上,延时一段时间后数码管熄灭达到闪烁效果,闪烁5次完将P3.0变为低电平,使8255A的PC6变为低电平(),该引脚的低电平使 置1,当返回主程序时,置P3.0为1,则满足INTRA为1的条件,则该信号经非门后送到主控机U1的P3.3,产生外部中断1的中断请求。,智能设备程序,#include,sbit P30=P30;,unsigned char led=0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90;,void main(),IT1=0;EX1=1;EA=1;,while(1),P30=1;,智能设备中断服务函数,void int1()interrupt 2,unsigned char cword,i;,int time;,P2=0XFF;cword=P2;,for(i=0;i0;time-);,P1=0 xff;,for(time=10000;time0;time-);,本例是利用89C51和数码管虚拟一台智能设备,例如打印机,打印机内部是由单片机控制打印头运动实现打印功能,但在Proteus仿真软件中无法仿真打印机,因此笔者设计了这样一个虚拟的智能设备。,案例16 用单片机和8255A控制交通灯,用8255做输出口,控制十二个发光二极管亮灭,模拟交通灯系统。,(1)确定任务,可由8255A的PA、PB口连接12个发光二极管,分别代表四个路口的红、绿、黄灯,初始态为四个路口的红灯全亮之后,东西路口的绿灯亮20秒,南北路口的红灯亮,东西路口方向通车;延时一段时间后,东西路口的绿灯熄灭,黄灯开始闪烁,每隔0.5s闪烁1次,闪烁3次后,东西路口红灯亮,而同时南北路口的绿灯亮20秒,南北路口方向开始通车;延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪烁,每隔0.5s闪烁1次,闪烁6次后,再切换到东西路口的绿灯亮,东西方向通车;之后重复以上过程。,(2)总体设计,根据本任务的要求,选用AT89S51,配备晶振电路和复位电路,晶振频率为12MHz,四个路口的红、绿、黄交通灯由8255A控制。,(3)硬件电路设计,为了方便线路连接,8255的PA的低6位分别接西、北路口的红、黄、绿灯(发光二极管,采用共阳极的连接方式),PB口的低6位分别接东、南路口的红、黄、绿灯,设计的原理图如图所示。,请单击左图,(4)软件设计,参考任务5中的有关知识,各路口的灯亮的规律与PA、PB口的取值有关系到,其规律如表所示。,规 律,PB5,PB4,PB3,PB2,PB1,PB0,PA5,PA4,PA3,PA2,PA1,PA0,十六进制数,东绿,东黄,东红,南绿,南黄,南红,西绿,西黄,西红,北绿,北黄,北红,红灯全亮,1,1,0,1,1,0,1,1,0,1,1,0,0 x36,东西绿灯亮,南北红灯亮,0,1,1,1,1,0,0,1,1,1,1,0,0 x1E,东西黄灯亮,南北红灯亮,1,0,1,1,1,0,1,0,1,1,1,0,0 x2E,东西红灯亮,南北绿灯亮,1,1,0,0,1,1,1,1,0,0,1,1,0 x33,东西红灯亮,南北黄灯亮,1,1,0,1,0,1,1,1,0,1,0,1,0 x35,(4)软件设计,本任务涉及两个定时时间,一是每个路口的绿灯亮20s,另一个是黄灯闪烁时间间隔0.5s,显然最容易实现的方法就是利用定时器,可以用定时器0控制路口绿灯亮的时间,用定时器1控制黄灯闪烁的时间间隔,但是两个定时器的定时都不可达到20s或1s,所以可以让两个定时器都工作于方式1,定时时间为50ms,引进两个变量time(初值为400)和timey(初值为20),当定时器发出中断时,这两个变量分别减1,直到为0则达到定时时间。,源程序(全局变量):,#include,#include,#define addra XBYTE0XFF20,#define addrb XBYTE0XFF21,#define addrcon XBYTE0XFF23,unsigned char time=20*20,timey=10,county=6;/绿灯亮20s,黄灯状态转换时间间隔为0.5s,转换6次,unsigned char allr=0 x36;/所有路口的灯全红,unsigned char ewg_snr=0 x1e;/东西路口绿灯亮,南北路口红灯亮,unsigned char ewy=0 x2e;/东西路口黄灯亮,南北路口红灯亮,unsigned char sng_ewr=0 x33;/南北路口绿灯亮,东西路口红灯亮,unsigned char sny=0 x35;/南北路口黄灯亮,东西路口红灯亮,bit ewg=1;/刚才是否是东西路口绿灯亮过,源程序(主函数):,main(),unsigned int i,j;,addrcon=0 x80;addra=addrb=allr;,for(i=1000;i0;i-),for(j=200;j0;j-);,addra=addrb=ewg_snr;,TMOD=0 x11;/,定时器,1,和定时器,0,均工作于方
展开阅读全文