跑马灯操纵器微机原理课程设计丁同飞0904013004.docx

上传人:b****4 文档编号:5899041 上传时间:2023-05-09 格式:DOCX 页数:30 大小:156.22KB
下载 相关 举报
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第1页
第1页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第2页
第2页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第3页
第3页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第4页
第4页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第5页
第5页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第6页
第6页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第7页
第7页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第8页
第8页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第9页
第9页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第10页
第10页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第11页
第11页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第12页
第12页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第13页
第13页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第14页
第14页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第15页
第15页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第16页
第16页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第17页
第17页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第18页
第18页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第19页
第19页 / 共30页
跑马灯操纵器微机原理课程设计丁同飞0904013004.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

跑马灯操纵器微机原理课程设计丁同飞0904013004.docx

《跑马灯操纵器微机原理课程设计丁同飞0904013004.docx》由会员分享,可在线阅读,更多相关《跑马灯操纵器微机原理课程设计丁同飞0904013004.docx(30页珍藏版)》请在冰点文库上搜索。

跑马灯操纵器微机原理课程设计丁同飞0904013004.docx

跑马灯操纵器微机原理课程设计丁同飞0904013004

合肥学院

运算机科学与技术系

 

微机原理与接口技术

课程设计报告

2020~2021学年第1学期

 

课程

微机原理与接口技术

课程设计名称

跑马灯控制器

学生姓名

丁同飞

学号

04

专业班级

计算机科学与技术专业(09计本3)

指导教师

张向东教授

2021年1月

一、题意分析及解决方案

一、题意需求分析

本次实验需要用STARES598PCI单板开发机和接口设计跑马灯操纵器,应用软件操纵并行接口电路,使连接在该接口上的8个发光二极管和8个操纵开关,按操纵开关概念的功能形式闪烁。

跑马灯的含义:

通过开关来操纵LED指示灯的不同闪烁形式,而不同的闪烁形式通过给开关设定不同的编码来确信不同的闪烁形式,使LED指示灯呈现一种流动闪烁的状态。

下面列出跑马灯可能的闪烁形式:

1、依次左移或右移闪烁

2、隔一左移或隔一右移闪烁

3、隔二左移或隔二右移闪烁

4、左右相向移动闪烁

5、左右从中间向两边依次闪烁

6、从左至右先依次点亮再反向熄灭

为了实现上述功能,需要解决一些问题:

1、需要利用什么芯片来实现跑马灯操纵器的运行?

2、开关的扫描问题?

如何设置开关的编码?

3、选择了芯片后,如何设置芯片操纵口的端口地址和各端口的输入输出形式?

4、开关的不锁存是不是有阻碍?

5、如何使显示灯转变进程中给人视觉上产生依次闪烁的成效?

二、解决问题及思路

(1)硬件部份

本实验需要在STARES598PCI单板开发机中执行,所用到用户程序存储器共32KB,集成环境为WinxpXingyan,接口选择8255A芯片,操纵用逻辑开关。

接口方面:

8255芯片是可编程的并行接口芯片,不需要附加外部电路即可和大多数并行传输数据的外部设备相连,数据的列位同时传送,利用十分方便。

8255A芯片内部有三个8位端口,别离为A口、B口和C口。

这三个端口可与外部设备相连接,可用来与外设进行数据信息、操纵信息和状态信息的互换。

本实验为了实现跑马灯的并行输入输出,选择奖8255A中的A口作为输出口,B口作为输入口,A口接8个LED指示灯,通过指示灯的移动闪烁来实现跑马。

B口作为输入口,连接操纵开关(8个)K0~K7,由于开关是简单的逻辑电路,能够直接连在B口上。

操纵开关:

选择逻辑开关,由8组逻辑电平开关组成(K0~K7),逻辑开关用于输出逻辑电平“1”和“0”,逻辑开关是简单的逻辑电路,只需设定对应的编码,由于选择的是方式0,因此不锁存,直接输入开关的编码即可直接被8255A芯片读取。

LED指示灯在亮度、功耗、可视角度和刷新速度等方面,都更具优势。

利用寿命较长,光电能转化效率高

操纵用逻辑开关来实现开关的操纵

(2)软件部份

8255A芯片操纵程序的初始化及编写,实现开关操纵LED指示灯循环闪烁。

