1、单片机原理与接口技术,第14章:A/D与D/A转换技术,第14章 A/D与D/A转换技术,在单片机应用系统中,输出控制是单片机实现控制运算处理后,对控制对象的输出通道接口。单片机主要输出三种形态的信号:数字量,开关量和频率量。,第14章:A/D与D/A转换技术,单片机对模拟信号的处理,被控制对象的信号除上述三种可以直接由单片机直接产生的信号外,还有模拟量控制信号,该信号通过D/A转换产生。也就是说把单片机发出的数字信号转换成为模拟信号用来控制外部的设备,单片机仅能产生和处理数字信号,对于模拟信号只能借助D/A或者A/D转换芯片来完成。,第14章:A/D与D/A转换技术,14.1 D/A、A/D
2、转换在单片机系统中的应用,14.11 A/D-D/A转换的数据通道 在一般的系统中通过传感器采集现场的信息也就是模拟量,模拟量经过前期电路处理再经过A/D转换进入到单片机中,第14章:A/D与D/A转换技术,第14章:A/D与D/A转换技术,14.11 A/D-D/A转换的数据通道,单片机经过D/A转换对现场物理量进行控制 由于单片机的工作速度很快物理量的变化速度相对比较慢故一个A/D转换器可以通用于各现场监测点经过多路开关的定时循环接通,各路信号依次及时可靠进入到单片机,第14章:A/D与D/A转换技术,14.11 A/D-D/A转换的数据通道,多路开关循环接通电路,而现场信号通过采样保持器
3、进行保存,以此来保证转换的通畅性。另外采样频率必须是现场被测信号频谱中最高频率的两倍以上,第14章:A/D与D/A转换技术,14.11 A/D-D/A转换的数据通道,D/A转换示意图:,第14章:A/D与D/A转换技术,14.1.2 D/A转换工作原理,D/A转换是一种将数字信号转换成连续模拟信号的操作,它作为单片机系统的数字信号和模拟环境的连续信号之间提供了一种接口,它工作的原理就是输入数字信号输出模拟信号。,第14章:A/D与D/A转换技术,A/D转换原理图,第14章:A/D与D/A转换技术,14.1.2 D/A转换工作原理,D/A转换器的输入信号主要有两种分别为:数字信号和基准电压。 D
4、/A转换器的输出信号是模拟量,大部分的输出是电流,也有的输出电压。,第14章:A/D与D/A转换技术,14.1.2 D/A转换工作原理,D/A转换器内置运算放大器以低阻抗输出电压,称之为电压输出型D/A转换器 D/A转换器如果采用电流开关型电路,电流开关形电路如果直接输出生成的电流,则为电流输出型D/A转换器。,第14章:A/D与D/A转换技术,14.1.2 D/A转换工作原理,D/A转换器的输入数据是在不断变换的,为了保持输出的稳定,须在其内部处理器与输入口之间增加锁存数据的功能。一些D/A转换器甚至具有双重或者多重的数据缓冲结构,并具有数据锁存和地址译码电路。这样的转换器多见于12位甚至更
5、高的D/A转换器。,第14章:A/D与D/A转换技术,14.1.3 如何选择D/A转换器,参考指标:分辨率:则最小输出模拟量与最大输出模拟量之比转换时间:将一个数字量转换为稳定模拟量所需要的时间叫转换时间。一般情况下电流输出的D/A转换时间比较短,电压输出的D/A转换时间比较长线性度:考虑输出的线形关系转换精度:相对实际物理量的误差,第14章:A/D与D/A转换技术,14.1.3 如何选择D/A转换器,D/A转换器的类型: 根据输出端口是并口还是串口,可分为串型输出和并行输出器件 根据输出是电流还是电压,可分为电压输出型和电流输出型器件 根据能否进行乘法运算,可分为乘法运算型和非乘法运算型 根
6、据内部是否有锁存器,可分为锁存型器件和非锁存型器件,第14章:A/D与D/A转换技术,14.1.3 如何选择D/A转换器,在D/A转换器中有在基准电压上加交流信号的,这样就可以得到数字输入和交流信号输入相乘的结果所以称为乘法型D/A转换器,这种转换器不仅可以进行乘法运算,还可以使输入信号衰减,也可以做调制器对输入信号进行调制。,第14章:A/D与D/A转换技术,14.2 8位D/A芯片DAC0832,DAC0832是由8位输入寄存器,8位DAC寄存器和8位D/A转换器组成。DAC0832中有两级锁存器,第一级即输入寄存器,第二级为DAC寄存器。除了能工作在单缓冲方式,通过这两级锁存器DAC08
7、32可以工作在双缓冲方式下,在输出模拟信号的同时可以采集下一个数字量,提高了转换速度。,第14章:A/D与D/A转换技术,第14章:A/D与D/A转换技术,14.2 8位D/A芯片DAC0832,利用两级转换器的作用可以让多个D/A转换器同时工作,再通过第二级锁存信号实现多路D/A转换的同时输出。只要数据一进入DAC寄存器便启动D/A转换。,第14章:A/D与D/A转换技术,14.2.1 DAC0832的引脚,DAC0832的引脚如下: DI0DI7:8为数据输入端 ILE:输入寄存器的数据允许锁存信号,第14章:A/D与D/A转换技术,DAC0832的引脚,:输入寄存器选择信号:输入寄存器的
8、数据写信号:DAC寄存器写信号,并启动转换:数据向DAC寄存器传送信号,传送后即启动转换,第14章:A/D与D/A转换技术,14.2.1 DAC0832的引脚,VREF:参考电压输入端 IOUT1,IOUT2:电流输出端 Rfb:反馈信号输入端 AGND:模拟电路地(第三脚) DGND:数字电路地(第十脚) VCC:芯片供电电压,第14章:A/D与D/A转换技术,14.2.1 DAC0832的引脚,注意: 当 时,输入数据;当 时,数据被锁定。,第14章:A/D与D/A转换技术,14.2.2 单片机与DAC0832的接口电路,第14章:A/D与D/A转换技术,14.2.2 单片机与DAC083
9、2的接口电路,DAC0832带有数据输入寄存器,是总线兼容型的,可以将D/A芯片直接与数据总线相连,作为一个拓展的I/O口。,第14章:A/D与D/A转换技术,单缓冲接口方式,在单缓冲接口方式下,ILE接+5V。写信号控制数据的锁存,和相连,接单片机的,即数据同时写入两个寄存器;传送允许信号与片选相连,即选中本片DAC0832后,写入数据立刻启动转换。本例子DAC0832的地址为FFFEH。这种单缓冲方式适用于只有一路模拟信号输出的场合。,第14章:A/D与D/A转换技术,14.2.2 单片机与DAC0832的接口电路,本例子在运放输出端输出一个锯齿波电压信号,程序设计如下: #include
10、 #include #define DAC0832 XBYTE0xfffe #define uchar unsigned char #define unit unsigned int,第14章:A/D与D/A转换技术,void star(void) uchar i;while(1) for(i=0;i=255;i+) /*形成锯齿波输出值,最大255*/DAC0832=i /*D/A转换输出*/ ,第14章:A/D与D/A转换技术,14.3 基于MAX536的串行D/A转换器,MAX536是一款具有4路12位电压输出的D/A转换器,它包括一个16位输入/输出的移位寄存器,4个输入寄存器,4个D
11、AC寄存器和4个输出放大器。D/A转换器采用倒T型R-2R电阻网络D/A转换器。,第14章:A/D与D/A转换技术,14.3 基于MAX536的串行D/A转换器,通过对输入参考电压分压获得模拟电压输出。其中,D/A转换器A和B共享REFAB参考电压,D/A转换器C和D共享REFCD参考电压。参考电压范围为0V到VDD-4V。,第14章:A/D与D/A转换技术,14.3 基于MAX536的串行D/A转换器,在单片机系统中,可分为硬件部分和软件部分。其中硬件部分是整个系统的实体构成,是软件系统的平台和基础,没有硬件做支撑设计出的软件就无法调试也不能得到验证。下面就是动态显示硬件设计例子,我们给出了
12、完整的电路图。,第14章:A/D与D/A转换技术,MAX 536 的内部结构图,第14章:A/D与D/A转换技术,MAX536的外部引脚图,第14章:A/D与D/A转换技术,MAX536引脚功能,OUTB:DAC B电压输出 OUTA:DAC A电压输出 VSS:负电压输入 AGND:模拟地 REFAB:DAC A和B参考电压输出 DGND:数字地:DAC加载输入(低电平有效,将输入寄存器内容传送到DAC寄存器),第14章:A/D与D/A转换技术,MAX536引脚功能,SDI:串行数据输入:片选信号,低电平有效 SCK:移位寄存器输入时钟 SDO:串行数据输出 REFCD:DAC C和D的参考
13、电压输出,第14章:A/D与D/A转换技术,MAX536引脚功能,TP:测试引脚,正常使用时连接VDD VDD正电压输入(1215V) OUTD:DAC D电压输出 OUTC:DAC C电压输出,第14章:A/D与D/A转换技术,14.3.2 工作原理和时序,MAX536的串行接口的最高时钟为10MHz。工作期间引脚的低电平必须保持20微秒以上。它可以使用3线接口或4线接口的接口方式。在3线接口时,它的时序如下:,第14章:A/D与D/A转换技术,MAX536的时序,第14章:A/D与D/A转换技术,14.3.2 工作原理和时序,引脚接地或者接VDD。在 为低电平期间,SDI引脚的串行输入数据
14、由串行时钟SCLK的上升沿逐位送入移位寄存器,转换成并行数据。输入数据全部进入移位寄存器后,置为高电平,利用的上升沿执行命令字,对MAX536内部寄存器进行相应控制。,第14章:A/D与D/A转换技术,14.3.3 MAX536的编程方式,MAX接收的是16位的串行数据,高位在前,低位在后。在串行数据中包括两个地址位(A1、A0),两个控制位(C1、C0)和待转换的12位数据(D11D0)。,第14章:A/D与D/A转换技术,从高到低依次排列,这16位数据从高到低依次排列为:A1,A0,C1,C0,D11,D10,D9,D8,D7,D6,D5,D4,D3,D2,D1,D0。这些命令字与引脚的状
15、态来共同控制MAX536的转换。,第14章:A/D与D/A转换技术,14.3.3 MAX536的编程方式,第14章:A/D与D/A转换技术,14.3.3 MAX536的编程方式,第14章:A/D与D/A转换技术,14.3.3 MAX536的应用,第14章:A/D与D/A转换技术,14.3.3 MAX536的应用,单片机的P2.1、P2.2、P2.3分别接MAX536的 、SCK、SDI。MAX536采用3线接口方式, 引脚接数字地,转换器A、B、C、D都使用+5V的参考电压,输出电压范围为(05V)。,第14章:A/D与D/A转换技术,单片机对MAX536的控制,本电路主要实现单片机对MAX5
16、36的控制,并使用MAX536进行D/A转换。四个通道都可以输出数据,实际应用中根据具体情况可以减少通道。,第14章:A/D与D/A转换技术,主程序,#include #include sbit cs=p21 /定义的控制接口 sbit sck=p22 /定义SCK的控制接口 sbit sdi=p23 /定义SDI的控制接口,第14章:A/D与D/A转换技术,void data_out(unsigned char numer,unsigned int value) /定义MAX536的输出函数,通道号和输出量 switch(numer) /numer在实际应用中可根据情况赋值 case1: c
17、s=0; /置低电平,低电平有效,开启MAX536,可以输入数据,第14章:A/D与D/A转换技术,w536(value|0x1000); /定义DAC A 输出,由编程方式可以知道A通道输出的数字编码是0x1000,通过“或”把命令加到输出数据中。cs=1; / 置高电平,利用的上升沿执行命令字,对MAX536内部寄存器进行相应的控制。break; /程序返回,第14章:A/D与D/A转换技术,case2: cs=0; /置低电平,低电平有效,开启MAX536,可以输入数据w536(value|0x5000); /定义DAC B 输出,由编程方式可以知道B通道输出的数字编码是0x5000,通
18、过“或”把命令加到输出数据中,第14章:A/D与D/A转换技术,cs=1; / 置高电平,利用的上升沿执行命令字,对MAX536内部寄存器进行相应的控制。break; /程序返回case3: cs=0; /置低电平,低电平有效,开启MAX536,可以输入数据,第14章:A/D与D/A转换技术,w536(value|0x9000); /定义DAC C 输出,由编程方式可以知道C通道输出的数字编码是0x9000,通过“或”把命令加到输出数据中cs=1; / 置高电平,利用的上升沿执行命令字,对MAX536内部寄存器进行相应的控制。break; /程序返回,第14章:A/D与D/A转换技术,case
19、4: cs=0; /置低电平,低电平有效,开启MAX536,可以输入数据w536(value|0xD000); /定义DAC D 输出,编程方式可以知道D通道输出的数字编码是0xD000,通过“或”把命令加到输出数据中,第14章:A/D与D/A转换技术,cs=1; / 置高电平,利用的上升沿执行命令字,对MAX536内部寄存器进行相应的控制。break; /程序返回 ,第14章:A/D与D/A转换技术,子程序,void w536(unsigned int indata) /indata 为准备输出的数据包含了命令字 char n,i,j;unsigned int in_on; /定义数据逻辑i
20、n_on=ox0001; /初始化数据逻辑,预备输出数据,从最低位开始输出for(n=0;n16;n+) /预备输出16位数据,第14章:A/D与D/A转换技术, sck=0; /设置SCK为低电平for(i=0,i10;i+); /延时j=indata /使用“与”取出准备输出那一位的值,第14章:A/D与D/A转换技术,if(j=0001) /判断输出位sdi=1; /输出elsesdi=0; /输出,第14章:A/D与D/A转换技术,for(i=0,i1; /数字逻辑右移,MAX536输入下一位数据 ,第14章:A/D与D/A转换技术,14.4 A/D转换工作原理,在单片机系统中,单片机
21、所能处理的都是离散的数字信号。但是外部受控制的有关设备所产生的和接收的往往是模拟量。例如:温度,速度,亮度等。所以必须将外部设备产生的模拟信号转换成为数字信号才能使这些信号为单片机所识别,并在单片机中进行处理。而将模拟信号转换成为数字信号的过程我们称之为模拟/数字(A/D)转换,所使用的器件我们就称之为模拟/数字(A/D)转换器。,第14章:A/D与D/A转换技术,14.4 A/D转换工作原理,A/D转换是一种将连续的模拟信号转换成适合在单片机中处理并运行的二进制数,也就是把连续信号变成离散的信号。A/D转换的工作原理如图所示,第14章:A/D与D/A转换技术,14.4.1 如何选择A/D转换
22、器,A/D转换器的种类很多,性能也有很大的不同,在A/D转换器的选择上不仅要考虑它的性能还要考虑具体的应用要求。下面我们来看看选择A/D转换器的一些参考性能指标。,第14章:A/D与D/A转换技术,14.4.1 如何选择A/D转换器,1.A/D转换器的位数 A/D转换器位数的确定,主要的考虑因素是转换的误差,位数越多所产生的误差和失真就越小,第14章:A/D与D/A转换技术,为了减低硬件的消耗减少成本在一般的系统中我们都选用中分辨率的A/D转换器,而其中以10位和11位是最合适的。,第14章:A/D与D/A转换技术,14.4.1 如何选择A/D转换器,2. A/D转换器的转换频率 A/D转换器
23、从启动到结束总需要一定的时间,而每秒钟所完成的转换次数就是A/D转换器的转换频率。在确定A/D转换器的转换频率的时候还要考虑到系统的采样频率。例如:A/D转换器的转换频率为10KHz,而模拟信号一个周期的信号需要10个采样点,根据采样定理这个A/D转换器所能处理的最高频率的模拟信号仅为1KHz当然通过提高A/D转换器的转换频率可以提高处理的频率,但是由于单片机的处理速度有限所以在单片机系统中始终有一个瓶颈无法突破。,第14章:A/D与D/A转换技术,14.4.1 如何选择A/D转换器,3. 满量程误差 这个指标指的是满量程输出的时候对应的输入信号和理想输入信号的差别 4. 线性度 本指标指的是
24、A/D转换器的转移函数与理想直线的最大偏移。 5. 采样/保持器 对于高频信号来说是必须加采样/保持器的。如果是低频信号并采用高速的A/D转换器的时候是可以不用采样/保持器的。而直流信号和变化很慢的信号也可以不使用采样/保持器。,第14章:A/D与D/A转换技术,14.4.1 如何选择A/D转换器,6. A/D转换器的量程 部分A/D转换器提供了不同量程的引脚,必须使用正确才能保证信号尽量不失真。这样的A/D转换器不同的量程的输入电压可以从不同的引脚输入。 7. 偏置极性 部分A/D转换器提供了双极性偏置控制。当该引脚接地时,信号为单极性输入方式;当该引脚接基准电压时,信号为双极性输入方式。,
25、第14章:A/D与D/A转换技术,11.7 LED动态显示及实验,2、分析:MAX7221在使用之前必须进行初始化,即设置MAX7221的显示模式、译码方式、亮度控制、扫描范围(扫描LED个数)。当采用Code B译码方式时,我们只要向数码管0(digit0)数码管7(digit7)送出0x00x7即可。,第14章:A/D与D/A转换技术,14.4.2 8位A/D转换芯片ADC0809,ADC0809是8位逐次逼近型A/D转换器,带有8个模拟量输入通道,芯片内带通道地址译码锁存器,输出带三态数据锁存器,启动信号为脉冲启动方式,每一通道的转换大概需要100微秒。,第14章:A/D与D/A转换技术
26、,14.4.2 8位A/D转换芯片ADC0809,ADC0809由三个部分组成,第一个部分是输入部分,包括8位模拟开关,3条地址线的通道地址锁存器和译码器,第四条为ALE,这三个地址引脚通过编码可以用来实现8路模拟信号输入通道的选择;第二部分是转换部分,里面是一个逐次逼近型的A/D转换器;第三个部分是输出部分,该部分是一个三态输出数据锁存器,有8位数据输出最上为LSB最下为MSB。,第14章:A/D与D/A转换技术,8位A/D转换芯片ADC0809内部结构图,第14章:A/D与D/A转换技术,ADC0809的外部引脚图,第14章:A/D与D/A转换技术,ADC0809的引脚功能,IN0IN8:
27、8个模拟通道输入端。 START:启动转换信号 EOC:转换结束信号 OE:输出允许信号。信号由CPU读信号和片选信号组合产生。 CLOCK:外部时钟脉冲输入端,典型值为640KHz ALE:地址锁存允许信号 A,B,C:通道地址线。CBA的8种组合状态000111对应了8个通道的选择 VREF(+),VREF():参考电压输入端 VCC:+5V电源 GND:地 D0D7:D7为最高位MSB,D0为最低位LSB。D7D0组成8位数据输出。,第14章:A/D与D/A转换技术,ADC0809的地址编码,第14章:A/D与D/A转换技术,ADC0809的应用,C,B,A输入的地址在ALE有效的时候被
28、锁存。启动信号START上升沿到来时开始启动转换,EOC信号是在START下降沿到的10微秒后才变成低电平,表示转换已经结束。当单片机接收到转换结束的信号后,发送一个读的信号给OE,然后开始从ADC0809输入信号。,第14章:A/D与D/A转换技术,14.3.2 ADC0809与单片机的接口,第14章:A/D与D/A转换技术,14.3.2 ADC0809与单片机的接口,本例子数据输出端口D7D0接单片机的P07P00。启动信号START由P30产生,ALE和START相连,即按输入的通道地址接通模拟量并启动转换。地址选通信号C,B,A分别由P22,P21,P20产生。输出允许信号由P37产生
29、,即通过读信号使得数据从P0口直接输入单片机。转换结束信号EOC与p32即外部中断0相连。,第14章:A/D与D/A转换技术,主程序,#include #include #define uchar unsigned char sfr p0=0x80; /定义P0的地址 sfr p2=0xA0; /定义P2的地址 sfr p3=0xB0; /定义P3的地址 sbit ad_ch=p32; /定义查询引脚,当0809转换结束的时候EOC为低电平 sbit read=p37; /定义读信号 sbit star=p30 /定义启动转换信号 void main(void) atatic uchar id
30、ata a10;a0809(a); /启动转换并采样AD0809通道的值 void a0809 (uchar idata *x) /转换函数 uchar i; uchar xdata *a_adr; p2=0xf8; /设置AD0809通道0的地址a_adr= /进入下一通道的转换 ,第14章:A/D与D/A转换技术,14.5 12位A/D转换芯片ADS7804,与8位和16位的A/D转换器相比,12位A/D转换器以其较高的性能价格比而在各类系统中中得到广泛的应用。下面就以ADS7804为例子详细介绍12位A/D转换器的应用。ADS7804为12位的A/D转换器,它不仅分辨率高、转换速度快,而
31、且接口方便,电路简单、应用灵活,因而具有广泛的应用前景。,第14章:A/D与D/A转换技术,14.5.1 ADS7804的内部结构,第14章:A/D与D/A转换技术,14.5.1 ADS7804的内部结构,ADS7804芯片采用28脚0.3英寸PDIP(塑料双列直插式)封装,两列管脚间距为0.3英寸,比一般DIP28封装窄一倍,所以俗称瘦型DIP;ADS7804采用单5V电源供电;芯片内部含有采样保持、电压基准和时钟等电路,可极大简化用户的电路设计和硬件开锁,并可提高系统的稳定性。ADS7804采用CMOS工艺制造,转换速度快、功耗低(最大功耗为100mW)。另外ADS7804采用逐次逼近式工
32、作原理,单通道输入,模拟输入电压的范围为10V,采样速率为100kHz。,第14章:A/D与D/A转换技术,ADS7804的外部引脚图,第14章:A/D与D/A转换技术,ADS7804的引脚功能,VDIG 数字电源,和模拟电源VANA通常一起接到5V电源上 VANA 模拟电源,和数字电源VDIG通常一起接到5V电源上 DGND 数字地,通常与模拟地共地 AGND1、AGND2 模拟地,通常与数字地共地 REF 为参考电压端,通常对地接2.2F电容,芯片内部可产生2.5V基准电压。 CAP 为参考电压所需电容,对地接2.2F电容 VIN 模拟信号输入端 D11D0 为数字量并行输出口 DZ(19
33、22脚)是为了使管脚与16位A/D转换器ADS7805兼容而设的,可悬空片选信号,与结合在下降沿有效,并持续40ns6s可启动A/D转换,第二个下降沿输出数据。读取模数转换结果的控制信号转换结束信号,高电平表示转换结束,低电平表示转换进行中 BYTE 控制从总线读出的数据是转换结果的高字节还是低字节。它为低电平的时候选择低字节,为高电平的时候选择高字节。,第14章:A/D与D/A转换技术,14.5.2 ADS7804如何启动转换和读取转换结果,首先将脚电平变低;然后在脚输入一个脉冲并在其下降沿启动A/D转换,此脉冲的宽度要求在40ns6s之间;这时BUSY脚电平拉低表示正在进行转换;在经过大约
34、8s以后,转换完成,BUSY脚电平相应变高;再把R/C脚电平拉高,这样,脚脉冲的下降沿即把转换结果输出到数据总线上。,第14章:A/D与D/A转换技术,ADS7804启动转换和读取转换结果的时序图,第14章:A/D与D/A转换技术,模拟电压和数字输出的关系,第14章:A/D与D/A转换技术,ADS7804的输出,因为ADS7804为12位A/D转换器所以它的转换结果为12位,对8位单片机而言,就必须分两次读入,而这个功能是由BYTE引脚来实现的。当BYTE脚为高电平时,数据总线上输出高字节,当BYTE脚为低电平时,输出低字节。,第14章:A/D与D/A转换技术,14.5.3 ADS7804与单
35、片机的接口,因为ADS7804的信号脉冲宽度要求为40ns6s之间,而对于单片机而言,如采用12MHz的晶振,单周期指令和双周期指令分别为1s和2s,而一个对位操作的指令为1s所以我们把它和单片的P2.1端口相连,而 、 和BYTE信号,则分别与 P2.0, P2.2, P2.3相连,第14章:A/D与D/A转换技术,ADS7804与单片机的接口电路,第14章:A/D与D/A转换技术,程序分析,本数据采集系统程序如下: 单点采样子程序SPS():用来返回一个有符号整数形式的转换结果。 定长采样子程序DLS():根据入口参数fixedtime(单位为s)给定的采样间隔采样N点,并采用查询单片机内
36、置定时器的方式来控制采样时序,N点采样结果存储在外部存储器数组array中。,第14章:A/D与D/A转换技术,主程序1,#include #include #define N=128 /定采样长度,每个周期内采样128点 sfr p2=0xA0; /定义P2的地址 sbit CS=p21; /定义片选地址 sbit BYTE=p23;/定义数据选择地址 sbit RC=P22; /定义读取结果地址 sbit BUSY=P20; /定义特殊位 int XDATA array(N); /在外部存储器内定义长度为N的有符号整数数组 void SPS( ) /单点采样子程序 uint dl,dh;i
37、nt dd; RC=0; /R/C低电平,进入转换模式 cs=0; /cs为低电平一个指令的时间为1s,启动A/D转换 cs=1; /cs为高电平,依据时序等待转换完成方便在下降沿输出程序 while (BUSY= =1); /等待转换完成 RC=1; /和CS配合输出数据 cs=0; /cs为低电平,利用它的下降沿输出数据 BYTE=0; /进入读模式,选择低字节 dl=XBYTE0xffff; /读转换结果低8位 BYTE=1; /选择高字节 dh=XBYTE0xffff /*返回转换结果*/ ,第14章:A/D与D/A转换技术,定长采样子程序,void DLS(uint fixedtim
38、e=1000s) /定长采样子程序 uchar timeh,timel; fixedtime=fixedtime-5;/减去TF1清零和装载计数初值的时间5s th=(65536-fixedtime)/256; /计算计数初值 tl=(65536-fixedtime)%256; /计算计数初值 TMOD=0x10; /定时器1,方式1 TH1=timeh; TL1=timel;/装载计数初值 TR1=1;/启动定时 for(i=0;iN;i+) while(TF1); /查询等待TF1复位 TF1=0; /清溢出标志 TH1=timeh; TL1=timel; /装载计数初值 Arrayi=SPS(); /采样、存储 TR1=0; /停止定时 ,第14章:A/D与D/A转换技术,注意事项:,本程序中fixedtime和N的大小根据实际情况来确定,fixedtime为采样的时间间隔,N为采样的点数。这两个参数的确定还要结合ADS7804和单片机的工作频率,不能超过额定的频率。另外赋给计数寄存器TH和TL的值是定时器从开始计数到溢出所用的时间,这个时间再加上清TF和装载计数初值所需的时间(共5个机器周期,对于12MHz晶振即为5s)才是所要的采样间隔,这一点在程序设计中必须注意。,第14章:A/D与D/A转换技术,第14章结束,