作用分别是什么?ADC0809与8051单片机接口时有哪些控制信号?作用分别是什么? (2)ILE:输入寄存器的数据锁存允许信号,高电平有效。 (3)WR1:输入寄存器的数据写信号,低电平有效。 (4)WR2:DAC寄存器写信号,并启动转换。低电平有效。 (5)XFER:数据向DAC寄存器传送控制信号,传送后即启动转换,低电平有效。 ADC0809与8051单片机接口时,控制信号主要有:ALE、START、EOC、OE。作用分别是: (1)ALE:地址锁存允许信号在ALE上升沿,ADDA、ADDB、ADDC地址状态被送入地址锁存器中。 (2)START:转换启动信号。START上跳沿时,所有内部寄存器清0;START下跳沿时,开始进行A/D转换;在A/D转换期间,START应保持低电平。 (3)OE:输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高电阻;OE=1,输出转换得到的数据。 (4)EOC——转换结束状态信号。启动转换后,系统自动设置EOC=0,转换完成后,EOC=1。该状态信号既可作为查询的状态标志,又可以作为中断请求信号使用。 所谓单缓冲方式就是使0832的两个输入寄存器中有一个处于直通方式,而另一个处于受控的锁存方式,或者两个输入寄存器同时受相同的信号控制的方式。在实际应用中,如果只有一路模拟量输出,或虽有几路模拟量但并不要求同步输出的情况,就可采用单缓冲方式。 所谓双缓冲方式,就是把DAC0832的两个锁存器都接成受控锁存方式。 4 使用DAC0832时,单缓冲方式如何工作?双缓冲方式如何工作? 序号 知识点 题型 内容 答案 1 项目七 编程A/D与题 D/A转换接口设计 连接电路如图6.9所示,试编程产生以下波形: (1)周期为25ms的锯齿波;(2)周期为50ms的三角波;(3)周期为50ms的方波。 (2)周期为50ms的三角波C语言源程序如下: #include (1)周期为25ms的锯齿波发生器C语言源程序如下: #include #include #define DA0832 XBYTE[0x7fff] #define uchar unsigned char #define uint unsigned int uchar i; void delay_100us() { TH1=0xff; // 置定时器初值0xff9c,即65436,定时0.1ms TL1=0x9c; TR1=1; // 启动定时器1 while(!TF1); // 查询计数是否溢出,即定时0.1ms时间到,TF1=1 TF1=0; // 0.1ms时间到,将定时器溢出标志位TF清零 } void main(void) { TMOD=0x10; // 置定时器1为方式1 while(1) { for(i=0;i<=255;i++) //形成锯齿波输出值,最大255 { DA0832=i; //D/A转换输出 delay_100us(); } } } #include #define DA0832 XBYTE[0x7fff] #define uchar unsigned char #define uint unsigned int uchar i,j; void delay_100us() { TH1=0xff; //置定时器初值0xff9c,即65436,定时0.1ms TL1=0x9c; TR1=1; // 启动定时器1 while(!TF1); // 查询计数是否溢出,即定时0.1ms时间到,TF1=1 TF1=0; // 0.1ms时间到,将定时器溢出标志位TF清零 } void main(void) { TMOD=0x10; // 置定时器1为方式1 while(1) { for(i=0;i<=255;i++) //形成三角波输出值,最大255 { DA0832=i; //D/A转换输出 delay_100us(); } for(j=255;j>=0;j--)//形成三角波输出值,最大255 { DA0832=j; //D/A转换输出 delay_100us(); } } } (3)周期为50ms的方波C语言源程序如下:
#include #include #define DA0832 XBYTE[0x7fff] #define uchar unsigned char #define uint unsigned int uchar i,j; void delay_25ms() { TH1=0x9e; // 置定时器初值 TL1=0x58; TR1=1; // 启动定时器1 while(!TF1); // 查询计数是否溢出,即定时25ms时间到,TF1=1 TF1=0; // 25ms时间到,将定时器溢出标志位TF清零 } void main(void) { TMOD=0x10; // 置定时器1为方式1 while(1) { DA0832=255; //形成方波输出值,最大255 ,D/A转换输出 delay_25ms(); DA0832=0; //D/A转换输出 delay_25ms(); } }