目录
一、目的············································3 二、内容············································3 三、设计任务········································3 四、方案选择及原理··································3 五、所用器件········································3
主要器件简介·····································4 六、原理图··········································6 1、8086和存储器连接······························6 2、CPU与8255A连接·······························6
8255A的A口与键盘连接·························7 4、 8255A的B、C口······························7 5、完整电路图·····································8 七、软件设计思路·······································8 八、流程图··········································9
1、主程序·········································9 2、子程序········································10 九、程序代码·········································10 十、设计中的难点····································12 十一、收获及体会······································13 十二、参考文献·······································14
1
多功能密码锁
一、目的
1、 了解和掌握8086,8255,等接口芯片以及LED显示器的原理和功能; 2、 能用这些接口芯片构建一个简单的系统控制对象, 3、 掌握接口电路的综合设计与使用; 4、 通过自己动手,进一步了解计算机得工作原理,接口技术,提高计算机硬件,软件综合应用能力,即对微机原理,接口技术,汇编语言程序设计进行综合训练。
二、内容
密码锁在输入密码正确的条件下输出开锁电平,控制电控锁开启,同
显示00字样。当输入密码错误时,发出错误警告声音,同时显示FF字样。当六次误码输入的条件下,产生报警电平报警。还可以实现对密码的修改,修改成功后,蜂鸣器发出确认音。
三、设计任务
1、选用8086和适当的存储器及接口芯片完成相应的功能。 2、用LED显示器显示电子锁的当前状态。 3、画出详细的硬件连接图。
4、给出程序设计思路、画出软件流程图。 5、给出地址分配表。
6、给出所有程序清单并加上必要注释。
7、完成设计说明书(列出参考文献,所用器件型号)。
四、方案选择及原理
这次的设计要求是在密码输入正确时输出开锁电平和显示“00”,密码错误时显示“FF”和蜂鸣器发出报警声音等,我们采用8255A的B口作为显示器的输出,c口为选管和接蜂鸣器,开锁及报警电平。对于6次密码错误输入,刚开始用8253计数器,后来发觉可以直接用软件控制,线路简单,程序也很易实现。用蜂鸣器发声次数来区分确认和警告声音,一声表示确认,三声表示警告。键盘上的按键用SW-PB共12个,0-9为数字键,连接到8255A的A口对应二进制数,还有确认键和密码修改键,按下表示A口接收到低电平信号。
五、所用器件
CPU8086、并行接口8255A、存储器27c513、地址锁存器8282、74LS138、石英晶振,8284A、共阴极数码管、非门74LS04、蜂鸣器,电阻、开关等。
2
主要器件简介
CPU8086
8086是Inter系列的16位微处理器,芯片上有2.9万个晶体管,采用 HMOS工 艺制造,用单一的+5V电源,时钟频率为5MHz~10MHz。 8086有16根数据线和20根地址线,它既能处理16位数据,也能处理8位数据。可 寻址的内存空间为1MB.
并行接口8255
Intel 8086/8088 系列的可编程外设接口电路(Programmable Peripheral Interface)简称 PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、
3
可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。
地址锁存器74LS138
74LS138 为3 线-8 线译码器,共有 54/74S138和 54/74LS138 两种线路结构型式,其工作原理如下:当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。 利用 G1、/(G2A)和/(G2B)可级联扩展成 24 线译码器;若外接一个反相器还可级联扩展成 32 线译码器。 若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。
4
六、原理图
1、8086和存储器连接
存储器地址:0000H~3FFFH
2、CPU与8255A连接
8255A地址分配:PA800H PB802H PC804H 控制寄存器806H
为了满足8255A的四个端口地址必须为偶地址这一要求,将8255A的A1、A0分别与8086系统地址总线的A2、A1相连,并且,CPU在对8255A的端口进行访问时,总是将地址中的A0设置为0.
5
3、8255A的A口与键盘连接
共12个按键,0-9为数字键,每个十进制数对应PA3~PA0四位二进制数,确认键和修改密码键按下时,PA4和PA5为低电平。
4、8255A的B、C口
C口低四位用了低三位,都是输出高电平有效,高四位用了两位,输出低电平有效。
6
5、 完整电路图
七、软件设计思路
由于我们的硬件设计部分没有用到8259和8253,主要器件是8086和8255,所以使得我们的设计简单很多。程序也主要解决如何利用8255来实现所要求的功能这个问题。首先需要初始化8255,A口作为输入,B、C口作为输出。一开始纵观设计内容及要求,可以大致知道需要三个子程序,修改密码程序、开锁程序、闭锁程序。由A口输入的数据决定调用哪个子程序,而相关子程序需要具有所要求的功能,比如修改密码程序需要在修改成功后发出蜂鸣声,开锁程序需要输出开锁电平和显示00字样,等等。为方便程序编写,采用输入数据逐位与正确密码相比的方法,只要有一位不相同即转入闭锁程序,而在闭锁程序中需要设置计数值,当转入闭锁程序六次也即输入错误密码六次则输出报警电平报警。这样则能完成所需的所有功能。程序设计思路基本如此。按此思路画完流程图之后则进入程序设计阶段。大框架已经确定下来,现在需要决定一些重要的细节。比如如何安排计数值的位置,子程序的返回处,等等。经过多次试探与检验,最终将这些细节确定下来。最后将程序开始的初始化、退出程序补充完整,整体再检查一遍,查漏补缺,即可完成设计。
7
八、流程图
主程序流程图
开始 设置初始密码,对8255初始化 需要重新修改密码? 调用修改密码子程序 设置最大误码输入次数。 设置密码个数,获取密码偏移地址 输入密码,并与原定密码进行逐位比较 输入密码是否正确? 调用闭锁子程序 调用开锁子程序 结束
8
修改密码子程序流程图 闭锁子程序流程图 开锁子程序流程图
开始 开始 开始 设置密码个数 数码管显示“FF” 数码管输出“00” 输入新密码 蜂鸣器响四输出开锁电平 声表示警告 返回 蜂鸣器响一次表示确认 输入误码已达6次? 返回 输出报警电平报警 返回
九、程序代码
DATAS SEGMENT
PASSWORD DB 0,0,0,0,0,0 ;设置初始密码 DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,ES:STACKS START: MOV AX,DATAS MOV DS,AX MOV AX,STACKS MOV ES,AX MOV AL,90H
OUT 63H,AL ;初始化8255,方式0,A口输入,B、C口输出
9
IN AL,60H ;读取A口数据 AND AL,20H ;是否需要修改密码
JNE CHANGE ;需要则调用修改密码子程序 MOV BX,5 ;设置错误密码输入最大次数 A1: MOV CX,5 ;设置密码个数
MOV SI,OFFSET PASSWORD
A2: IN AL,60H
CMP AL,BYTE PTR[SI] ;逐位比较,判断输入密码是否正确 JNE CLOSE ;只要有一位错误就调用闭锁子程序 INC SI LOOP A2
CALL OPEN ;正确就调用开锁子程序 JMP ST
CHANGE PROC NEAR ;修改密码子程序 MOV CX,5 ;设置密码个数 MOV SI,OFFSET PASSWORD A3: IN AL,60H MOV [SI],AL INC SI
LOOP A3 ;依次修改六位密码 A4: IN AL,60H
AND AL,10H ;判断有否按下确认键 JNE A4 ;没按下则继续等待 MOV AL,01H
OUT 62H,AL ;蜂鸣器响一下表示确认 RET CHANGE ENDP
CLOSE PROC NEAR ;闭锁子程序 MOV AL,71H
OUT 61H,AL ;数码管输出“F” MOV AL,10H
OUT 62H,AL ;选中L0输出“F” MOV AL,71H OUT 61H,AL MOV AL,20H
OUT 62H,AL ;选中L1输出“F” A5: MOV CX,3 MOV AL,01H OUT 62H,AL
LOOP A5 ;蜂鸣器响四下表示错误警告
10
DEC BX
CMP BX,0 ;判断是否已经输入六次错误密码 JNE A1 ;不够六次则重新转到A1 MOV AL,04H
OUT 62H,AL ;已输入六次误码则产生报警电平报警 RET CLOSE ENDP
OPEN PROC NEAR ;开锁子程序 A6: IN AL,60H AND AL,10H
JNE A6 ;等待确认键按下 MOV AL,3F
OUT 61H,AL ;数码管输出“0” MOV AL,10H
OUT 62H,AL ;选中L0输出“0” MOV AL,3F OUT 61H,AL MOV AL,20H
OUT 62H,AL ;选中L1输出“0” MOV AL,02H
OUT 62H,AL ;输出开锁电平,开通LED,显示电子锁开启 RET OPEN ENDP
ST: MOV AX,4CH INT 21H
CODES ENDS END START
十、设计中的难点
1.硬件
本次设计总的来说还是比较简单的,但设计过程也遇到不少的问题。在硬件方面,我们用的是protel99se软件画连接图,由于对这个软件不是很熟悉,在找元件和连线时花了不少的时间。在画图过程中通过不断的修改,最终画出如上电路图。 2.软件
首先是如何安排好几个子程序调用的顺序。按照一般的逻辑思维,我将修改密码安排在第一个,如果用户刚开始即要修改密码可以很方便地实现,如果不用则转入输入密码步骤。而若
11
输入错误密码则调用闭锁程序,否则调用开锁程序,这样则可初步安排好顺序。其次是如何判断错误密码。如果输入的是错误的密码,按照我们日常生活经验,是全部输入才提示出错,而我觉得这样太浪费时间,所以考虑将输入的密码逐位与正确密码相比较,只要有一位不符合则马上显示出错,这样实现起来也比较容易,只需要获取正确密码的偏移地址和输入的相应密码,然后用一个逻辑语句“与”将两者进行比较,再利用条件转移语句即可轻松实现。最后是警告声音的处理问题。因为已经要用到蜂鸣器来发出对新密码的确认音,故为了简化电路,我们决定也用蜂鸣器来发出错误警告声音,规定响一声表示确认新密码,响四声表示错误警告。
十一、收获及体会
1、下面就以硬件方面我做一下总结:
硬件部分主要是设计原理图跟连接线路,这次主要是用到Protel这个软件,这个软件之前没接触过,所以在下载下来以后第一件事就是上网看教程,看了两三个教程之后大概就明白了它的大体操作,开始自己动手绘图。
在绘图之前,我先把软件仔细看了一下,并问了同伴一些端口问题,最后初步定下来一个图样,但是在实际绘图过程中发现太过复杂了,又重新制定了一个图样,也就是现在上交的这份。因为是第一次用这个软件,里面很多功能都不懂,经常点出很多不懂得文件,最后不得不重新设计,导致绘图时间大大增加。在多次实践后我终于较为熟练的掌握里面的工具了,后面的绘图过程也就相对来说比较轻松,出了自己绘制元件的时候有些麻烦,不过碰到不会的就上网百度或者问问同学,其实这个绘图过程还是挺有意思的。线路图终于接好了,这里可以总结为三点:
第一,在绘图之前一定要先熟练掌握Protel这个软件;第二,一点要把程序看懂,这样才可以合理布线路图;第三,在搜索元件的过程中可以大量的求助百度,里面有很多元件库表,这样可以大大缩短查找时间。 2、软件设计总结:
这次课程设计中我负责软件设计。刚开始以为之前接触了不少程序,这次应该轻车熟路,但是真正开始设计的时候才发现实际需要解决的问题很多。如何从大局上把握,如何平衡出现的一些冲突和矛盾,如何用简练、有条理的语言实现所有功能,如何与硬件设计更好地结合起来,这些都是我要考虑的问题。在参考了之前学过的程序,重温了接口芯片的知识之后,我有了初步的思路,想起老师说过,流程图能帮助我们快速地整理出程序的大致框架,我马上将想法画成了流程图,然后在流程图的基础上添加一些需要的细节,于是就将程序写了出来。如今真的体会到流程图对于程序设计的重要性,而且一个好的流程图也能帮助别人理解你的程序。而在设计程序的过程中,我不仅对以前学过的汇编语言进行了重温和查漏补缺,而且对程序整体的把握和细节的处理能力得到了很大的提高。毕竟看程序和写程序是有很大区别的,只有实践才能真正将汇编语言学到家。最后看着自己写出来的程序,心里很有成就感!
这次课程设计是两人一组,我和我的拍档在设计中体会到了团队合作的乐趣。我们一起商量如何将设计简单化,我们交流各自的想法,选出最优方案,然后开始做自己的工作。我根据她设计出来的硬件编写程序,也跟她提出修改意见好让程序更容易写,最后我们齐心协力完成了课设。我们都觉得这是一次难得的锻炼动手能力和提高团队精神的活动!
12
十二、参考文献
《微型计算机原理及应用》 华南理工大学出版社 吴荣光 吕钧星 著 《微型计算机原理及应用实验指导书》华南理工大学出版
13