基于单板机的分频器设计与实现版本2Word格式.docx

上传人:b****8 文档编号:22037293 上传时间:2023-02-02 格式:DOCX 页数:21 大小:126.64KB
下载 相关 举报
基于单板机的分频器设计与实现版本2Word格式.docx_第1页
第1页 / 共21页
基于单板机的分频器设计与实现版本2Word格式.docx_第2页
第2页 / 共21页
基于单板机的分频器设计与实现版本2Word格式.docx_第3页
第3页 / 共21页
基于单板机的分频器设计与实现版本2Word格式.docx_第4页
第4页 / 共21页
基于单板机的分频器设计与实现版本2Word格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

基于单板机的分频器设计与实现版本2Word格式.docx

《基于单板机的分频器设计与实现版本2Word格式.docx》由会员分享,可在线阅读,更多相关《基于单板机的分频器设计与实现版本2Word格式.docx(21页珍藏版)》请在冰豆网上搜索。

基于单板机的分频器设计与实现版本2Word格式.docx

先读低八位,后读高八位。

分频系数的输入,其设计思路为:

首先取一个字,需要对32位进行操作,从低

到高分别取32位的低16位,再从低16位的低8位中选择高4位,32位的低16位的高8位的高4位,32位的高16位的低8位的高4位,32位的高16位的高8位的高4位。

将取到的数通过逻辑移动形成一个16位的开关量,如果需要输出则通过8253A的通道2显示在LED上。

②对8255A进行初始化:

将8255A的工作方式设定为方式0,即PA、PB、PC三个口都能够进行输入输出操作。

8255A的方式选择控制字为92H,即A,B口方式0,输入,C口输出。

分频系数的输入由外部逻辑开关输入。

按照设计流程,我们首先判断能否进行输入(PC7是否等于1),如果等于则进入输入模块,读取输入的4位数据,并判断显示在哪一位上。

当P6和P5位都为1时,显示在LED的第4位;

当P6和P5分别为1、0,显示在LED的第3位;

当P6和P5分别为0、1,显示在LED的第2位;

当P6和P5都为0,显示在LED的第1位。

当四次输入完成后,需要停止输入操作,此时控制开关的P7为0。

二、硬件设计

1、选择芯片8253A

1)芯片8253A在本设计中的作用

8253A在本实验具有分频器的作用,对输入的脉冲进行分频。

2)8253A的功能分析

8253A是一种可编程的定时器/计数器芯片,它可用于计数、分频、定时器等的方面。

其分频工作的功能:

CLK引脚获得初始频率,此时若GATE为高电平,十六位计数初值寄存器中的数据装入计数执行单元CE中,它对CLK脉冲计数,每出现一个CLK脉冲,计数对执行单元CE的值减小。

当减为0时,通过OUT输出指示信号,表明计数执行单元已为0。

这时OUT输入的信号频率是CLK频率的1/N。

3)8253A的技术参数

表18253A的技术参数

数据名称

符号

测试条件

MAX

MIN

单位

输入低电压

VIL

0.8

-0.5

V

输入高电压

VIH

VCC+0.5

2.4

输出低电压

VOL

0.45

输出高电压

VOH

输入负载电流

IIL

±

10

ΗA

输出浮动电流

IOFL

VIN=VCC∽0V

电源电流

VCC

VOUT=VCC∽0.45V

140

MA

技术参数介绍:

输入低电平电压范围是-0.5∽0.8V,输出低电压0.45∽2.4V,输入高电平电压2.4∽VCC+0.5V。

而测试条件:

VIN=VCC∽0V,VOUT=VCC∽0.45V,当输入低电平电压在上述范围内时,8253A才可以接受数据,当输出电压在上述范围内时,8253A输出才有效。

2、选择芯片8255A

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

8255A在本设计中起并行传输接口作用,负责将从逻辑开关得到的数据送到LED显示器上显示出来。

2)8255A的功能分析

8255A是一种通用的可编程并行I/O接口芯片。

在本设计中,8255A设置为方式0,在方式0下,CPU采用无条件读写方式与8255A交换数据,8255A的PC口的低四位用于位选择,与LED的数位选择相连,因本设计中要求的分频系数在2∽1000,所以要用16位开关输入,把开关输入的二进制数转为16进制时,四位十六进制数,用四位LDE数码管,74LS373用于段选择。