开关的选取(对应的开关有对应的指示灯闪烁形式)

一、8255A芯片操纵程序初始化及操纵口端口地址的设置

movax,@data

movds,ax

nop

CALLINITPCI

CALLModifyAddress

movdx,COM_ADD

moval,82H

;向操纵口写入方式操纵字

outdx,al

init:

movbh,7fh;bh设为01111111B

movcl,0feh;cl设为B

2、开关设定

开关编码设定:

先设定了5种开关形式,这五种开关选择的是对应的子程序,

选择子程序采纳的是低位清零,即用前四个开关来选择,对应编码别离为(10h、20h、30h、40h、50h),而每组子程序中都有两个闪烁形式,再采纳高位清零,选择第五和第六个开关来选择闪烁形式,对应编码别离为04h和08h,最后两位开关为操纵速度的开关,及通过不同的开关形式选择不同的延时程序来操纵闪烁速度(01h、02h、03h)。

3、为了能够直观的看到LED发光二极管的闪烁挪用了延时子程序:

delayprocnear;延时子程序

pushax

pushdx

movdx,PB_ADD;b口扫描是不是有开关拨动,哪个开关

inal,dx;dx送al

andal,03h;al内容和0fH相与,即取低四位

cmpal,01h

jzaaaaa

cmpal,02h

jzbbbbb

cmpal,03h

jzzzzzz

movdx,50

movah,0ffh

int21h

JMPfff

aaaaa:

movdx,100

movah,0ffh

int21h

JMPfff

bbbbb:

movdx,200

movah,0ffh

int21h

JMPfff

zzzzz:

movdx,400

movah,0ffh

int21h

JMPfff

fff:

popax

popdx

ret

delayendp

二、硬件设计

一、选择芯片

(1)8255A

1)、8255A在本设计中的作用

在本设计中8255芯片要紧用于操纵开关的输入和LED指示灯的显示,通过8255A芯片的A口和B口别离连接操纵开关和LED指示灯,别离做输入输出操作。

2)、8255A的功能分析

8255A是Intel公司生产的通用可编程并行输入/输出接口芯片,通用性强,利用灵活,可直接与CPU总线相连,应用超级普遍。

8255A采纳40脚双列直插封装,单一+5V电源,全数输入/输出与TTL电平兼容。

用8255A连接外部设备时,通常不需要再附加其他电路,给利用带来专门大方便。

它有三个输入/输出端口:

端口A、端口B、端口C。

每一个端口都可通过编程设定为输入端口或输出端口,但有各自不同的方式和特点。

端口C可作为一个独立的端口利用,但一般是配合端口A和端口B的工作,为这两个端口的输入/输出提供操纵联络信号。

1、内部结构

8255A的内部结构如下图。

它包括四个部份:

数据总线缓冲器、读写操纵逻辑、A组操纵器(包括端口A和端口C的上半部)和B组操纵器(包括端口B和端口C的下半部)。

(1)端口A、端口B和端口C

8255A芯片内部有三个8位端口,别离为A口、B口和C口。

这三个端口可与外部设备相连接,可用来与外设进行数据信息、操纵信息和状态信息的互换。

●端口A包括一个8位数据输出锁存器/缓冲器和一个8位数据输入锁存器。

因此用端口A作为输入端口或输出端口时,数据均被锁存。

●端口B包括一个8位数据输出锁存器/缓冲器和一个8位数据输入锁存器。

因此用端口B作为输入端口或输出端口时,数据均被锁存。

●端口C包括一个8位数据输入缓冲器和一个8位的数据输出锁存器/缓冲器。

因此端口C作为输入端口时不能对数据进行锁存,作为输出端口时能对数据进行锁存。

端口C能够分成两个4位端口,别离能够概念为输入端口或输出端口,还可概念为操纵、状态端口,配合端口A和端口B工作。

(2)A组和B组

端口A和端口C的高4位(PC7~PC4)组成A组,由A组操纵部件来对它进行操纵;端口B和端口C的低4位(PC3~PC0)组成B组,由B组操纵部件对它进行操纵。

这两个操纵部件各有一个操纵单元,接收来自数据总线送来的操纵字,并依照操纵字确信各端口的工作状态和工作方式。

(3)数据总线缓冲器

