函数发生器1.docx

上传人:b****7 文档编号:9245231 上传时间:2023-02-03 格式:DOCX 页数:26 大小:292.38KB
下载 相关 举报
函数发生器1.docx_第1页
第1页 / 共26页
函数发生器1.docx_第2页
第2页 / 共26页
函数发生器1.docx_第3页
第3页 / 共26页
函数发生器1.docx_第4页
第4页 / 共26页
函数发生器1.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

函数发生器1.docx

《函数发生器1.docx》由会员分享,可在线阅读,更多相关《函数发生器1.docx(26页珍藏版)》请在冰豆网上搜索。

函数发生器1.docx

函数发生器1

二、函数发生器1的设计

一、题义分析及解决方案

1.1题义需求分析:

需求分析:

字号统一采用小四

根据题意函数发生器具有将现实世界的一些数字模型转化成计算机能表示和处理的波形的一种仪器,它能控制各种波形的顺序播放和有效调节波形频率和幅度的作用。

因为波形要输出到示波器和通过开关的控制输入波形的播放,故需要输入/输出接口部件,计算机处理的是数字信号而示波器处理的是模拟信号,所以在输入/输出接口部件和示波器之间加一个数/模转换器,由于计算机处理和数模转换后的信号很弱,故还要看数/模转换器是否自带放大器,而波形的产生和相关波形的切换和控制调节频率通过相应的程序来实现。

当然还要对控制这一系列有序执行提出问题:

各级标题按照模板要求进行修改

一.题义分析及解决方案

1.题义需求分析

2.解决问题方法及思路

1)硬件部分

2)软件部分

1)函数选择开关量(输入设备接口)

2)怎样描述这四个函数波形

3)波形输入到输出的转换(即数/模转换)

4)波形的输出,怎样观察输出的波形,四种波形的切换

1.2解决问题方法及思路

硬件部分:

根据题意要求及分析,本程序中用到的硬件器件为:

数/模转换器选用NationalSemiconductor的DAC0832;

选择8255A作为CPU与DAC0832之间的并行接口芯片,其中A口作为开关量的输入端。

软件部分:

根据题义要求及分析,本程序中硬件实现部分为:

程序采用循环依次显示四组波段的方式。

首先对8255A进行初始化,方式0,A口输入,显示过程中判断开关量是否有变化。

若没有变化,则继续显示;若有改变,就重新判断要输出的波形。

相应地,在程序中编制显示正弦波段、三角波段、锯齿波段和脉冲波段,由上述的判断结果,根据条件进行跳转。

软件部分问题:

波形幅度和频率问题。

二、硬件设计

2.1选择芯片:

8255A

8255A在本设计中的作用:

它是把打入的数据锁存,8255A有3个8位端口PA,PB,PC。

本设计只用到PA口中的一个8位数据输入锁存器,把通过开关装置打入的数据锁存,再由8255A通过数据总线传送到8086,由8086送到DAC0832的DI7~DI0对其进行数模转换,最后在示波器上显示波形。

8255A的功能分析:

它是一种通用的可编程并行I/O接口芯片,又称“可编程外设接口芯片”。

8255A由4部分组成:

数据总线缓冲器;三个8位端口PA、PB、PC;A组和B组的控制电路;读写控制逻辑。

1)数据总线缓冲器:

一个三态8位的双向缓冲器,用作8255A同系统数据总线相连是的缓冲部件。

CPU通过执行输入/输出指令来实现对缓冲器发送或接受数据。

8255A的控制字或状态字也是通过该缓冲器传送的。

2)端口A中有一个8位数据输入锁存器和一个8位输出锁存/缓冲器。

3)A、B组控制电路:

A组控制部件用来控制PA口和PC口的高4位,B组控制部件用来控制PB口和PC口的低四位。

4)读写控制逻辑:

用来管理数据信息,控制字和状态字的传送。

8255A的工作方式有3种:

方式0、方式1、方式2。

本设计只用到方式0,即基本输入/输出。

在方式0下,每个口都作为基本的输入/输出口。

C口的高四位和低四位以及A口、B口都可以独立地设计输入口或输出口。

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

本设计只用到了PA口作为数据输入。

8255A的技术参数:

与TTL完全兼容,采用40条引脚的双直插式封装,减少了系统器件数,提高了直流驱动能力。

 

符号

测试条件

规范值

单位

最大

最小

输入低电平电压VIL

0.8

-0.5

V

输入高电平电压VIH

VCC

2.0

V

输出低电平电压(数据总线)VOL

IOL=2.5mA

0.45

V

输出低电平电压(外围端口)VOL

IOL=1.7mA

0.45

V

输出高电平电压(数据总线)VOH

IOH=-400µA

2.4

V

