微原课设报告 开关控制霓虹灯状态Word文档下载推荐.docx

上传人:b****6 文档编号:20432545 上传时间:2023-01-22 格式:DOCX 页数:20 大小:234.27KB
下载 相关 举报
微原课设报告 开关控制霓虹灯状态Word文档下载推荐.docx_第1页
第1页 / 共20页
微原课设报告 开关控制霓虹灯状态Word文档下载推荐.docx_第2页
第2页 / 共20页
微原课设报告 开关控制霓虹灯状态Word文档下载推荐.docx_第3页
第3页 / 共20页
微原课设报告 开关控制霓虹灯状态Word文档下载推荐.docx_第4页
第4页 / 共20页
微原课设报告 开关控制霓虹灯状态Word文档下载推荐.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

微原课设报告 开关控制霓虹灯状态Word文档下载推荐.docx

《微原课设报告 开关控制霓虹灯状态Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《微原课设报告 开关控制霓虹灯状态Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。

微原课设报告 开关控制霓虹灯状态Word文档下载推荐.docx

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:

硬件触发选通方式。

硬件连接图:

四:

软件流程图

软件源程序:

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;

空操作

MOVAL,AH;

将AX寄存器的AH高8位给AL低八位

输出高8位信息

MOVDX,IO8255K;

设置8255控制字

MOVAL,90H;

控制字为10010000定义ABC端口,A口工作方式0输入,B口方式0输出C口输出,B口控制数码管C口控制灯

输出控制字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

输出00000110,高电平点亮灯

MOVDX,IO8255C;

8255C口地址给DX寄存器

MOVAL,24H;

将00100100付给AL,

输出001000100

CALLDELAY;

调用延时程序,相邻灯闪所需要的时间0.25秒

MOVAL,12H;

将00010010付给AL,相同颜色的灯一次点亮

输出00010010

MOVAL,09H;

将00001001付给AL

输出00001001

调用延时程序

LOOPT11;

循环T11状态,

MOVAL,00H;

所有灯灭

输出01011011,显示1

OUTDX,AL

转到检测状态

T2:

T22:

MOVAL,5BH;

将01011011付给AL,

PUSHCX;

压入CX寄存器

MOVCX,0006H;

依次点亮六个灯

MOVAL,01H;

将00000001付给AL,

T:

输出00000001

PUSHAX;

把AX中的内容压入堆栈

POPAX;

弹出AX寄存器

SHLAL,1;

将AL中信息左移位,第二次00000010,一次左移

LOOPT;

AL中的信息不为0就继续循环T

POPCX;

弹出CX寄存器

LOOPT22;

循环T22状态,

MOVAL,00H

8255C口地址给DX寄存器

MOVAL,00H

T3:

将4付给CX寄存器,循环4次

T33:

MOVAL,4FH;

将01001111付给AL

输出01001111

MOVAL,21H;

将00100001付给AL由中间向两边

输出00100001

MOVAL,12H;

将00010010付给AL

MOVAL,0CH;

将00001100付给AL

输出00001100

将00000000付给AL

输出00000000

将00001100付给A

将00100001付给AL

LOOPT33;

循环T33状态,

T4:

循环T4状态,直到CX为0即循环4次

T44:

MOVAL,66H;

将01100110付给AL

输出01100110

8255C口地址给DX寄存器,三个三个亮

MOVAL,07H;

将00000111付给AL

输出00000111

调用延时程序

MOVAL,38H;

将00111000付给AL

输出00111000

LOOPT44;

循环T44状态

T5:

循环T5状态,直到CX为0即循环4次

T55:

MOVAL,6DH;

将01101011付给AL

输出01101011

8255C口地址给DX寄存器,六个灯同时闪烁

MOVAL,3FH;

将00111111付给AL

输出00111111

LOOPT55;

循环T55状态

QUIT:

MOVAH,4CH;

返回DOS

DELAYPROCNEAR;

延时

PUSHDX;

将DX中的内容压入堆栈

MOVDX,IO8254K;

8254设置控制字

将10010000付给AL,计数器2只读写低字节工作在方式2,采用二进制计数

输出10010000

MOVDX,IO82542;

8254计数器2地址给DX寄存器

MOVAL,5;

将5付给AL,5个50ms的方波信号即闪烁间隔0.25秒

每五个周期记一次即输出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

DATAENDS

STACKSEGMENTSTACK

TOPEQULENGTHSTA

STACKENDS

CODESEGMENT

STACK

MOVAX,DATA

MOVDS,AX

MOVAH,09H

MOVDX,OFFSETMESS

MOVDX,IO8254K

MOVAL,36H

OUTDX,AL

MOVDX,IO82540

MOVAX,50000

NOP

MOVAL,AH

MOVDX,IO8255K

MOVAL,90H

MOVAH,01H

INT16H

JNZQUIT

MOVDX,IO8255A

TESTAL,80H

TESTAL,40H

TESTAL,20H

TESTAL,10H

TESTAL,08H

JMPKAIGUAN

MOVCX,0004H

MOVDX,IO8255B

MOVAL,06H

MOVDX,IO8255C

MOVAL,24H

CALLDELAY

MOVAL,12H

MOVAL,09H

LOOPT11

JMPKAIGUAN

MOVAL,5BH

PUSHCX

MOVCX,0006H

MOVAL,01H

PUSHAX

POPAX

SHLAL,1

LOOPT

POPCX

LOOPT22

MOVAL,4FH

MOVAL,21

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1