2011-11-19 2 views
0

두 개의 AVR 버터 플라이 보드를 구성하려면 포트 D가 첫 번째 출력 포트이고이 포트 D의 두 핀이 두 번째 AVR의 포트 B의 핀 B.4 및 B.5에 연결되도록하십시오 나비 보드. 또한이 포트 B 핀을 풀업 할 수 있습니다. 이 구성이 두 번째 AVR에 맞습니까? 내가 누락 된 것이 있습니까?AVR ATMega 169에서 PINB.4 및 PINB.5를 구성하여 입력 핀으로 작동하고 끌어 올리기를 활성화 하시겠습니까?

//Init port pins 
DDRB = 0x00; 
    PORTB |= 0X30; 

//Enable pin change interrupt on PORTB 
PCMSK1 = 0X30; 
EIFR = 0XC0; 
EIMSK = 0XC0; 

SIGNAL (SIG_PIN_CHANGE1) - PIN B.4 {...} SIGNAL (SIG_PIN_CHANGE2)의 인터럽트 핀 - 변경 {} .....

PIN B.5의 인터럽트 핀 변화

답변

1

PORT B를 올바르게 설정했지만 코딩 규칙을 조금 개선하지 않아도됩니다.

DDRB&= ~(1<<PB0)|(1<<PB1); 
PORTB|= (1<<PB0)|(1<<PB1); 

수행하려는 것을 이해하지 않는 한 인터럽트가 올바르게 구성되었다고 생각하지 않습니다.

및 PB4 PB5 각각 PCINT12 및 PCINT13에 대응한다.

핀 변경 인터럽트 활성화 1에 해당하므로이 핀을 활성화 만하면됩니다. 사용자가 수동으로 인터럽트를 트리거하기 위해 노력하지 않는 한

EIMSK = (1<<PCIE1); 

당신은 실제로 EIFR를 설정할 필요가 없습니다. 이 레지스터는 핀이 변경 될 때마다 자동으로 플래그가 지정됩니다. PCMSK1에서

당신은 PCINT13PCINT12

PCMSK1 |= (1<<PCINT12)|(1<<PCINT13); 

이 해당 핀에 인터럽트 수를 설정합니다.

또한 SIGNAL은 가치가 떨어집니다. #include avr/interrupt.h 및 ISR을 사용하십시오.

ISR(PCINT1_vect){} 

두 가지 핀 변경은이 벡터에서 처리됩니다.

희망 사항은 약간 지워 줍니 다.