微机原理与接口技术 课程设计.docx
《微机原理与接口技术 课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术 课程设计.docx(33页珍藏版)》请在冰点文库上搜索。
微机原理与接口技术课程设计
摘要
霓虹灯主要是通过8255A对LED亮灭状态的控制,和8254定时/计数器的定时功能实现霓虹灯闪烁控制系统,外设是红、绿、黄三种颜色的发光二极管,在程序自动控制下,按照不同规律闪烁同时由数码管显示相应的闪烁方式。
关键字:
8255A8254LED数码管
一、设计的任务和要求
设计霓虹灯闪烁控制系统,是外设的红、绿、黄三种颜色的发光二极管,在开关的控制下或者在程序自动控制下,按照不同规律闪烁。
要求发光二极管的亮、灭变化有一定的规律;发光二极管变化规律要求有多种状态。
二、设计小组成员及分工
本次课设由冀任共同完成,在课设中遇到的问题四个人共同思考解决。
三、总体设计
1、8254用于定时:
定时/计数器0与定时器/计数器1共同构成100ms的定时器,确定执行相邻闪烁方式的间隔时间。
2.8255A用于控制LED的状态和数码管显示:
PA0接8254的输出,B口接数码管,显示对应的闪烁方式,C口输出控制LED的状态。
3、六种闪烁方式:
方式1:
从左向右依次点亮8个LED灯,数码管显示1
方式2:
从右向左依次点亮8个LED灯,数码管显示2
方式3:
从左向右依次点亮4个的红灯、2个黄灯和2个绿灯,数码管显示3
方式4:
从左向右两个两个的点亮8个LED灯,数码管显示4
方式5:
从两边向中间依次点亮8个LED灯,数码管显示5
方式6:
按红、绿、黄顺序点亮相同颜色的灯,数码管显示6
1、芯片介绍
(1)芯片8255A
8255A是具有3个8位并行I/O口3种工作方式的可编程并行接口芯片。
8255共有40个引脚,采用双列直插式封装。
D0--D7:
三态双向数据线,与单片机数据总线连接,用来传送数据信息。
CS:
片选信号线,低电平有效,表示芯片被选中。
RD:
读出信号线,低电平有效,控制数据的读出。
WR:
写入信号线,低电平有效,控制数据的写入。
Vcc:
+5V电源。
PA0--PA7:
A口输入/输出线。
PB0--PB7:
B口输入/输出线。
PC0--PC7:
C口输入/输出线。
RESET:
复位信号线。
A1、A0:
地址线,用来选择8255内部端口。
GND:
地线。
三种工作状态:
1)工作方式0:
这是8255A中各端口的基本输入/输出方式。
它只完成简单的并行输入/输出操作,CPU可从指定端口输入信息,也可向指定端口输出信息,如果三个端口均处于工作方式0,则可由工作方式控制字定义16种工作方式的组合。
2)工作方式1:
被称作选通输入/输出方式。
在这种工作方式下,数据输入/输出操作要在选通信号控制下完成。
3)工作方式2:
被称作带选通的双向传送方式。
8255A中只允许端口A处于工作方式2,可用来在两台处理机之间实现双向并行通信。
其有关的控制信号由端口C提供,并可向CPU发出中断请求信号。
(2)芯片8254
8254芯片是可编程定时/计数器芯片,片内有3个独立的16位计数器,每个计数器可编程设定为6中不同的工作方式。
8254的引脚图和引脚说明
8254芯片的工作方式:
8254芯片共有六种工作方式,分别对应与六种不同的用途。
1)方式0:
计数结束产生中断。
2)方式1:
可重触发单稳方式。
3)方式2:
分频器。
4)方式3:
方波发生器。
5)方式4:
软件触发计数。
6)方式5:
硬件触发计数。
2、硬件连接图
五、软件编程
1、软件流程图
N
Y
Y
(2)方式1
Y
N
(3)主程序
Y
N
2、汇编语言源程序
DATASEGMENT
IOPORTEQU0D880H-280H
IO8255AEQUIOPORT+280H
IO8255BEQUIOPORT+281H
IO8255CEQUIOPORT+282H
IO8255TEQUIOPORT+283H
IO82540EQUIOPORT+288H
IO82541EQUIOPORT+289H
IO8254KEQUIOPORT+28BH;地址
PBDB?
DATAENDS
STACKSEGMENTSTACK
STADW50DUP(?
)
TOPEQULENGTHSTA
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK;定义代码段
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVDX,IO8255T;8255控制字为81H,端口C低四位为输入
MOVAL,10000001B
OUTDX,AL
MOVDX,IO8255C;读端口C数据并保存
INAL,DX
MOVPB,AL
MOVDX,IO8255T;8255设控制字为90H
MOVAL,90H;(端口A输入,端口B和C输出)
OUTDX,AL
MOVDX,IO8254K;定时器0,方式三,先读写低八位,再读写高八位
MOVAL,36H
OUTDX,AL;输入时钟,1MHZ
MOVDX,IO82540
MOVAX,10000;初值10000,输出时钟周期10MS
OUTDX,AL
NOP
NOP
MOVAL,AH
OUTDX,AL
MOVDX,IO8254K;计数器1,方式0,只读写低八位
MOVAL,50H
OUTDX,AL
CHXU1:
MOVDX,IO8255B
MOVAL,06H
OUTDX,AL;数码管显示1
MOVCX,17;循环17次
MOVAL,00000001B;点亮L7灯
A:
CALLDELAY10;延时
MOVDX,IO8255C
OUTDX,AL
ROLAL,1;AL循环左移一位
LOOPA;循环是否结束?
没有结束,跳到A
MOVAL,00H;灯全灭
OUTDX,AL
MOVAH,01H;有无键入
INT16H
JNZppp
CHXU2:
MOVDX,IO8255B;数码管显示2
MOVAL,5BH
OUTDX,AL
MOVDX,IO82541
MOVAL,10;初值10,检测1秒
OUTDX,AL
DING2:
MOVDX,IO8255A;读入PA0值
INAL,DX
ANDAL,01H
JZDING2;8255的PA0=1停止计时
MOVCX,17;循环17次
MOVAL,10000000B;点亮L1灯
B:
CALLDELAY10;延时
MOVDX,IO8255C
OUTDX,AL
RORAL,1;AL循环右移一位
LOOPB;循环是否结束?
没有结束,跳到B
MOVAL,00H
OUTDX,AL;灯全灭
MOVAH,01H;有无键入
INT16H
JNZppp
CHXU3:
MOVDX,IO8255B;数码管显示3
MOVAL,4FH
OUTDX,AL
MOVDX,IO82541
MOVAL,10;初值10
OUTDX,AL
DING3:
MOVDX,IO8255A
INAL,DX
ANDAL,01H
JZDING3;8255的PA0=1停止计时
MOVCX,2;循环2次
C0:
PUSHCX
MOVDX,IO8255C
MOVAL,01H;左起第一展红灯亮
OUTDX,AL
CALLDELAY10
MOVAL,08H;左起第二展红灯亮
OUTDX,AL
CALLDELAY10
MOVAL,40H;左起第三展红灯亮
OUTDX,AL
CALLDELAY10
MOVAL,80H;左起第四展红灯亮
OUTDX,AL
CALLDELAY10
MOVAL,02H;左起第一展黄灯亮
OUTDX,AL
CALLDELAY10
MOVAL,10H;左起第二展黄灯亮
OUTDX,AL
CALLDELAY10
MOVAL,04H;左起第一展绿灯亮
OUTDX,AL
CALLDELAY10
MOVAL,20H;左起第二展绿灯亮
OUTDX,AL
CALLDELAY10
POPCX
MOVAH,01H;有无键入
INT16H
JNZppp
LOOPC0
MOVAL,00H;灯全灭
OUTDX,AL
CHXU4:
MOVDX,IO8255B;数码管显示4
MOVAL,66H
OUTDX,AL
MOVDX,IO82541
MOVAL,10;初值10
OUTDX,AL
DING4:
MOVDX,IO8255A;读入PA0值
INAL,DX
ANDAL,01H
JZDING4;8255的PA0=1停止计时
MOVCX,9;循环9次
MOVAL,00000011B;点亮L6,L7灯
D:
PUSHCX
CALLDELAY10;延时
MOVDX,IO8255C
OUTDX,AL
MOVCL,2
ROLAL,CL;AL左移两位
POPCX
LOOPD;循环若没有结束,跳到D
MOVAL,00H;灯全灭
OUTDX,AL
MOVAH,01H;有无键入
INT16H
JNZppp
CHXU5:
MOVDX,IO8255B;数码管显示5
MOVAL,6DH
OUTDX,AL
MOVDX,IO8254K
MOVAL,50H
OUTDX,AL;计数器1,方式0,只读写低8位
MOVDX,IO82541
MOVAL,10;初值100
OUTDX,AL
DING5:
MOVDX,IO8255A;读入PA0值
INAL,DX
ANDAL,01H
JZDING5
MOVCX,2
E:
PUSHCX
MOVDX,IO8255C
MOVAL,81H;L7,L0亮
OUTDX,AL
CALLDELAY10
MOVAL,42H;L6,L1亮
OUTDX,AL
CALLDELAY10
MOVAL,24H;L5,L2亮
OUTDX,AL
CALLDELAY10
MOVAL,18H
OUTDX,AL
CALLDELAY10
POPCX
MOVAH,01H;有无键入
INT16H
JNZppp
LOOPE;循环若没有结束,跳到E
MOVAL,00H
OUTDX,AL
CHXU6:
MOVDX,IO8255B;数码管显示6
MOVAL,7DH
OUTDX,AL
MOVDX,IO8254K
MOVAL,50H
OUTDX,AL;计数器1,方式0,只读写低8位
MOVDX,IO82541
MOVAL,10;初值100
OUTDX,AL
DING6:
MOVDX,IO8255A;读入PA0值
INAL,DX
ANDAL,01H
JZDING6
MOVCX,2
F:
PUSHCX
MOVDX,IO8255C
MOVAL,01H;L7亮
OUTDX,AL
CALLDELAY10
MOVAL,04H;L5亮
OUTDX,AL
CALLDELAY10
MOVAL,10H;L3亮
OUTDX,AL
CALLDELAY10
MOVAL,40H;L1亮
OUTDX,AL
CALLDELAY10
MOVAL,02H;L6亮
OUTDX,AL
CALLDELAY10
MOVAL,08H;L4亮
OUTDX,AL
CALLDELAY10
MOVAL,20H;L2亮
OUTDX,AL
CALLDELAY10
MOVAL,80H;L0亮
OUTDX,AL
CALLDELAY10
POPCX
MOVAH,01H;有无键入
INT16H
JNZppp
LOOPF;循环若没有结束,跳到F
MOVAL,00H;灯全灭
OUTDX,AL
CALLDELAY10
JMPCHXU1;循环致信程序
PPP:
MOVDX,IO8255B;数码管熄灭
MOVAL,00H
OUTDX,AL;退出DOS
MOVAX,4C00H
INT21H
DELAY1PROCNEAR
PUSHCX
MOVCX,0FFFFH
CCC:
LOOPCCC
POPCX
RET
DELAY1ENDP
DELAY10PROCNEAR
PUSHAX
PUSHCX
MOVCX,0800H
UUU:
CALLDELAY1
LOOPUUU
POPCX
POPAX
RET
DELAY10ENDP
CODEENDS
ENDSTART
六、程序运行的结果
程序按照以下四种工作方式依次执行,当有按键按下时,执行完此时正在执行的方式就停止。
方式1:
从左向右依次点亮8个LED灯,数码管显示1
方式2:
从右向左依次点亮8个LED灯,数码管显示2
方式3:
从左向右依次点亮4个的红灯、2个黄灯和2个绿灯,数码管显示3
方式4:
从左向右两个两个的点亮8个LED灯,数码管显示4
方式5:
从两边向中间依次点亮8个LED灯,数码管显示5
方式6:
按红、绿、黄顺序点亮相同颜色的灯,数码管显示6
七、设计过程中出现的问题及解决方法
1、循环与任意键结束问题的解决。
起初写好的程序实现不了按任意键结束和循环,本来是执行完闪烁方式4后判断是否有键按下,没有继续循环执行,有退出。
然后在每种工作方式之后都加了判断是否有键按下的程序,就可以实现按意见结束的功能,并在无键按下时一直循环。
2、两个数码管同时显示,将其S0端口接地,便实现了其单独的显示。
八、设计总结
通过这次课程设计我们学到很多。
使我们的学习能力有所提高,但是由于我们的课设还是比较简单,时间也比较紧,所以我们自己要是有机会和时间,一定要做其他一些感兴趣的东西,使自己对硬件语言编程掌握的更灵活一些。
九、程序清单
DATASEGMENT
IOPORTEQU0D880H-280H
IO8255AEQUIOPORT+280H
IO8255BEQUIOPORT+281H
IO8255CEQUIOPORT+282H
IO8255TEQUIOPORT+283H
IO82540EQUIOPORT+288H
IO82541EQUIOPORT+289H
IO8254KEQUIOPORT+28BH;地址
PBDB?
DATAENDS
STACKSEGMENTSTACK
STADW50DUP(?
)
TOPEQULENGTHSTA
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK;定义代码段
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVDX,IO8255T;8255控制字为81H,端口C低四位为输入
MOVAL,10000001B
OUTDX,AL
MOVDX,IO8255C;读端口C数据并保存
INAL,DX
MOVPB,AL
MOVDX,IO8255T;8255设控制字为90H
MOVAL,90H;(端口A输入,端口B和C输出)
OUTDX,AL
MOVDX,IO8254K;定时器0,方式三,先读写低八位,再读写高八位
MOVAL,36H
OUTDX,AL;输入时钟,1MHZ
MOVDX,IO82540
MOVAX,10000;初值10000,输出时钟周期10MS
OUTDX,AL
NOP
NOP
MOVAL,AH
OUTDX,AL
MOVDX,IO8254K;计数器1,方式0,只读写低八位
MOVAL,50H
OUTDX,AL
CHXU1:
MOVDX,IO8255B
MOVAL,06H
OUTDX,AL;数码管显示1
MOVCX,17;循环17次
MOVAL,00000001B;点亮L7灯
A:
CALLDELAY10;延时
MOVDX,IO8255C
OUTDX,AL
ROLAL,1;AL循环左移一位
LOOPA;循环是否结束?
没有结束,跳到A
MOVAL,00H;灯全灭
OUTDX,AL
MOVAH,01H;有无键入
INT16H
JNZppp
CHXU2:
MOVDX,IO8255B;数码管显示2
MOVAL,5BH
OUTDX,AL
MOVDX,IO82541
MOVAL,10;初值10,检测1秒
OUTDX,AL
DING2:
MOVDX,IO8255A;读入PA0值
INAL,DX
ANDAL,01H
JZDING2;8255的PA0=1停止计时
MOVCX,17;循环17次
MOVAL,10000000B;点亮L1灯
B:
CALLDELAY10;延时
MOVDX,IO8255C
OUTDX,AL
RORAL,1;AL循环右移一位
LOOPB;循环是否结束?
没有结束,跳到B
MOVAL,00H
OUTDX,AL;灯全灭
MOVAH,01H;有无键入
INT16H
JNZppp
CHXU3:
MOVDX,IO8255B;数码管显示3
MOVAL,4FH
OUTDX,AL
MOVDX,IO82541
MOVAL,10;初值10
OUTDX,AL
DING3:
MOVDX,IO8255A
INAL,DX
ANDAL,01H
JZDING3;8255的PA0=1停止计时
MOVCX,2;循环2次
C0:
PUSHCX
MOVDX,IO8255C
MOVAL,01H;左起第一展红灯亮
OUTDX,AL
CALLDELAY10
MOVAL,08H;左起第二展红灯亮
OUTDX,AL
CALLDELAY10
MOVAL,40H;左起第三展红灯亮
OUTDX,AL
CALLDELAY10
MOVAL,80H;左起第四展红灯亮
OUTDX,AL
CALLDELAY10
MOVAL,02H;左起第一展黄灯亮
OUTDX,AL
CALLDELAY10
MOVAL,10H;左起第二展黄灯亮
OUTDX,AL
CALLDELAY10
MOVAL,04H;左起第一展绿灯亮
OUTDX,AL
CALLDELAY10
MOVAL,20H;左起第二展绿灯亮
OUTDX,AL
CALLDELAY10
POPCX
MOVAH,01H;有无键入
INT16H
JNZppp
LOOPC0
MOVAL,00H;灯全灭
OUTDX,AL
CHXU4:
MOVDX,IO8255B;数码管显示4
MOVAL,66H
OUTDX,AL
MOVDX,IO82541
MOVAL,10;初值10
OUTDX,AL
DING4:
MOVDX,IO8255A;读入PA0值
INAL,DX
ANDAL,01H
JZDING4;8255的PA0=1停止计时
MOVCX,9;循环9次
MOVAL,00000011B;点亮L6,L7灯
D:
PUSHCX
CALLDELAY10;延时
MOVDX,IO8255C
OUTDX,AL
MOVCL,2
ROLAL,CL;AL左移两位
POPCX
LOOPD;循环若没有结束,跳到D
MOVAL,00H;灯全灭
OUTDX,ALMOVAH,01H;有无键入
INT16H
JNZppp
CHXU5:
MOVDX,IO8255B;数码管显示5
MOVAL,6DH
OUTDX,AL
MOVDX,IO8254K
MOVAL,50H
OUTDX,AL;计数器1,方式0,只读写低8位
MOVDX,IO82541
MOVAL,10;初值100
OUTDX,AL
DING5:
MOVDX,IO8255A;读入PA0值
INAL,DX
ANDAL,01H
JZDING5
MOVCX,2
E:
PUSHCX
MOVDX,IO8255C
MOVAL,81H;L7,L0亮
OUTDX,AL
CALLDELAY10
MOVAL,42H;L6,L1亮
OUTDX,AL
CALLDELAY10
MOVAL,24H;L5,L2亮
OUTDX,AL
CALLDELAY10
MOVAL,18H
OUTDX,AL
CALLDELAY10
POPCX
MOVAH,01H;有无键入
INT16H
JNZppp
LOOPE;循环若没有结束,跳到E
MOVAL,00H
OUTDX,AL
CHXU6:
MOVDX,IO8255B;数码管显示6
MOVAL,7DH
OUTDX,AL
MOVDX,IO8254K
MOV