单片机原理与应用(精品)

上传人:仙*** 文档编号:244517671 上传时间:2024-10-04 格式:PPT 页数:17 大小:98KB
返回 下载 相关 举报
单片机原理与应用(精品)_第1页
第1页 / 共17页
单片机原理与应用(精品)_第2页
第2页 / 共17页
单片机原理与应用(精品)_第3页
第3页 / 共17页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,版权所有,http:/,单片机原理及应用,主讲:陈桂友 博士,E-,mail:,网址:,http:/,山东大学网络教育学院,ADC,模块应用举例,MSC1211,单片机,ADC,模块的使用编程要点如下:,1,)打开,ADC,(设置,PDCON,),2,)设置基准电压、缓冲器(设置,ADCON0,),3,)设置模拟采样频率(设置,ACLK,),4,)选择输入端(设置,ADMUX,),5,)设置抽取因子(设置,ADCON2,、,ADCON3,),6,)设置极性、数字滤波模式、校准模式(设置,ADCON1,),7,)如果采用中断方式,还需进行中断设置(设置,AIE,、,EAI,),【例10-1】编程实现利用MSC1211单片机集成的温度传感器测量芯片温度。,解:MSC1211中集成有温度传感器,可以用来测量温度。,其温度测量基于,第,289,页中的公式。,利用公式可以把电压转化成摄氏温度,。,首先配置ADC,允许ADC进行自校验,然后进入温度的循环采样。程序代码如下:,#include,/,包含相关头文件,#include,#include,#include,#define LSB 298.0232e-9,/LSB5.0/224,定义满量程为5V的最小分辨率,extern void,autobaud(void,);/定义自动波特率,该函数存在于启动ROM中,extern long,bipolar(void,);/,定义结果的双极性输入函数,void,main(void,),float,volts,temp,resistance,ratio,lr,ave,;/,定义临时变量,int,i,k,decimation,samples,;,decimation=1728;,/抽取因子设为1728,CKCON=0;,/,外部存储器访问不扩展,autobaud,();,/,在计算机上按回车时,设置串口通信波特率,USEC=10;,/,确定flash的写入时钟,=系统时钟/(USEC+1),ACLK=9;,/,fACLK,=1,105,920Hz,fMOD=fACLK/64=17,280Hz,ADMUX=0 xff;,/,温度测试模式,PDCON&=0 xf7;,/启动ADC,ADCON0=0 x30;,/内部基准2.5V,缓冲器关,BOD关,PGA1,ADCON2=decimation /,写入抽取因子低字节,ADCON3=(decimation8)/,写入抽取因子高字节,ADCON1=0 x01;,/,双极性,自动稳定模式,偏移增益自校准,printf(,“,Cailbrating,.n,”,);,for(k,=0;k4;k+),/校准后等待4个转换周期,直到滤波器稳定,while(!(AIE,/,数据准备好,?,lr,=bipolar();,/,读取无用结果,抛弃并清除中断,samples=10;,/,被测电压采样个数,while(1),/,进入主循环,ave,=0;,/,被测电压值清零,for(i,=0;i,samples;i,+),while(!(AIE,/,等待下一个新的结果,ave,+=bipolar()*LSB;,/,读取结果并转换为电压,进行累加,/,并清除中断标志,volts=,ave,/samples;,/,求取电压的平均值,temp=ALPHA*volts-282.14;,/,由芯片电压温度曲线求取温度,printf(V,=%,f,resistance,=%,f,Temp,=%f Cn,/,打印结果,volts,resistance,temp,);,其中,bipolar函数是外部函数,包含在utilities.a51中。utilities.a51是TI公司提供的一个文件,其内容如下:,;File name:utilities.a51,;Copyright 2003 Texas Instruments Inc as an unpublished work.,;All Rights Reserved.;Revision History,;Version 1.1,;Assembler Version(,Keil,V2.38),(,Raisonance,V6.10.13),;Module Description:;ADC routines to read 24bit ADC and,;return the value as a long integer.,;*,$include(legal.a51),$include(reg1210.inc),;*,PUBLIC,unipolar,bipolar,read_sum_regs,adc_sub,SEGMENT CODE,RSEG,adc_sub,;,;unsigned long,unipolar(void,),;return the 3 byte,adres,to R4567(MSBLSB),;unsigned long,int,with R4=0,unipolar,:,mov,r4,#0,mov,r5,adresh,mov,r6,adresm,mov,r7,adresl,ret,;,;signed long,bipolar(void,),;return the 3 byte,adres,to R4567(MSBLSB),;return signed long,int,with sign,extendsion,on R4,bipolar:,mov,r4,#0,mov,a,adresh,mov,r5,a,mov,r6,adresm,mov,r7,adresl,jnb,acc.7,positive,mov,r4,#0ffh,positive:,ret,;,;signed long,read_sum_regs(void,),;return the 4 byte,sumr,to R4567(MSBLSB),;return signed long,int,sign extension done by hardware,read_sum_regs,:,mov,r4,SUMR3;,mov,r5,SUMR2;,mov,r6,SUMR1;,mov,r7,SUMR0;,ret,end,【,例,10-2】,编程实现利用模拟输入通道测试电流源判断传感器的模拟信号是否正确接入到,ADC,中。,解:程序代码如下:,#include /,包含相关头文件,#include,#include,#include,#define LSB 298.0232e-9 /,LSB,5.0/224,定义满量程为,5V,的最小分辨率,extern void,autobaud(void,);/,定义自动波特率,extern long,bipolar(void,);/,定义结果的双极性输入函数,void,main(void,),float sample;,int,decimation;,decimation=1728;/,抽取因子为,1728,CKCON=0;/,外部存储器访问不扩展,autobaud,();/,在,PC,上按回车时,设置串口通信波特率,printf(,“,brown,-Out Detectionn,”,);,USEC=10;/,确定,Flash,的写入时钟系统时钟,/,(,USEC+1,),ACLK=9;/,求,fACLK,=1,105,920Hz,,,fMOD,=fACLK/64=17,280Hz,PDCON&=0 xf7,;,/,启动,ADC,ADMUX=0 x01,;,/,通道,AIN0,和,AIN1,ADCON0=0 x70;,/内部基准2.5V,缓冲器关,BOD开,PGA1,ADCON2=decimation /,写入抽取因子低字节,ADCON3=(decimation8)/,写入抽取因子高字节,ADCON1=0 x01;,/,双极性,自动稳定模式,偏移增益自校准,while(1),while(!(AIE /,数据准备好,?,sample=bipolar()*LSB;/,读取结果并转换为电压,清除中断,printf(,“,sample,=%,f,”,sample,);,/,打印结果,if(sample,2.4),printf(,“,Open,Circuitn,”,);,/,开路,else,printf(,“,Normal,Sensor Rangen,”,);/,正常,while(!RI,);/,检测接收中断,【,例,10-3】,编程实现中断方式的,ADC,转换。具体要求是,在进行,ADC,转换时,让,CPU,在转换请求后,进入掉电模式。当,ADC,转换完毕后触发一个中断,,CPU,退出掉电模式,这样可以降低功耗。假设晶振频率为,1.8432MHz,。,解:程序代码如下:,#include /,包含相关头文件,#include,#define LSB 298e-9,extern long,bipolar(void,);/,声明外部函数,extern void,autobaud(void,);,float result;/,定义变量,char,AD_done,;,void,AUXinterrupts(void)interrupt,6 using 1 /,中断服务程序,switch(PAI,),case 6:/,处理,AD,中断,result=bipolar();,break;,case 8:/,处理秒中断,AD_done,=SECINT;,break;,default:,AD_done,=0;,break;,AI=0;/,清除辅助中断,main(void,),char,i,j,=0;,float dummy;,int,decimation;,decimation=1440;/,抽取因子,1440,PDCON=0 x75;/,启动,ADC,和系统定时器,ACLK,1,;,/,模拟信号采样频率,fMOD,=,(,1.8432MHz/2,),/64=14400Hz,ADMUX=0 x76;/AIN7,同相输入通道,,AIN6,反相输入通道,ADCON0=0 x30;/,内部电压基准,2.5V,,关闭输入缓冲器,,PGA=1,ADCON1=0 x01;/,双极性,自动稳定模式,偏移增益自校准,ADCON2=demication /,写入抽取因子低字节,ADCON3=(decimation8)/,写入抽取因子高字节,AIE=0 xA0;/ADC,中断使能,MSEC=1842;/,设置毫秒定时计数值,HMSEC=99;,SECINT=9;/,设置秒定时计数,autobaud,();,printf(,“,ADC,Interrupt Lab.n,”,);,for(i,=0;i4;i+)/,等待校准,while(!(AIE,dummy=ADRESL;,EAI=1;/,使能辅助中断,while(1),while(!(AD_done,);/,转换等待,printf(,“,%6.4ft,”,result*LSB);,AD_done,=0;,if(!(j+%4),printf(,“,n,”,);/,每行显示,4,个数据,【,例,10-4】,编程实现,MSC1211,的同步采样。,解:在实际应用中,有时需要多个器件同步进行数据转换。为了使多个,MSC1211,同步转换,首先要关闭每个器件的,ADC,,也就是停止其转换时钟,然后同步启动,ADC,。为了实现这一功能,可以使用一个输入引脚作为同步信号输入端。当准备同步转换时,主器件将该信号拉高,从器件发现同步输入信号变高后,等待下一个,ADC,转换完毕且,ADC,中断后,将,PDCON,的,PDAD,C,位置,1,,停止,ADC,。从器件继续等待同步信号输入,当该输入再次变低时,,PDAD,位清,0,。启动,ADC,。实现,MSC1211,的同步数据转换需要下列步骤:,1,)将,PDADC,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!