MOV RO,#0FEH ;DAC的8位输入寄存器端口地址FEH→R0 MOVX @RO,A ;AT89S51单片机将待转换的数字量送DAC, ;且和译码器FEH输出端有效 现举例说明单缓冲方式下DAC0832的应用。 【例10-1】DAC0832用作波形发生器。试根据图10-3的电路, 分别写出产生锯齿波、三角波和矩形波的程序段。 在图10-3中,运算放大器A输出端Vout直接反馈到Rfb,故 这种接线产生的模拟输出电压是单极性的。 21
21 MOV R0,#0FEH ;DAC的8位输入寄存器端口地址FEH→R0 MOVX @R0,A ;AT89S51单片机将待转换的数字量送DAC, ;且和译码器FEH输出端有效 现举例说明单缓冲方式下DAC0832的应用。 【例10-1】 DAC0832用作波形发生器。试根据图10-3的电路, 分别写出产生锯齿波、三角波和矩形波的程序段。 在图10-3中,运算放大器A输出端Vout直接反馈到Rfb,故 这种接线产生的模拟输出电压是单极性的
①锯齿波的产生 ORG 2000H START: MOV RO,#OFEH ;DAC地址FEH→RO MOV A,#00H ;数字量→A L00P: MOVX @R0,A ;数字量→D/A转换器 INC A ;数字量逐次加1 SJMP LOOP 当输入数字量从0开始, 逐次加1进行D/A转换,模拟量与其 成正比输出。当A=FFH时,再加1则溢出清0,模拟输出又为 0,然后又重新重复上述过程,如此循环,输出的波形就是锯 齿波,如图10-4所示。 22
22 ① 锯齿波的产生 ORG 2000H START: MOV R0,#0FEH ;DAC地址FEH→ R0 MOV A,#00H ;数字量→A LOOP: MOVX @R0,A ;数字量→D/A转换器 INC A ;数字量逐次加1 SJMP LOOP 22 当输入数字量从0开始,逐次加1进行D/A转换,模拟量与其 成正比输出。当A = FFH时,再加1则溢出清0,模拟输出又为 0,然后又重新重复上述过程,如此循环,输出的波形就是锯 齿波,如图10-4所示
实际上,每一上升斜边要分成256个小台阶,每个小台阶 暂留时间为执行后三条指令所需要的时间。因此“INC A” 指令后插入NOP指令或延时程序,则可改变锯齿波频率。 0 5 图10-4DAC0832产生的锯齿波输出 23
23 实际上,每一上升斜边要分成256个小台阶,每个小台阶 暂留时间为执行后三条指令所需要的时间。因此 “INC A” 指令后插入NOP指令或延时程序,则可改变锯齿波频率。 23 图10-4 DAC0832产生的锯齿波输出
②三角波的产生 输出的三角波如图11-5所示。 Vo/V 0 图11-5DAC0832产生的三角波输出 参考程序如下。 24
24 ② 三角波的产生 输出的三角波如图11-5所示。 24 图11-5 DAC0832产生的三角波输出 参考程序如下
ORG 0100H START: MOV RO,#OFEH MOV A,#00H ;三角波的上升边数字量初值送DC UP: MOVX @R0,A ;数字量送DAC,产生三角波的上升边 INC A ;数字量在A中增1, JNZ P ;A非0,三角波上升边未完 DOWN: DEC A ;A=0时再减1又为FFH,开始产生三角波的下降边 MO区 @R0,A ;数字量送DAC,产生三角波的下降斜边 JNZ DOWN ;A非0,三角波的下降边未完,跳D0W SJMP P ;重新开始三角波的上升边 ③ 矩形波的产生 输出的矩形波如图10-6所示。 25
25 ③ 矩形波的产生 vO 输出的矩形波如图10-6所示