利用 DAC0832 输出模拟电压

来源:互联网 发布:windows live安装失败 编辑:程序博客网 时间:2024/04/29 17:07

以前,做而论道写过一篇关于 DAC0832 的博文,网址链接是:


http://hi.baidu.com/do_sermon/item/7935ea093ec1c617addc7098


当时,为了直观的说明 DAC0832 的基本功能,就使用了拨动开关来输入数字量。


后来,时常有人留言或私信,提出怎样利用单片机来驱动 DAC0832 输出周期电压波形、以及如何编程的问题。


其实,用单片机输出数字量,还真是很简单方便的。


电路,也不用像课本里面画的那么复杂,用任意一个单片机的并行口连接到 DAC0832 的数据输入口即可。


用 P1 口,驱动 0832 的电路如下:


利用 DAC0832 输出模拟电压 - 非著名博主 - 电子信息角落


图片链接:http://xiangce.baidu.com/picture/detail/6b6fcb9227f2bf7890e03718dd1dca4037e1b783


按照这个电路,写入、执行下列的小程序,可以看到输出的锯齿波电压的波形图如下所示:


    ORG   0000H

    JMP   START

START:

;------------------------------------------

    MOV   R2,  #0

LOOP:

    MOV   P1,  R2      ;输出

    CALL  DELAY        ;延时

    INC   R2

    SJMP  LOOP

;---------------

DELAY:                 ;延时子程序

    MOV   R6,  #2;1;127

DEL1:

    MOV   R7,  #200

DEL2:

    DJNZ  R7,  DEL2    ;内循环200遍

    DJNZ  R6,  DEL1    ;外循环127遍

    RET

;------------------------------------------

END


利用 DAC0832 输出模拟电压 - 非著名博主 - 电子信息角落


看波形,还是稍微有些失真呵。


同样还是这个电路,执行下列的程序,看看,会出现什么波形?


    ORG   0000H

    JMP   START

START:

;------------------------------------------

SINE:

    MOV   R1, #00H

    MOV   DPTR, #SINTAB

LOOP:

    MOV   A, R1

    MOVC  A, @A + DPTR  ;取数据

    MOV   P1, A         ;输出,D/A 转换

    INC   R1

    CALL  DELAY         ;延时

    SJMP  LOOP

;---------------

SINTAB:                 ;正弦波数据表

    DB  07FH, 083H, 086H, 089H, 08CH, 08FH, 092H, 095H

    DB  098H, 09BH, 09EH, 0A1H, 0A4H, 0A7H, 0AAH, 0ADH

    DB  0B0H, 0B3H, 0B6H, 0B9H, 0BBH, 0BEH, 0C1H, 0C3H

    DB  0C6H, 0C9H, 0CBH, 0CEH, 0D0H, 0D2H, 0D5H, 0D7H

    DB  0D9H, 0DBH, 0DEH, 0E0H, 0E2H, 0E4H, 0E5H, 0E7H

    DB  0E9H, 0EBH, 0ECH, 0EEH, 0EFH, 0F1H, 0F2H, 0F4H

    DB  0F5H, 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FBH

    DB  0FCH, 0FDH, 0FDH, 0FDH, 0FEH, 0FEH, 0FEH, 0FEH

    DB  0FFH, 0FEH, 0FEH, 0FEH, 0FEH, 0FDH, 0FDH, 0FDH

    DB  0FCH, 0FBH, 0FBH, 0FAH, 0F9H, 0F8H, 0F7H, 0F6H

    DB  0F5H, 0F4H, 0F2H, 0F1H, 0EFH, 0EEH, 0ECH, 0EBH

    DB  0E9H, 0E7H, 0E5H, 0E4H, 0E2H, 0E0H, 0DEH, 0DBH

    DB  0D9H, 0D7H, 0D5H, 0D2H, 0D0H, 0CEH, 0CBH, 0C9H

    DB  0C6H, 0C3H, 0C1H, 0BEH, 0BBH, 0B9H, 0B6H, 0B3H

    DB  0B0H, 0ADH, 0AAH, 0A7H, 0A4H, 0A1H, 09EH, 09BH

    DB  098H, 095H, 092H, 08FH, 08CH, 089H, 086H, 083H

    DB  7FH, 7CH, 79H, 76H, 73H, 70H, 6DH, 6AH

    DB  67H, 64H, 61H, 5EH, 5BH, 58H, 55H, 52H

    DB  4FH, 4CH, 49H, 46H, 44H, 41H, 3EH, 3BH

    DB  39H, 36H, 34H, 31H, 2FH, 2CH, 2AH, 28H

    DB  26H, 23H, 21H, 1FH, 1DH, 1BH, 19H, 18H

    DB  16H, 14H, 12H, 11H, 0FH, 0EH, 0DH, 0BH

    DB  0AH, 09H, 08H, 07H, 06H, 05H, 04H, 03H

    DB  03H, 02H, 02H, 01H, 01H, 01H, 01H, 00H

    DB  00H, 00H, 01H, 01H, 01H, 01H, 02H, 02H

    DB  03H, 03H, 04H, 05H, 06H, 07H, 08H, 09H

    DB  0AH, 0BH, 0DH, 0EH, 0FH, 11H, 12H, 14H

    DB  16H, 18H, 19H, 1BH, 1DH, 1FH, 21H, 23H

    DB  26H, 28H, 2AH, 2CH, 2FH, 31H, 34H, 36H

    DB  39H, 3BH, 3EH, 41H, 44H, 46H, 49H, 4CH

    DB  4FH, 52H, 55H, 58H, 5BH, 5EH, 61H, 64H

    DB  67H, 6AH, 6DH, 70H, 73H, 76H, 79H, 7CH

;---------------

DELAY:                  ;延时子程序

    MOV   R6,   #1;127

DEL1:

    MOV   R7,   #200

DEL2:

    DJNZ  R7,   DEL2    ;内循环200遍

    DJNZ  R6,   DEL1    ;外循环127遍

    RET

;------------------------------------------

END


利用 DAC0832 输出模拟电压 - 非著名博主 - 电子信息角落


确实是个正弦波。


想要改变波形的形状,修改程序中的数据表内容即可。


想要改变波形的周期,修改程序中的延时子程序即可。



0 0