在方式0下,8255A的每个口都作为基本的输入/输出口,其中C口设置为输出方式,A和B口设置为输入口。

8255A在方式0时,CPU可以采用无条件读/写方式与8255A交换数据。

3)8255A技术参数

表28255A技术参数

参数名称

VIL

O.8

-0.5V

2.0V

输入低电压(数据端口)

IOL=2.5mA

0.45V

输入低电压(外部端口)

IOL=1.7mA

输入高电压(数据总线)

IOH=-400mA

2.4V

输入高电压(外部端口)

IOH=-200mA

达林顿驱动电流

TDAR

REXT=750,VEXT=1.5V

-0.4mA

1.0mA

ICC

120mA

I=VCC∽0V

10mA

-10mA

VOUT=VCC∽0V

由于8255A芯片的达林顿驱动电流为4.0mA,而LED的驱动电流为25mA,PCI板卡中集成了74LS244芯片,用来将8255A的驱动电流放大,驱动LED工作。

3、LED显示器

1)LED在本设计中的作用:

实现分频系数的显示。

2)LED的功能分析

七段LED显示器通过汇编语言控制,可以控制在哪几位数位上,哪几个发光二极管亮,从而实现数字的显示。

其工作原理是:

如果发光二极管共阳极,则输入为0,则发光;

当为1时,不发光。

反之,如果发光二极管共阴极,则输入1为发光,0时为不发光。

发光二极管是一种外加电压超过额定电压时发生击穿,并因此能产生可发光的器件。

数码显示器通常有多个发光二极管来组成,七段或八段笔画来显示器。

七段代码的各位用作a-g和DD输入。

当段组合发光时,便会显示某一个数码管或字符。

3)LED的技术参数:

表3LED技术参数及LED数码显示真值表

PCW

LF

Vr

Ir

If

p

对应变量

散射颜色

BT235

70

25

5

≥1.5

≤2.5

200

SEL-10

BT144

100

40

≥0.5

565

绿

BT134

585

定义的十六进制

发光二极管

显示的数字

3FH

00111111

06H

00000110

1

5BH

01011011

2

4FH

01001111

3

66H

01100110

4

6DH

01101101

7DH

01111101

6

07H

00000111

7

7FH

01111111

8

6FH

01101111

9

77H

01110111

A

7CH

01111100

B

46H

01000110

C

5EH

01011110

D

7BH

01111011

E

71H

01110001

F

技术参数介绍:

驱动电流为25mA.

4、逻辑开关

1)逻辑电平开关在本设计中的作用

逻辑电平开关在本设计中作为输入器件,通过其输入的二进制数值来表示分频系数。

2)逻辑开关的功能分析

逻辑开关可作为数值的输入器件,也可以表示逻辑值。

拨上时为+5V,拨下时为0V,分别代表“1”和“0”。

3)逻辑开关的技术参数

表4逻辑开关的技术参数

逻辑开关的设置

代表的十六进制数

0000

0H

0001

1H

0010

2H

0011

3H

0100

4H

0101

5H

0110

6H

0111

7H

1000

8H

1001

9H

1010

0AH

1011

0BH

1100

0CH

1101

0DH

1110

0EH

1111

0FH

5、硬件总线逻辑图及其说明

图5逻辑图

说明:

本设计以STARES598PCI单板开发机为基础,图中PCI板卡与8255A及8253A间的数据线和控制线已连接好,接线的部分有:

PA、PB与逻辑开关之间的连线、以及LED显示器、逻辑开关与电源和GND之间的连线。

值得注意的是:

①8255A的片选信号CS与8255A、8253A的片选信号相连,同时地址锁存的地址线A0、A1分别与8255A、8253A的地址线A0、A1相连。

片选信号选择的地址空间范围是04B0~04BF,其中偶地址空间有效。

8255A控制端口地址为04A6,PA口的为04A0,PB口的为04A2,PC口的为04A4。

②接线顺序,每一根线两边的端口要严格对应,因为16位二进制开关表示一个16位的二进制数,16位的二进制数分成连续的4部分,其中每部分对应4位二进制数,对应4位LED显示。

③哪怕只有一根线接错,也会打乱各设备之间的对应关系,从而导致实验结果和数据、现象的不正确。

