第10章_8051输出控制的C编程
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12
2、单缓冲方式
输入寄存器和DAC寄存器共用一个地址,同时选通输出,输入数 据在控制信号作用下,直接进入DAC寄存器中; WR1和WR2同时进行,并且与CPU的WR相连,CPU对0832执行一次 写操作,将数据直接写入DAC寄存器中。 适用:只有一路模拟信号输出或几路模拟信号非同步输出。
使两个寄存器中始终有一个(多为DAC寄存器)处于 直通状态,另一个起锁存作用。如使WR2=0和 XFER=0,或将WR1与WR2相连及XFER与CS相连,则 DAC寄存器处于直通状态,输入寄存器处于受控状态 。 适用于应用系统中只有一路D/A转换或有多路转换但不 要求同步输出。
输入 寄存器
与 与 与
DAC 寄存器
LE2
8位 DAC
IOUT1
LE1
IOUT2
+
VO
AGND
DAC 0832内部结构框图
LE1(LE2)=
0:锁存; 1:直通。
DI0~7:转换数据输入(8位); CS:片选信号(输入); ILE:数据锁存允许信号(输入); XFER:数据传送控制信号(输入); WR1:第一写信号(输入),与ILE共同控制输入寄存器是数据直通方式还是 数据锁存方式; WR2:第2写信号(输入),与XFER共同控制DAC寄存器是数据直通方式还是 数据锁存方式;
dlms ( T ) ; }
10.1.2 8051与DAC0832的接口电路
有3种工作方法:直通方式、单缓冲方式和双缓冲方式。
1、直通方式 输入寄存器和DAC寄存器共用一个地址,同时选通输出; WR1和WR2同时进行,并且不与CPU相接。 特点:转换速度快。
所有控制信号(CS、WR1、WR2、ILE、XFER)都为有 效时,两个寄存器处于直通状态,不起锁存作用,此时 数据线的数字信号经两个寄存器直接进入D/A转换器进 行转换并输出。 适用于连续反馈控制中。
14
3、双缓冲器方式
输入寄存器和DAC寄存器分配有各自的地址,可分别选通用同时输出 多路模拟信号。适用:同时输出几路模拟信号的场合,可构成多个 0832同步输出电路。
使DAC0832片内的两个寄存器全部起锁存作用。数字量的输入 锁存和D/A转换输出分两步完成,各个DAC0832芯片输入寄存器 的锁存控制由不同地址线控制,而它们的DAC寄存器的锁存控 制则由同一个地址线完成。 编程时,首先给各个DAC0832芯片输入转换数据并锁存在各自 芯片的输入寄存器上,然后再向所有的DAC0832的DAC寄存器 发锁存控制信号,所有的DAC0832芯片的DAC寄存器同时从它 的前级寄存器得到数据并锁存,同时转换,最后同时输出。 适用于要求多路DAC0832芯片同时输出的场合。
}
} }
产生正弦波信号程序
#include "reg51.h" #include "absacc.h" #include "intrins.h" #define uint unsigned int #define DA0832 XBYTE[0x6FFF] uchar code Wave[]={ 0x7F,0x8C,0x98,0xA5,0xB0,0xBC,0xC7,0xD1, 0xDA,0xE2,0xEA,0xF0,0xF6,0xFA,0xFD,0xFE, 0xFF,0xFE,0xFD,0xFA,0xF6,0xF0,0xEA,0xE2, 0xDA,0xD1,0xC7,0xBC,0xB0,0xA5,0x98,0x8C, 0x80,0x73,0x67,0x5A,0x4F,0x43,0x38,0x2E, 0x25,0x1D,0x15,0x0F,0x09,0x05,0x02,0x01, 0x00,0x01,0x02,0x05,0x09,0x0F,0x15,0x1D, 0x25,0x2E,0x38,0x43,0x4F,0x5A,0x67,0x73};
Feedback resistor used for the current to voltage conversion when using an external Op Amp.
RFEEDBACK
10.2.2 AD7521 与8051的接口
例 8031与AD7521接口的数据转换程序举例。 使AD7521输出梯形波的C51程序如下: # include < absacc.h > # include < reg51.h > # define DA7521L XBYTE[0x7fff ] # define DA7521H XBYTE[0xbfff ] # define UP 0x010 # define T 1000 # define uint unsigned int
# include < absacc.h > # include < reg51.h > # define DA0832 XBYTE [0xfffe ]
# define uchar unsigned char
# define uint unsigned int void stair (void ) { uchar i ; while ( 1 ) {for ( i=0 ; i<=255 ; i=I++ ) { DA0832 = i ; /* 形成锯齿波输出值,最大值为255 */ /* D/A转换输出 */
void OutSin(void) { uchar i; while(1) { for(i=0;i<64;i++) { DA0832=Wave[i]; _nop_(); } } } void main() { while(1){OutSin(); } }
23
10.2 12位D/A芯片 AD7521
void dlms ( uint a ); void stair(void) { uint i ; for ( i=0 ; i<=4095 ; i=i+UP ) { DA7521L= i % 256 ; DA7521H= i /256 ;
/* 以阶高增量增值,形成梯形波输出值最大4095*/
/* 送低8位数据到第一级缓冲器 */ /* 送高4位数据到高4位缓冲器,同时送 低8位到第二级 /* 缓冲转换 */
3) 接口形式
D/A转换器与单片机接口方便与否,主要决定于转换器 本身是否带数据锁存器。 有两类D/A转换器:
一类是不带锁存器的,
一类是带锁存器的。 对于不带锁存器的D/A转换器,为了保存来自单片机的转换 数据,接口时要另加锁存器,因此这类转换器必须在口线上 ;而带锁存器的D/A转换器,可以把它看作是一个输出口, 因此可直接在数据总线上,而不需另加锁存器。
第10 章 8051输出控制的C编程
10. 1 8位D/A芯片DAC0832 10. 2 12位D/A芯片AD7521 10. 3 步进电机与单片机的接口
单片机和被控实体间的接口示意图
D/A转换器的性能参数与选型
主要性能参数: 分辨率:分辨率是指D/A转换器能分辨的最小输出模拟增量,取决于输 入数字量的二进制位数。 转换精度:指满量程时DAC的实际模拟输出值和理论值的接近程度。 偏移量误差:偏移量误差是指输入数字量为零时,输出模拟量对零的 偏移值。 线性度:线性度是指DAC的实际转换特性曲线和理想直线之间的最大偏 移差。 选取原则: 考虑性能指标的要求 考虑结构特性与应用特性(输入信号的方式、模拟输出特性、锁存特 性、参考电压源)
Bits 1(MSB) Most Significant Digital Data Bit.
…
… Bit 12 V+
…
… Least Significant Digital Data Bit (AD7521/31). Power Supply +5V to +15V.
VREF
Voltage Reference Input to set the output range. Supplies the R2R resistor ladder.
# include < reg51.h >
# define INPUTR1 XBYTE[ 0x8fff ] # define INPUTR2 XBYTE[ 0xa7ff] # define DACR XBYTE [0x2fff ] # define uchar unsigned char void dac2b (uchar data1 , uchar data2 ) {
D7~D0:8位数据输入端 ILE:输入寄存器锁存允许信号 CS:芯片选择信号 WR1:输入寄存器写信号 XFER:数据传送信号 WR2:DAC寄存器写信号 VREF:基准电压 Rfb:反馈信号输入端 IOUT1:电流输出1端 IOUT2:电流输出2端 VCC:电源 AGND:模拟地 DGND:数字地
CS WR1 AGND D3 D2 D1 D0 VREF RFB DGND
1 2 3 4 5 6 7 8 9 10
20 19 18
VCC ILE WR2 XFER D4 D5 D6 D7 IOUT2 IOUT1
DAC 0832
17 16 15 14 13 12 11
Rfb DI0~7
ILE CS WR1 WR2 XFER
INPUTR1 = data1 ;
INPUTR2 = data2 ; DACR= 0 ;
/* 送数据到一片0832 */
/* 送数据到另一片0832 */ /* 启动两路D/A 同时转换 * /
}
例2 DAC0832单缓冲区接口
按片选线确定FFFEH为DAC0832的端口地址。使运行输出端输出一个锯齿波电 压信号的C51程序如下:
10. 1 8位D/A芯片DAC0832
10.1.0 D/A转换器概述
D/A转换器输入的是数字量,经转换后输出的是模拟量。 有关D/A转换器的技术性能指标很多,例如绝对精度、相对精 度、线性度、输出电压范围、温度系数、输入数字代码种类( 二进制或BCD码)等。
1) 分辩率
分辨率是D/A转换器对输入量变化敏感程度的描述, 与输入数字量的位数有关。如果数字量的位数为n,则D/A转换 器的分辨率为2-n。这就意味着数/模转换器能对满刻度的2-n输 入量作出反应。
10.1.1 DAC0832的结构和引脚
DAC0832是一个8位 D/A转换器。单电源供电 ,从+5 V~+15 V均可正 常工作。基准电压的范围 为± 10 V;电流建立时间 为1 μs;CMOS工艺,低 功耗20 mW。 DAC0832引脚图
8位D/A芯片DAC0832内部结构
10.2.1 AD7521 的引脚
12位D/A转换器,内部不带 输入寄存器。 当输入数据发生变化时,输 出电流或电压也发生变化。
使用时,需要增加一个数据 锁存器与总线相连。
PIN NAME
DESCRIPTION
IOUT1 IOUT2 GND Bit 2
Current Out summing junction of the R2R ladder network. Current Out virtual ground, return path for the R2R ladder network. Digital Ground. Ground potential for digital side of D/A. Digital Bit 2.
16
输出方式
DAC0832为电流输出型D/A转换器,外加转换电路可获得电 压输出。
Vout1为单极性输出:Vout1=-B·VREF/256 Vout为双极性输出: Vout=(B-128)·VREF/128
17
例 1 、DAC 0832的双缓冲接口电路
19
# include < absacc.h >
2) 建立时间
建立时间是描述D/A转换速度快慢的一个参数,指 从输入数字量变化到输出达到终值误差± (1/2)LSB(最低 有效位)时所需的时间。通常以建立时间来表示转换速度。 转换器的输出形式为电流时,建立时间较短;的延迟时间,
因此建立时间要长一点。 但总的来说,D/A转换速度远高于A/D转换速度,快 速的D/A转换器的建立时间可达1 μs。