관리 메뉴

드럼치는 프로그래머

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

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

[마이크로프로세서 응용설계] 실습자료 - 기말고사

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

ADC를 이용하여 FND 값 출력


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

#define DEF_USE   1
#define DEF_NOTUSE  0

#define ON   1
#define OFF   0

#define UINT8                   unsigned char
#define Set_pullup(x)  {SFIOR_PUD = !x;}

#define Get_id_hi()  (~PINA & 0xff)
#define Get_id_low()  (~PINC & 0xff)


// input setting
#define Get_sw0()               !PIND_Bit0
#define Set_fnd(UINT8)  PORTB = UINT8 & 0xff

const UINT8   BCD2FND[6] =
        { 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
};

// External Interrupt O service routine
#pragma vector = INT0_vect
__interrupt void ext_intO_isr(void)
{
        __disable_interrupt();
       
 if ( Get_id_hi() == Get_id_low() ) 
        {
              UINT8 temp8;
              temp8 = ADCH / 43;
              Set_fnd(BCD2FND[temp8]);
       ADCSRA_ADIE = 1; 
        }
       
        __enable_interrupt();
}

void init_mcu()
{
    Set_pullup(DEF_USE); 
    DDRD = (UINT8) ~(0x61);   // ~(01100001) = (10011110) = 0x9e 
    DDRE = (UINT8) ~(0x87);   // ~(10000111) = (01111000) = 0x78
    PORTD = 0x61;             // 01100001
    PORTE = 0x18;             // 00011000

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

void main(void)
{
 // 초기화
        init_mcu();
       
        EIMSK |= 0x01;
        EICRA |= 0x02;
       
        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