久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6218|回復: 1
收起左側(cè)

大家好,我是新手一枚,遇到關于ADC模塊、及中斷問題,麻煩大家?guī)兔纯,不勝感激?/span>

[復制鏈接]
ID:65825 發(fā)表于 2014-9-5 10:04 | 顯示全部樓層 |閱讀模式
程序目的:
當ADC采樣值Temp與參考值target的差在給定區(qū)間范圍內(nèi)時,無操作;
當ADC采樣值與參考值target的差超出區(qū)間上限時,4個LED燈向一個方向輪留滅(同時,逐步增大target的值,目的是使得兩者的差最后停在區(qū)間內(nèi));
同理,當兩者差低于區(qū)間下限時,4個LED燈向另外一個方向輪留滅(同時,逐步減小target的值,目的是使得兩者的差最后停在區(qū)間內(nèi));

問題所在:
我們在改變模擬信號大。-800mV~1200mV)的過程中,發(fā)現(xiàn)一開始LED會按著預想的根據(jù)三種情況分別停止不動、正向流動、或者反向流動。但是幾秒后LED 就停滯在任意一種狀態(tài)了,然后不管怎樣改變模擬信號,LED都無動于衷。
我們猜測可能是哪里進入死循環(huán)了,也可能是我們的兩個中斷程序有問題(timerB的中斷是0.5秒一次,就是LED輪流滅掉的間隔時間),但是我們不知道具體問題在哪里。

跪求各位大俠拔刀相助,感恩不盡!!!
#include "in430.h"

#include <msp430x14x.h>
#include "Config.h"


//////////////////////////////////////////////   變量聲明



uchar flag2;
static uchar Flag=0;
uint count;
uint TEMP;
uint target;

////////////////////////////////////////////////////////////  函數(shù)定義

void ADC_Init()
{
  

                                     //選擇ADC通道,設置對應IO口的功能模式
  ADC12CTL0|= ADC12ON + SHT0_7 + REF2_5V + REFON;//+ADC12OVIE; //ADC電源控制開,16個CLK

  ADC12CTL1|= ADC12SSEL1 + ADC12SSEL0;            //SMCLK做時鐘源
  ADC12MCTL0= SREF0 + INCH_0;                     //參考控制位及通道選擇
  ADC12IE|= 0x01;                                 //中斷允許
   ADC12CTL0|= ENC;
                               //使能轉(zhuǎn)換器
}

void Port_Init()
{  
  
  P6DIR |=0xff;
  P6OUT &= 0x00;
  
  P6DIR &= ~BIT0;
  P6SEL|=0x01;
  
}

void motor_zheng(unsigned int LED_NUM)            // LED正向轉(zhuǎn)
{
    switch(LED_NUM)
    {
        case 0
          LED8 =BIT4;
          break;
        case 1:
          LED8 =BIT;
          break;
        case 2:
          LED8 =BIT6;
          break;
        case 3:
          LED8 =BIT7;
          break;
   
         
        default
          _NOP();
          break;
    }
}

void motor_fan(unsigned int LED_NUM)              // LED反向轉(zhuǎn)
{
    switch(LED_NUM)
    {
        case 0:
          LED8 =BIT7
          break;
        case 1:
          LED8 =BIT6
          break;
        case 2:
          LED8 =BIT5
          break;
        case 3:
          LED8 =BIT4
          break;
        default:
          _NOP()
          break;
    }
}


void motor_control(uint t)            // LED在三種情況下的運動模式 綜合函數(shù)——control
{
  if(flag2==1)
  {
   if(TEMP<0x0800)
   {
    if(0x0800-TEMP>0x0100)
    {
      count++;
      motor_zheng(count%4);  
    }
   
    else
     _NOP()
   
   else
   {
     if(TEMP-0x0800>0x0100)
    {
      count++;
      motor_fan(count%4);
    }
    else
       _NOP()
   }
   flag2=0
  }
  else
    _NOP();
}






//***********************************************************************
//                   系統(tǒng)時鐘初始化,外部8M晶振
//***********************************************************************
void Clockk_Init()
{
  uchar i;
  
  BCSCTL1 |=DIVA_3;
  BCSCTL1&=~XT2OFF;                 //打開XT2振蕩器
  BCSCTL2|=SELM1+SELS;              //MCLK為8MHZ,SMCLK為8MHZ
  do{
    IFG1&=~OFIFG;                   //清楚振蕩器錯誤標志
    for(i=0;i<100;i++)
       _NOP();
  }
  while((IFG1&OFIFG)!=0);           //如果標志位1,則繼續(xù)循環(huán)等待
  IFG1&=~OFIFG;
}


void timerb_init()
{
  TBCTL=TBCLR+TASSEL_1+ID_2+MC_1;
  TBCCTL0= CCIE;
  TBCCR0=512;
}

///////////////////////////////////////////////////////////////////////////////////////////    main 函數(shù)

int main( void )
{

  WDTCTL = WDTPW + WDTHOLD;
  timerb_init();
  Clockk_Init();
  Port_Init();
  ADC_Init();
  _EINT();                            //使能中斷
  Flag=1;  
  
  target=0x0800;
                          
while(1)
  {
    while(Flag==1)
    {
      ADC12CTL0 |= ADC12SC;           //開啟轉(zhuǎn)換

      ADC12CTL0 &= ~ADC12SC;          //清零
      Flag=0;                         //清零標志位
     
    }
    motor_control(target);
   
  }

  return 0;
}


//*************************************************************************
//    ADC中斷服務程序
//*************************************************************************
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
      
  while(ADC12OVIE==1){P6OUT &=~BIT3;};

P6OUT |=BIT3;
  Flag = 1 ;
  TEMP = ADC12MEM0 ;                     //讀取ADC轉(zhuǎn)換值
if(TEMP>0x0800)
  P6OUT &= ~BIT2;
  else
    P6OUT |= BIT2;
     
}

#pragma vector=TIMERB0_VECTOR
__interrupt void TIMERB_ISR(void)
{
      flag2=1;
      TBCTL &=~TBIFG;
}

回復

使用道具 舉報

ID:66032 發(fā)表于 2014-9-13 15:40 | 顯示全部樓層
你的算法是錯的, 800轉(zhuǎn)為0x0320, 1200 轉(zhuǎn)為0x04B0, 你的temp值是在0~4096之間的數(shù),可以以任何形式比較判斷。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲美女天堂网 | 国产欧美精品区一区二区三区 | 亚洲精品中文字幕 | av资源在线看 | 日韩中文在线视频 | 国产一级片一区二区 | 国产亚洲精品精品国产亚洲综合 | 国产精品日韩欧美一区二区 | 一道本不卡视频 | 国产精品久久精品 | 成人在线影视 | 国产在线观看一区二区三区 | 欧美在线色 | 欧美精品在线观看 | 亚洲九九精品 | 激情在线视频网站 | 久久国产精品一区二区三区 | 精品久久影院 | 精品国产乱码久久久久久久久 | 国产aⅴ精品 | 欧美8一10sex性hd | 一级毛片免费 | 日韩精品免费在线观看 | 久久人人爽人人爽人人片av免费 | 日本黄色影片在线观看 | av在线影院| 久久久av| 久久com | 精品国产欧美在线 | 国产成人久久精品一区二区三区 | 久久综合狠狠综合久久 | 国产乱码精品1区2区3区 | 高清av电影 | 国产精品久久久久久久午夜片 | 五月激情六月婷婷 | 男女视频在线观看 | 粉嫩一区二区三区性色av | 亚洲在线免费 | 中文字幕在线播放第一页 | 亚洲欧美精品在线 | 麻豆av在线 |