g2553的AD转换的程序怎么写啊,居然是10位的,找了好多程序都不对。。

g2553的AD转换的程序怎么写啊,居然是10位的,找了好多程序都不对。。,第1张

#include <msp430g2553.h>

#include "12864.h"

float temp

float voltage

void main(void)

{

unsigned char s1[] ={"宝鸡文理学院"}

unsigned char s2[] ={"MSP430GLAUNCHPAD"}

unsigned char s3[] ={"测得当前峰峰值:"}

unsigned char s4[] ={"V"}

WDTCTL = WDTPW+WDTHOLD// 停止看门狗定时器

P2SEL=0x00//p2.6和p2.7管教默认的第一功能是外部晶体振荡器的接口,设置第二功能-通用IO口

P2DIR |= BIT6+BIT7//设置P2.6,P2.7位输出

P1SEL = 0x01//将IO选择为AD输入

P1DIR = 0

/*将内部DCO校准至1MHz*/

BCSCTL1 |= CALBC1_1MHZ

DCOCTL |= CALDCO_1MHZ

BCSCTL2 |= SELM_0//MCLK采用1M的内部DCO

BCSCTL2 |= DIVS_2//SMCLK采用250K的时钟

init_lcd()

delay_ms(10)

wr_string(1,0,s1)//写参数格式:wr_string(uchar x,uchar y,uchar *p)

wr_string(0,1,s2)

wr_string(0,2,s3)

ADC10CTL0 |= SREF_1+REF2_5V+REFON+ADC10IE//将AD10基准设置为2.5V 开启AD允许中断

ADC10CTL0 |= ADC10SHT_0+MSC//打开AD转换,过采样率设置为4个采样周期

ADC10CTL1 |= ADC10SSEL_3+SHS_0//选择250K的采样时钟,用ADC10SC触发采集

ADC10CTL1 |= CONSEQ_2+INCH_0//采样模式,通道0

ADC10CTL0 |= ADC10ON

ADC10AE0 |= 0xFF

ADC10CTL0 |= ADC10SC+ENC

_EINT()//允许中断

while(1)

{

float max[10]

float ma=0.

float dave=0

uint i,j

delay_ms(50)

ADC10CTL0 |= ENC+ADC10SC

for(j=0j<10j++)

{

for(i=0i<500i++)

{

temp = ADC10MEM

voltage = temp*25/10230//计算采集到的电压

if(ma<=voltage)

{

ma = voltage//取峰值电压

}

max[j] = ma

}

dave += max[j]/10//求平均值

}

wr_float(1,3,dave)

wr_string(5,3,s4)

}

}

//AD中断服务程序

#pragma vector=ADC10_VECTOR

__interrupt void ADC10_ISR (void)

{

__bic_SR_register_on_exit(LPM0_bits)//将SR里的CPUOFF位置0

}

//定时器输出单元

#pragma vector=TIMER0_A0_VECTOR

__interrupt void ta0_isr(void)

{

TACTL = 0

__bic_SR_register_on_exit(LPM0_bits)//将SR里的CPUOFF位置0

}

用十位的二进制,除以10,余数就是个位;

商,继续除以10,余数就是十位;

依次类推,可得出百位、千位。

十位的二进制,除以10,可以使用二字节除以一字节的除法子程序,这个子程序可见我前几天写出的答案:

http://zhidao.baidu.com/question/130203351.html

---------------------

一个高8位和一个低2位(******xx)这两者如何结合?

呵呵,这应该另外提出一个新问题。

// 定义与 ADC 有关的特殊功能寄存器

sfr P1_ASF = 0x9d//A/D转换功能允许寄存器

sfr ADC_CONTR = 0xbc//A/D转换控制寄存器

sfr ADC_RES = 0xbd //A/D转换结果寄存器

sfr ADC_RESL = 0xbe //A/D转换结果寄存器

uint8 get_AD(uint8 channel)

{

ADC_RES = 0

P1 |= (0x01 <<channel)//要设置为 A/D 转换的P1.x 口,先设为高

P1_ASF &= (~(0x01 <<channel))//设置 A/D 转换输入脚

ADC_CONTR =0xa8 | channel// 选择 A/D 当前通道

while (!(ADC_CONTR &0x10)) // 等待A/D 转换结束

{

}

ADC_CONTR &= 0xF7//1111,0111 令 ADC_START = 0, 关闭A/D 转换,

return (((unint16)ADC_RES)<<2 | (0xfc &ADC_RESL)// 返回 A/D 转换结果

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8128395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存