单片机原理与应用_第1页
单片机原理与应用_第2页
单片机原理与应用_第3页
单片机原理与应用_第4页
单片机原理与应用_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理及应用,主讲:陈桂友 博士,E-mail: 网址:,山东大学网络教育学院,ADC模块应用举例,MSC1211单片机ADC模块的使用编程要点如下: 1)打开ADC(设置PDCON) 2)设置基准电压、缓冲器(设置ADCON0) 3)设置模拟采样频率(设置ACLK) 4)选择输入端(设置ADMUX) 5)设置抽取因子(设置ADCON2、ADCON3) 6)设置极性、数字滤波模式、校准模式(设置ADCON1) 7)如果采用中断方式,还需进行中断设置(设置AIE、EAI),【例10-1】 编程实现利用MSC1211单片机集成的温度传感器测量芯片温度。 解:MSC1211中集成有温度传感器,可

2、以用来测量温度。其温度测量基于第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

3、,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 /被测电压采样个数,while(1) /进入主循环 ave=0; /被测电压值清

4、零 for(i=0;isamples;i+) while(!(AIE ,其中,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

5、.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 (MS

6、BLSB) ; 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

7、 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】 编程实现利用模拟输入通道测试电流源判断传感器的模拟信号是否

8、正确接入到ADC中。 解:程序代码如下: #include /包含相关头文件 #include #include #include #define LSB 298.0232e-9 /LSB5.0/224,定义满量程为5V的最小分辨率 extern void autobaud(void); /定义自动波特率 extern long bipolar(void); /定义结果的双极性输入函数 void main(void) float sample; int decimation; decimation=1728; /抽取因子为1728 CKCON=0; /外部存储器访问不扩展 autobaud()

9、; /在PC上按回车时,设置串口通信波特率 printf(“brown-Out Detectionn”); USEC=10; /确定Flash的写入时钟系统时钟/(USEC+1) ACLK=9; /求fACLK=1,105,920Hz,fMOD=fACLK/64=17,280Hz PDCON /声明外部函数 extern void autobaud(void); float result; /定义变量 char AD_done; void AUXinterrupts(void)interrupt 6 using 1 /中断服务程序 switch(PAI) case 6: /处理AD中断 res

10、ult=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和系统定时器 ACLK1; /模拟信号采样频率fMOD=(1.8432MHz/2)/64=14400Hz ADMUX=0 x76; /AIN7同相输入通道,AIN6反相输入通道 ADCON0=0 x3

11、0; /内部电压基准2.5V,关闭输入缓冲器,PGA=1 ADCON1=0 x01; /双极性,自动稳定模式,偏移增益自校准 ADCON2=demication,printf(“ADC Interrupt Lab.n”); for(i=0;i4;i+) /等待校准 while(!(AIE /每行显示4个数据 ,【例10-4】 编程实现MSC1211的同步采样。 解:在实际应用中,有时需要多个器件同步进行数据转换。为了使多个MSC1211同步转换,首先要关闭每个器件的ADC,也就是停止其转换时钟,然后同步启动ADC。为了实现这一功能,可以使用一个输入引脚作为同步信号输入端。当准备同步转换时,主器

12、件将该信号拉高,从器件发现同步输入信号变高后,等待下一个ADC转换完毕且ADC中断后,将PDCON的PDADC位置1,停止ADC。从器件继续等待同步信号输入,当该输入再次变低时,PDAD位清0。启动ADC。实现MSC1211的同步数据转换需要下列步骤: 1)将PDADC清0,启动ADC。 2)监控同步输入状态。 3)当同步输入为1时,等待ADC中断,然后将PDADC置1,停止ADC。 4)等待同步输入信号为0时,将PDADC清0,重新启动ADC。 5)所有ADC转换与同步输入信号同步,即所有主从MSC1211都和同步信号同步。 实现同步A/D转换的程序代码如下: #include /包含相关头

13、文件 #include #include #include #define LSB 298.0232e-9 /LSB5.0/224,定义满量程为5V的最小分辨率 extern void autobaud(void); /定义自动波特率 extern long bipolar(void); /定义结果的双极性输入函数,void main(void) float volts,temp,resistance,ratio,lr,ave; int i,k,samples,decimation; decimation=1728; /抽取因子为1728 autobaud(); USEC=10; /确定Fla

14、sh的写入时钟系统时钟/(USEC+1) ACLK=9; /求fACLK=11,059,20Hz,fmodfACLK/64=17,280Hz PDCON /启动ADC,实现多个MSC1211同步转换自动 ,【例10-5】 编程实现利用求和寄存器进行求和计算。 解:对求和/移位控制寄存器SSCON初始化时,必须先向其写入0,这样可以清除32位求和寄存器中的内容。然后设置SSCON为取256个连续ADC转换结果的平均值的方式。 程序代码如下: #include /包含相关头文件 #include extern void autobaud(void); /声明外部函数 extern long bipolar(void); int power(int base,int n) /求base的n次方 int i,p=1; for(i=1;i=n;+i) p=p*base; return p; void main(void) signed long data result,dummy; int decimation,shift; char k; PDCON ,pri

温馨提示

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

评论

0/150

提交评论