函数发生器一、题义分析及解决方案1.题义需求分析设计内容:以STARES598PCI单板机,开发能够输出多种波形且频率可变的函数发生器。设计要求:(1)能够输出锯齿波,三角波,正弦波,脉冲波,(2)能根据键盘命令进行波形之间的切换,(3)能对输出的波形频率进行调节。由题意知,首先要弄清楚什么是锯齿波,三角波,正弦波,脉冲波,它们的波形应该是怎样的。根据所学知识和查阅资料确定四种波的波形图如下:在弄清楚四种波的波形后应理解什么叫波形切换和频率的改变,波形切换即由一种波形通过键盘命令转换成另一种波形,如当前输出波形是正弦波而当你拨动控制开关为00时则切换成了三角波的输出;频率的改变有增大频率和减少频率,直观的改变就是当你增大频率则波形的周期变小,整个波形比原波形显得更密些,相反减少频率波形相对显得更稀疏些。2.解决问题的方法及思路⑴硬件部分:正弦波、三角波、锯齿波和脉冲波的发生需要0832芯片的D/A转换功能,8086的CS2连接0832的CS引脚,确定0832的端口地址后只需将需要转换的数字输入该数据端口,0832自动将其转化为模拟量(电流量)输出。波形的观察可以采用示波器,将0832的OUT引脚连接到示波器。波形切换和频率的改变采用控制量进行控制,控制量的获取是STARES598PCIG6区的8个开关量。该8位开关量连接8255的A口,并将A口设置为0方式下的输入模式,因此实现过程中只需读出A口的数据便可以实现相应的功能,具体的控制情况是最低两位负责波形的切换,第三位为是否进行频率改变的开关量,0表示减少频率(增大周期),1表示增大频率(减少周期),第四位为1则频率的参数根据第三位相应的加1或减1,为0则不进行改变,因此在波形切换时第四位一定要保证为0,否则因为第三位无论是0还是1,如果第四位为1都会对波形的频率产生变化,而这不是设计的本意。⑵软件部分:因为程序要能够输出锯齿波,三角波,正弦波和脉冲波,因此在程序设计中需要编写此四个波形的子程序,另外,在程序中要能够读取开关量,以便来进行波形切换和改变波形频率。具体设计如下:利用8255芯片的A端口来读取控制开关的输入情况,即端口A的最低两位负责波形的切换,00输出正弦波,01输出三角波,10输出锯齿波,11输出脉冲波,第三位为频率改变的开关量,0表示减少频率(增大周期),1表示增大频率(较少周期),第四位如果为1则频率的参数根据第三位相应的加1或减1。二、硬件设计1、芯片8255⑴8255在本设计中的作用在该设计中,利用8255的端口A读取开关量,它是8086开关信号量的联系,用它所读取的信号量来切换波形和进行频率的改变。⑵8255的功能分析8255有三种工作方式:方式0,方式1和方式2。在此设计中选择方式0,即基本输入/输出方式,在此方式下端口A用作输入口或者输出口,在此设计中用作输入口,通过写入方式控制字来指定端口的工作方式。⑶8255的技术参数与TTL完全兼容,采用40条引脚的双直插式封装,减少了系统器件数,提高了直流驱动能力。8255的技术参数2、G6区的8个开关⑴开关的作用本次设计需要用开关来置数,即四种波形输入切换和频率的改变,与8255的PA端口相连。输入0时,开关闭合,输入1时,开关断开.最低两位负责波形的切换,00输出正弦波,01输出三角波,10输出锯齿波,11输出脉冲波,第三位为频率改变的开关量,0表示减少频率(增大周期),1表示增大频率(减少周期),第四位如果为1则频率的参数根据第三位相应的加1或减1。⑵功能分析通过开关的编码来实现控制:1--8-----PA0—PA7相连,最低两位开关来控制波形的种类,即00:锯齿波,01:三角波,10:正弦波,11:脉冲波。第三位控制波形频率的改变—0减少频率,1增大频率,第四位为1则延时函数的参数根据第三位加1或减1。⑶开关参数开关拨上断开(0V),表示低电平;关拨下导通(+5V),表示高电平。3、AC0832数模转换器⑴芯片DAC0832在本设计中的作用符号测试条件规范值单位最大最小输入低电平电压VIL0.8-0.5V输入高电平电压VIHVCC2.0V输出低电平电压(数据总线)VOLIOL=2.5mA0.45V输出低电平电压(外围端口)VOLIOL=1.7mA0.45V输出高电平电压(数据总线)VOHIOH=-400µA2.4V输出高电平电压(外围端口)VOHIOH=-200µA2.4V达林顿驱动电流IOARREXT=750ΩVEXT=1.5V-4.0-1.0mA电源电流ICC120mA输入负载电流IILVIN=VCC~0V±10µA输出浮动电流IOFLVOUT=VCC~0.45V±10µADAC0832在设计中的作用是将8086送来的8位数字量化成模拟电流量,在设计中需将数字信号转换为模拟信号,故选取DAC0832数模转换器。⑵DAC0832的功能分析DAC0832是8位数/模转换芯片,输入数字量具有双缓冲功能,可以工作在双缓冲,单缓冲或直接输入三种方式。直接输入方式是将8086送来的8位数据量直接送入数/模转换器,不进行锁存;单缓冲只锁存一次数据(即80856送来的数据量进行锁存);双缓冲方式的工作原理:输入寄存器经过总线收发器与数据总线连接,当ILE,CS和1WR有效时,8位数据量被打入输入寄存器,当XFER和2WR有效时,输入寄存器中数据送至DAC寄存器并输出,则将这个数据锁存在DAC寄存器中,并开始转换。本次设计中采用的是直通方式。⑶DAC0832的技术参数DAC0832芯片采用CMOS工艺,四象限乘法型DAC与微机兼容,数据输入能与双缓冲,单缓冲或直接缓冲通过三种方式工作。主要参数为:转换时间1us分辨率8位功耗20mW单一工作电源+5V~+15V电流建立时间1线性度8,9或10位增益温度系数0.0002%usFS/℃在此实验箱中的DAC0832芯片中包含有运算放大器,用来将电流信号转换成电压信号量,并且能够放大信号量。4、A3区:CPU总线、片选区(1)作用确定0832和8255芯片的在系统中的起始地址(2)功能在获知0832和8255芯片的基地址后就可以对8255的A口进行寻址,以便对其进行开关量的读取。(3)参数说明JP45:地址线A0..A7;JP48、JP50:低位地址/数据总线;JP51、JP55:MCS51的P1口;JP59:高位地址线A8..A15;JP61、JP64:MCS51的P3口,P3.7、P3.6作读、写信号线用;JP66:相当于一个MCS51类CPU座,使用40芯扁线与用户板相连,可仿真P0、P2口作地址/数据使用的MCS51类CPU。片选区片选偏移地址范围片选偏移地址范围CS10F0H~0FFHCS50B0H~0BFHCS20E0H~0EFHCS60A0H~0AFHCS30D0H~0DFHCS7090H~09FHCS40C0H~0CFHCS8080H~08FHCS1-CS8的实际地址等于系统给8位I/O区域分配的基地址+上述的偏移地址范围,假如:系统把D800H~D8FF分配给8位I/O区域,CS1的地址范围是:0D8F0H~0D8FFH.5、硬件总逻辑图及其说明⑴结构说明8086八位数据线经过数据收发器与8255、DAC0832的D7-D0相接,十六位地址A15-A0送到地址锁存器,由地址锁存器送至地址译码器,译码器与8255的相连,与DAC0832的相连,8255的A0、A1与地址线A1、A2异接,由与A0决定和何时有效,8086写信号分别与8255的以及DAC0832的、相连,与8255的相接,DAC的输出端、经过LF3516运算放大器的输出端OUT与示波器相接;8255的A口的PA0-PA7分别与八个开关相接。但是在新的实验箱中,内线均不用连接,只需接外线即可,且片选芯片都集中在一块片选信号上,故本次实验的实验连线如下:8255的A0—A1----------CPU的A1—A28255的片选CS-------------片选芯片上的CS1DAC0832的CS-------------片选芯片上的CS28255的PA0--PA7----------开关1—8;DAC0832的OUT---------示波器的红头相连DAC0832的GND----------示波器的黑头相连具体连线如下:cs1cs2A0A1PCI卡示波器红头黑头三、控制程序设计1、控制程序设计思路说明(1)初始化8255MOVDX,COM_ADD;COM_ADD为8255的控制口MOVAL,90H;PA输入口,0方式(2)读取8255的A口初始值并赋值给flag标记MOVDX,PA_ADDINAL,DXMOVflag,AL(3)根据FLAG的值分别调用相应的波形函数显示相应的波形(4)再次读取8255的A口的值,判断其值是否00H、01H、02H、03H若是这四个值中的某一个值则跳到(3);否则将最低两位赋值给FLAG,并判断第四位若为0则跳到(3),若为1则判断第三位,若第三位为0则延时参数加1,若为1则延时参数减1,跳至(2)。2、程序流程图开始初始化8255读取A口的数据并赋给FLAGFLAG=00H?调用正弦波子函数(zxb_hanshu)FLAG=01H?是调用三角波子函数(sjb_hanshu)是FLAG=02H?调用锯齿波子函数(jcb_hanshu)是否否FLAG=03H?调用脉冲波子函数(mcb_hanshu)是否读A口数据AL=00H或01H或02H或03H?FLAG=ALFLAG=AL低两位是否AL的第四位=1?否AL的第三位=0?是延时参数加一延时参数减一否是否正弦波流程图(zxb_hanshu)开始AL=-1,BX指向ZXB_DATACX=32AL+1àAL,XLATAL送数据端口调用延时函数CX-1=0?否CX=32AL-1àAL,XLATAL送数据端口调用延时函数CX-1=0?否是是CX=32AL=31AL+1àAL,XLATAL送数据端口调用延时函数CX-1=0?否是是CX=32AL-1àAL,XLATAL送数据端口调用延时函数CX-1=0?否是结束是AL=0AL送数据端口调用延时AL+1ALAL=OFFH?是否AL送数据端口调用延时AL-1ALAL=0?否结束开始锯齿波流程图(jcb_hanshu)脉冲波流程图(mcb_hanshu)开始AL=0CX=5AL送数据端口调用延时AL+1àALAL=OFFH?否是AL=0CX-1=0?否结束是开始AL=0AL送数据端口调用延时AL=0FFHAL送数据端口调用延时CX=50CX=CX-1CX=0?结束否2、控制程序.MODELTINYPCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA&32BITRAM板卡上的8237提供基地址)Vendor_IDEQU10EBH;厂商ID号Device_IDEQU8376;设备ID号.STACK100.DATAIO_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,171DB177,183,188,194,199,204,209,214DB218,223,227,231,234,238,241,244DB246,248,250,252,253,255,255,255DB128,121,115,109,103,96,90,84DB79,73,67,62,57,51,7,42DB37,33,29,25,21,18,15,12DB10,7,5,4,2,1,0,0BUFFERDW10BUFFER1DB6BUFF