微机原理课程设计报告彩灯控制器Word文档格式.docx
《微机原理课程设计报告彩灯控制器Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计报告彩灯控制器Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
它是一个双向三态8位缓冲器,用作与系统总线连接是的缓冲部件.CPU与8255A之间所有的数据的发送与接收以及CPU向8255A发送的控制信息和8255A向CPU回送的状态信息都是通过它传送的
(2)三个8位端口PA、PB、PC
端口A(PA口):
有一个8位数据输入锁存器和一个8位数据输入锁存/缓冲器;
端口B(PB口):
有一个8位数据输入缓冲器和一个8位数据输入/输出,锁存/缓冲存储器器;
端口C(PC口):
有一个8位数据输入缓冲存储器器和一个8位数据输出锁存/缓冲器。
通常PA口与PB口用作输入/输出的数据端口,PC口用作控制和状态信息端口。
PC口可以分为两个四位的端口,每个端口包含一个四位锁存器,可分别同PA口和PB口配合使用,用作控制信号(输出)或作为状态信号(输入)。
(3)A组和B组控制电路
A组:
PA口和PC口的高四位(PC7~PC4);
B组:
PB口和PC口的低四位(PC3~PC0)。
这两组控制电路一方面接收CPU发来的控制字并决定8255A的工作方式;
另一方面接收来自读写控制逻辑电路的读写命令,完成接口的读写操作。
(4)读/写控制逻辑
用来管理数据信息。
控制字和状态字的传送,它接收来自CPU的地址总线的A1,A0和控制总线的信号RD.WR.RESET等,并向8255A的A,B两组发送命令.由它控制把CPU发出的控制命令字或输出的数据送到相应的端口,或把外设的状态信息或输入的数据从相应的端口送到CPU。
2.8255A引脚功能
8255A芯片除电源和地引脚以外,其他引脚可分为两组,引脚如图3所示:
(1)8255A与外设连接引脚
8255A芯片与外设连接的有24条双向、三态数据引脚,分成三组,分别对应于A,B,C三个数据端口:
PA7-PA0,PB7-PB0,PC7-PC0.
(2)8255A与CPU连接引脚
D7——与CPU侧连接的八条双向数据线;
WR(低电平有效)——写输入信号;
RD(低电平有效)——读输入信号;
CS(低电平有效)——片选输入信号;
A0、A1——片内寄存器选择输入信号;
PA7~PA0——A口外设双向数据线;
PB7~PB0——B口外设双向数据线;
PC7~PC0——C口外设双向数据线;
RESET——复位输入信号
/CS
/RD
/WR
A1A0
执行的操作
1
00
读端口A
01
读端口B
10
读端口C
11
非法状态
写端口A
写端口B
写端口C
写控制字端口
未选通
8255A的工作方式控制字
8255A有两个控制字:
方式选择控制字和端口C置位/复位控制字。
这两个控制字公用一个地址,即控制端口地址,用控制字的D7位来区分这两个控制字,D7=1为方式选择控制字;
D7=0为端口置位/复位控制字。
1.方式选择控制字
如图4所示:
2.端口C置位/复位控制字
端口C置位/复位控制字的格式如下图所示:
D3-D1三位的编码与端口C的某一位相对应,D0决定置位或复位操作,最高位为0是端口C置位或复位控制字标志。
如图5所示
D3
D2
D1
D0
位选择
PC0
PC1
PC2
PC3
PC4
PC5
PC6
PC7
图58255A端口C置
3.8255A的工作方式
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源引脚图供电,能在以下三种工作方式下工作:
方式0—基本输入/输出方式
方式0下,每一个端口都作为基本输入或输出口,端口C的高4位和低4位以及端口A、端口B都可独立的设置为输入口或输出口。
4个端口的输入或输出可有16种组合。
8255A工作于方式0时,CPU可采用无条件读写方式与8255A交换数据,也可采用查询方式与8255A交换数据。
采用查询方式时,可利用端口C作为与外设的联络信号。
方式1—选通输入/输出方式:
适用于查询和中断方式。
方式2—双向选通输入/输出方式:
方式2为双向传输方式,8255A的方式2可使8255A与外设进行双向通信,既能发送数据,又能接受数据,可采用查询方式和中断方式进行传输。
8086的引脚信号
如图6所示:
8086具有两种不同工作方式,即最小模式和最大模式。
若把MN/
引脚连至电源+5V,则为最小模式。
若把它接地,则处在最大模式。
四、软件设计
1.主程序流程图
2.开关设计
五、调试过程
1.硬件调试
设计的电路是由k5来控制灯的暂停和开始,k1-k5接PB0-PB4。
花型变换由k1,k2,k3,k4控制。
2.软件调试
输入程序,经编译,连接后下载到实验箱运行。
六、心得体会
通过彩灯控制器的汇编实现,对硬件特别是8253A,8255并行口的原理和实现都有了很深的了解。
更加深了对汇编语言的使用.在算法实现上要有一定的思路要更能体现设计的目的。
同时上机调试也是十分重要的,在调试的过程中能够不断的发现在编写算法时应该注意的一些细节和算法语句的非法使用,在调试过程中通过对算法的不断测试、更正、扩充功能、修饰细节,使算法程序不断的得到完善。
通过这次的课程设计使我认识到要将微机原理这门计算机专业的课学好不仅仅是要把书上的基本知识学好而且还要不断进行实践,将所学的跟实践操作结合起来才能更好地巩固所学,才能提高自己实践能力.通过这次的设计使我认识到只停留在表面理解问题是很难使问题得到很好的解决的,实践能力与理论知识同样重要。
可以说此课程设计的理论难度并不大,但是若要深入发掘其中的东西,并且实际去编程实现,就遇到了相当大的难度。
因为与之涉及的很多方面并没有学过,需要自己去自学和实践检验。
七、实验源程序(附注释)
.486p
stackpequ1400h
CODESEGMENTUSE16
ASSUMEDS:
CODE,ES:
CODE,CS:
CODE
ORG03000H
BEG:
JMPSTART
IFSWITCHDB0
SHANSHUOCOUNTDB0
SWITCHCOUNTDB1
ORDERNODB0
ShanShuoLimitDB120
DENG1DB0,18H,24H,42H,81H
DENG2DB0,81H,42H,24H,18H,24H,42H
DENG3DB0,00H,80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH
DENG4DB0,01H,02H,04H,08H,10H,20H,40H,80H,40H,20H,10H,08H,04H,02H
DENGCountDB4
PORT1EQU203H;
A
PORT2EQU207H;
B
PORT3EQU20BH;
C
PORT4EQU20FH;
CTRL
PORT8254AEQU300H
PORT8254BEQU304H
PORT8254CEQU308H
PORT8254DEQU30CH
PORTJIEQU3A8H;
8259A奇地址
PORTOUEQU3A0H;
8259A偶地址
START:
CLI;
关中断
movax,CODE
movds,ax
MOVAX,0
MOVES,AX
movss,ax
movsp,stackp
MOVAL,10000010B
MOVDX,PORT4;
8255初始化A端口输入,B端口输出
OUTDX,AL
MOVBX,40H*4
MOVAX,OFFSETINTPROC
MOVES:
[BX],AX;
设置中断向量
MOVAX,SEGINTPROC
[BX+2],AX
MOVAL,00010011B
MOVDX,PORTOU;
ICW1
OUTDX,AL
MOVAL,01000000B
MOVDX,PORTJI;
ICW2
MOVAL,00000001B;
ICW4
MOVAL,11111110B;
中断屏蔽字,OCW1
MOVAL,36H;
计数器初始化
MOVDX,PORT8254D
MOVAX,470
MOVDX,PORT8254A
MOVAL,AH
MOVAL,76H
MOVAX,100
MOVDX,PORT8254B
STI
WAIT:
JMPWAIT
INTPROCPROC
PUSHDX
PUSHAX
PUSHBX
MOVDX,PORT2;
读开关状态
INAL,DX
TESTAL,80H
JNZEXIT2
ANDAL,1FH
CMPAL,01H
JEONE
CMPAL,02H
JETWO
CMPAL,04H
JETHREE
CMPAL,08H
JEFOUR
CMPIFSWITCH,0;
IFSWTICH=1表示当前正在交替闪烁,
JNENEXT0;
IFSWTICH=0表示刚从某种样式单独闪烁的状态切换到交替闪烁的状态
MOVIFSWITCH,1
MOVSWITCHCOUNT,1;
先从第一种样式开始闪烁
MOVSHANSHUOCOUNT,0;
当前样式闪烁次数初始化
MOVORDERNO,0
NEXT0:
CMPSWITCHCOUNT,01H
CMPSWITCHCOUNT,02H
JETWO;
切到相应的样式
CMPSWITCHCOUNT,03H
CMPSWITCHCOUNT,04H
ONE:
MOVDL,01H
MOVDH,4
LEABX,DENG1
CALLCasePro
JMPEXIT1
TWO:
MOVDL,02H
MOVDH,6
LEABX,DENG2
THREE:
MOVDL,04H
MOVDH,9
LEABX,DENG3
JMPEXIT1
FOUR:
MOVDL,08H
MOVDH,14
LEABX,DENG4
EXIT1:
MOVDX,PORT1
OUTDX,AL;
从端口A送出数据,让小灯们亮
EXIT2:
CLI
MOVDX,PORTOU
MOVAL,20H;
发送EOI命令
POPBX
POPAX
POPDX
IRET
INTPROCENDP
CaseProPROC
CMPAL,DL;
再次确认是多样式交替闪还是单样式,AL=1说明是单样式
JENEXT11
INCSHANSHUOCOUNT;
闪烁次数+1
MOVAH,ShanShuoLimit
CMPSHANSHUOCOUNT,AH;
ShanShuoLimit120是交替闪烁的情况下每种样式最多闪烁次数
JNENEXT12;
不足120次
MOVSHANSHUOCOUNT,0
INCSWITCHCOUNT;
当前样式已经闪了120次,准备切到下一样式
MOVAH,DENGCount
CMPSWITCHCOUNT,AH;
DENGCount5是样式的数量
JBENEXT12
转样式1
JMPNEXT12
NEXT11:
MOVIFSWITCH,0
NEXT12:
INCORDERNO
CMPORDERNO,DH
JNGNEXT13
MOVORDERNO,1
NEXT13:
;
LEABX,DENG1
MOVAL,ORDERNO
XLAT
NOTAL;
对al每一位取反,因为二极管是0点亮
RET
CaseProENDP
CODEENDS
ENDbeg