Univ/AVR atmega128
[avr]스위치 수정 과정, 스태틱함수 추가, 인터럽트 라이브러리 추가, 딜레이함수 추가
ITGenerations
2017. 12. 8. 22:59
// source 11
// 스위치 수정 과정, 스태틱함수 추가, 인터럽트 라이브러리 추가
//불완전한 코드= 채터링 문제가여전히 존재
// 딜레이 함수를 이용하여 채터링 문제 해결하려했으나
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define DEBOUNCING_DELAY 20
void msec_delay(int n);
static unsigned char pattern[3]={0xFE, 0xFD, 0xFB};
ISR(INT0_vect)
{
static int i=0;
if(++i==3) i=0;
PORTA=pattern[i];
msec_delay(DEBOUNCING_DELAY);
while(~PIND&0x01);
msec_delay(DEBOUNCING_DELAY);
//채터링 문제 완전 해결된 거 아님
}
int main()
{
DDRA=0xFF;
DDRD=0x00;
SFIOR &=~(1<<PUD);
PORTD |=(0x01);
PORTA=pattern[0];
EICRA = (2<<ISC00);
EIMSK = (1<<INT0);
sei();
while(1);
return 0;
}
void msec_delay(int n)
{
for(; n>0; n--)
_delay_ms(1);
}