输出高电平电压(外围端口)VOH

IOH=-200µA

2.4

V

达林顿驱动电流IOAR

REXT=750Ω

VEXT=1.5V

-4.0

-1.0

mA

电源电流ICC

120

mA

输入负载电流IIL

VIN=VCC~0V

±10

µA

输出浮动电流IOFL

VOUT=VCC~0.45V

±10

µA

(表2-1)

2.2选择芯片:

数/模转换器DAC0832

DAC0832在本设计中的作用:

DAC0832是NationalSemiconductor生产的一款D/A(数字/模拟)转换器,其采用CMOS工艺和R-2RT形电阻解码网络,转换结果为一对差动电流I01和I02输出。

在本设计中主要用来将开关打入的数字信号转换为相应的模拟信号。

DAC0832的功能分析:

DAC0832是8位D/A转换器,转换周期为1μs。

它由8位输入锁存器、8位DAC寄存器、8位D/A转换电路组成。

当ILE为高电平,CS为低电平,WR1为负脉冲时,在LE1产生正脉冲;LE1为高电平时,输入寄存器的状态随数据输入线状态变化,LE1的负跳变将输入数据线上的信息存入输入寄存器。

当Xfer为低电平,WR2输入负脉冲时,则在LE2产生正脉冲;LE2为高电平时,DAC寄存器的输入与输出寄存器的状态一致,LE2的负跳变,输入寄存器内容存入DAC寄存器。

DAC0832的输出是电流型的。

在微机系统中,通常需要电压信号,电流信号和电压信号之间的转换可由运算放大器实现。

DAC0832的技术参数:

DAC0832芯片采用CMOS工艺,四象限乘法型DAC,与微机兼容,数据输入能与双缓冲、单缓冲或直接通过三种方式工作。

是一个8位D/A转换器,输入电平与TTL、CMOS兼容,单电源+5~+15V工作,基准电压的范围为±10V,电流建立时间为1µs,低功耗200mw,20引脚,双列直接式封装。

 

附图下标格式要统一,参看模板

DAC0832芯片的内部原理图如下:

(图2-2)

 

2.3硬件总逻辑图及其说明

硬件总逻辑图:

(图2-3)

逻辑图说明

I.DAC0832的IOUT与示波器红头相连;

II.DAC0832的GND与示波器的黑头相连,即接地;

III.DAC0832的CS片选与CS2相连;

IV.数字信号来源于开关量,输出于LF351,显示于示波器;

V.8255的CS片选与CS1相连;

VI.开关与8255A的PA口相连。

三、控制程序设计3.1控制程序设计思路说明

A.程序分为五个段落,分别是主程序、正弦波、三角波、锯齿波、脉冲波。

B.在每个“段落”中检查开关量是否有改变,有则切换到相应波形,无则循环显示本波段。

C.在开关中设置开关量:

00h:

锯齿波01h:

三角波02h:

正弦波03h:

脉冲波。

D.四个波段循环切换显示。

3.2程序流程图

主控流程图

锯齿波流程图脉冲波流程图

 

 

图(3-7)锯齿波波形

 

 

图(3-8)三角波波形

3.3控制程序

.MODELTINY

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

Vendor_IDEQU10EBH;厂商ID号

Device_IDEQU8376;设备ID号

.STACK100

.DATA

IO_Bit8_BaseAddressDW?

msg0DB'BIOS不支持访问PCI$'

msg1DB'找不到StarPCI9052板卡$'

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

MSG3DB'按键有误,请检查!

'

COM_ADDDW00F3H;控制口偏移量

PA_ADDDW00F0H;PA口偏移量

PB_ADDDW00F1H;PB口偏移量

PC_ADDDW00F2H;PC口偏移量

D_ADW00E0H;D_A转换的数据端口的偏移量

zxb_datadb128,134,141,147,153,159,165,171

DB177,183,188,194,199,204,209,214

DB218,223,227,231,234,238,241,244

DB246,248,250,252,253,255,255,255

DB128,121,115,109,103,96,90,84

DB79,73,67,62,57,51,47,42

DB37,33,29,25,21,18,15,12

DB10,7,5,4,2,1,0,0

BUFFERDW10

BUFFER1DB10

BUFFER2DB10

BUFFER3DB10

flagdb?

.CODE

START:

MOVAX,@DATA

MOVDS,AX

NOP

CALLInitPCI

CALLModifyAddress;根据PCI提供的基地址,将偏移地址转化为实地址

MOVDX,COM_ADD

MOVAL,90H;PA输入口,0方式

OUTDX,AL

MOVDX,PA_ADD

INAL,DX

MOVflag,AL

R1:

CMPFLAG,00h

JNZR2

CALLZXB_HANSHU

