单片机学习项目 (13) AD DA转换器及其应用.docx_第1页
单片机学习项目 (13) AD DA转换器及其应用.docx_第2页
单片机学习项目 (13) AD DA转换器及其应用.docx_第3页
单片机学习项目 (13) AD DA转换器及其应用.docx_第4页
单片机学习项目 (13) AD DA转换器及其应用.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机学习项目项目13-A/D、D/A转换器及其应用ADC0832(项目13.1)一:功能原理ADC0832是美国国家半导体公司生产的一种8位逐次比较型COMS双通道A/D转换器。该器件有8和14引脚两种封装,采用5V电源供电,模拟电压输入范围为05V,内部时钟250kHz时转换速度为32微秒。封装图见图5-4-1所示。二:ADC0832应用由于ADC0832操作简单,因此ADC0832驱动只需依照该器件的工作情况设计即可。在图5-4-2所示的仿真电路中,调节电位器PV1可以产生一个模拟的05V电压源,输入ADC0832的CH0端口,ADC0832转换后的数据范围为0255,由三位数码管输出。ADC0832的DI与DO线与后接单片机的P3.2口,CS接P3.0口,CLK接P3.1口。为了得到CH0通道转换得到的数据,程序中需要在CLK第2、3个下降沿来到时向DI发送1、0,然后才能接收ADC0832的转换数据,每次转换结束时让CS无效。主程序/*预处理*/#include#include#includeADC0832.c#define uchar unsigned charcodeucharseven_seg = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;uchar cp1,cp2,dat_ad;/*T0初始化*/void timer0_init(void)TMOD = 0x01;TH0 = 0xec;TL0 = 0x78;TR0 = 1;EA= 1;ET0 = 1;/*T0中断服务*/void timer0_isr(void) interrupt 1/中断服务函数TH0 = 0xec;TL0 = 0x78;cp1+;if(cp1 =100)/0.5秒cp1 = 0;dat_ad = dac0832_ch0();/0.5秒让ADC0832转换一次P0 = 0xff;switch(cp2)case 0:P0 = seven_segdat_ad% 10;P2 = 0x01;break;case 1:P0 = seven_segdat_ad % 100 /10;P2 = 0x02;break;case 2:P0 = seven_segdat_ad / 100;P2= 0x04;break;cp2+;if(cp2 = 3)cp2 = 0;/*主函数*/void main(void)timer0_init();dac0832_init();while(1);/*结束*/ADC0832驱动程序/*预处理*/#include#include#define uchar unsigned char#define nop _nop_()sbit CS = P30;sbit CLK = P31;sbit DIDO = P32;/*对ADC0832初始化*/void dac0832_init(void)CS = 1;nop;CLK = 1;CS = 0;/*对转换CH0通道的模拟信号*/uchar dac0832_ch0(void)/包含11个CLK下降沿uchari,dat1;dac0832_init();DIDO =1;CLK = 0;nop;CLK = 1;nop;/SCK第1个下降沿来到时,DI =1启动DAC0832DIDO = 1;CLK= 0;nop;CLK = 1;nop;/SCK第2个下降沿DIDO =0;CLK = 0;nop;CLK = 1;nop;/SCK第3个下降沿,发送1、0选择通道ch0DIDO = 1;/释放总线for(i = 0;i 8;i+)/SCK第4个下降沿到第11个下降沿,CLK =0;nop;if(DIDO)dat1= dat1 | 0x01;CLK =1;nop;dat1 =dat1 1;return(dat1);CS = 1;/*结束*/A/D转换器TLC549(项目13.2)一:电路原理图TLC549可方便地与具有串行外围接口(SPI)的单片机或微处理器配合使用,也可与51系列通用单片机连接使用。为了验证TLC549驱动程序的的可靠性,可以在ADC0832应用电路显示部分基础上连接TLC549,TLC549与51系列单片机的接口如图5-4-5所示。其中TLC549的CS、DATA_OUT(SDO)、I/O_CLOCK分别连接单片机的P3.4、P3.5、P3.7口。模拟电压利用一个电位器PV1产生,当调节电位器中心抽头的位置时,模拟电压变换范围我05V,经过TLC549转换后的8位数据通过串行传输方式给单片机,单片机显示数据范围为0255,为了得到一个电压数字检测目的,本例然数码管显示电压值。需要通过程序计算获得。主程序/*预处理*/#include#includeTLC549.c#define uchar unsigned char#define uint unsigned intcode ucharseven_seg = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;uchar cp1,cp2;uint dat_ad;/*T0初始化*/void timer0_isr(void) interrupt 1/timer0中断服务函数TL0= (65536 - 5000) % 256;TH0= (65536 - 5000) / 256;cp1+;if(cp1= 100) /0.5秒cp1= 0;dat_ad = tlc549_ad();dat_ad= dat_ad * 1.96;/数据255对应模拟电压5VP0= 0xff;/仿真时用于消隐switch(cp2)case0: P0 = seven_segdat_ad % 10;P2 = 0x01; break;case1: P0 = seven_segdat_ad / 10 %10;P2 = 0x02; break;case2: P0 = seven_segdat_ad / 100&0x7f;P2 = 0x04; break;/加上小数点cp2+;if(cp2= 3)cp2= 0;/*T0中断服务函数*/void timer0_init (void)/timer0中断初始化函数TMOD= 0x01;TL0= (65536 - 5000)%256;TH0= (65536 - 5000)/256;ET0= 1;EA= 1;TR0= 1;/*主函数*/void main(void)/主程序timer0_init();tlc549_init();while(1);/*结束*/TLC549子程序TLC549程序依照TLC549的时序和操作过程设计,程序包含器件初始化函数和数据转换函数,程序清单如下:/*预处理*/#include #define uchar unsigned charsbit sd = P35;/数据线sbit cs = P34;/片选sbit scl = P37;/I/O口时钟/*对TLC549初始化*/void tlc549_init(void)cs= 1;/初始化,启动scl = 0;cs = 0;/*对TLC549数据转换*/uchar tlc549_ad(void)/TLC549

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论