一段MSP430G2553通过ADC采集数据发送到电脑端的程序

2019-03-24 10:10发布

这是在网上找到并略加修改的一段代码 通过串口调试助手测试的时候 设定的ADC输入端未连接任何信号源 单片机不断发出数据   也不知道是什么东西  求大神指导 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
still1945
2019-03-24 19:04
#include<MSP430G2553.h>unsigned int k;char str[]="00.0";long temp;unsigned char tmp[3];long IntDeg;void ADC10_ISR(void);void ADC10_init(void);void Init_uart0(void);

void Uart0Sends(char *s){  while(*s!='')  //查找字符。  {    UCA0TXBUF=*s;    while((IFG2&UCA0TXIFG)==0); //查询发送是否结束,寄存器为空置位,满为复位??    IFG2&=~UCA0TXIFG; //清除发送一标志位,多余的语句,发送完毕    s++;  }}

void main(){        WDTCTL=WDTPW+WDTHOLD;        ADC10_init();          BCSCTL1 = CALBC1_1MHZ;          DCOCTL  = CALDCO_1MHZ;                  P1DIR|=BIT0;        Init_uart0();
        _EINT();    while(1)    {      ADC10CTL0 |= ENC + ADC10SC;            // Sampling and conversion start   采样开始, //     _bis_SR_register(CPUOFF + GIE);                // LPM0 with interrupts enabled      __delay_cycles(1000);      //-----ADC转换完成中断唤醒CPU后才执行以下代码-----
      temp = ADC10MEM;      //读取AD采样值//      IntDeg= temp*4225/1024 - 2777;//转换为摄氏度,并10倍处理      IntDeg=((temp*33)/1023);//if(IntDeg>=200)//                       P1OUT |= BIT0;//                     else//                       P1OUT &= ~BIT0;      str[0]=IntDeg/100+0X30;     str[1]=IntDeg%100/10+0X30;     str[3]=IntDeg%100%10+0X30;
//  IntDeg=-123;                                                                        //由于难以获得负温,直接给负值以测试LCD显示    }
}
/****************************************************************************************************** * 名       称:ADC10_init(void) * 功       能:初始化ADC10采集内部温度传感器,单次手动采样 * 入口参数:无 * 出口参数:无 * 说       明:直接从CCS的Example中移植过来 * 范       例:无 ******************************************************************************************************/void ADC10_init(void){        P1DIR&=~BIT4;        ADC10CTL0 &= ~ENC;  //  关闭AD转换器        ADC10CTL0 = ADC10IE + ADC10ON + REFON + ADC10SHT_3 + SREF_1;//1    允许ADC10中断   1    ADC10开启 ,打开基准源    64个ADC10CLK周期    ADC10CTL1 = CONSEQ_0 + ADC10SSEL_0 + ADC10DIV_3 + SHS_0 + INCH_4;//单通道单次采样模式     ADC10OSC  8分频     ADC10SC位      __delay_cycles(30000);    ADC10CTL0 |= ENC;   //开启AD转换器}/****************************************************************************************************** * 名       称:ADC10_ISR_HOOK * 功       能:ADC转换完成后唤醒CPU * 入口参数:无 * 出口参数:无 * 说       明:直接从CCS的Example中移植过来 * 范       例:无 ******************************************************************************************************/#pragma vector=ADC10_VECTOR__interrupt void ADC10_ISR_HOOK(void){         Uart0Sends(str);        _bic_SR_register_on_exit(LPM4_bits);}/********************************************************************************************************** * 串口初始化********************************************************************************************************* */void Init_uart0(){  UCA0CTL1|=UCSWRST;  P1SEL|=BIT1+BIT2; //将P1.1 P1.2设为第二功能  P1SEL2|=BIT1+BIT2;//系统组合  P1DIR  |= BIT2;           //P1.2  UART_TX  P1DIR  &=~BIT1;           //P1.2  UART_RX  UCA0CTL0&=~UC7BIT;//字符长度为8  UCA0CTL1|=UCSSEL_2;//选择系统时钟  UCA0BR0=0x68;  //波特率为9600  UCA0BR1=0;  UCA0MCTL=0X40;//UCA0MCTL=UCBRS0;  UCA0CTL1&=~UCSWRST;
  IE2|=UCA0RXIE;//开接收使能
}



#pragma vector=USCIAB0RX_VECTOR__interrupt void usart0_rx(void){  while((IFG2&UCA0RXIFG )==0);//接收一位然后给发送缓存器 再中断再接受 再发送的过程  IFG2&=~UCA0RXIFG ;

  Uart0Sends(str);
  UCA0TXBUF = UCA0RXBUF;}



一周热门 更多>

相关问题

    相关文章