函数发生器1Word下载.docx
- 文档编号:22381309
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:26
- 大小:292.38KB
函数发生器1Word下载.docx
《函数发生器1Word下载.docx》由会员分享,可在线阅读,更多相关《函数发生器1Word下载.docx(26页珍藏版)》请在冰豆网上搜索。
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
输出低电平电压(数据总线)VOL
IOL=2.5mA
0.45
输出低电平电压(外围端口)VOL
IOL=1.7mA
输出高电平电压(数据总线)VOH
IOH=-400µ
A
2.4
输出高电平电压(外围端口)VOH
IOH=-200µ
达林顿驱动电流IOAR
REXT=750Ω
VEXT=1.5V
-4.0
-1.0
mA
电源电流ICC
120
输入负载电流IIL
VIN=VCC~0V
±
10
µ
输出浮动电流IOFL
VOUT=VCC~0.45V
(表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
标志=01,则输出“锯齿波”,输完后转至查看是否有按键
R3:
CMPFLAG,02H
JNZR4
CALLJCB_HANSHU
标志=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'
T5:
andal,0fh
MOVAH,AL
ANDAL,03H
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
J1:
JNZJ2
SUBBUFFER2,1
JMPR1
J2:
CMPFLAG,02H
JNZJ3
SUBBUFFER3,1
J3:
SUBBUFFER,1
ADD1:
JNZJJ1
MOVAL,BUFFER1
ADDAL,1
MOVBUFFER1,AL
JJ1:
JNZJJ2
ADDBUFFER2,1
JJ2:
JNZJJ3
ADDBUFFER3,1
JJ3:
ADDBUFFER,1
正弦波子过程
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
DECAL
LOOPS2
MOVCX,32
MOVAL,32
S3:
LOOPS3
MOVCX,32
S4:
DECAL
POPAX
LOOPS4
popcx
loopb1
RET
ZXB_HANSHUENDP
;
三角波
SJB_HANSHUPROCNEAR
PUSHCX
MOVAL,0
MOVCX,5
SJ0:
OUTDX,AL
CALLDELAY5
INCAL
CMPAL,0FFH
JNZSJ0
SJ1:
OUTDX,AL
CMPAL,0
JNZSJ1
LOOPSJ0
POPCX
RET
SJB_HANSHUENDP
锯齿波
JCB_HANSHUPROCNEAR
JJ:
MOVAL,0
J0:
CALLDELAY7
INCAL
JNZJ0
LOOPJJ
JCB_HANSHUENDP
脉冲波
MCB_HANSHUPROCNEAR
pushcx
MOVCX,50
M1:
ADDAL,0FFH
SUBAL,0FFH
LOOPM1
MCB_HANSHUendp
;
--------------------------------------------------------
脉冲波的延时函数
DELAY1PROCNEAR
PUSHCX
MOVCX,BUFFER
D1:
PUSHCX
MOVCX,300
DELAY2:
LOOPDELAY2
POPCX
LOOPD1
DELAY1ENDP
------------------------------------------------------------
其他波的延时函数
DELAY3PROCNEAR
MOVCH,BUFFER1
D2:
MOVCX,20
DELAY4:
LOOPDELAY4
DECCH
JNZd2
DELAY3ENDP
---------------------------------------------------------------
DELAY5PROCNEAR
MOVCH,BUFFER2
ADDCH,1
D3:
MOVCX,2
DELAY6:
LOOPDELAY6
JNZD3
POPCX
DELAY5ENDP
-----------------------------------------------------------
DELAY7PROCNEAR
MOVCH,BUFFER3
D4:
DELAY8:
LOOPDELAY8
JNZD4
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
JNCInitPCI3;
是否存在StarPCI9052板卡
LEADX,msg1
JMPInitPCI1
InitPCI3:
MOVDI,PCIBAR3
MOVAL,09H
INT1AH;
读取该卡PCI9052基地址
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
ADDD_A,CX
ModifyAddressENDP
IF_CHANGEPROCNEAR;
读取控制开关的值,以便进行波形切换
PUSHDX
POPDX
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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 发生器