其结果可能不会显示或显示为乱码等,严重时会损坏设备,而且接线时不能带电操作。

三、控制程序设计

1、程序流程图

图6程序流程图

2、控制程序设计思路说明

本程序主要功能分为初始化、读开关量、写操作。

①初始化主要实现写8253A,8255A方式控制字。

②读开关量主要实现从PA、PB口读入开关量并储存在一个16位的内存空间,需要是从其中将数据取出。

③写操作通过两个循环完成。

第一次循环写低8位,第二次循环写高8位。

在写操作中需要完成的工作有:

分两次写一个8位的数据,先写低4位,再写高4位。

位选码初始化为0FEH,并用循环左移控制不同LED显示器的亮灭,每位显示mS循环显示。

16位二进制数据分两次显示,先显示低8位,再显示高8位,然后进行8253A分频。

当16位二进制数据处理完后,程序跳到读操作再次循环。

3、控制程序

COM_ADDDW00F3H;

控制口偏移量

PA_ADDDW00F0H;

PA口偏移量

PB_ADDDW00F1H;

PB口偏移量

PC_ADDDW00F2H;

PC口偏移量

COM_ADD1DW00E3H;

8253A控制口偏移量

P0_ADDDW00E0H;

通道0

P1_ADDDW00E1H;

通道1

P2_ADDDW00E2H;

通道2

ssengmentdb3fh,06h,5bh,4fh,66h,6dh,7dh,27h,7fh,6fh,77h,7ch,39h,5eh,79h,71h

shudb00h,00h,00h,00h;

4个内存单元用于保存输入结果,要显示的数据值

.code

START:

movax,@data

movds,ax

nop

callinitpci

callmodifyaddress;

将偏移地址转化为实地址

moval,10001001b;

c口输入,a,b口输出,b口段选,a口位选

movdx,COM_ADD

outdx,al

movdx,COM_ADD1;

8253A初始化

movax,036h;

通道0

outdx,ax

movax,0b6h;

通道2控制发光二极管

outdx,ax

loop3:

movdx,PC_ADD;

检查pc口,pc7=1?

inal,dx

andal,80h;

80h=10000000b

cmpal,80h

jexishu;

等于则设置初值,响应输入,产生分频系数

loop4:

movdx,PC_ADD

andal,10h;

00010000b判断pc5是否为1

cmpal,10h

jzwrite;

将数据写入8253A

callxianshi;

调用显示程序

jmploop3

write:

movbx,offsetshu;

数据写入8253A函数

movax,[bx]

andax,000fh;

000fh=00001111b

movbp,ax

andax,0f00h;

0f00h=11110000b

movcl,4

shrax,cl

addbp,ax

movax,[bx+2];

内存单元地址后移一位,低八位数据

000fh=00001111b

movcl,8

shlax,cl

movax,[bx+2];

内存单元地址后移一位

movdx,P0_ADD;

8253A通道0地址

movax,24h

outdx,ax;

写入通道0计数初值低八位

movax,0f4h

outdx,ax;

写入通道0计数初值高八位

movdx,P2_ADD;

8253A通道2地址

movax,bp

outdx,al;

将开关数据作为计数初值写入通道2

moval,ah

outdx,al

xishu:

;

写入初值

movbx,offsetshu

movdx,PC_ADD;

送pc口地址

movah,al

andax,0f60h;

取输入的四位数据,屏蔽后四位数据

cmpal,0h;

判断显示位,al控制位选择,ah控制段选择

jes4;

检测是低8位的低4位

cmpal,20h;

20h=00100000b

jes3;

检测是低8位的高4位

cmpal,40h;

40h=01000000b

jes2;

检测是高8位的低4位

cmpal,60h;

60h=01100000b

jnes5;

检测是高8位的高4位

s1:

incbx

s2:

s3:

s4:

movbyteptr[bx],ah;

保存数据

s5:

moval,0ffh;

关闭led

outdx,al

callxianshi

jmploop4

xianshiproc;

数码管显示子程序

loop1:

movsi,offsetshu

movcx,4

movah,11111110b;

设置位选码,LED显示

loop2:

moval,byteptr[si]

movbx,offsetssengment;

取偏移地址

xlat;

段码:

查数据段表,[al+bx]->

