관리 메뉴

드럼치는 프로그래머

[마이크로프로세서 응용설계] 실습자료 - ADC_channel 본문

★─Multi Media/☆─3학년 1학기

[마이크로프로세서 응용설계] 실습자료 - ADC_channel

드럼치는한동이 2008. 10. 13. 19:46

#include <iom128.h>
#include <ina90.h>

#define ON                 1
#define OFF                0
#define DEF_USE            1
#define DEF_NOTUSE         0
#define UINT8              unsigned char

#define Set_pullup(x)         {SFIOR_PUD = !x; }
#define Set_fnd(UINT8)  PORTB = UINT8 & 0xff

const UINT8   BCD2FND[10] =
        { 0x7d,  // 0111 1101 0
   0x0c,  // 0000 1100 1
   0xb5,  // 1011 0101 2
   0x9d,  // 1001 1101 3
   0xcc,  // 1100 1100 4
   0xd9,  // 1101 1001 5
   0xf9,  // 1111 1001 6
   0x4d,  // 0100 1101 7
   0xfd,  // 1111 1101 8
   0xdd,  // 1101 1101 9
};

// ADC Interrupt service routine
#pragma vector = ADC_vect
__interrupt void adc_isr(void)
{
        __disable_interrupt();
        UINT8 temp8;
        temp8 = ADCH / 26;
        Set_fnd(BCD2FND[temp8]);
 ADCSRA_ADIE = 1; 
        __enable_interrupt();
}

void init_mcu()
{
    Set_pullup(DEF_USE); 

    DDRB = 0xff;
    PORTB = 0xff;
    DDRF &= 0xfe;
}

void main(void)
{
        init_mcu();
       
        ADMUX=0x20;       //      11100000
                          //      ADMUX_REFS1  = 1;
                          //      ADMUX_REFS0  = 1;
                          //   ADMUX_ADLAR  = 1;
                          //      ADMUX_MUX4   = 0;
                          //      ADMUX_MUX3   = 0;
                          //      ADMUX_MUX2   = 0;
                          //      ADMUX_MUX1   = 0;
                          //      ADMUX_MUX0   = 0;

        ADCSR=0xef;       //      11101111
                          //      ADCSRA_ADEN  = 1;    
                          //      ADCSRA_ADSC  = 1;
                          //      ADCSRA_ADFR  = 1;
                          //      ADCSRA_ADIF  = 0;
                          //      ADCSRA_ADIE  = 1;
                   //      ADCSRA_ADPS2 = 1;
                   //      ADCSRA_ADPS1 = 1; 
                   //      ADCSRA_ADPS0 = 1;
       
        __enable_interrupt();
       
        while(1)
 {
                __watchdog_reset();
 }
}

Comments