JMPR5;标志=00,则输出“正弦波”,输完后转至查看是否有按键

R2:

CMPFLAG,01H

JNZR3

CALLSJB_HANSHU

JMPR5;标志=01,则输出“锯齿波”,输完后转至查看是否有按键

R3:

CMPFLAG,02H

JNZR4

CALLJCB_HANSHU

JMPR5;标志=02,则输出“三角波”,输完后转至查看是否有按键

R4:

CMPFLAG,03H

JNZR5

CALLMCB_HANSHU;标志=03,则输出“脉冲波”,输完后转至查看是否有按键

;以下代码为查看是否有按键输入

R5:

CALLIF_CHANGE

T1:

CMPAL,00H

JNZT2

MOVFLAG,AL

JMPR1;若按键='00',则改标志flag=00',并显示波形

T2:

CMPAL,01H

JNZT3

MOVFLAG,AL

JMPR1;若按键='01',则改标志flag=01',并显示波形

T3:

CMPAL,02H

JNZT4

MOVFLAG,AL;若按键='02,则改标志flag=02',并显示波形

JMPR1

T4:

CMPAL,03H

JNZT5;若按键='03',则改标志flag=03',并显示波形

MOVFLAG,AL

JMPR1

T5:

andal,0fh

MOVAH,AL

ANDAL,03H

MOVFLAG,AL

MOVAL,AH

ANDAL,08H

CMPAL,0

JNZSAT

JMPR1

SAT:

MOVAL,AH

ANDAL,04H

JNZSUB1

JMPADD1

SUB1:

CMPFLAG,00H

JNZJ1

moval,buffer1

subal,1

movbuffer1,al

JMPR1

J1:

CMPFLAG,01H

JNZJ2

SUBBUFFER2,1

JMPR1

J2:

CMPFLAG,02H

JNZJ3

SUBBUFFER3,1

JMPR1

J3:

SUBBUFFER,1

JMPR1

ADD1:

CMPFLAG,00H

JNZJJ1

MOVAL,BUFFER1

ADDAL,1

MOVBUFFER1,AL

JMPR1

JJ1:

CMPFLAG,01H

JNZJJ2

ADDBUFFER2,1

JMPR1

JJ2:

CMPFLAG,02H

JNZJJ3

ADDBUFFER3,1

JMPR1

JJ3:

ADDBUFFER,1

JMPR1

;正弦波子过程

ZXB_HANSHUPROCNEAR

PUSHAX

LEABX,ZXB_DATA

MOVDX,D_A

movcx,5

b1:

pushcx

MOVcx,32

MOVAL,-1

S1:

INCAL

PUSHAX

XLAT

OUTDX,AL

CALLDELAY3

POPAX

LOOPS1

MOVCX,32

S2:

PUSHAX

XLAT

OUTDX,AL

CALLDELAY3

POPAX

DECAL

LOOPS2

MOVCX,32

MOVAL,32

S3:

INCAL

PUSHAX

XLAT

OUTDX,AL

CALLDELAY3

POPAX

LOOPS3

MOVCX,32

S4:

DECAL

PUSHAX

XLAT

OUTDX,AL

CALLDELAY3

POPAX

LOOPS4

popcx

loopb1

POPAX

RET

ZXB_HANSHUENDP

;三角波

SJB_HANSHUPROCNEAR

PUSHAX

PUSHCX

MOVDX,D_A

MOVAL,0

MOVCX,5

SJ0:

OUTDX,AL

CALLDELAY5

INCAL

CMPAL,0FFH

JNZSJ0

DECAL

SJ1:

OUTDX,AL

CALLDELAY5

DECAL

CMPAL,0

JNZSJ1

LOOPSJ0

POPCX

POPAX

RET

SJB_HANSHUENDP

;锯齿波

JCB_HANSHUPROCNEAR

PUSHAX

PUSHCX

MOVDX,D_A

MOVCX,5

JJ:

MOVAL,0

J0:

OUTDX,AL

CALLDELAY7

INCAL

CMPAL,0FFH

JNZJ0

LOOPJJ

POPCX

POPAX

RET

JCB_HANSHUENDP

;脉冲波

MCB_HANSHUPROCNEAR

PUSHAX

pushcx

MOVDX,D_A

MOVAL,0

MOVCX,50

M1:

ADDAL,0FFH

OUTDX,AL

CALLDELAY3

SUBAL,0FFH

OUTDX,AL

CALLDELAY3

LOOPM1

popcx

POPAX

RET

MCB_HANSHUendp

;--------------------------------------------------------

;脉冲波的延时函数

DELAY1PROCNEAR

PUSHCX

MOVCX,BUFFER

D1:

PUSHCX

MOVCX,300

DELAY2:

LOOPDELAY2

POPCX

LOOPD1