al数据转换

movdx,PB_ADD;

送PB口地址段选

outdx,al

moval,ah

calldelay

movdx,PA_ADD;

送PA口地址位选

关闭显示

addsi,1;

指针下移

rolah,1;

设置下次显示的位选码,此处显示全为0

looploop2;

循环

ret

xianshiendp

delayproc;

延迟子程序,实现延时的功能。

pushcx;

将cx的内容保存入栈

movcx,10h;

设置循环次数

loop5:

nop;

空操作

looploop5;

循环延时

popcx;

出栈

delayendp

InitPCIPROCNEAR;

PCI初始化程序

MOVAH,00H

MOVAL,03H

INT10H;

清屏

MOVAH,0B1H

MOVAL,01H

INT1AH

CMPAH,0

JZInitPCI2

LEADX,msg0

InitPCI1:

MOVAH,09H

INT21H

JMPExit

InitPCI2:

MOVAH,0B1H

MOVAL,02H

MOVCX,Device_ID

MOVDX,Vendor_ID

MOVSI,0

JNCInitPCI3;

是否存在STARES598PCI板卡

LEADX,msg1

JMPInitPCI1

InitPCI3:

MOVDI,PCIBAR3

MOVAL,09H

INT1AH;

若存在,则读取STARES598PCI板卡的基地址

JNCInitPCI4

LEADX,msg2

InitPCI4:

ANDCX,0FFFCH

MOVIO_Bit8_BaseAddress,CX

RET

InitPCIENDP

ModifyAddressPROCNEAR;

修改内存单元地址程序

ADDCOM_ADD,CX

ADDPA_ADD,CX

ADDPB_ADD,CX

ADDPC_ADD,CX

ADDCOM_ADD1,CX

ADDP0_ADD,CX

ADDP1_ADD,CX

ADDP2_ADD,CX

ModifyAddressENDP

Exit:

;

退出程序

MOVAH,4CH

INT21H

ENDSTART

四、上机调试过程

1、硬件调试

(1)按总逻辑图接线,接线时必须仔细,否则会导致实验结果不正确。

(2)编译、连接、运行控制程序,观察显示结果,并记录纠正。

2、软件调试

(1)写出设计思路,并画出程序流程图。

(2)程序结构上发生了改变,由于源程序结构上面不符合下位机的运行规范,所以导致程序编译无错误却无法链接成功,把定义的各个常量直接放在代码段中此问题就得到了解决,其它几个方面在联机调试中给出。

3、联机调试

在联机调试中,程序已经能够链接成功可以的运行了,但是并不能达到设计系统所要求的目的,在调试过程中发现的问题有:

读不出字型,显示灯不亮等情况。

(1)原因分析:

LED显示器显示不清晰的原因是因为在显示过程中位选码一直送出,在显示是产生干扰所至。

闪烁问题是因为在显示两位16进制数的字型码是时间间隔过长。

人眼睛的分辨率在50HZ左右,所以每位显示时间应缩短,具体把延时循环常数改为10h.分频系数过大,需要很长时间才能显示结果,所以以为灯不亮。

(2)调试结果及问题:

调试结束后通过对逻辑开关置数,可以在LED显示器上显示相应二进制数的十六进制数的字型码。

题目要求用到小键盘输入分频系数,但由于实验仪器的更新做起来比较复杂,并且征求老师的意见,最终采用小键盘输入。

用二进制开关,程序中等待时间过长,所以要改变计数初值以及循环次数。

五、设计结果分析及问题讨论

1、课程设计结果及分析

本次实验结果基本上符合了课程设计的要求,实现了由二进制开关输入数据,并转换为十六进制数的字型码输出,循环显示编码结果。

二进制开关状态及LED输出结果可以参见逻辑开关真值表。

对于分频的结果可以直接从外接的示波器看出波形,调节从逻辑开关输入数据的大小,可以改变示波器的波形;

也可以通过发光管显示及闪烁的快慢,比较不同输入分频系数的效果。

2、问题讨论

虽然设计时思路及方法是正确的,但还是遇到了一些具体的问题。

(1)硬件部分:

①输入输出方面:

实验中分频系数输出芯片可以有多种选择,最初选择用两片8255A来实现该功能

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

当前位置:首页 > 小学教育 > 英语

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

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