资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,例,1,:,CPU,通过,8255A,控制,8,个开关和发光二极管,要求发光二极管的亮灭和开关状态一致,设计电路并编写程序。,解析:可以认为,处于方式,0,输出工作状态的,PA,、,PB,、,PC,端口实际上等同一个锁存器,而处于方式,0,输入工作状态的,PA,、,PB,、,PC,端口实际上等同一个缓冲器。,电路如图所示。,图,1 8255,控制开关、发光二极管电路,首先根据电路确定,8255A 4,个端口的地址。确定端口地址用下述方法进行,为了能够访问,8255A,,必须使,8255A,的片选信号,CS=0,A,9,A,4,的信号必须如下:,A,9,A,8,A,7,A,6,A,5,A,4,A,3,A,2,1 0 0 1 1 0 0 0 PA,端口,0 1 PB,端口,1 0 PC,端口,1 1,控制端口,而,A,3,、,A,2,的组合和各个端口地址的关系也如上所示,由于,A,1,、,A,0,没有参与译码,其值对访问端口没有影响。综合以上讨论可以得出,,PA,、,PB,、,PC,和控制端口的地址分别是,260H,、,264H,、,268H,和,26CH,。,在确定工作方式控制字时必须知道,,PA,端口为方式,0,输出,,PB,端口为方式,0,输入,而,PC,端口没有参与电路工作,其输入输出方式随意,由此可确定控制字为,82H,。,1 0 0 0 0 0 1 0,控制电路工作并使其保证开关状态和发光二极管亮灭一致的程序如下:,MOV DX,,,26CH,MOV AL,,,82H,OUT DX,,,AL,MOV DX,,,264H,IN AL,,,DX,NOT AL,MOV DX,,,260H,OUT DX,,,AL,例,2,:,用一片,8255A,连接,8,个,7,段数码显示管,规定,8255A,的端口地址范围为,340H34FH,用,74LS138,译码器实现,8255A,的片选电路,并根据电路编写在,8,个,7,段数码管上显示数字,07,的程序。,解:在设计电路前,首先要了解,7,段数码管,掌握数码管显示数字的原理。,图,2-,给出了共阴极,7,段数码管逻辑结构图,。,b,c,a,d,f,e,g,a,b,c,d,e,f,g,com,a,b,c,d,e,f,g,com,(a)7,段发光二极管标号,(,b,)对应电路图,(,c,)引脚分布,图,2-,共阴极,7,段数码管逻辑结构,从图,2-1,可以看出。当,com,端接低电平,,ag,端接高电平,对应的发光二极管就发亮。,如果想在,7,段数码管上显示数字,0,,需要在,com,端接低电平,,a,、,b,、,c,、,d,、,e,、,f,端接高电平,,g,端接低电平。,七段数码管的字形代码表如下:,显示字形,g fe d c b a,段码,0 0 111 1 1 1 3fh,1 0 110 0 0 030h,2 1 011 0 1 15bh,3 1 001 1 1 14fh,4 1 100 1 1 066h,5 1 101 1 0 16dh,6 1 111 1 0 17dh,7 0 000 1 1 107h,一片,8255A,只需个端口地址,而题中给出的地址范围由,16,个地址,这意味着低位地址中有些地址可以不参加地址译码。设计电路的第一部还需要设计出片选电路。必须用指定地址范围内状态不变的地址信号作为片选电路的输入信号。,A,9,A,8,A,7,A,6,A,5,A,4,A,3,A,2,A,1,A,0,1 1 0 1 0 0,0 0 0 0,340H,1 1 0 1 0 0,1 1 1 1,34FH,从上述分析中可以看出,指定地址范围内状态不变的地址信号是,A,9,A,8,A,7,A,6,A,5,A,4,它们的状态分别是,110100,,这意味着,A,9,A,4,上出现的信号状态为,110100,,,8255 A,的,CS,必须为低电平。,下面讨论如何用,74LS138,译码器实现这一功能。,设计片选电路的基本原则是:用,A,9,A,4,作为,74LS138,的输入,用,74LS138,其中一个输出,Y,i,去连接,8255,的,CS,,当且仅当,A,9,A,4,=110100,时,,Y,i,才能变为低电平。,图,2-2,中,用,A,6,、,A,5,、,A,4,分别连接,74LS138,的,G,、,G2A,、,G2B,只有当,A,6,A,5,A,4,=100,时,74LS138,才能进行译码操作,用,A,9,、,A,8,、,A,7,分别 连接,74LS138,的,C,、,B,、,A,,而用,Y,6,输出连接,8255,的,CS,,这样,只有当,A,9,A,8,A,7,=110,时,,Y,6,输出为低电平。,图,-,用,74LS138,译码器实现,8255,的片选电路,用一片,8255A,连接,8,个,7,段数码管。且使,8,个,7,段数码管显示,8,个不同的数字。开始,似乎感到有点困难。实际上,任何时刻只显示一个,7,段数码管,其余,7,个,7,段数码管都没有显示状态,,CPU,通过,8255A,逐个显示,7,段数码管,并在不同的,7,段数码管上显示不同的数字。在逐个显示完,8,个数码管后,又开始新一轮的逐个显示过程,当这个循环周期间隔足够短时,由于人的眼睛有滞后效应,使得人们发现每一个数码管都出于显示状态,且显示不同的数字。,从电路中可以得出,,8255A 4,个端口的地址分别是:,340H,(,PA,端口)、,344H,(,PB,端口,),348H,(,PC,端口)、,34CH,(控制口),程序的设计思路是先通过,PB,端口选中某个数码管(使其公共端为低电平),然后再从,PA,端口输出选中的数码管所对应的显示码,在完成当前数码管显示后,显示下一个数码管,在完成一轮显示后,开始下一轮的显示。,data segment,org 100h,buff1 db 3fh,30h,5bh,4fh,66h,6dh,7dh,07h,;,定义,07,的显示码,buff2 db 0feh,0fdh,0fbh,0f7h,0efh,0dfh,0bfh,7fh,;,定义位码,data ends,code segment,assume cs:code,ds:data,start,:,mov dx,34Ch,;,设置,8255,控制端口地址,mov al,80h,;,使,8255,的,A,口、,B,口、,C,口为方式,0,输出,out dx,al,yyy1,:,mov si,offset buff1,;,设置显示码指针,mov di,offset buff2,;,设置控制码指针,mov cx,8,;,每一轮循环中显示的数码管的数目,yyy2,:,mov dx,340h,;,先使所有数码管变黑,mov al,0,out dx,al,mov dx,344h,;,选中一个数码管,mov al,di,out dx,al,mov dx,340h,;,输出该数码管对应的显示码,mov al,si,out dx,al,inc si,;,选择下一个数码管所对应的显示码,inc di,;,选择下一个数码管,loop yyy2,;,显示下一个数码管,jmp yyy1,;,开始新的一轮的显示,mov ah,4ch,int 21h,code ends,end start,
展开阅读全文