POPCX

RET

DELAY1ENDP

;------------------------------------------------------------

;其他波的延时函数

DELAY3PROCNEAR

MOVCH,BUFFER1

D2:

PUSHCX

MOVCX,20

DELAY4:

LOOPDELAY4

POPCX

DECCH

JNZd2

RET

DELAY3ENDP

;---------------------------------------------------------------

DELAY5PROCNEAR

PUSHCX

MOVCH,BUFFER2

ADDCH,1

D3:

PUSHCX

MOVCX,2

DELAY6:

LOOPDELAY6

POPCX

DECCH

JNZD3

POPCX

RET

DELAY5ENDP

;-----------------------------------------------------------

DELAY7PROCNEAR

PUSHCX

MOVCH,BUFFER3

ADDCH,1

D4:

PUSHCX

MOVCX,2

DELAY8:

LOOPDELAY8

POPCX

DECCH

JNZD4

POPCX

RET

DELAY7ENDP

;------------------------------------------------------------

InitPCIPROCNEAR

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

INT1AH

JNCInitPCI3;是否存在StarPCI9052板卡

LEADX,msg1

JMPInitPCI1

InitPCI3:

MOVDI,PCIBAR3

MOVAH,0B1H

MOVAL,09H

INT1AH;读取该卡PCI9052基地址

JNCInitPCI4

LEADX,msg2

JMPInitPCI1

InitPCI4:

ANDCX,0FFFCH

MOVIO_Bit8_BaseAddress,CX

RET

InitPCIENDP

ModifyAddressPROCNEAR

ADDCOM_ADD,CX

ADDPA_ADD,CX

ADDPB_ADD,CX

ADDPC_ADD,CX

ADDD_A,CX

RET

ModifyAddressENDP

IF_CHANGEPROCNEAR;读取控制开关的值,以便进行波形切换

PUSHDX

MOVDX,PA_ADD

INAL,DX

POPDX

RET

IF_CHANGEENDP

Exit:

MOVAH,4CH

INT21H

ENDSTART

四、上机调试过程

4.1硬件调试

本设计用到的芯片有8255、0832还有G6区的八个开关,以及STARES598PCI,他们之间的连线情况如下:

8255的A0—A1----------CPU的A1—A2

8255的片选CS-------------片选芯片上的CS1

DAC0832的CS-------------片选芯片上的CS2

8255的PA0--PA7----------开关1—8;

DAC0832的IOUT---------示波器的红头相连

DAC0832的GND----------示波器的黑头相连

在基本确定了程序的框架和初步写出了源程序代码的情况下,按如上方式连线进行调试,刚开始由于程序本身的一些小问题导致无法对硬件的有效测试,后来通过逐步分解测试的方法进行测试,首先波动八个开关量的最低两位例如设置为00,在程序单步执行到语句INAL,DX后通过观察“星研电子——工作窗口”中AX的低八位数据来验证所读数据是否正确,结果发现第一次的00H是正确的,因为程序是循环不断读取数据的结果后来开关量设为01读取的AL数据却仍然为00,不断的测试结果都是如此。

后来在老师的建议下换了PCI卡后测试才正确,这说明有时并不是程序本身的问题,而是硬件出现了问题,因此以后碰到类似的情况不要死钻牛角尖老或者不够自信总认为是自己的错误。

4.2软件调试

软件测试分以下几步:

四种波形的正确输出调试

波形的正确输出是设计的最基本要求,因此首先要保证波形输出的正确性,而对此的验证主要是通过依次调用相应的波形子函数来进行的,这一点通过四次调用不同的波形函数和通过对示波器波形的观察已经得到了确认。

波形切换的测试

因为波形切换的依据是开关量的设置,开关量最低两位负责波形的切换,00输出正弦波,01输出三角波,10输出锯齿波,11输出脉冲波,测试的过程也是通过设置不同的开关量进行的。

必须注意的一点是第四位必须设为0,这在前面已经说明过。

调试时很顺利,基本上实现了波形的任意切换。

波形频率的测试

这部分是本次设计最难的一部分,它经过了好几次的修正,刚开始是通过第三位控制加减频率,而频率的改变量的多少则是通过最后5位来确定的,变化范围只有0-31等32个层次,功能基本实现但不够灵活,所以后来放弃了这一思路,而改为通过第四位是否为一来调节,这样每按一次开关就相应的增一或减一,而且范围不受限制,真正实现了频率的改变。

4.3联机调试

调试分三步:

A、每次调试,主程序都只调用一个波形函数,目的是确保每个波形能正确输出。

B、在每个波形能正确输出的基础上,读取开关量的置进行波形切换,在读取8255A口的数据,通过

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

当前位置:首页 > 工作范文 > 行政公文

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

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