DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。
直通方式:这时两个8位_数据寄存器都处于数据接收状态,即和都为1。因此,ILE=1,而和都为0。输入数据直接送到内部D/A转换器去转换。这种方式可以用于一些不带微机的控制系统中。
单缓冲方式:这时两个8位数据寄存器中的有一个处于直通方式(数据接收状态),而另一个则受微机送来的控制信号控制。
双缓冲方式:这时两个8位数据寄存器都不处于直通方式,单片机必须发送两次写信号才能完成一次D/A转换。
MCS-51单片机和D/A转换器连接时,也是把D/A转换器作为外部数据存储器(RAM)的单元来处理的。具体的连接则和0832的工作方式有关。
在单缓冲工作方式时,0832中两个数据寄存器有一个处于直通方式,一般都是将8位DAC寄存器置于直通方式。为此,应使和固定置零。而输入寄存器是工作于锁存器状态,它对于8031单片机来说,相当于一个外部RAM单元。用一条MOVX指令就可以实现8031和D/A转换器之间的数据交换和数据转换。用MOVX指令执行时所产生的信号来控制0832的从而实现对输入寄存器的写入控制。接到译码器输出。单缓冲工作方式下8031和0832的连接图如图7-13所示。当然,具体的译码器连接要取决于译码方式和所用的译码器。设分配给0832的地址为FEH,则用以下两条指令就可以将一个数字量转换为模拟量:
当然,假设要转换的数字量已经放在累加器A中。
图7-13 8031与ADC0832的单缓冲方式连接
若采用双缓冲方式,则DAC0832被看作是外部RAM的两个单元而不是一个单元,即应分配给DAC0832两个RAM地址。然后使用两条MOVX指令,才能将一个数字量转换成模拟量。图7-14是双缓冲方式下0832与单片机的连接,同时还给出了0832与运算放大器的连接。这是属于单极性输出的连接,这样的连接对于单缓冲方式甚至直通方式都是一样的。图中设0832的输入寄存器地址为FEH,DAC寄存器地址为FFH。接译码器FFH输出端。接译码器FEH输出端。则要用以下几条指令才能完成一次数模转换。
图7-14 8031与ADC0832的双缓冲方式连接
第一次执行MOVX指令时,打开0832的输入寄存器。把累加器A中的数据送入并锁存起来。第二次MOVX指令则是用来打开DAC寄存器,使输入寄存器中的数据通过DAC寄存器送到8位D/A转换器去转换。这次指令执行时,实际上并没有数据信号从8031单片机送入0832D/A转换器,因为输入寄存器是关闭的,P0口过来的数据不可能进入0832。从指令来看是一条累加器A到0832的传送命令。实际上,这种传送并不进行。这条指令在这里只起到打开0832的DAC寄存器的作用。
双缓冲工作方式有不少用途。例如可以用来实现8031和多个DAC0832的接口,以便同时输出两个模拟量到外部系统。图7-15是8031和两片DAC0832转换器的接口连接。这时两片0832占用外部RAM的三个单元:两个输入寄存器各占一个地址单元,而两个DAC寄存器则占用同一个地址单元。操作时,先用一条MOVX指令把一个数据送到一片0832的输入寄存器,再用一条MOVX指令把另一个数据送到另一片0832的输入寄存器。最后再用一条MOVX指令同时打开两片0832的DAC寄存器。同时完成两个8位数字量的数模转换。
图7-15 8031和两片DAC0823的接口
设两片0832的输入寄存器地址分别为20H和21H,两个DAC寄存器都用地址22H。则将digit和digit+1两个单元的8位数据同时转换为模拟量的程序段为:
如同一般双缓冲方式的数据传送一样,第三次MOVX指令用来启动两片0832同时进行数模转换,所以此时累加器A中究竟是什么内容并不重要,它不会影响到已经装入到两个输入寄存器中的数据。
下面介绍利用0832产生各种波形。
1.阶梯波的产生
阶梯波是在一定的时间范围内每隔一段时间,输出幅度递增一个恒定值。如图7-16所示,每隔1ms输出幅度增长一个定值,经10ms后重新循环。用DAC0832在单缓冲方式下就可以输出这样的波形。所需的1ms延迟可以通过延迟程序获得,也可以通过单片机内的定时器来定时,通过延迟程序产生阶梯波的程序如下:
图7-16 阶梯波波形
图7-17 三角波波形(www.daowen.com)
2.三角波的产生
三角波是由两段直线组成的,先送出一个线性增长的波形,达到最大值时,再送出一个线性减少的波形,两者结合,就成为三角波。然后使之不断地重复,就能得到一个连续的三角波形,如图7-17所示。
实际上这里所说的线性波形仍是一些台阶很小的阶梯波形。为了更逼近线性增长,应使台阶的幅度尽可能小(1位LSB)。并且整个波形中台阶的高度和宽度应保持不变。为此,要特别注意转折处的处理。避免出现台阶的宽度变宽或其他影响波形线性的现象出现。
上升段波形的幅度从0~255,每步增加1,为最小台阶幅度,到达255以后再加1就为256。对8位二进制数实际是使Cy=1和A=0,此时应结束上升段而进入下降段。但是若不调整A值而直接进入标号为DOWN的语句,则会在转折处先输出一次A=0,然后再输出255,并逐渐下降。这样就在波形的转折处出现一个负的毛刺,显然这是不希望的。为避免这一现象出现。对A值作一次调整:由0变为254,然后再输出。这样也可以避免在顶部输出两次A=255而拉宽了顶部台阶的宽度。
用8位D/A转换器输出三角波,精度不是很好。若能用10位或12位D/A转换器,效果会改善不少。
上述三角波的周期已不能进一步减小(除非减小幅度),每个台阶持续的时间为执行三条指令所需的时间(MOVX,INC,JNC),共需四个机器周期。根据单片机的时钟频率不难计算出一个周期的持续时间。
3.锯齿波的产生
DAC0832用作波形发生器产生锯齿波程序如下:
当数字量从0开始,逐次加1变换,模拟量与之成正比输出。当A=FFH时,再加1则溢出清0,模拟输出又为0,然后又重新重复上述过程,如此循环下去输出波形就是一个锯齿波,如图7-18所示。但实际上每一个上升斜边要分成256个小台阶,每个小台阶暂留时间为执行程序后三条指令所需要的时间。因此若想改变锯齿波的频率,只需在上述程序中插入nop指令或延时程序即可。
图7-18 锯齿波波形
4.矩形波的产生
DAC0832用作波形发生器产生矩形波程序如下:
DELAY1和DELAY2为两个延时程序,分别决定矩形波高低电平的宽度。矩形波波形如图7-19所示,矩形波的频率也可采用同样方法改变。
图7-19 矩形波波形
5.同步波形输出(同时输出X和Y波形到示波器)
示波器显示波形时需要在X轴加上锯齿波电压,以产生光点的水平移动。为了得到稳定的显示波形,X信号和Y信号的频率应保持一定的比例关系。为了便于波形显示的同步,或者为了显示更复杂的波形,可通过两个D/A转换器同时产生周期相同的X和Y信号:X为线性锯齿波,Y为待显示的波形。8031单片机和两个8位D/A转换器的连接如图7-15所示。此时D/A转换器必须采用双缓冲方式。
为了输出不规则信号,可以把这些信号的取样值,储存在程序存储器中,然后用查表的方法取出这些取样值,送到D/A转换器转换后输出。同时往X轴上送出锯齿波。当然也可以用这样的方法来显示规则的波形,如正弦波等。双缓冲工作的两个D/A转换器地址仍取为20H、21H(输入寄存器)和22H(DAC寄存器),即与图7-15中原来规定相同。待显示的信号分解为100个取样点。
以上仅举了几例说明单片机如何通过D/A转换器产生模拟波形。用这种方法产生信号波形时,输出频率不可能太高。一方面受单片机本身工作速度的限制(12MHz晶振频率时,机器周期为1μs);另一方面,为了有一定的显示质量,在信号的一个周期内取样点也不能看太少,这就进一步限制了信号的频率。但是,用单片机产生波形比较灵活,特别是可以产生各种不规则波形,因此还是有它独到之处。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。