函数发生器1.docx
- 文档编号:9245231
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:26
- 大小:292.38KB
函数发生器1.docx
《函数发生器1.docx》由会员分享,可在线阅读,更多相关《函数发生器1.docx(26页珍藏版)》请在冰豆网上搜索。
函数发生器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口的数据,通过
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 发生器