收藏 分销(赏)

微机原理课程设计报.doc

上传人:仙人****88 文档编号:9202080 上传时间:2025-03-16 格式:DOC 页数:17 大小:740.54KB 下载积分:10 金币
下载 相关 举报
微机原理课程设计报.doc_第1页
第1页 / 共17页
微机原理课程设计报.doc_第2页
第2页 / 共17页


点击查看更多>>
资源描述
合肥工业大学 计算机与信息学院 课程设计 课 程:微机原理与接口技术设计 专业班级:信息安全13-1班 学 号:2013211885 姓 名:张留柱 一、设计题目及要求: 获取开关编号,并按规律显示 设计要求: 1. 拨动开关K1~K8,最右边的数码管显示对应的开关编号1~8。 2. 按“1”键,当前显示的开关编号从右至左按1秒间隔逐位循环显示(每次只显示一 个数码管)。 3. 按“2”键,当前显示的开关编号从右至左按2秒间隔逐位循环显示(每次只显示一 个数码管)。 4. 按“E”键,停止循环显示,并清除所有数码管的显示内容。 二、设计思想: 8255 并行口实验(二):PA 口控制 PB 口;选择方式0  8255A芯片简介 8255A可编程外围接口芯片是Intel公司生产的通用并行接口芯片,它具有A、B、C三个并行接口,用+5V电源供电,能在以下三种方式下工作:   方式0:基本输入/输出方式   方式1:选通输入/输出方式 方式2:双向选通工作方式 代码段: MOV DX,PCTL MOV AL,90H OUT DX,A 设置8255控制字 10010000 方式0 A口输入 方式0( 基本输入/ 输出方式) 的功能 – 8255A 相当于三个独立的8 位数据口:A 、B 、C。 或看作 。 或看作4 个独立的数据端口:A 、B 、C 高、C 低。 – 各端口既可设置为 输入 口,也可设置为 输出 口。 • 但不能同时实现输入及输出。 • 16 种不同的输入输出组合。 – 设置为 输出 口时有 锁存能力,设置为输入口时无锁 存能力。 定时/计数器:8253 方波; 8253芯片介绍   8253是一种可编程定/计数器,有三个十六位计数器,其计数频率范围为0~2MHZ,用+5V单电源供电。 8253的六种工作方式:   ⑴方式0:计数结束中断 ⑷方式3:方波频率发生器   ⑵方式1:可编程频率发生 ⑸方式4:软件触发的选通信号   ⑶方式2:频率发生器 ⑹方式5:硬件触发的选通信号 8253的0号通道工作在方式3,产生方波 代码段;8253初始化程序 ---------------------------------------------------------- FOR8253: CLI MOV DX,Port53_0 ;接y2 A4A3A2 = 010(11) MOV AL,36H ;计数器0 先低后高 方式三 二进制 OUT DX,AL MOV DX,Port53_1 mov ax,DELAYTIME ;初始值*2的7+1次方 = 4.91MHz * 1S OUT DX,AL MOV AL,AH OUT DX,AL STI Ret 根据机器的时钟频率 连线接的是T7分频 所以算出初始值DELAYTIME 8259 单级中断控制器实验;] 硬件方面 – 只需要单一的+5V电源。 – 具有 8级 中断优先控制,通过级联可以扩展至 64级 优先级控制。 – 在中断响应周期,可以自动提供相应的中断类型号。 • 软件方面 – 每一级中断都可以通过编程设置为允许或屏蔽。 – 可通过编程选择8259A的工作方式和设定中断类型 号 可通过编程选择8259A的工作方式和设定中断类型 号 ICW1 : 00010011 即为13H设置边沿触发单片8259无需级联 ICW2: 00001000 设置IRQ0中断号 ICW4 : 00000001 09h 缓冲 01h非缓冲 OCW1 : 11111110 开放IPQ0中断 中断子程序为本设计的核心程序,主程序只是一直在循环读键盘。中断程序的显示是默认设置的1S一次移位 并且为LED显示设置了一个延时的小程序这是为了避免 中断显示时 与读键盘的LED管的地址相同而有冲突 代码段;8259初始化子程序-------------------------------------------------------------- FOR8259: MOV AL,13H ;13h 边沿触发 1Bh电平触发 icw1 MOV DX,Port0 ;接y0 OUT DX,AL MOV AL,08H ;IRQ0的中断号 icw2 MOV DX,Port1 OUT DX,AL MOV AL,01H ;icw4 09h 缓冲 01h非缓冲 OUT DX,AL MOV AL,0FEH ;IRQ0 ocw1屏蔽字 OUT DX,AL RET 中断程序 ;中断子程序,左移显示位-------------------------------------------------------- CHANGEBIT: CLI PUSH AX PUSH BX PUSH DX PUSHF MOV DX,ZWK ;显示位 MOV AL,DISPLAYBIT OUT DX,AL MOV AL,SWITCH MOV DX,ZXK ;显示数 OUT DX,AL MOV BL,DISPLAYBIT; ROL BL,01H; CMP BL,20H JBE SETBIT MOV BL,01H SETBIT: MOV DISPLAYBIT,BL; CALL Delay mov al,20h mov dx,port0 out dx,al POPF POP DX POP BX POP AX STI iret Delay: ;延时子程序 push cx mov cx,0FFEEH loop $ pop cx Ret 键盘扫描显示实验。 利用实验系统提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。 读键子程序-------------------------------------------------------------------- GetKey: ;键扫子程序 mov al,0ffh ;关显示口(影响键盘读入) mov dx,ZXK ;键盘扫描和数码管显示存在共用端口的情况 out dx,al ;(按键直接显示在数码管上) mov bl,0 mov ah,0feh mov cx,8 key1: mov al,ah mov dx,ZWK out dx,al shl al,1 mov ah,al nop nop nop nop nop nop mov dx,IN_KEY in al,dx not al nop nop and al,0fh jnz key2 inc bl loop key1 nkey: mov al,20h ret key2: test al,1 je key3 mov al,0 jmp key6 key3: test al,2 je key4 mov al,8 jmp key6 key4: test al,4 je key5 mov al,10h jmp key6 key5: test al,8 je nkey mov al,18h key6: add al,bl cmp al,10h jnc fkey mov bx,offset KeyTable xlat fkey: ret 设计总思想 主程序一直在循环着度键盘的操作而中断则一直以1S的间隔来循环LED显示 并且对输入的键盘值进行判断,而实现实验要求 代码段 ;循环读取键盘输入并控制程序跳转------------------------------------ READINPUT: CALL GetKey and al,0fh ;显示键码 CMP AL,0EH JZ EXIT CMP AL,01H JNZ EQU02 MOV WORD PTR DELAYTIME,4e20H JMP SET8253 EQU02: CMP AL,02H JNZ READINPUT MOV WORD PTR DELAYTIME,9c40H SET8253:CALL FOR8253 JMP READINPUT ;按“E”键,清屏,程序返回到开始位置,等待开关输入---------------------------- EXIT: CLI MOV DX,ZWK ;显示位 MOV AL,00H OUT DX,AL JMP READSWT 附带为了防止按了多个开关。而对开关设置了优先级判断、仅最高的开关有效 ...... SWITCHINPUT: MOV DX,PA IN AL,DX WRITINPUT: CMP AL,00H JZ SWITCHINPUT MOV BL,00H SWITCHFILTER: INC BL ..... 三、 功能流程图: 四、 结果讨论: 实验的结果基本达到了实验的要求,因为在中断里设置了一个显示的延时程序(为了读取键值,不然读取不了输入的按键),所以导致时间间隔比要求的1S 2S略微的长了一点,其它的要求都可满足。 这样的实践活动,刚拿到试验箱时,人都是无从下手,但是只要慢慢的静下来,一步步的查资料咨询,就不会有什么难事的 附录:实验代码:(完整的源程序) -----------8255A并行口实验(2) PA输入,PB输出------------- CODE SEGMENT ASSUME CS:CODE,DS:CODE,ES:CODE ;常量--------------------------------------------------------------------------- Port0 EQU 0FFE0H ;;A4A3A2 = 000(00) Port1 EQU 0FFE1H Port53_0 EQU 0FFEBH ;A4A3A2 = 010(11) Port53_1 EQU 0FFE8H PA EQU 0FFD8H PB EQU 0FFD9H PC EQU 0FFDAH PCTL EQU 0FFDBH IN_KEY EQU 0FFDEh ;键盘读入口 ZXK EQU 0FFDCH ;控制数码管显示值 ZWK EQU 0FFDDH ;控制数码管是否显示 ;程序段------------------------------------------------------------------------- ORG 1000H START: cli MOV AX,OFFSET CHANGEBIT ;设置中断向量 MOV BX,0020H MOV [BX],AX MOV BX,0022H MOV AX,0000H MOV [BX],AX MOV DX,PCTL MOV AL,90H OUT DX,AL ;初始化以及等待开关输入--------------------------------------------------------- READSWT:CALL SWITCHINPUT CALL FOR8259 CALL FOR8253 STI ;循环读取键盘输入并控制程序跳转------------------------------------ READINPUT: CALL GetKey and al,0fh ;显示键码 CMP AL,0EH JZ EXIT CMP AL,01H JNZ EQU02 MOV WORD PTR DELAYTIME,4e20H JMP SET8253 EQU02: CMP AL,02H JNZ READINPUT MOV WORD PTR DELAYTIME,9c40H SET8253:CALL FOR8253 JMP READINPUT ;按“E”键,清屏,程序返回到开始位置,等待开关输入---------------------------- EXIT: CLI MOV DX,ZWK ;显示位 MOV AL,00H OUT DX,AL JMP READSWT ;读键子程序-------------------------------------------------------------------- GetKey: ;键扫子程序 mov al,0ffh ;关显示口(影响键盘读入) mov dx,ZXK ;键盘扫描和数码管显示存在共用端口的情况 out dx,al ;(按键直接显示在数码管上) mov bl,0 mov ah,0feh mov cx,8 key1: mov al,ah mov dx,ZWK out dx,al shl al,1 mov ah,al nop nop nop nop nop nop mov dx,IN_KEY in al,dx not al nop nop and al,0fh jnz key2 inc bl loop key1 nkey: mov al,20h ret key2: test al,1 je key3 mov al,0 jmp key6 key3: test al,2 je key4 mov al,8 jmp key6 key4: test al,4 je key5 mov al,10h jmp key6 key5: test al,8 je nkey mov al,18h key6: add al,bl cmp al,10h jnc fkey mov bx,offset KeyTable xlat fkey: ret ;开关输入子程序,无输入--等待;有输入--读取最高位------------------------------ SWITCHINPUT: MOV DX,PA IN AL,DX WRITINPUT: CMP AL,00H JZ SWITCHINPUT MOV BL,00H SWITCHFILTER: INC BL SHR AL,1 JNZ SWITCHFILTER MOV AL,BL MOV BX,OFFSET LEDMAP; MOV AH,00h; MOV SI,AX; MOV BL,[BX+SI]; MOV SWITCH,BL MOV DISPLAYBIT,01H ;显示位初始化 MOV WORD PTR DELAYTIME,4e20H ;显示速度初始化 RET ;中断子程序,左移显示位-------------------------------------------------------- CHANGEBIT: CLI PUSH AX PUSH BX PUSH DX PUSHF MOV DX,ZWK ;显示位 MOV AL,DISPLAYBIT OUT DX,AL MOV AL,SWITCH MOV DX,ZXK ;显示数 OUT DX,AL MOV BL,DISPLAYBIT; ROL BL,01H; CMP BL,20H JBE SETBIT MOV BL,01H SETBIT: MOV DISPLAYBIT,BL; CALL Delay mov al,20h mov dx,port0 out dx,al POPF POP DX POP BX POP AX STI iret Delay: ;延时子程序 push cx mov cx,0FFEEH loop $ pop cx ret ;8253初始化程序 ---------------------------------------------------------- FOR8253: CLI MOV DX,Port53_0 ;接y2 A4A3A2 = 010(11) MOV AL,36H ;计数器0 先低后高 方式三 二进制 OUT DX,AL MOV DX,Port53_1 mov ax,DELAYTIME ;初始值*2的7+1次方 = 4.91MHz * 1S OUT DX,AL MOV AL,AH OUT DX,AL STI ret ;8259初始化子程序-------------------------------------------------------------- FOR8259: MOV AL,13H ;13h 边沿触发 1Bh电平触发 icw1 MOV DX,Port0 ;接y0 OUT DX,AL MOV AL,08H ;IRQ0的中断号 icw2 MOV DX,Port1 OUT DX,AL MOV AL,01H ;icw4 09h 缓冲 01h非缓冲 OUT DX,AL MOV AL,0FEH ;IRQ0 ocw1屏蔽字 OUT DX,AL RET ENDPR: ;程序数据区------------------------------------------------------------------- ORG 2000H LEDMAP: db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h db 080h,090h,088h,083h,0c6h,0a1h,086h,08eh,0ffh KeyTable: ;键码定义 db 07h,04h,08h,05h,09h,06h,0ah,0bh db 01h,00h,02h,0fh,03h,0eh,0ch,0dh DELAYTIME DW 4e20H; 1s 4e20 2s 9c40 DISPLAYBIT DB 01H SWITCH DB 00H CODE ENDS END START
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服