微机原理课程设计.docx
- 文档编号:7522779
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:22
- 大小:242.05KB
微机原理课程设计.docx
《微机原理课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
微机原理课程设计
本科课程设计
课程名称:
微机原理与接口技术
设计题目:
8个开关控制霓虹灯闪烁,有数码管显示
专业班级:
自动化1001学号:
2010001083
学生姓名:
指导教师:
2013年1月16日
目录
一.题目要求
1.课设题目………………………………………2
2.设计功能………………………………………2
二.课设内容
1.硬件设计原理…………………………………3
1.1硬件原理图…………………………………3
1.2各部分功能描述
(1)芯片8255A
(1.1)芯片8255A的内部结构…………4
(1.2)芯片8255A的引脚功能…………5
(1.3)芯片8255A工作方式……………6
(2)数码管………………………………………6
2.实验电路连线图………………………………8
3.软件流程图……………………………………9
4.汇编程序清单…………………………………10
三.感想总结…………………………………20
一、题目要求
1.课设题目
8个开关控制霓虹灯闪烁并有LED显示
2.设计功能
(1)每次状态完成后,屏幕上均会显示:
"Pleaseinputtheswitchstate.
whenonlyoneswitchisturnedon,
thelightwillbeflashatdiffirenttypes.
ifanytwomoreswitchesareturnedon,
itwillbeinputerror.
onlywhenalltheswitchesareturnedoff,itwillexit."
PLEASEENTERANYKEYWHENREADY!
;请输入开关状态,如果只有一个开关打开,灯将按不同规则闪烁,若两个以上开关开,将显示输入错误。
准备好后请按任意键。
(2)“1”为高电平,表示开关打开;“0”为低电平,表示开关闭合。
开关状态为10000000时,流水灯从右到左依次亮,循环5次,
数码管显示数字“8”;
开关状态为01000000时,流水灯从左到右依次亮,循环5次,
数码管显示数字“7”;
开关状态为00100000时,流水灯从右到左隔灯点亮,循环5次,
数码管显示数字“6”;
开关状态为00010000时,流水灯从左到右隔灯点亮,循环5次,
数码管显示数字“5”;
开关状态为00001000时,流水灯所有灯闪烁,
数码管显示数字“4”;
开关状态为00000100时,L7/L6/L3/L2与L5/L4/L1/L0交替闪烁,
数码管显示数字“3”;
开关状态为00000010时,先L7/L6/L3/L2闪烁15次,
再L5/L4/L1/L0闪烁15次,
数码管显示数字“2”;
开关状态为00000001时,流水灯从中间依次向两边亮,循环4次,
数码管显示数字“1”;
开关状态为00000000时,即所有开关均闭合时,退出系统,
数码管显示数字“0”;
任意两个以上开关打开时,屏幕上显示“INPUTERROR!
”,
屏幕上显示现在的开关高低电平状态,
数码管显示字幕“E”表示错误;
一.课设内容
1.硬件设计原理
1.1硬件原理图
1.2各部分功能描述
(1)芯片8255A
(1.1)8255A的内部结构
8255A是一个40引脚的双列直插式集成电路芯片。
8255A由三部分电路组成,即:
与CPU的接口电路、内部控制逻辑电路和与外设连接的输入/输出接口电路。
1与CPU的接口电路
与CPU的借口电路由数据总线缓冲器和读/写控逻辑组成。
数据总线缓冲器是一个三态、双向、8位寄存器,8条数据线D7~D0与系统数据总线相连接,构成CPU与8255A之间信息传送的通道,CPU通过执行输出指令向8255A写入控制命令或往外设传送数据,通过执行输入指令读取外设输入的数据。
2内部控制逻辑电路
内部控制逻辑包括A组控制与B组控制两部分。
A组控制寄存器用来控制A口PA7~PA0和C口的高4位PC7~PC4;B组控制寄存器用来控制B口PB7~PB0和C口的低4位PC3~PC0。
它们接收CPU发送来的控制命令,对A,B,C3个端口的输入/输出方式进行控制。
3输入/输出接口电路
8255A片内有A,B,C3个8位并行端口,A口和B口分别有1个8位的数据输出锁存/缓冲器和1个8位数据输入锁存器,C口有1个8位数据输出锁存/缓冲器和1个8位数据输入缓冲器,用于存放CPU与外部设备交换的数据。
(1.2)芯片8255A的引脚功能
D7~D0(databus):
三态、双向数据线,与CPU数据总线连接,用来传送数据。
CS(shipselect):
片选信号线,低电平有效时,芯片被选中。
A1,A0(portaddress):
地址线,用来选择内部端口。
RD(read):
读出信号线,低电平有效时,允许数据读出。
WR(write):
写入信号线,低电平有效时,允许数据写入。
RESET(reset):
复位信号线,高电平有效时,将所有内部寄存器(包括控制寄存器)清0.
PA7~PA0(portA):
A口输入/输出信号线。
PB7~PB0(portB):
B口输入/输出信号线。
PC7~PC0(portC):
C口输入/输出信号线。
VCC:
+5V电源。
GND:
电源地线。
(1.3)芯片8255A工作方式
8255A共有三种工作方式,即方式0、方式1、方式2.
(a)方式0基本输入/输出方式
方式0下,可供使用的是两个8位口(A口和B口)及两个4位口(C口高4位部分和低4位部分)。
四个口可以是输入和输出的任何组合。
方式0适用于无条件数据传送,也可以把C口的某一位作为状态位,实现查询方式的数据传送。
(b)方式1选通输入/输出方式
A口和B口分别用于数据的输入/输出。
而C口则作为数据传送的联络信号。
具体定义见表7–2。
可见A口和B口的联络信号都是三个,如果A或B只有一个口按方式1使用,则剩下的另外13位口线仍然可按方式0使用。
如果两个口都按方式1使用,则还剩下2位口线,这两位口线仍然可以进行位状态的输入输出。
方式1适用于查询或中断方式的数据输入/输出。
(c)方式2双向数据传送方式
只有A口才能选择这种工作方式,这时A口既能输入数据又能输出数据。
在这种方式下需使用C口的五位线作控制线,信号定义如表7–2所示。
方式2适用于查询或中断方式的双向数据传送。
如果把A口置于方式2下,则B口只能工作于方式0.
(2)数码管
(2.1)采用共阴数码管
(2.2)数字编码:
“8”07FH
“7”70H
“6”5FH
“5”5BH
“4”33H
“3”79H
“2”6DH
“1”30H
“0”7EH
“E”4FH
(2.3)接线
如图,在使用时,由于实验板上是两个数码管,就需要进行选择。
由于只使用了右侧一位数码管,所以将S1接地,因为是一位,不需要小数点,故dp也接地。
2.实验电路连线图
3.软件流程图
4.汇编程序清单
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
DATASEGMENT
IOPORTEQU0D880H-280H
IO8255AEQUIOPORT+280H
IO8255BEQUIOPORT+281H
IO8255CEQUIOPORT+282H
IO8255TEQUIOPORT+283H
SHOWDB'"Pleaseinputtheswitchstate.',0DH,0AH
;请输入开关状态
DB'whenonlyoneswitchisturnedon,',0DH,0AH
;如果只有一个开关打开
DB'thelightwillbeflashatdiffirenttypes.',0DH,0AH
;灯将按不同规则闪烁
DB'ifanytwomoreswitchesareturnedon,',0DH,0AH
;若两个以上开关开
DB'itwillbeinputerror.'
;将显示输入错误
DB'onlywhenalltheswitchesareturnedoff,itwillexit."',0DH,0AH,'$'
;只有当所有开关闭合时退出系统
TABDB'INPUTERROR!
',0DH,0AH,'$'
TAB1DB'12345678',0DH,0AH,'$'
MESSDB'PLEASEENTERANYKEYWHENREADY!
',0DH,0AH,'$'
DATAENDS
STACKSEGMENTSTACK
STADW50DUP(?
)
STACKENDS
CODESEGMENT
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAH,09H;DOS系统显示字符串功能
MOVDX,OFFSETSHOW
INT21H;显示SHOW内容提示信息
PPP:
MOVAH,09H;DOS系统显示字符串功能
MOVDX,OFFSETMESS
INT21H;显示MESS内容提示信息
MOVAH,01H;DOS系统键盘输入并回显
INT21H;按任意键开始
MOVDX,IO8255T;控制端口
MOVAL,82H;控制字
OUTDX,AL
MOVDX,IO8255B;端口B输入
INAL,DX
MOVBL,AL
MOVDX,IO8255T;控制端口
MOVAL,80H;控制字
OUTDX,AL
CMPBL,80H;比较,如果B口输入信息
JZWATER1为80H,则跳转到WATER1
CMPBL,40H;比较,如果B口输入信息
JZWATER2为40H,则跳转到WATER2
CMPBL,20H;比较,如果B口输入信息
JZWATER3为20H,则跳转到WATER3
CMPBL,10H;比较,如果B口输入信息
JZWATER4为10H,则跳转到WATER4
CMPBL,08H;比较,如果B口输入信息
JZLIGHT1为08H,则跳转到LIGHT1
CMPBL,04H;比较,如果B口输入信息
JZLIGHT2为04H,则跳转到LIGHT2
CMPBL,02H;比较,如果B口输入信息
JZLIGHT3为02H,则跳转到LIGHT3
CMPBL,01H;比较,如果B口输入信息
JZLIGHT4为01H,则跳转到LIGHT4
CMPBL,00H;比较,如果B口输入信息
JZEXIT为00H,则跳转到EXIT
MOVAH,09H
MOVDX,OFFSETTAB
INT21H;显示字符串TAB
MOVAH,09H
MOVDX,OFFSETTAB1
INT21H;显示字符串TAB1
MOVDX,IO8255A;端口A输出,
MOVAL,4FH数码管显示“E”
OUTDX,AL
MOVCX,08H;LOOP循环8次,
BBB:
MOVDL,BL显示8位开关状态
CALLDISP;调用显示字符子程序
SHLBL,1;左移一位
LOOPBBB
JMPPPP
EXIT:
MOVDX,IO8255A;端口A输出,
MOVAL,7EH数码管显示数字“0”
OUTDX,AL
MOVAX,4C00H;退出到DOS系统
INT21H
DISPPROCNEAR;显示字符子程序
PUSHAX
PUSHCX
MOVCL,07H
ANDDL,80H
SHRDL,CL
POPCX
ADDDL,30H
MOVAH,02H
INT21H
MOVDL,20H
INT21H
MOVDL,20H
INT21H
POPAX
RET
DISPENDP
WATER1:
MOVDX,IO8255C;第一种状态WATER1,流水
MOVCX,05H灯从右到左依次亮,循环5次
L1:
PUSHCX
MOVBL,01H;最右边第一个二极管亮
MOVCX,08H
LOP1:
MOVAL,BL
OUTDX,AL
PUSHDX
MOVDX,IO8255A;端口A输出,
MOVAL,07FH数码管显示数字“8”
OUTDX,AL
POPDX
PUSHCX
MOVCX,0FFH
LOP11:
CALLDELAY1;调用延时
CALLDELAY1
CALLDELAY1
CALLDELAY1
LOOPLOP11
ADDBL,BL;利用自加,结果为二倍的
POPCX特征,使左面二极管依次点亮
LOOPLOP1
POPCX
LOOPL1
RET
WATER2:
MOVDX,IO8255C;第二种状态WATER2,流水
MOVCX,05H灯从左到右依次点亮,循环5次
L2:
PUSHCX
MOVBL,80H;最左边第一个二极管亮
MOVCX,08H
LOP2:
MOVAL,BL
OUTDX,AL
PUSHDX
MOVDX,IO8255A;端口A输出,
MOVAL,70H数码管显示数字“7”
OUTDX,AL
POPDX
PUSHCX
MOVCX,0FFH
LOP21:
CALLDELAY1;调用延时
CALLDELAY1
CALLDELAY1
CALLDELAY1
LOOPLOP21
MOVBL,2
DIVBL;利用二进制除以2右移的特征,
MOVBL,AL依次使右侧灯亮
POPCX
LOOPLOP2
POPCX
LOOPL2
RET
WATER3:
MOVDX,IO8255C;第三种状态WATER3,流水
MOVCX,05H灯从右到左隔灯点亮,循环5次
L3:
PUSHCX
MOVBL,01H
LOP3:
MOVAL,BL
OUTDX,AL
PUSHDX
MOVDX,IO8255A;端口A输出,
MOVAL,5FH数码管显示数字“6”
OUTDX,AL
POPDX
PUSHCX
MOVCX,0FFH
LOP32:
CALLDELAY1;调用延时子程序
CALLDELAY1
CALLDELAY1
CALLDELAY1
CALLDELAY1
LOOPLOP32
MOVCL,2
SHLBL,CL;左移两位
POPCX
LOOPLOP3
POPCX
LOOPL3
RET
WATER4:
MOVDX,IO8255C;第四种状态WATER4,流水灯
MOVCX,05H从左到右隔灯点亮,循环5次
L4:
PUSHCX
MOVBL,80H
LOP4:
MOVAL,BL
OUTDX,AL
PUSHDX
MOVDX,IO8255A;端口A输出,
MOVAL,5BH数码管显示数字“5”
OUTDX,AL
POPDX
PUSHCX
MOVCX,0FFH
LOP42:
CALLDELAY1;调用延时子程序
CALLDELAY1
CALLDELAY1
CALLDELAY1
CALLDELAY1
LOOPLOP42
MOVCL,2
SHRBL,CL;右移两位
POPCX
LOOPLOP4
POPCX
LOOPL4
RET
LIGHT1:
MOVDX,IO8255C;第五种状态LIGHT1,
MOVCX,10H所有灯闪
TTT:
MOVAL,0FFH;所有灯亮
OUTDX,AL
PUSHDX
MOVDX,IO8255A;端口A输出,
MOVAL,33H数码管显示数字“4”
OUTDX,AL
POPDX
PUSHCX
MOVCX,0F0H
LOP5:
CALLDELAY1;调用延时子程序
CALLDELAY1
LOOPLOP5
MOVAL,00H;所有灯灭
OUTDX,AL
MOVCX,80H
LOP51:
CALLDELAY1
LOOPLOP51
POPCX
LOOPTTT
RET
LIGHT2:
MOVDX,IO8255C;第六种状态LIGHT2,L7/L6
MOVCX,10H/L3/L2与L5/L4/L1/L0交替闪烁
L6:
MOVAL,0CCH;L7/L6/L3/L2亮
OUTDX,AL
PUSHDX
MOVDX,IO8255A;端口A输出,
MOVAL,79H数码管显示数字“3”
OUTDX,AL
POPDX
PUSHCX
MOVCX,0FFH
LOP6:
CALLDELAY1;调用延时子程序
CALLDELAY1
CALLDELAY1
CALLDELAY1
CALLDELAY1
LOOPLOP6
MOVAL,33H;L5/L4/L1/L0亮
OUTDX,AL
MOVCX,0FFH
LOP62:
CALLDELAY1;调用延时子程序
CALLDELAY1
CALLDELAY1
CALLDELAY1
CALLDELAY1
LOOPLOP62
POPCX
LOOPL6
RET
LIGHT3:
MOVDX,IO8255C;第七种状态LIGHT3,先L7/L6
MOVCX,0FH/L3/L2闪烁,再其他闪烁15次
L7:
MOVAL,0CCH;L7/L6/L3/L2亮
OUTDX,AL
PUSHDX
MOVDX,IO8255A;端口A输出,
MOVAL,6DH数码管显示数字“2”
OUTDX,AL
POPDX
PUSHCX
MOVCX,0F0H
LOP7:
CALLDELAY1;调用延时子程序
CALLDELAY1
CALLDELAY1
LOOPLOP7
MOVAL,00H;所有灯灭
OUTDX,AL
MOVCX,80H
LOP72:
CALLDELAY1;调用延时子程序
CALLDELAY1
CALLDELAY1
LOOPLOP72
POPCX
LOOPL7
MOVCX,0FH
L72:
MOVAL,33H;L5/L4/L1/L0亮
OUTDX,AL
PUSHCX
MOVCX,80H
LOP73:
CALLDELAY1;调用延时子程序
CALLDELAY1
CALLDELAY1
LOOPLOP73
MOVAL,00H;所有灯灭
OUTDX,AL
MOVCX,80H
LOP74:
CALLDELAY1;调用延时子程序
CALLDELAY1
CALLDELAY1
LOOPLOP74
POPCX
LOOPL72
RET
LIGHT4:
MOVDX,IO8255C;第八种状态LIGHT4,流水灯从
MOVCX,04H中间依次向两边亮,循环4次
L8:
MOVAL,18H;中间两灯L3/L4亮
OUTDX,AL
PUSHDX
MOVDX,IO8255A;端口A输出,
MOVAL,30H数码管显示数字“1”
OUTDX,AL
POPDX
PUSHCX
MOVCX,0FFH
LOP8:
CALLDELAY1;调用延时子程序
CALLDELAY1
CALLDELAY1
CALLDELAY1
CALLDELAY1
LOOPLOP8
MOVAL,24H;L2/L5亮
OUTDX,AL
MOVCX,80H
LOP82:
CALLDELAY1;调用延时子程序
LOOPLOP82
MOVAL,42H;L1/L6亮
OUTDX,AL
MOVCX,80H
LOP83:
CALLDELAY1;调用延时子程序
LOOPLOP83
MOVAL,81H;L0/L7亮
OUTDX,AL
MOVCX,80H
LOP84:
CALLDELAY1;调用延时子程序
LOOPLOP84
POPCX
LOOPL8
RET
DELAY1PROCNEAR;调用延时子程序
PUSHCX
MOVCX,0FFFFH
CCC:
LOOPCCC
POPCX
RET
DELAY1ENDP
CODEENDS
ENDSTART
二.感想总结
这次课程设计真的让我获益匪浅。
从编程到写课设报告,经历了很多,也学到了很多。
最初和高华商量,想做电子琴,查了很多资料,可实际试验,却怎么都没反应。
就这样浪费了几个小时的时间,在研究生学姐的建议下,我们重头开始,做霓虹灯、做开关、做数码管。
尽管之前的几个小时时间没有出任何成果,但是已经有了一些基础,这样做起来就比较得心应手。
程序是我们网上找的类似功能的汇编程序修改的。
尽管如此,在去调试的时候还是出现了一些大大小小的问题。
不过最终都得以解决。
霓虹灯因为之前做过,所以没费什么功夫,加开关时动了一些脑筋,本来想用屏蔽,但考虑到屏蔽好还需要进行比较,所以我们就直接用CMP和JZ了。
找到窍门以后,其他的状态就按照规律,很快就做出来了。
起初是不知道数码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计