[求助] 求大神指教msp430采样频率怎样改,目前采样频率是50hz

石油大学   2014-8-17 20:18 楼主


#include //引用头文件 #define uchar unsigned char #define uint unsigned int #define CLR_RS P1OUT&=~BIT1 //RS = P1.1 #define SET_RS P1OUT|=BIT1 #define CLR_RW P1OUT&=~BIT2 //RW = P1.2 #define SET_RW P1OUT|=BIT2 #define CLR_EN P1OUT&=~BIT4 //EN = P1.4 #define SET_EN P1OUT|=BIT4 #define DATA P2OUT int p,ad,sum=0,v,i=0,state=0,b,a[100],j=0; uchar dis_num[],adc[]; void delay(long unsigned int time) { while(time--); //延时子程序 } void WriteCommandLcd(unsigned char wdata)//向1602液晶写入命令子程序; { CLR_RS; //RS清零,代表命令; CLR_RW; //RW清零; CLR_EN; //使能E清零; delay(100); //短暂延时,代替检测忙状态 SET_EN;//使能E置1; DATA=wdata;//送出命令或数据 delay(100);//短暂延时,代替检测忙状态 CLR_EN;//使能E清零,下降沿将命令或数据送入1602; } void WriteDataLcd(unsigned char wdata)//向1602液晶写入数据子程序; { SET_RS;//RS置1,代表数据; CLR_RW;//RW清零; CLR_EN;//使能E清零; delay(100); //短暂延时,代替检测忙状态 SET_EN;//使能E置1; DATA=wdata;//送出命令或数据 delay(100);//短暂延时,代替检测忙状态 CLR_EN;//使能E清零,下降沿将命令或数据送入1602; } //LCD初始化 void lcd_init(void) { DATA = 0; delay(1000); WriteCommandLcd(0x38);//显示模式设置,设置为16X2显示,5X7点阵,8位数据接口 delay(500); delay(500); WriteCommandLcd(0x01); //显示清屏 WriteCommandLcd(0x0c); //开显示,显示光标,光标不闪烁; WriteCommandLcd(0x06); //读写操作时地址自动加1 } /************************************************** ** 函数名称: display_xy ** 入口参数:x(unsigned char型),y(unsigned char型) ** 出口参数:无 ** 功能描述: 设置光标位置, x是行号,y是列号 ****************************************************/ void display_xy(unsigned char x,unsigned char y) { if(y==0x01) { x = x + 0x80+0x40; } else { x = x+0x80; } WriteCommandLcd(x); } /********************************************************************* ** 函数名称: display_string ** 入口参数:x(unsigned char型),y(unsigned char型),s(指针型) ** 出口参数:无 ** 功能描述: 在具体位置显示字符串,以/0结束,x是列号,y是行号 **********************************************************************/ void display_string(unsigned char x,unsigned char y,unsigned char *s) { display_xy(x,y); while(*s) { WriteDataLcd(*s); s++; } } void count_num(unsigned int n) //显示无符号数字 { dis_num[0]=n/1000+0x30; dis_num[1]=n/100%10+0x30; dis_num[2]=n/10%10+0x30; dis_num[3]=n%10+0x30; dis_num[4]='m'; dis_num[5]='V'; dis_num[6]='\0'; } int main(void) { WDTCTL = WDTPW + WDTHOLD;//关闭看门狗 DCOCTL = CALDCO_1MHZ; BCSCTL2|=SELM_0; P2SEL=0; //P2做普通IO口 P2DIR = 0xff; //设置P2口为输出状态; P1DIR|=BIT1+BIT2+BIT4; //控制口输出 P1DIR&=~BIT0; //将P1.0设置为输入用于电压采集 P1IE|=BIT3; P1IES&=~BIT3; ADC10CTL0=SREF_1+ADC10SHT_0+REFON+REF2_5V+ADC10ON+ADC10IE;//设置参考电压、采样保持时间、时钟 16xADC10CLK、开中断 ADC10CTL1=INCH_0+ADC10DIV_0+ADC10SSEL_2; //设置通道。INCH_0就是P1.0引脚输入 ADC10AE0|=BIT0; //模拟输入使能 _EINT(); ADC10CTL0|=ADC10SC+ENC; // 开始进行转换 delay(500); lcd_init(); //初始化1602子程序; delay(50000); display_string(0,0,"The Voltage is:");//在第一行(0)左数第1个(0)位置显示; while(1) { ADC10CTL0|=ADC10SC+ENC; display_string(0,0,"The Voltage is:");//在第一行(0)左数第1个(0)位置显示; if(v>2498) display_string(4,1,"worr"); else { if(j<100) { a[j]=v; j++; } else j=0; count_num(v); display_string(4,1,dis_num); delay(80000); } } } #pragma vector=ADC10_VECTOR //中断程序z __interrupt void ADC (void) { // ADC10CTL0|=ADC10SC+ENC; if(P1IFG&BIT3) { state=1; P1IFG&=~BIT3; } ad=ADC10MEM; v=ad*2.5*1000/1023; if(state==1) v=v*5; if(state==0) v=v*1; // P1IFG&=~BIT3; }

 

本帖最后由 paulhyde 于 2014-9-15 03:03 编辑

回复评论 (3)



开连续单通道连续转换

 

本帖最后由 paulhyde 于 2014-9-15 03:03 编辑
点赞  2014-8-18 00:17


什么意思?

 

本帖最后由 paulhyde 于 2014-9-15 03:03 编辑
点赞  2014-8-18 09:15


什么意思?能说明白点吗?

 

本帖最后由 paulhyde 于 2014-9-15 03:03 编辑
点赞  2014-8-18 09:15
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复