数据总线缓冲器是一个双向三态的8位缓冲器,它与CPU系统数据总线相连,是8255A与CPU之间传输数据的必经之路。

输入数据、输出数据、操纵命令字都是通过数据总线缓冲器进行传送的。

(4)读/写操纵逻辑

读/写操纵逻辑接收来自CPU地址总线的信号和操纵信号,并发出命令到A组和B组,把CPU发出的操纵命令字或输出的数据通过数据总线缓冲器送到相应的端口,或把外设的状态或输入的数据从相应的端口通过数据总线缓冲器送到CPU。

8255A接口芯片的地址译码电路设计需考虑的问题是:

关于8086系统,由于采纳16位数据总线,CPU在进行数据传送时,老是将低8位数据送往偶地址端口,而将高8位数据送往奇地址端口;反过来,从偶地址端口取得数据老是通太低8位数据线传送到CPU,从奇地址端口取得数据老是通太高8位数据线传送到CPU。

在微机80386以上的32位外部数据总线的系统中,那么应将8255A的A1端与地址总线的A3相连,将8255A的A0端与地址总线A2相连,并使CPU访问8255A时地址总线的A一、A0两位老是为00。

二、8255A芯片引脚

8255A芯片引脚如下图,8255A芯片有40根引脚,可分为如下三类。

(1)电源与地线2根:

Vcc(26脚)、GND(7脚)。

(2)与外设相连的共24根,它们如下所示。

PA7~PA0:

端口A数据信号(8根)。

PB7~PB0:

端口B数据信号(8根)。

PC7~PC0:

端口C数据信号(8根)。

(3)与CPU相连的共14根。

●RESET(35脚):

复位信号,高电平有效。

当RESET信号有效时,内部所有寄放器都被清零。

同时,3个数据端口被自动设置为输入端口。

●D7~D0:

三态双向数据线,在8086系统中,采纳16位数据总线,8255A的D7~D0一般是接在16位数据总线的低8位上。

●cs(6脚):

片选信号,低电平有效。

该信号来自译码器的输出,只有当cs有效时,读信号RD和写信WR号才对8255A有效。

●RD(5脚):

读信号,低电平有效。

它操纵从8255A读出数据或状态信息。

●WR(36脚):

写信号,低电平有效。

它操纵把数据或操纵命令字写入8255A。

●A一、A0(八、9脚):

端口选择信号。

8255A内部共有4个端口(即寄放器):

3个数据端口(端口A、端口B、端口C)和1个操纵端口,当片选信号CS有效时,规定A一、A0为00、0一、10、11时,别离选中端口A、端口B、端口C和操纵端口。

CS、RD、WR、A一、A0这五个信号的组合决定了对3个数据端口和1个操纵端口的读写操作,见下表。

8255A的操作功能表

A1A0

操作

数据传送方式

00100

读A口

A口数据→数据总线

00101

读B口

B口数据→数据总线

00110

读C口

C口数据→数据总线

01000

写A口

数据总线数据→A口

01001

写B口

数据总线数据→B口

01010

写C口

数据总线数据→C口

01011

写控制口

数据总线数据→控制口

表1-18255A的操作功能表

3)、8255A的技术参数

①与外设相连的

PA7~PA0:

A口数据信号线。

PB7~PB0:

B口数据信号线。

PC7~PC0:

C口数据信号线。

②与CPU相连的

RESET:

复位信号。

当此信号来时,所有寄放器都被清除。

同时三个数据端口被自动置为输入端口。

D7~D0:

它们是8255A的数据线和系统总线相连。

CS:

片选信号。

在系统中,一样依照全数接口芯片来分派,假设低位地址(比如A5、A4、A3)组成各类芯片选择码,当这几位地址组成某一个低电平,8255A被选中。

只有当其有效时,读信号写才对8255A进行读写。

RD:

读信号。

当此信号有效时,CPU可从8255A中读取数据。

WR:

写信号。

当此信号有效时,CPU可向8255A中写入数据。

A1、A0:

端口选择信号。

8255A内部有3个数据端口和1个操纵端口,共4个端口。

规定:

A1、A0为00时,选中A端口;

A1、A0为01时,选中B端口;

A1、A0为10时,选中C端口;

A1、A0为11时,选中操纵口。

③参数说明:

输入最低电压:

min=,max=V

输入最高电压:

