微机原理简易密码锁
信息科学与技术学院
微机原理与接口技术
课程设计
题目名称: 简易密码锁的设计 姓 名: 学 号:
2012508139 2012508137
专业年级: 电子信息工程1班 指导教师: 农 峰 时 间: 2012.12.25
目 录
第一章 简易数码锁的设计要求及方案 ..................................... 1 1.1 初始条件 . ........................................................................ 1 1.2 设计要求 . ........................................................................ 1 1.3 方案设计 . ........................................................................ 1 第二章 硬件原理电路图的设计及分析 ..................................... 1 2.1 硬件设计概述 ................................................................. 1 2.2 硬件框图........................................................................... 2 2.3 硬件工作流程 ................................................................... 2 第三章 程序设计与分析 ............................................................ 3 3.1 主程序流程图设计 ......................................................... 3 3.2 验证密码程序设计 ........................................................... 3 3.3 重设密码程序设计 . .......................................................... 4 第四章 数码锁的安装与调试 ...................................................... 4 4.1 硬件调试 . ........................................................................ 4 4.2 软件调试 . ........................................................................ 5 4.3系统整体调试 . ................................................................... 6 第五章 设计体会与小结 . ............................................................. 6 附 录 .......................................................................................... 7 参 考 文 献 . ................................................................................ 9
第一章 简易数码锁的设计要求及方案
1.1 初始条件
1)运用所学的微机原理和接口技术知识; 2)微机原理和接口技术实验室的实验箱设备。
1.2 设计要求
1. 密码由0-7数字组成,密码位数6位;
2. 开机上电后系统复位,处于准备接收密码的状态;
3. 每次输入密码后须按下确认键,若输入密码位数超6位,取后6位; 4. 若与规定密码相同则在点亮一只发光二极管,显示正确,否则点亮另一只发光二极管,显示错误。(正确和错误显示的发光二极管为两个) 5. 在实验系统 TDN86/88 上实现。
1.3 方案设计
数码锁主要由8086系统及Intel 8255A 可编程并行接口芯片和密码输入
电路、显示电路、密码确认电路这几部分构成。根据设计的功能和要求,编写相应的汇编程序,以支持整个系统的运行,实现数码锁的功能。
汇编程序只要可分为输入密码、判断密码、修改密码这几部分流程来编写,以满足整个数码锁的设计要求并完成相应的功能.
第二章 硬件原理电路图的设计及分析
2.1 硬件设计概述
硬件部分主要以8255芯片为主,用控制密码输入键(K 0~K 7)、 彩灯显示(LED UNIT) , 在实验箱上模拟整个数码锁的工作流程。
2.2 硬件框图
硬件框图如图1
2.3 硬件工作流程
密码确认电路
图1 系统硬件框图
首先对可编程器件进行初始化操作,即对8255写入方式控制字,配置I/O端口的输入输出方向。本系统选择PA 端口(60H )为输入口,接收密码输入区
K 0~K 7的电平状态;选择PB 端口(61H )为输出口,控制彩灯的显示。对8255
的配置如表1所示,具体接法详见附录的系统硬件原理图部分。
表1 8255 I/O资源配置表
按照系统硬件原理图 和8255的配置连接好电路, 即可按照用户操作流程,对8255进行相应的I/O端口操作即可
第三章 程序设计与分析
3.1 主程序流程图设计
软件设计的主要能够输入密码并确认每一次输入的密码是否有效,而且能够保存每次输入的密码,接着让最后6位输入的密码与正确密码比较。由输入密码正确与否的判断结果来引导下一步的动作,并且可增加修改内设密码功能。 系统的完整程序流程如下图所示
3.2 验证密码程序设计
程序编译加载后,开始后对8255初始化,此时系统就有一初始密码,即可输入已经设置的密码(本程序初始密码:88H )。输入的密码以只承认最后6位输入数
码 。拨动按键K2~K7,对应的彩灯也会相应的亮起,拨好密码后,再拨动按键K0, 若K2~K7六位密码与初始密码相同,则彩灯的绿灯全部亮,若密码与初始密码不同,则彩灯没有变化。验证密码流程图如图3
3.3 重设密码程序设计
进行重新设置密码,首先拨动K1键,此时K2~K7六位处于待设密码状态,只要拨动K2~K7按键就可以设置新密码,设置好以后再次拨回K1,进行新密码的锁存,此时新密码已经设置成功。若要再进行解码,按照验证密码程序设计里的步骤即可。重设密码流程如图4
图4 密码重设流程图
第四章 数码锁的安装与调试
4.1 硬件调试
1. 安装
上电前按电路设计连接实验箱电路,连接好实验箱与主机的线,并检查是否
有短路,再打开电源。 2. 调试
在主机上安装并运行Wmd86,首先进行端口测试,正常后即可编写程序。在测试8255的输出时发现8255工作不正常,其表面温度过高,故更换8255芯片后方能正常工作。
4.2 软件调试
按照主程序流程进行软件的编写,按照实际的硬件接口来编程,软件编写中的许多细节问题并不是在编写程序的时候能够检查出来的,需要一步一步的调试,通过不断的调试程序,加深了对汇编语言和硬件结构的理解。
软件调试过程中遇到许多问题是不能通过硬件电路的现象来发现的,而通过win86的单步运行能够发现程序的走向,很直观的查出问题的所在。比如,在程序运行中不能看到堆栈中的内容,而单步运行就能很直观的看的出来,方便调试。编写层序的时候遇到了一些问题,主要是对堆栈的概念和应用上的认识不太深刻。堆栈遵循“先入后出”的原则。对于本题中的认可最后输入的6位密码 的要求。必须利用堆栈的这一特点。将开关输入的密码依次压入堆栈(记录每次输入的密码),再出栈与原密码逐次比较6次,遇到一个问题就是,每次只从堆栈弹出6位密码,如果输入密码次数过多,前几次的密码没有出栈,堆栈就会被占满,导致程序无法正常运行;或者前一次没有清空堆栈的数据在下一次运行程序的时候被弹出,影响下一次的运行结果。想到如此,就必须让堆栈在每次程序运行结束以后都要清空。
由于代码段的程序过长,导致代码段的空间不够用,往往使程序无法正常运行。解决的办法是使用call 指令,利用将子程序压入堆栈,用ret 指令返回。可以节省代码段的空间。在调用的子程序中注意如果改变堆栈的入口地址的话需要在返回指令ret 之前恢复原来调用此子程序是的入口地址,否则会使程序混乱。基于此点,在编写程序的时候只是将初始化,显示等不改变堆栈地址的子程序压入堆栈。
4.3系统整体调试
整个系统在经过软硬件调试成功并正常加载程序运行后即可按流程来调试。首先输入原始密码看能否解锁,如果绿灯都亮则密码正确。然后任意输入几组六位密码看绿灯是否都亮,如果绿灯均不亮则初始密码设置成功。然后检测重置密码功能,先拨动按键K1,进入设置密码状态,任意拨动六位密码,再拨回按键K1,将设置的密码锁存,之后输入自己设置的密码看能否解锁,再多重复设置任意六位密码,如果绿灯都亮,则重置密码部分运行正常。 整个系统经过完整的逻辑测试后没有发现问题,整体调试结束。
第五章 设计体会与小结
刚确定做简易密码锁的课程设计任务时,自己真的是一头雾水不知怎么
下手,经过进图书馆、上网查资料自己了解到了许多,现在经过一个星期的努力自己的数码锁已经基本成型。但由于自己水平的有限,此设计任务仍有许多不足之处。
这次课程设计并不是很难,主要的困难来自对程序的理解。功夫不负有
心人,经过我们组的合作和努力,我们最后对实验的原理有了清晰的认识。虽然实验箱上的很多模块单元没有用到,但是就系统功能来说,我觉得我们做的还是不错的。
这次课程设计却让我们对实验箱有了足够的了解,特别是8255A 芯片;而且它还让我们对自己动手写程序来控制实验箱的运作有了一定的基础。虽然实验箱只是一个小型的模拟平台,但是通过对它的学习和操作,我们对有关接口的知识将会有一个更广泛的认识,而且它对我们以后的学习也会有帮助的。
通过此次设计,发现自己仍然还有许多不足之处,发现自己的知识是非常欠缺的,自己的动手能力也不强。自己清醒的认识到该怎么办,自己应该好好的反省一下,该好好的投入学习中,多一点时间用在学习中,把所学知识都好好的掌握,并很好的利用。在以后的学习和生活中,自己多找机会锻炼一下,使自己的动手能力得以很大的提高。从而是自己各方面的能力得到很好的发展,为自己以后很好的工作打下坚实的基础。
总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了,微机原理课程上讲到的多种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识,同时在试验室的环境里熟悉了汇编程序的编写过程和运行过程,并提高了自己的动手能力。最后衷心的感谢老师的悉心指导。
附 录
系统硬件电路图
系统程序源代码
DATA SEGMENT ;定义数据段 BLOCK DB 0 DATA ENDS
CODE SEGMENT ;定义代码段 ASSUME CS:CODE, DS:DATA
START: MOV DX, 63H
MOV AL, 90H ;设置8255A 方式字
OUT DX, AL ;8255A A口输入,B 口输出 MOV BLOCK, 088H ;设置初始密码 MOV BL, 10H
MAIN: MOV DX, 60H
IN AL, DX ;读取A 口开关信息 TEST AL, 02H ;判断开关K1的状态
JZ K1 ;K1=0 转移
IN AL, 60H
AND AL, 0FCH ;K1=1设置新密码,A 口高六位有效 MOV BLOCK, AL ; 存储新密码 NOT AL
OUT 61H, AL CALL DELAY JMP MAIN
K1: IN AL, 60H
TEST AL, 01H JNZ K0 IN AL, 60H AND AL, 0FCH NOT AL
OUT 61H, AL CALL DELAY JMP MAIN
K0: IN AL, 60H AND AL, 0FCH
CMP BLOCK, AL JA MAIN JB MAIN
MOV AL, 0FH NOT AL
OUT 61H, AL CALL DELAY JMP MAIN
DELAY PROC NEAR
DELAY1: MOV CX, 10H DELAY2: LOOP DELAY2 DEC BL JNZ DELAY1 RET DELAY ENDP CODE ENDS
END START
;判断开关K0的状态 ;K0=1 转移
;K0=0 输入密码 ;A 口的低二位被屏蔽 ;输入的密码与存储的密码相比较 ;输出显示 ;循环延时
参 考 文 献
1 华中科技大学电子技术课程组编,康华光主编. 电子技术基础(数字部分). 第五版. 北京:高等教育出版社,2006
2 李伯成编. 单片机及嵌入式系统. 北京:清华大学出版社,2005
3. 《微机原理与接口技术》. 彭虎,周佩玲,傅忠谦 编. 第二版. 北京:电子工业出版社,2008;
4. 《汇编语言程序设计》. 程学先,林姗,程传慧 编著. 北京:机械工业出版社,2009;
5. 《微型计算机原理与接口技术》. 王宁宁,张瑾,谭彦彬,陈铖 编著. 北京:国防工业出版社,2009;
9