0832的结构
DI0到DI7是输入的数字量,IOUT1是输出的模拟电流输出量,其中IOUT1+IOUT2的值为一个常数。为了输出电压必须还外接一个运放。
输出电压为(DI0到DI7的数字)/256*VREF。
三种工作方式
直通、单缓冲、双缓冲。
直通方式就是在数字信号输入之前就把两个寄存器都导通,然后你的输入可以直接输出到D/A转换模块。
单缓冲就是在数字信号输入之前你把两个寄存器的片选和时钟连在一块儿,那么相当于把两个寄存器当成一个在使用。
双缓冲就是在数字信号输入之前什么都不动。信号输入之后需要配置相关参数才能把完成D/A转换。
例子
用该模块输出一个锯齿波电压,要求使用单缓冲方式
MOV DPTR,#8FFFH
;这里需要特别注意一下,C51的外部编址方式:
从P2.7
P2.0,P0.7
P0.0,总共16个位数
。这里的连线方式决定了需要使2.7口变成0.
MOV A,00H
LOOP:
MOVX, @DPTR,A
;这一步需要注意这条指令的时序:当PC指针指向这条指令之后,先后发生如下事件:
8FFF的值被送入P2和P0口,同时单片机上的WR引脚变成低(在执行对DPTR的读写操作时,C51上WR和RD对应的管脚都会从高变成低),于是芯片上的WR也变成了低,于是芯片导通——A(A就是P0.0
P0.7)的值被放入到数据总线上,并传输给芯片的D0
D7
LCALL DELAY
INC A
LJUMP LOOP
DELAY:
MOV R0,#1000
DJNZ RO,DELAY