V

输出最低电压:

V

输出最高电压:

V

8255A的方式操纵字

D7D6D5D4D3D2D1D0

1

0

0

0

0

0

1

0

1:

工作方式A口方式0输出B口方式0输出

C口高4位输入C口低4位输入

图2-28255A的方式操纵字表

通道的功能为:

两个8位通道:

通道A和B。

两个四位通道:

通道C高4位和低四位,任何一个通道能够作输入/输出,输入是不锁存的,输出是锁存的,在方式0时各个通道的输入/输出可有16种不同的组合。

D7D6D5D4D3D2D1D0

0

X

X

X

写入位编码

写入内容

写入位编码0写入0

D0-D7000-1111写入1

图2-38255A的置位/操纵字表

3、硬件总逻辑图及其说明

A口接LED指示灯,B口接逻辑开关(K0~K7)。

三、操纵程序设计

一、操纵程序设计思路说明

本程序为了实现跑马灯操纵器的各类不同的闪烁形式,选择用可编程输入/输出接口8255A芯片,选择A口作为输出口,接LED指示灯,B口作为输入口,接8个逻辑开关,同时设定8255的方式操纵字为82h,即B,即设定A口输入,B口输出,且都为方式0。

开关编码设定:

先设定了5种开关形式,这五种开关选择的是对应的子程序,

选择子程序采纳的是低位清零,即用前四个开关来选择,对应编码别离为(10h、20h、30h、40h、50h),而每组子程序中都有两个闪烁形式,再采纳高位清零,选择第五和第六个开关来选择闪烁形式,对应编码别离为04h和08h,最后两位开关为操纵速度的开关,及通过不同的开关形式选择不同的延时程序来操纵闪烁速度(01h、02h、03h)。

2、

程序流程图

 

3、操纵程序

.MODELTINY

PCIBAR3EQU1CH

;8位I/O空间基地址(它确实是实验仪的基地址,也为DMA&32BITRAM板卡上的8237提供基地址)

Vendor_IDEQU10EBH

;厂商ID号

Device_IDEQU8376

;设备ID号

.STACK100

.DATA

IO_Bit8_BaseAddressDW?

flagDB?

msg0DB'BIOS不支持访问PCI$'

msg1DB'找不到StarPCI9052板卡$'

msg2DB'读8位I/O空间基地址时出错$'

COM_ADDDW00F3H;控制口偏移量

PA_ADDDW00F0H;PA口偏移量

PB_ADDDW00F1H;PB口偏移量

PC_ADDDW00F2H;PC口偏移量

LED_dataDBB

DBB

DBB

DB01111110B

DBB

DBB

numDB00h

.CODE

START:

movax,@data

movds,ax

nop

CALLINITPCI

CALLModifyAddress

movdx,COM_ADD

moval,82H

;向操纵口写入方式操纵字

outdx,al

init:

movbh,7fh;bh设为01111111B

movcl,0feh;cl设为B

AA1:

movdx,PB_ADD;b口扫描是不是有开关拨动,哪个开关

inal,dx;dx内容送到al中

andal,0F0h;低四位置0,取高4位

pushax

calldelay

popax

cmpal,00h;灯全亮的话

jzAA0

subal,10h

jzAB

addal,10h

subal,20h

jzAC

addal,20h

subal,30h

jzAD

addal,30h

subal,40h

jzAE

addal,40h

subal,50h

jzAF

jmpAA1

AA0:

movdx,PA_ADD;读A口

moval,0ffh;初始化灯全灭

outdx,al

movnum,00h;用来计数

jmpinit

AB:

callyici

AC:

callgeyi

AD:

callgeer

AE:

callxxf

AF:

callzy

yiciprocnear

movdx,PB_ADD;b口扫描是不是有开关拨动,哪个开关

inal,dx;dx内容送到al中

andal,0Ch

cmpal,04h

jzAA2

cmpal,08h

jzAA3

AA2:

movdx,PA_ADD;依次左移

Moval,cl;cl=B

outdx,al

rolcl,1;循环左移一名

calldelay

jmpAA1

AA3:

movdx,PA_ADD;依次右移

moval,bh;bh=01111111B

outdx,al

calldelay

rorbh,1;循环右移一名

jmpAA1

ret

yiciendp

geyiprocnear

