




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录一 理论部分11课题要求与内容12 系统方案设计13 系统硬件的设计14 系统软件设计1二 实践部分11 系统硬件原理简介12 系统硬件调试中出现的问题及解决措施13 系统软件1 3.1 软件设计1 3.2 软件调试中出现的问题及解决措施1三 附录1 模拟电梯一、理论部分 1课题要求与内容 1.1设计基本要求(可用实验箱小键盘) 用键盘、按钮、八段码和led模拟电梯工作过程。楼层设为8层,键盘数字键18用来键入希望停的楼层,8个led显示希望停的楼层,2位八段码指示电梯当前所在楼层,按钮用来启、停电梯。电梯正常运行时以每2秒1层的速度上升或下降。要求“电梯”能按以下方式运行:(1) 设当前电梯停在某层(2位八段码显示相应楼层,8个led全灭)。键入18数字键,如键入的数字与当前电梯停层相同,则什么亦不动作,若不同则相应楼层的led亮;如再按运行键,则电梯自动判别上升或下降(在运行过程中八段码显示楼层变化)一直到达希望停的楼层(八段码显示该楼层,相应led灭);(2) 设当前电梯正在上升或下降运行(此时八段码显示楼层变化,led指示希望抵达的楼层),若键入新的希望停的楼层数字(相应的led亮),则对同方向(上升或下降)未到的楼层能停,对其它情况则先停原希望停的楼层,然后按运行键后继续运行。比如: 设电梯当前在2层,向上运行,led指示希望在6层停,此时若键入4,则电梯将在4楼停,若再按运行键,则继续运行至6层停; 同上情况,若键入的不是4而是8,则电梯将先停在6层,再按运行键,运行至8层停。 同上情况,若键入的不是4(或8),而是1,则电梯先停在6层,再按运行键,运行至1层停。 1.2进一步设计要求 除运行按钮外,再设计几个按钮,模拟更多的电梯运行功能,如:(1) 同步在8*8点阵显示器显示上升和下降箭头,当停止时显示当前所在楼层号。(2) 直达按钮。若按此按钮,电梯按直达方式运行,即对运行期间新键入的停靠楼层(即使是同方向未到楼层)亦不停,直达终点楼层。(3) 急停按钮。电梯运行中,若按此按钮,则电梯立即停在下一层到达的楼层。(4) 断电维修按钮。按下该按钮电梯不能工作,再按一下才能重新工作。(5) 设置急停开关(k0-k7),引入中断处理,立即响应,就近停靠。(6) 设置时钟显示。 2 系统方案设计三、电梯的工作方式 1假设当前电梯停在某层(led显示相应楼层,数码管显示相应数字),键入数字键,如键入的数字与当前电梯停靠层相同,则什么也不做,若不同则相应楼层的led亮;电梯自动判别上升或下降,一直到达希望停的楼层(数码管显示该楼层,相应 led 灭)。 2断电待修按钮:假设当前电梯正在上升或下降运行(此时数码管显示楼层变化, led 指示希望抵达的楼层),若在此时突然断电,则电梯停止在断电时的楼层,有可能不是目标楼层,只有断电维修后才可继续运行。二 实践部分1 系统硬件原理简介四、总体设计思路(设计原理)本设计主要是利用微机应用实验平台来模拟电梯的运行,用到了平台上的一个非编码键盘、led显示器、八段数码管等模块。设计有8个楼层,需要用8个按键模拟电梯中的请求按钮。由于中断级别在随着电梯所处楼层的不同而变化,而且中断源比较多。所以用每一个中断源直接和中断控制器相连,需要用到多个8259a级联,很不方便。为解决这个问题,首先定义三个单字节变量req_u、req_d和req_in分别存储电梯每一层向上、向下和内部的请求,每一个变量用低5位,每一位代表一层。例如,req_u为 00000110b,这代表在2层和3层有向上的请求。8253定时器每隔20ms产生一次中断,中断程序便去执行扫描键盘,当扫描到有电梯按键时,将请求存储到变量中。每到一个状态时再检查请求变量req_u、req_d和req_in的值,根据电梯的运行方向和变量中的请求,来决定电梯下一步的运行。设电梯的当前楼层为floor(floor=18),运行方向为dir(dir=0,向上;dir=1,向下),在电梯运行的工程中,用数码管输出floor值显示当前的楼层。led输出req_in的值显示电梯内已经请求的楼层。当电梯静止初始状态时,无论哪一层有请求,电梯都由静止状态转入运行的状态,直到到达请求的楼层;设置一个断电待修按键,在运行过程中出现断电情况,电梯立刻停止运行,此时电梯处于断电待修状态,不能完成请求。五、系统硬件电路设计 六、程序流程图 七、系统软件设计(编程实现);keyscan.asm;键盘扫描及数码管显示实验;按键16设置为模式识别按键,按下表示当下为直达模式,直到到达后方可再选择;.386pintr_ivadd equ 01c8h ;intr对应的中断矢量地址intr_ocw1 equ 0a1h ;intr对应pc机内部8259的ocw1地址intr_ocw2 equ 0a0h ;intr对应pc机内部8259的ocw2地址intr_im equ 0fbh ;intr对应的中断屏蔽字ioy1 equ 3040h ;片选ioy0对应的端口始地址my8254_count0 equ ioy1+00h*4 ;8254计数器0端口地址my8254_count1 equ ioy1+01h*4 ;8254计数器1端口地址my8254_count2 equ ioy1+02h*4 ;8254计数器2端口地址my8254_mode equ ioy1+03h*4 ;8254控制寄存器端口地址ioy2 equ 3080h ;片选ioy0对应的端口始地址ioy0 equ 3000h ;片选ioy0对应的端口始地址my8255_a equ ioy0+00h*4 ;8255的a口地址my8255_b equ ioy0+01h*4 ;8255的b口地址my8255_c equ ioy0+02h*4 ;8255的c口地址my8255_mode equ ioy0+03h*4 ;8255的控制寄存器地址stack1 segment stack dw 256 dup(?)stack1 endsdata segment;dtable db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71hdtable db 06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,3fhnow_floor db 02h-01h ;定义数据变量dir db 1target_floor db 02h-01h ;02h为初始层,出事情况当前层和目标层一样 f_floor db 1 ;模式选择,与16按键有关ff_floor db 1 ;进入直达模式后,此位置0,不受变化,直到到达相应楼层,置1cs_bak dw ? ;保存intr原中断处理程序入口段地址的变量ip_bak dw ? ;保存intr原中断处理程序入口偏移地址的变量im_bak db ? ;保存intr原中断屏蔽字的变量str1 db count: $ ;显示的字符串data ends ;键值表,0f对应的7段数码管的段位值code segment assume cs:code,ds:datastart: mov ax,data mov ds,ax ;初始化中断处理 cli mov ax,0000h ;替换intr的中断矢量 mov es,ax mov di,intr_ivadd mov ax,es:di mov ip_bak,ax ;保存intr原中断处理程序入口偏移地址 mov ax,offset myisr mov es:di,ax ;设置当前中断处理程序入口偏移地址 add di,2 mov ax,es:di mov cs_bak,ax ;保存intr原中断处理程序入口段地址 mov ax,seg myisr mov es:di,ax ;设置当前中断处理程序入口段地址 mov dx,intr_ocw1 ;设置中断屏蔽寄存器,打开intr的屏蔽位 in al,dx mov im_bak,al ;保存intr原中断屏蔽字 and al,intr_im out dx,al sti ;初始化8254 mov dx,my8254_mode ;初始化8254工作方式 mov al,0b6h ;计数器2,方式3 out dx,al mov dx,my8254_count2 ;装入计数初值 mov al,00h ;18432分频 out dx,al mov al,48h out dx,al mov dx,my8254_mode ;初始化8254工作方式 mov al,36h ;计数器0,方式3 out dx,al mov dx,my8254_count0 ;装入计数初值 mov al,0c8h ;100分频 out dx,al mov al,00h out dx,al ;初始化8255 mov dx,my8255_mode ;初始化8255工作方式 mov al,81h ;方式0,a口、b口输出,c口低4位输入 out dx,al mov dx,ioy2 ;用io-32输出控制8个led,刚开始默认为全灭 mov al,0 out dx,al mov dx,my8255_mode mov al,00001110b ;pc7=0 out dx,al mov al,now_floor mov bx,offset dtable and ax,00ffh add bx,ax mov al,bx ;将键值作为偏移和键值基地址相加得到相应的键值 mov dx,my8255_b out dx,al begin: call ccscan ;扫描按键 jnz getkey1 ;有键按下则跳置getkey1 mov ah,1 ;判断pc键盘是否有按键按下 int 16h jz begin ;无按键则跳回继续循环,有则退出;退出程序前的一个太子换狸猫quit: cli mov ax,0000h ;恢复intr原中断矢量 mov es,ax mov di,intr_ivadd mov ax,ip_bak ;恢复intr原中断处理程序入口偏移地址 mov es:di,ax add di,2 mov ax,cs_bak ;恢复intr原中断处理程序入口段地址 mov es:di,ax mov dx,intr_ocw1 ;恢复intr原中断屏蔽寄存器的屏蔽字 mov al,im_bak out dx,al sti mov ax,4c00h ;返回到dos int 21hgetkey1: call dally call dally call ccscan ;再次扫描按键 jnz getkey2 ;有键按下则跳置getkey2 jmp begin ;否则跳回开始继续循环getkey2:mov ch,0feh mov cl,00h ;设置当前检测的是第几列colum: mov al,ch ;选取一列,将x1x4中一个置0 mov dx,my8255_a out dx,al mov dx,my8255_c ;读y1y4,用于判断是哪一行按键闭合 in al,dxl1: test al,01h ;是否为第1行 jnz l2 ;不是则继续判断 mov al,00h ;设置第1行第1列的对应的键值 jmp kcodel2: test al,02h ;是否为第2行 jnz l3 ;不是则继续判断 mov al,04h ;设置第2行第1列的对应的键值 jmp kcodel3: test al,04h ;是否为第3行 jnz l4 ;不是则继续判断 mov al,08h ;设置第3行第1列的对应的键值 jmp kcode l4: test al,08h ;是否为第4行 jnz next ;不是则继续判断 mov al,0ch ;设置第4行第1列的对应的键值kcode: add al,cl ;将第1列的值加上当前列数,确定按键值 cmp f_floor,1 ;16按键识别后置挝 jnz kon2 call putbuf ;保存按键值 jmp kon4kon2: cmp ff_floor,1 jnz kon4 call putbuf kon4: push axkon: call ccscan ;扫描按键,判断按键是否弹起 jnz kon ;未弹起则继续循环等待弹起 pop axnext: inc cl ;当前检测的列数递增 mov al,ch test al,08h ;检测是否扫描到第4列 jz kerr ;是则跳回到开始处 rol al,1 ;没检测到第4列则准备检测下一列 mov ch,al jmp columkerr: jmp beginmyisr proc near ;中断处理程序myisr push ax mov al,dir cmp al,0 jz down cmp al,2 jz up jmp overdown: mov al,now_floor dec al mov now_floor,al mov bx,offset dtable and ax,00ffh add bx,ax mov al,bx mov dx,my8255_b out dx,al jmp bijiaoup: mov al,now_floor inc al mov now_floor,al mov bx,offset dtable and ax,00ffh add bx,ax mov al,bx mov dx,my8255_b out dx,albijiao: mov al,now_floor mov ah,target_floor cmp ah,al jz guanbi jmp overguanbi: mov dx,my8255_mode mov al,00001110b ;pc7=0 out dx,al mov dir,1h mov al,0 mov dx,ioy2 ;用io-32输出控制8个led,显示目标楼层 out dx,al mov f_floor,1 ;置1,恢复按键有效 mov ff_floor,1over: mov dx,intr_ocw2 ;向pc机内部8259发送中断结束命令 mov al,20h out dx,al mov al,20h out 20h,al pop ax iretmyisr endp ccscan proc near ;扫描是否有按键闭合子程序 mov al,00h mov dx,my8255_a ;将4列全选通,x1x4置0 out dx,al mov dx,my8255_c in al,dx ;读y1y4 not al and al,0fh ;取出y1y4的反值 retccscan endpputbuf proc near ;保存键值子程序 ,al即为目标楼层 cmp al,15 jnz kon3 ;不是16第按键,则进入正常灵活可调模式 mov f_floor,0 ;如是第16按键,置0,按键失效,则进入单向模式,直达某层 mov dx,my8255_mode mov al,00001110b ;pc7=0 out dx,al jmp enddkon3: mov ff_floor,0 ;直达模式时置0mov target_floor,al mov ah,now_floor ;0-7对应1-8层,和当前楼层比较, cmp ah,al jnz panduan ;不同层就
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 柳州安全员b证考试及答案
- 标准合同融资代理服务合同5篇
- 部分资金长期借款合同6篇
- 2025年个人所有住宅公寓买卖合同
- 教育信息化行动计划考试题
- 民间医伤寒考试题
- 2025年新法规指导下的商品房买卖合同要点解析
- 2025标准抵押担保借款合同范本
- 煤矿通风安全管理考试题
- 2025年的固定资产借款合同示例
- DB31/T 1173-2019咖啡厅(馆)等级划分与评定
- 退役士兵求职简历模板+自荐书
- 控制阀培训课件
- 湘菜湖南美食文化介绍PPT
- 外科学外科休克PPT
- 三年级上册语文人教版《练习册》答案
- 浙人美2011版四年级美术上册《水资源》教案及教学反思
- 全桥LLC自动计算表格
- 露天矿土石方剥离施工方案
- 魔芋怎么种?魔芋的种植技术
- GB/T 26766-2011城市公共交通调度车载信息终端
评论
0/150
提交评论