<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> Arduino >> 瀏覽文章

        AVR atmega 328P在Atmel Studio6下的ADC轉換代碼

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年04月25日   【字體:

         筆者才疏學淺,只會用as6, 所以為幫助后來者學習使用as6 ,在本機調試成功avr328p的AD代碼發出來供大家參考,如有不足,歡迎指正

         
        # define F_CPU 16000000UL//定義CPU頻率,本人用5v arduino pro mini的最小系統版,所以頻率16M
        #include //使用統一的頭文件  這是與ICC AVR編譯器  不同的地方
        #include //這個頭文件可以使用系統自己帶的 _delay_us();_delay_ms();兩個延時函數
        #include //含有中斷的宏定義 有些中斷聲明發生變化
         
        #define uchar unsigned char
        #define uint unsigned int
         
         
        void AD_Init(void)
        {
         //參考電壓AVCC  要加電容穩壓,左對齊,ADC5單端輸入
         ADMUX |= (0<<REFS1)|(1<<REFS0)|(1 << ADLAR) ;//(1 << MUX0)
         //AD使能, 連續轉換,中斷使能,32分頻, 6M / 32 = 187.5khz
         ADCSRA |= (1 << ADEN) | (1 << ADATE) | (1 << ADIE) | (1 << ADPS2) | (1 << ADPS0);
         //AD開始轉換
         ADCSRA |= (1 << ADSC);
        }
         
        int main(void)
        {
         
         DDRC=(0<<PC0);
         PORTC=(0<<PC0);//注意adc輸入口的設置  輸入0
         
         //AD初始化
         AD_Init();
         
         
         //開總中斷
         sei();
         
         while(1);
         
         
         return 0;
        }
         
        int result = 0;
         
         
        ISR(ADC_vect)//中斷函數命名方式的變化
        {
         result = ADCH;
         //result = result * 500 / 255;
         if(result>=128)
         {
          DDRB=(1<<PB5);
          PORTB=(1<<PB5);//檢測led的變化  因為pb5  接有led
         }
         else
         {DDRB=(0<<PB5);
          PORTB=(0<<PB5);//微亮
          
         }
         }
         
         
        #include
         
         
         
         
        void AD_Init(void)
        {
         //參考電壓AREF,左對齊,ADC5單端輸入
         ADMUX |= (0<<REFS1)|(1<<REFS0)|(1 << ADLAR) ;//(1 << MUX0)
         //AD使能, 連續轉換,中斷使能,32分頻, 6M / 32 = 187.5khz
         ADCSRA |= (1 << ADEN) | (1 << ADATE) | (1 << ADIE) | (1 << ADPS2) | (1 << ADPS0);
         //AD開始轉換
         ADCSRA |= (1 << ADSC);
        }
         
        int main(void)
        {
         
         DDRC=(0<<PC0);
         PORTC=(0<<PC0);
         //LCD初始化
         
         //AD初始化
         AD_Init();
         
         
         //開總中斷
         sei();
         
         while(1);
         
         
         return 0;
        }
         
        int result = 0;
         
         
        ISR(ADC_vect)
        {
         result = ADCH;
         //result = result * 500 / 255;
         if(result>=128)
         {
          DDRB=(1<<PB5);
          PORTB=(1<<PB5);
         }
         else
         {DDRB=(0<<PB5);
          PORTB=(0<<PB5);//微亮
          
         }
         }
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