movdx,PB_ADD;b口扫描是不是有开关拨动,哪个开关

inal,dx;dx送al

andal,0Ch

cmpal,04h

jzAA4

cmpal,08h

jzAA5

AA4:

movdx,PA_ADD;隔一左移

moval,cl

outdx,al

rolcl,2;循环左移两位

calldelay

jmpAA1

AA5:

movdx,PA_ADD;隔一右移

moval,cl

outdx,al

rorcl,2

calldelay

jmpAA1

ret

geyiendp

geerprocnear

movdx,PB_ADD;b口扫描是不是有开关拨动,哪个开关

inal,dx;dx送al

andal,0Ch

cmpal,04h

jzAA6

cmpal,08h

jzAA7

AA6:

movdx,PA_ADD;隔二左移

moval,cl

outdx,al

rolcl,3

calldelay

jmpAA1

AA7:

movdx,PA_ADD;隔2右移

moval,bh

outdx,al

rorbh,3

calldelay

jmpAA1

ret

geerendp

xxfprocnear

movdx,PB_ADD;b口扫描是不是有开关拨动,哪个开关

inal,dx;dx送al

andal,0Ch

cmpal,04h

jzAA8

cmpal,08h

jzAA9

AA8:

;从中间向两边再返回闪烁

movdx,PA_ADD

leabx,LED_data;把LED_data有效地址送bx

moval,num;al用来计数num

xlat;字节转换指令

outdx,al

incnum;num+1

incbx;bx+1

cmpnum,06h;num=6

jziii;跳到iii,为了执行下一次循环

calldelay

jmpAA1

iii:

movnum,00h;num重置为0

jmpAA1

AA9:

movdx,PA_ADD;相向移动闪烁并循环

pushcx

andcl,bh;cl,bh相与后置第一个灯和第七个灯亮

moval,cl

outdx,al

popcx

rorbh,1;bh循环右移1位

rolcl,1;cl循环左移1位,实现相向

calldelay

jmpAA1

xxfendp

zyprocnear

movdx,PB_ADD;b口扫描是不是有开关拨动,哪个开关

inal,dx;dx送al

andal,0Ch

cmpal,04h

jzAA10

cmpal,08h

jzAA11

AA10:

;依次点亮再反向依次点亮

cmpflag,01h;检测flag是不是为01

jzlll;是那么跳到lll

movdx,PA_ADD

moval,bh

outdx,al

cmpbh,00h;若是全亮

jzlll;那么跳至lll执行反向依次点亮

shrbh,1;bh逻辑右移一名

calldelay

jmpAA1

lll:

movflag,01h

movdx,PA_ADD;读A口

moval,cl

outdx,al

cmpcl,00h

jzbbb

shlcl,1;逻辑左移一名

calldelay

jmpAA1

AA11:

;从左至右依次点亮,再反向熄灭

cmpflag,01h

jzccc

movdx,PA_ADD;读A口

moval,bh;bh内容送al

outdx,al;显示al

cmpbh,00h;若是灯全亮

jzccc;那么跳至ccc执行反向熄灭

shrbh,1;bh逻辑右移1位,即下一个灯亮

calldelay

jmpAA1

ccc:

calldelay

movflag,01h;flag置为01

movdx,PA_ADD

orbh,01h;bh内容与01h相或,即置最后一个灯灭

moval,bh;bh内容送al

outdx,al

cmpbh,0ffh;判定灯是不是全灭

jzbbb;是那么跳至bbb为执行下一次循环

salbh,1;算数左移一名实现一个灯灭

jmpAA1

bbb:

movflag,00h;flag重置为00h

jmpinit

zyendp

delayprocnear;延时子程序

pushax

pushdx

movdx,PB_ADD;b口扫描是不是有开关拨动,哪个开关

inal,dx;dx送al

andal,03h;al内容和0fH相与,即取低四位

cmpal,01h

jzaaaaa

cmpal,02h

jzbbbbb

cmpal,03h

jzzzzzz

movdx,50

movah,0ffh

int21h

JMPfff

aaaaa:

movdx,100

movah,0ffh

int21h

JMPfff

bbbbb:

movdx,200

movah,0ffh

int21h

JMPfff

zzzzz:

movdx,400

movah,0ffh

int21h

JMPfff

fff:

popax

popdx

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2