微原课设报告 开关控制霓虹灯状态.docx
- 文档编号:7324076
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:20
- 大小:234.27KB
微原课设报告 开关控制霓虹灯状态.docx
《微原课设报告 开关控制霓虹灯状态.docx》由会员分享,可在线阅读,更多相关《微原课设报告 开关控制霓虹灯状态.docx(20页珍藏版)》请在冰豆网上搜索。
微原课设报告开关控制霓虹灯状态
微机原理及接口技术课程设计报告
设计题目:
开关控制霓虹灯状态
姓名:
班级:
学号:
同组人:
时间:
内容摘要:
课程设计内容为开关控制霓虹灯的状态显示,主要包括8255及8254芯片的使用,源程序代码的编辑以及硬件连接图的绘制和硬件实验箱的演示。
目录
1:
设计任务及要求
2:
小组成员及分工
3:
硬件电路设计
4:
软件编程
5:
程序运行结果
6:
设计过程出现的问题及解决方法
7:
设计总结
8:
程序清单
9:
参考文献
一:
设计任务及要求
设计霓虹灯闪烁控制系统,使外设的红、黄、绿三种颜色的发光二极管,在开关的控制下,按照不同规律闪烁。
(1)要求发光二极管的亮、灭变化有一定的规律;
(2)发光二极管变化规律要有多种状态。
二:
小组成员及分工
1:
小组成员:
2:
成员分工软件部分
硬件部分
三:
硬件电路设计
8255芯片介绍
8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强。
8255可作为单片机与多种外设连接时的中间接口电路。
8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。
同时必须具有与外设连接的接口A、B、C口。
由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:
与CPU连接部分、与外设连接部分、控制部分。
1)与CPU连接部分
根据定义,8255能并行传送8位数据,所以其数据线为8根D0~D7。
由于8255具有3个通道A、B、C,所以只要两根地址线就能寻址A、B、C口及控制寄存器,故地址线为两根A0~A1。
此外CPU要对8255进行读、写与片选操作,所以控制线为片选、复位、读、写信号。
各信号的引脚编号如下:
(1)数据总线DB:
编号为D0~D7,用于8255与CPU传送8位数据。
(2)地址总线AB:
编号为A0~A1,用于选择A、B、C口与控制寄存器。
(3)控制总线CB:
片选信号、复位信号RST、写信号、读信号。
当CPU要对8255进行读、写操作时,必须先向8255发片选信号选中8255芯片,然后发读信号或写信号对8255进行读或写数据的操作。
2)与外设接口部分 根据定义,8255有3个通道A、B、C与外设连接,每个通道又有8根线与外设连接,所以8255可以用24根线与外设连接,若进行开关量控制,则8255可同时控制24路开关。
各通道的引脚编号如下:
(1)A口:
编号为PA0~PA7,用于8255向外设输入输出8位并行数据。
(2)B口:
编号为PB0~PB7,用于8255向外设输入输出8位并行数据。
(3)C口:
编号为PC0~PC7,用于8255向外设输入输出8位并行数据,当8255工作于应答I/O方式时,C口用于应答信号的通信。
3)控制器 8255将3个通道分为两组,即PA0~PA7与PC4~PC7组成A组,PB0~PB7与PC0~PC3组成B组。
如图7.5所示,相应的控制器也分为A组控制器与B组控制器,各组控制器的作用如下:
(1)A组控制器:
控制A口与上C口的输入与输出。
(2)B组控制器:
控制B口与下C口的输入与输出。
8254芯片介绍
8254芯片是一款使用十分广泛的可编程定时,计数芯片,其主要功能是定时和计数的功能。
我们的微机内的动态存储器刷新电路,系统日时钟的技术以及发声系统的声源都是由8254芯片来完成的。
8254的内部结构
8254芯片主要由四部分组成:
1数据总线缓冲器
数据总线缓冲器是一个三态、双向8位寄存器主要作用是与cpu进行数据交换,8位数据线D7~D0与CPU的系统数据总线连接,构成CPU和8254之间信息传送的通道,CPU通过数据总线缓冲器向8254写入控制命令、计数初始值或读取计数值。
2读写逻辑
读写逻辑是芯片的控制部分,编程人员通过控制信号的选择来选择芯片的工作方式。
读/写控制逻辑用来接收CPU系统总线的读、写控制信号和端口选择信号,用于控制8254内部寄存器的读/写操作。
3控制字寄存器 控制寄存器是一个只能写不能读的8位寄存器,系统通过指令将控制字写入控制寄存器,设定8254的不同工作方式。
4计数器 8254内部有三个结构完全相同而又相互独立的16位减“1”计数器,每个计数器有六种工作方式,各自可按照编程设定的方式工作。
8254芯片的工作方式:
8254芯片共有六种工作方式,分别对应与六种不同的用途。
(1)方式0:
计数到0结束输出正跃变信号方式。
(2)方式1:
硬件可重触发单稳方式。
(3)方式2:
频率发生器方式。
(4)方式3:
方波发生器。
(5)方式4:
软件触发选通方式。
(6)方式5:
硬件触发选通方式。
硬件连接图:
四:
软件编程
1:
软件流程图
2:
软件源程序:
DATASEGMENT;数据段
IOPORTEQU0D880H-280H;PCI外设I/O基地址
IO8255KEQUIOPORT+283H;定义8255控制端口的地址
IO8255AEQUIOPORT+280H;定义8255A端口地址
IO8255BEQUIOPORT+281H;定义8255B端口地址
IO8255CEQUIOPORT+282H;定义8255C端口地址
IO8254KEQUIOPORT+28BH;定义8254控制端口地址
IO82542EQUIOPORT+28AH;定义8254A计数器2端口地址
IO82540EQUIOPORT+288H;定义8254A计数器0端口地址
MESSDB'ENTERANYKEYCANEXITTODOS!
',0DH,0AH,'$';定义提示信息
DATAENDS;数据段结束
STACKSEGMENTSTACK;堆栈段
STADW1000DUP(?
);预留1000字节的存储空间
TOPEQULENGTHSTA;将堆栈STA的长度付给TOP作为栈顶地址
STACKENDS;堆栈段结束
CODESEGMENT;代码段
ASSUMECS:
CODE,DS:
DATA,SS:
STACK;段分配
START:
MOVAX,DATA;初始化
MOVDS,AX;将寄存器AX中的地址给DS作为段基地
MOVAH,09H;9号功能调用
MOVDX,OFFSETMESS;显示提示信息
INT21H
MOVDX,IO8254K;设置8254控制字,计数器0,方式3
MOVAL,36H
OUTDX,AL;输出AL中的信息00110110
MOVDX,IO82540;设置闪烁频率
MOVAX,50000;设定初始值50000,输出时钟周期50ms
OUTDX,AL;8254输出50ms的方波信号
NOP;空操作
NOP;空操作
MOVAL,AH;将AX寄存器的AH高8位给AL低八位
OUTDX,AL;输出高8位信息
MOVDX,IO8255K;设置8255控制字
MOVAL,90H;控制字为10010000定义ABC端口,A口工作方式0输入,B口方式0输出C口输出,B口控制数码管C口控制灯
OUTDX,AL;输出控制字10010000
LLL:
MOVAH,01H;有键按下则退出
INT16H;显示提示信息
JNZQUIT;结果为0跳到QUIT程序
KAIGUAN:
MOVDX,IO8255A;开关控制
INAL,DX
JIANCE:
TESTAL,80H;检测是否T1状态
JNZT1
TESTAL,40H;检测是否T2状态
JNZT2
TESTAL,20H;检测是否T3状态
JNZT3
TESTAL,10H;检测是否T4状态
JNZT4
TESTAL,08H;检测是否T5状态
JNZT5
JMPKAIGUAN;转到开关检测状态
T1:
MOVCX,0004H;将4付给CX寄存器,每种工作方式循环4次
T11:
MOVDX,IO8255B;8255B口地址给DX寄存器
MOVAL,06H;将00000110付给AL
OUTDX,AL;输出00000110,高电平点亮灯
MOVDX,IO8255C;8255C口地址给DX寄存器
MOVAL,24H;将00100100付给AL,
OUTDX,AL;输出001000100
CALLDELAY;调用延时程序,相邻灯闪所需要的时间0.25秒
MOVAL,12H;将00010010付给AL,相同颜色的灯一次点亮
OUTDX,AL;输出00010010
CALLDELAY;调用延时程序,相邻灯闪所需要的时间0.25秒
MOVAL,09H;将00001001付给AL
OUTDX,AL;输出00001001
CALLDELAY;调用延时程序
LOOPT11;循环T11状态,
MOVDX,IO8255B;8255B口地址给DX寄存器
MOVAL,00H;所有灯灭
OUTDX,AL;输出01011011,显示1
MOVDX,IO8255C;8255C口地址给DX寄存器
MOVAL,00H;所有灯灭
OUTDX,AL
JMPKAIGUAN;转到检测状态
T2:
MOVCX,0004H;将4付给CX寄存器,每种工作方式循环4次
T22:
MOVDX,IO8255B;8255B口地址给DX寄存器
MOVAL,5BH;将01011011付给AL,
OUTDX,AL;输出01011011,显示1
MOVDX,IO8255C;8255C口地址给DX寄存器
PUSHCX;压入CX寄存器
MOVCX,0006H;依次点亮六个灯
MOVAL,01H;将00000001付给AL,
T:
OUTDX,AL;输出00000001
PUSHAX;把AX中的内容压入堆栈
CALLDELAY;调用延时程序
POPAX;弹出AX寄存器
SHLAL,1;将AL中信息左移位,第二次00000010,一次左移
LOOPT;AL中的信息不为0就继续循环T
POPCX;弹出CX寄存器
LOOPT22;循环T22状态,
MOVDX,IO8255B;8255B口地址给DX寄存器
MOVAL,00H
OUTDX,AL;所有灯灭
MOVDX,IO8255C;8255C口地址给DX寄存器
MOVAL,00H
OUTDX,AL;所有灯灭
JMPKAIGUAN;转到检测状态
T3:
MOVCX,0004H;将4付给CX寄存器,循环4次
T33:
MOVDX,IO8255B;8255B口地址给DX寄存器
MOVAL,4FH;将01001111付给AL
OUTDX,AL;输出01001111
MOVDX,IO8255C;8255C口地址给DX寄存器
MOVAL,21H;将00100001付给AL由中间向两边
OUTDX,AL;输出00100001
CALLDELAY;调用延时程序
MOVAL,12H;将00010010付给AL
OUTDX,AL;输出00010010
CALLDELAY;调用延时程序
MOVAL,0CH;将00001100付给AL
OUTDX,AL;输出00001100
CALLDELAY;调用延时程序
MOVAL,00H;将00000000付给AL
OUTDX,AL;输出00000000
CALLDELAY;调用延时程序
MOVAL,0CH;将00001100付给A
OUTDX,AL;输出00001100
CALLDELAY;调用延时程序
MOVAL,21H;将00100001付给AL
OUTDX,AL;输出00100001
CALLDELAY;调用延时程序
LOOPT33;循环T33状态,
MOVDX,IO8255B;8255B口地址给DX寄存器
MOVAL,00H
OUTDX,AL;所有灯灭
MOVDX,IO8255C;8255C口地址给DX寄存器
MOVAL,00H
OUTDX,AL;所有灯灭
JMPKAIGUAN;转到检测状态
T4:
MOVCX,0004H;循环T4状态,直到CX为0即循环4次
T44:
MOVDX,IO8255B;8255B口地址给DX寄存器
MOVAL,66H;将01100110付给AL
OUTDX,AL;输出01100110
MOVDX,IO8255C;8255C口地址给DX寄存器,三个三个亮
MOVAL,07H;将00000111付给AL
OUTDX,AL;输出00000111
CALLDELAY;调用延时程序
MOVAL,38H;将00111000付给AL
OUTDX,AL;输出00111000
CALLDELAY;调用延时程序
LOOPT44;循环T44状态
MOVDX,IO8255B;8255B口地址给DX寄存器
MOVAL,00H
OUTDX,AL;所有灯灭
MOVDX,IO8255C;8255C口地址给DX寄存器
MOVAL,00H
OUTDX,AL;所有灯灭
JMPKAIGUAN;转到检测状态
T5:
MOVCX,0004H;循环T5状态,直到CX为0即循环4次
T55:
MOVDX,IO8255B;8255B口地址给DX寄存器
MOVAL,6DH;将01101011付给AL
OUTDX,AL;输出01101011
MOVDX,IO8255C;8255C口地址给DX寄存器,六个灯同时闪烁
MOVAL,3FH;将00111111付给AL
OUTDX,AL;输出00111111
CALLDELAY;调用延时程序
MOVAL,00H;所有灯灭
OUTDX,AL
CALLDELAY;调用延时程序
LOOPT55;循环T55状态
MOVDX,IO8255B;8255B口地址给DX寄存器
MOVAL,00H
OUTDX,AL;所有灯灭
MOVDX,IO8255C;8255C口地址给DX寄存器
MOVAL,00H
OUTDX,AL;所有灯灭
JMPKAIGUAN;转到检测状态
QUIT:
MOVAH,4CH;返回DOS
INT21H
DELAYPROCNEAR;延时
PUSHDX;将DX中的内容压入堆栈
MOVDX,IO8254K;8254设置控制字
MOVAL,90H;将10010000付给AL,计数器2只读写低字节工作在方式2,采用二进制计数
OUTDX,AL;输出10010000
MOVDX,IO82542;8254计数器2地址给DX寄存器
MOVAL,5;将5付给AL,5个50ms的方波信号即闪烁间隔0.25秒
OUTDX,AL;每五个周期记一次即输出0.25秒周期的方波信号
MOVDX,IO8255A;8255A口地址给DX寄存器
A1:
INAL,DX;将8254中的信号送到8255的A端口
ANDAL,01H;将AL中的信息与1想与,
JZA1;结果为0跳到A1继续读入A口输入信号,不为0则继续延时
POPDX;弹出DX寄存器
RET;段内子程序返回
DELAYENDP;延时程序结束
CODEENDS;数据段结束
ENDSTART;整个程序结束
五:
程序运行结果
六:
设计过程出现的问题及解决方法
在课程设计过程中,开始编辑程序代码时,由于分块实现功能。
所有组合时出现了衔接的问题,由于软件与硬件的衔接,开始时霓虹灯的闪烁状态并不符合一定的规律,甚至出现了杂乱现象,通过检验代码和检查硬件演示实验箱,检查接线的顺序解决了灯的闪烁规律,由于用开关控制霓虹灯的闪烁状态,演示时,开关拨动一下,能够显示状态并且能够按照设定的规律闪烁,但是当开关关闭后,灯还是不停地闪烁,并且拨动其他开关时,状态也不会发生变化,数码管显示的状态次数也不变,通过检查发现代码段出现了问题,缺少了控制代码。
由于我们开始用的延时程序是软件延时,没有用8254,后来,我们选择用8254芯片进行延时,上机调试时,遇到了一个问题,就是第二种LED闪烁状态显示不对,且数码管有个状态显示不对,经过检查,发现数码管显示问题是因为那个数字段代码写错了,但是第二个状态的LED闪烁规律还有问题,经过仔细检查发现是因为我们在利用那个左移循环时,然后调用子程序,其中对AX没有保护,导致结果不对,然后加了一对PUSH和POP入栈保护和出栈保护。
由于霓虹灯的闪烁延时开始较长,每个状态在开关拨到0状态时很长时间才停止,开始以为程序有问题,状态不能停止,后来发现是延时太长,缩短了延时周期后,闪烁延迟周期及开关关闭后停止的时间变短,每个状态变得更加明显。
七:
设计总结
这次课程设计过程中有不少挑战,对于对理论知识尚不能充分领会的,开始实际地运用知识来完成任务,对于只会走马看花的读程序的,要实际的编辑一段程序代码,并且要实现一些功能,但是,正是这样一次机会才能使我们认识我们认识到我们所学的知识的用处,认识的脚踏实地的重要,我们可以进一步加强对所学芯片的认识和运用。
本次课题中用到了8255.、8254、数码管、LED灯等,初步熟练地掌握了通过汇编语言来使用这些硬件获得特定的功能,熟悉了微机系统的硬件开发工具的使用方法,微机系统硬件设计的方法、原理、设计步骤,事实求是和严肃认真的工作态度,实际动手能力,培养了在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。
经过这次课设,我们更加深刻的理解了出栈和入栈保护,最重要的是,通过课设,使我们意识到对于程序,原本看起来容易的事情但是真正到了让自己独立写程序时是困难多多的,作为一个学生不能眼高手低,应该扎扎实实的从基础做起,认真学习基础知识,打好基础,多学多练,日积月累,多写程序,编程能力才能有所提高,课设是对学习的知识加以实际应用的很好机会,是所学知识的综合应用,是对所学知识运用能力的一次实际考验,当自己的付出收获成功的时候会很欣慰,希望能有更多的机会来锻炼自己,只有历经过才能知道过程之艰难,成功之不易。
脚踏实地的学习,认认真真的学习,只有以坚毅不拔的精神学习知识,努力克服过程中的重重地困难,结果并不是最重要的,过程才是值得留恋的,值得珍惜和回味的。
八:
程序清单
DATASEGMENT
IOPORTEQU0D880H-280H
IO8255KEQUIOPORT+283H
IO8255AEQUIOPORT+280H
IO8255BEQUIOPORT+281H
IO8255CEQUIOPORT+282H
IO8254KEQUIOPORT+28BH
IO82542EQUIOPORT+28AH
IO82540EQUIOPORT+288H
MESSDB'ENTERANYKEYCANEXITTODOS!
',0DH,0AH,'$'
DATAENDS
STACKSEGMENTSTACK
STADW1000DUP(?
)
TOPEQULENGTHSTA
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAH,09H
MOVDX,OFFSETMESS
INT21H
MOVDX,IO8254K
MOVAL,36H
OUTDX,AL
MOVDX,IO82540
MOVAX,50000
OUTDX,AL
NOP
NOP
MOVAL,AH
OUTDX,AL
MOVDX,IO8255K
MOVAL,90H
OUTDX,AL
LLL:
MOVAH,01H
INT16H
JNZQUIT
KAIGUAN:
MOVDX,IO8255A
INAL,DX
JIANCE:
TESTAL,80H
JNZT1
TESTAL,40H
JNZT2
TESTAL,20H
JNZT3
TESTAL,10H
JNZT4
TESTAL,08H
JNZT5
JMPKAIGUAN
T1:
MOVCX,0004H
T11:
MOVDX,IO8255B
MOVAL,06H
OUTDX,AL
MOVDX,IO8255C
MOVAL,24H
OUTDX,AL
CALLDELAY
MOVAL,12H
OUTDX,AL
CALLDELAY
MOVAL,09H
OUTDX,AL
CALLDELAY
LOOPT11
MOVDX,IO8255B
MOVAL,00H
OUTDX,AL
MOVDX,IO8255C
MOVAL,00H
OUTDX,AL
JMPKAIGUAN
T2:
MOVCX,0004H
T22:
MOVDX,IO8255B
MOVAL,5BH
OUTDX,AL
MOVDX,IO8255C
PUSHCX
MOVCX,0006H
MOVAL,01H
T:
OUTDX,AL
PUSHAX
CALLDELAY
POPAX
SHLAL,1
LOOPT
POPCX
LOOPT22
MOVDX,IO8255B
MOVAL,00H
OUTDX,AL
MOVDX,IO8255C
MOVAL,00H
OUTDX,AL
JMPKAIGUAN
T3:
MOVCX,0004H
T33:
MOVDX,IO8255B
MOVAL,4FH
OUTDX,AL
MOVDX,IO8255C
MOVAL,21
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微原课设报告 开关控制霓虹灯状态 微原课设 报告 开关 控制 霓虹灯 状态