微机基础原理课程教学设计抢答器.doc
.-西安郵電大学硬件课程设计报告题 目: 抢 答 器院系名称:计算机学院 专业名称:班 级: 学生姓名:学号(8位):指导教师:设计起止时间1. 设计目的 用逻辑开关模拟竞赛抢答器按钮(共8个开关:K0 K7)当某个逻辑开关置“1”时,相当某组抢答按钮按下。在七段数码管上将其组号(07)显示出来,若为0表示无人抢答。从键盘上按空格键开始下一轮抢答,按 键 退出程序。二. 设计内容 1.选用元器件:(1)、并行接口8255:通过编程来指定它要完成的功能,是并行数字设备与微机间的接口。8255用于输入抢答信息,并输出正确的序号给数码管,以及控制LED灯的亮灭。本设计中8255A的地址范围设置为1400H1403H,其中控制口地址为1403H。而且使用了8255A的A口,B口和C口。它们均工作在方式0下,其中A口和C口为输出,B口为输入。 (2)、数码管:指示先抢答的组号。(3)、二极管:指示抢答。(4)、开关:作为抢答者的按钮。2.基础实验一:8255基本输入输出能够在自行设计的接口开发板上,实现拨动开关控制LED的亮灭。(软件代码命名为:8255.ASM,代码要求用小写字母,且必须经过优化,源代码小于95行,每条指令算1行,伪指令也算1行)3.基础实验二:流水灯设计实现能够在自行设计的接口开发板上,实现拨动不同开关控制LED灯的变化。例如,K1从左往右,K2从右往左,K3从中间向两边,K4从两边向中间依次亮灭变化,按主机键盘任意键退出。(软件代码命名为:TEST2.ASM,代码要求用小写字母,且必须经过优化,源代码小于85行,每条指令算1行,伪指令也算1行)4.基础实验三:数码管应用能够在自行设计的接口开发板上,上电数码管显示0到7,实现拨动不同开关,数码管显示该开关位置值(1-8);若同时拨动两个以上开关,则数码管显示“E”。(软件代码命名为:8SEGMENT.ASM,代码要求用小写字母,且必须经过优化,源代码小于100行,每条指令算1行,伪指令也算1行)5抢答器:用逻辑开关模拟竞赛抢答器按钮(共8个开关:K0 K7)当某个逻辑开关置“1”时,相当某组抢答按钮按下。在七段数码管上将其组号(07)显示出来,若为0表示无人抢答。从键盘上按空格键开始下一轮抢答,按 键 退出程序。三概要设计1功能模块图; 开始初始化开始抢答?有组抢答?判断抢答小组号?LED灯显示是否是否结束2 所用芯片8255引脚图 3. 抢答器电路图 四详细设计 1. 实验步骤 (1)、在实验箱上连接8255的WR、CS、RD、D0-D7、A1A0以及8255输入输出端口A,B,C口连接到led灯、8段数码管、开关上。硬件电路搭建完毕。(2)、在TDPIT上篇写汇编程序,进行测试。(3)、在Proteus 上按照需求连接电路,为验证电路正确性,为其加入输入,进行模拟。模拟结果正确后,将电路图保存。(4)、制作硬件电路2、遇到的问题:(1)、在8255的使用过程中,由于对控制字的使用错误,导致不能从A、B口输出信息,最后通过检查,改变控制字,实现了功能。(2)、汇编语言的运用。由于平时较少使用汇编语言,用汇编语言编写程序方面存在不小的障碍,通过知识回顾复习,对汇编进一步的了解后,熟练运用。(3)、汇编语言要求短小精悍,由于程序过长,在使用jnz指令时,出现错误:Relative jump out of range byte XXXXh bytes。通过二度跳转,解决了这个问题。五调试情况,设计技巧及体会通过对抢答器这一课题的设计和实现,使我更好的将理论与实践相结合,我更加深入地理解了微机原理课程上讲到的并行芯片8255的功能,以及引脚的作用,同时加深了对于该芯片的应用的认识,同时在试验室的环境里熟悉了汇编程序的编写过程和运行过程。更重要的是通过这个实验,进一步掌握了程序设计的合理结构。但要达到这样的程度其首要条件还是要学好课本上的基础知识,理解每一条指令的意义。让我感到很欣慰的是,与搭档的合作下高效地、顺利地完成本次实验。六参考文献微机接口技术及其应用-李育贤微型计算机原理-王忠民七附录:源代码(电子版) 一、8255基本输入输出data segmentdata endscode segment assume cs:code, ds:datastart: mov dx,1403h mov al,10010000b out dx,alread: mov dx,1400h in al,dx mov dx,1401h out dx,al mov ah,1 int 16h jz read mov ah,4ch int 21h code ends end start 二、流水灯设计实现data segmentmy8255_a equ 1400h ;8255的A口地址my8255_b equ 1401h ;8255的B口地址my8255_c equ 1402h ;8255的C口地址my8255_mode equ 1403h ;8255的控制寄存器地址mode_a db 10001001b ;控制字left db 0fehdata endscode segmentassume cs:code,ds:datastart: MOV DX, 1406H ;写控制口MOV AL, 90H OUT DX, ALREAD: MOV DX, 1400H ;写A端口IN AL, DX MOV DX, 1402H ;写B端口AND AL, 01HJZ key1AND AL, 02HJZ key2AND AL, 04HJZ key3AND AL, 08HJZ key4JMP READkey1:;for( i = 0; i 1)MOV CX, 5MOV AL, 08H L_TO_RCNT: PUSH CX L_TO_R: MOV CX, 8 OUT DX, AL SHL AL, 1 LOOP L_TO_R POP CXLOOP L_TO_RCNTJMP READkey2:;for( i = 0; i 5; i+);for(al = 0x01; al != 0; al 1)MOV CX, 5MOV AL, 01HR_TO_LCNT: PUSH CX R_TO_L: MOV CX, 8 OUT DX, AL SHR AL, 1 LOOP R_TO_L POP CXLOOP R_TO_LCNTJMP READkey3:MOV CX, 5 M_TO_OCNT: MOV SI, 4 M_TO_O: MOV AL, TABLE4-SI OUT DX, AL DEC SI JNZ M_TO_O LOOP M_TO_OCNTJMP READkey4: MOV CX, 5 CNT: MOV SI, 4 O_TO_M: MOV AL, TABLESI OUT DX, AL DEC SI JNZ O_TO_M LOOP CNTJMP READ;OUT DX, AL ;JMP READ mov ax, 4c00h int 21h CODEENDSend start三、数码管应用data segmentmy8255_a equ 1400h ;8255的A口地址my8255_b equ 1401h ;8255的B口地址my8255_c equ 1402h ;8255的C口地址my8255_mode equ 1403h ;8255的控制寄存器地址mode_a db 10001001b ;控制字data endscode segmentassume cs:code,ds:datastart: MOV DX, 1406H ;写控制口MOV AL, 90H OUT DX, ALREAD: MOV DX, 1400H ;写A端口IN AL, DX MOV DX, 1402H ;写B端口MOV BL, AL ;保存端口读到的值A1:TEST AL, 01HJNZ A2OR AL, 01HCMP AL, 0FFHJZ key1JMP keyEA2:MOV AL, BLTEST AL, 02HJNZ A3OR AL, 02HCMP AL, 0FFHJZ key2JMP keyEA3:MOV AL, BL TEST AL, 04HJNZ A4OR AL, 04HCMP AL, 0FFHJZ key3JMP keyEA4:MOV AL, BL TEST AL, 08HJNZ A5OR AL, 08HCMP AL, 0FFHJZ key4JMP keyEA5:MOV AL, BL TEST AL, 10HJNZ A6OR AL, 10HCMP AL, 0FFHJZ key5JMP keyEA6:MOV AL, BL TEST AL, 20HJNZ A7OR AL, 20HCMP AL, 0FFHJZ key6JMP keyEA7:MOV AL, BL TEST AL, 40HJNZ A8OR AL, 40HCMP AL, 0FFHJZ key7JMP keyEA8:MOV AL, BL TEST AL, 80HJNZ READOR AL, 80HCMP AL, 0FFHJZ key8JMP keyEkey1:MOV AL, TABLE0OUT DX, ALJMP READkey2:MOV AL, TABLE1OUT DX, ALJMP READkey3:MOV AL, TABLE2OUT DX, ALJMP READkey4:MOV AL, TABLE3OUT DX, ALJMP READkey5:MOV AL, TABLE4OUT DX, ALJMP READkey6:MOV AL, TABLE5OUT DX, ALJMP READkey7:MOV AL, TABLE6OUT DX, ALJMP READkey8:MOV AL, TABLE7OUT DX, ALJMP READkeyE:MOV AL, TABLE8OUT DX, ALJMP READ;OUT DX, AL ;JMP READ mov ax, 4c00h int 21h CODEENDSend start四、抢答器data segmentmy8255_a equ 1400h ;8255的A口地址my8255_b equ 1401h ;8255的B口地址my8255_c equ 1402h ;8255的C口地址my8255_mode equ 1403h ;8255的控制寄存器地址mode_a db 10001001b ;控制字data endscode segmentassume cs:code,ds:datastart: MOV DX, 1406H ;写控制口MOV AL, 90H OUT DX, ALREAD: MOV DX, 1400H ;写A端口IN AL, DX MOV DX, 1402H ;写B端口;倒计时过程 到了0开始抢答MOV SI, 5TIME:;延时等待MOV CX, 0FFFFHdelay:LOOP delayMOV AL, TABLESIOUT DX, ALDEC SIJNZ TIMEMOV BL, ALA1:TEST AL, 01HJZ key1A2:TEST AL, 02HJZ key2A3:TEST AL, 04HCMP AL, 0FFHA4:TEST AL, 08HJZ key4A5:TEST AL, 10HJZ key5A6:TEST AL, 20HJZ key6A7:TEST AL, 40HJZ key7A8:TEST AL, 80HJZ key8;无人抢答 MOV AL, TABLE0OUT DX, ALNEXT:;等待输入空格键或者Esc 到下一轮抢答或者退出程序MOV AH, 1INT 21H;CMP AL, 32;是否为 空格JZ READCMP AL, 27;是否为 EscJZ END key1:MOV AL, TABLE1OUT DX, ALJMP NEXTkey2:MOV AL, TABLE2OUT DX, ALJMP NEXTkey3:MOV AL, TABLE3OUT DX, ALJMP NEXTkey4:MOV AL, TABLE4OUT DX, ALJMP NEXTkey5:MOV AL, TABLE5OUT DX, ALJMP NEXTkey6:MOV AL, TABLE6OUT DX, ALJMP NEXTkey7:MOV AL, TABLE7OUT DX, ALJMP NEXTkey8:MOV AL, TABLE8OUT DX, ALJMP NEXT;OUT DX, AL ;JMP READ END:mov ax, 4c00h int 21h CODEENDSend start
收藏
- 资源描述:
-
.-
西安郵電大学
硬件课程设计报告
题 目: 抢 答 器
院系名称:计算机学院
专业名称:
班 级:
学生姓名:
学号(8位):
指导教师:
设计起止时间
1. 设计目的
用逻辑开关模拟竞赛抢答器按钮(共8个开关:K0 ~ K7)当某个逻辑开关置“1”时,相当某组抢答按钮按下。在七段数码管上将其组号(0~7)显示出来,若为0表示无人抢答。从键盘上按空格键开始下一轮抢答,按 键 退出程序。
二. 设计内容
1.选用元器件:
(1)、并行接口8255:通过编程来指定它要完成的功能,是并行数字设备与微机间的接口。8255用于输入抢答信息,并输出正确的序号给数码管,以及控制LED灯的亮灭。本设计中8255A的地址范围设置为1400H—1403H,其中控制口地址为1403H。而且使用了8255A的A口,B口和C口。它们均工作在方式0下,其中A口和C口为输出,B口为输入。
(2)、数码管:指示先抢答的组号。
(3)、二极管:指示抢答。
(4)、开关:作为抢答者的按钮。
2.基础实验一:8255基本输入输出
能够在自行设计的接口开发板上,实现拨动开关控制LED的亮灭。(软件代码命名为:8255.ASM,代码要求用小写字母,且必须经过优化,源代码小于<95行,每条指令算1行,伪指令也算1行)
3.基础实验二:流水灯设计实现
能够在自行设计的接口开发板上,实现拨动不同开关控制LED灯的变化。例如,K1从左往右,K2从右往左,K3从中间向两边,K4从两边向中间依次亮灭变化,按主机键盘任意键退出。(软件代码命名为:TEST2.ASM,代码要求用小写字母,且必须经过优化,源代码小于<85行,每条指令算1行,伪指令也算1行)
4.基础实验三:数码管应用
能够在自行设计的接口开发板上,上电数码管显示0到7,实现拨动不同开关,数码管显示该开关位置值(1-8);若同时拨动两个以上开关,则数码管显示“E”。(软件代码命名为:8SEGMENT.ASM,代码要求用小写字母,且必须经过优化,源代码小于<100行,每条指令算1行,伪指令也算1行)
5.抢答器:
用逻辑开关模拟竞赛抢答器按钮(共8个开关:K0 ~ K7)当某个逻辑开关置“1”时,相当某组抢答按钮按下。在七段数码管上将其组号(0~7)显示出来,若为0表示无人抢答。从键盘上按空格键开始下一轮抢答,按 键 退出程序。
三.概要设计
1.功能模块图;
开始
初始化
开始抢答?
有组抢答?
判断抢答小组号?
LED灯显示
是
否
是
否
结束
2. 所用芯片8255引脚图
3. 抢答器电路图
四.详细设计
1. 实验步骤
(1)、在实验箱上连接8255的WR、CS、RD、D0-D7、A1A0以及8255输入输出端口A,B,C口连接到led灯、8段数码管、开关上。硬件电路搭建完毕。
(2)、在TD—PIT上篇写汇编程序,进行测试。
(3)、在Proteus 上按照需求连接电路,为验证电路正确性,为其加入输入,进行模拟。模拟结果正确后,将电路图保存。
(4)、制作硬件电路
2、遇到的问题:
(1)、在8255的使用过程中,由于对控制字的使用错误,导致不能从A、B口输出信息,最后通过检查,改变控制字,实现了功能。
(2)、汇编语言的运用。由于平时较少使用汇编语言,用汇编语言编写程序方面存在不小的障碍,通过知识回顾复习,对汇编进一步的了解后,熟练运用。
(3)、汇编语言要求短小精悍,由于程序过长,在使用jnz指令时,出现错误:Relative jump out of range byte XXXXh bytes。通过二度跳转,解决了这个问题。
五.调试情况,设计技巧及体会
通过对抢答器这一课题的设计和实现,使我更好的将理论与实践相结合,我更加深入地理解了微机原理课程上讲到的并行芯片8255的功能,以及引脚的作用,同时加深了对于该芯片的应用的认识,同时在试验室的环境里熟悉了汇编程序的编写过程和运行过程。更重要的是通过这个实验,进一步掌握了程序设计的合理结构。但要达到这样的程度其首要条件还是要学好课本上的基础知识,理解每一条指令的意义。让我感到很欣慰的是,与搭档的合作下高效地、顺利地完成本次实验。
六.参考文献
《微机接口技术及其应用》---李育贤
《微型计算机原理》---王忠民
七.附录:源代码(电子版)
一、8255基本输入输出
data segment
data ends
code segment
assume cs:code, ds:data
start:
mov dx,1403h
mov al,10010000b
out dx,al
read:
mov dx,1400h
in al,dx
mov dx,1401h
out dx,al
mov ah,1
int 16h
jz read
mov ah,4ch
int 21h
code ends
end start
二、流水灯设计实现
data segment
my8255_a equ 1400h ;8255的A口地址
my8255_b equ 1401h ;8255的B口地址
my8255_c equ 1402h ;8255的C口地址
my8255_mode equ 1403h ;8255的控制寄存器地址
mode_a db 10001001b ;控制字
left db 0feh
data ends
code segment
assume cs:code,ds:data
start:
MOV DX, 1406H ;写控制口
MOV AL, 90H
OUT DX, AL
READ:
MOV DX, 1400H ;写A端口
IN AL, DX
MOV DX, 1402H ;写B端口
AND AL, 01H
JZ key1
AND AL, 02H
JZ key2
AND AL, 04H
JZ key3
AND AL, 08H
JZ key4
JMP READ
key1:
;for( i = 0; i < 5; i++)
;for(al = 0x08; al != 0; al >> 1)
MOV CX, 5
MOV AL, 08H
L_TO_RCNT:
PUSH CX
L_TO_R:
MOV CX, 8
OUT DX, AL
SHL AL, 1
LOOP L_TO_R
POP CX
LOOP L_TO_RCNT
JMP READ
key2:
;for( i = 0; i < 5; i++)
;for(al = 0x01; al != 0; al << 1)
MOV CX, 5
MOV AL, 01H
R_TO_LCNT:
PUSH CX
R_TO_L:
MOV CX, 8
OUT DX, AL
SHR AL, 1
LOOP R_TO_L
POP CX
LOOP R_TO_LCNT
JMP READ
key3:
MOV CX, 5
M_TO_OCNT:
MOV SI, 4
M_TO_O:
MOV AL, TABLE[4-SI]
OUT DX, AL
DEC SI
JNZ M_TO_O
LOOP M_TO_OCNT
JMP READ
key4:
MOV CX, 5
CNT:
MOV SI, 4
O_TO_M:
MOV AL, TABLE[SI]
OUT DX, AL
DEC SI
JNZ O_TO_M
LOOP CNT
JMP READ
; OUT DX, AL
; JMP READ
mov ax, 4c00h
int 21h
CODE ENDS
end start三、数码管应用
data segment
my8255_a equ 1400h ;8255的A口地址
my8255_b equ 1401h ;8255的B口地址
my8255_c equ 1402h ;8255的C口地址
my8255_mode equ 1403h ;8255的控制寄存器地址
mode_a db 10001001b ;控制字
data ends
code segment
assume cs:code,ds:data
start:
MOV DX, 1406H ;写控制口
MOV AL, 90H
OUT DX, AL
READ:
MOV DX, 1400H ;写A端口
IN AL, DX
MOV DX, 1402H ;写B端口
MOV BL, AL ;保存端口读到的值
A1:
TEST AL, 01H
JNZ A2
OR AL, 01H
CMP AL, 0FFH
JZ key1
JMP keyE
A2:
MOV AL, BL
TEST AL, 02H
JNZ A3
OR AL, 02H
CMP AL, 0FFH
JZ key2
JMP keyE
A3:
MOV AL, BL
TEST AL, 04H
JNZ A4
OR AL, 04H
CMP AL, 0FFH
JZ key3
JMP keyE
A4:
MOV AL, BL
TEST AL, 08H
JNZ A5
OR AL, 08H
CMP AL, 0FFH
JZ key4
JMP keyE
A5:
MOV AL, BL
TEST AL, 10H
JNZ A6
OR AL, 10H
CMP AL, 0FFH
JZ key5
JMP keyE
A6:
MOV AL, BL
TEST AL, 20H
JNZ A7
OR AL, 20H
CMP AL, 0FFH
JZ key6
JMP keyE
A7:
MOV AL, BL
TEST AL, 40H
JNZ A8
OR AL, 40H
CMP AL, 0FFH
JZ key7
JMP keyE
A8:
MOV AL, BL
TEST AL, 80H
JNZ READ
OR AL, 80H
CMP AL, 0FFH
JZ key8
JMP keyE
key1:
MOV AL, TABLE[0]
OUT DX, AL
JMP READ
key2:
MOV AL, TABLE[1]
OUT DX, AL
JMP READ
key3:
MOV AL, TABLE[2]
OUT DX, AL
JMP READ
key4:
MOV AL, TABLE[3]
OUT DX, AL
JMP READ
key5:
MOV AL, TABLE[4]
OUT DX, AL
JMP READ
key6:
MOV AL, TABLE[5]
OUT DX, AL
JMP READ
key7:
MOV AL, TABLE[6]
OUT DX, AL
JMP READ
key8:
MOV AL, TABLE[7]
OUT DX, AL
JMP READ
keyE:
MOV AL, TABLE[8]
OUT DX, AL
JMP READ
; OUT DX, AL
; JMP READ
mov ax, 4c00h
int 21h
CODE ENDS
end start
四、抢答器
data segment
my8255_a equ 1400h ;8255的A口地址
my8255_b equ 1401h ;8255的B口地址
my8255_c equ 1402h ;8255的C口地址
my8255_mode equ 1403h ;8255的控制寄存器地址
mode_a db 10001001b ;控制字
data ends
code segment
assume cs:code,ds:data
start:
MOV DX, 1406H ;写控制口
MOV AL, 90H
OUT DX, AL
READ:
MOV DX, 1400H ;写A端口
IN AL, DX
MOV DX, 1402H ;写B端口
;倒计时过程 到了0开始抢答
MOV SI, 5
TIME:
;延时等待
MOV CX, 0FFFFH
delay:
LOOP delay
MOV AL, TABLE[SI]
OUT DX, AL
DEC SI
JNZ TIME
MOV BL, AL
A1:
TEST AL, 01H
JZ key1
A2:
TEST AL, 02H
JZ key2
A3:
TEST AL, 04H
CMP AL, 0FFH
A4:
TEST AL, 08H
JZ key4
A5:
TEST AL, 10H
JZ key5
A6:
TEST AL, 20H
JZ key6
A7:
TEST AL, 40H
JZ key7
A8:
TEST AL, 80H
JZ key8
;无人抢答
MOV AL, TABLE[0]
OUT DX, AL
NEXT: ;等待输入空格键或者Esc 到下一轮抢答或者退出程序
MOV AH, 1
INT 21H ;
CMP AL, 32 ;是否为 空格
JZ READ
CMP AL, 27 ;是否为 Esc
JZ END
key1:
MOV AL, TABLE[1]
OUT DX, AL
JMP NEXT
key2:
MOV AL, TABLE[2]
OUT DX, AL
JMP NEXT
key3:
MOV AL, TABLE[3]
OUT DX, AL
JMP NEXT
key4:
MOV AL, TABLE[4]
OUT DX, AL
JMP NEXT
key5:
MOV AL, TABLE[5]
OUT DX, AL
JMP NEXT
key6:
MOV AL, TABLE[6]
OUT DX, AL
JMP NEXT
key7:
MOV AL, TABLE[7]
OUT DX, AL
JMP NEXT
key8:
MOV AL, TABLE[8]
OUT DX, AL
JMP NEXT
; OUT DX, AL
; JMP READ
END:
mov ax, 4c00h
int 21h
CODE ENDS
end start
展开阅读全文