BASIC4MCU | 질문게시판 | atmega128 버튼 인터럽트
페이지 정보
작성자 감자맛소고기 작성일2020-06-23 23:28 조회4,339회 댓글0건본문
#define F_CPU 16000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
volatile int flag = 0;
void init_system(void){
DDRB = 0xFF;
PORTB = 0xFF;
}
ISR(INT7_vect){
int count=0;
// debounce routine
LOOP: while(!(PINE & 0x80));
_delay_ms(20);
if(!(PINE & 0x80)&& count==0) flag = 1; goto LOOP; count++;
//EIFR |= 0x80;
if (!(PINE & 0x80)&& count==1) flag = 0; goto LOOP; count--;//EIFR |= 0x80;
}
int main(void){
init_system();
EICRB = 0x80; // trigger mode, 0b10000000
EIMSK = 0x80; // INT7 enable, 0b10000000
EIFR =0xFF; // interrupt flag clear
sei();
while(1){
if(flag == 1){
PORTB ;
}
else
for(int i=0; i<0x80;i++){
PORTB = PORTB - 1;
_delay_ms(100);
}
}
return 0;
}
현재 만드는 코드는 led에 이진카운트가 진행되고 버튼을 눌르면 진행이 멈춤 다시 버튼을 눌르면 카운트가 진행되는 코드를 짜고있습니다.
현재 버튼을 눌렀을때 동작이멈추는거 까지는 완성을 했는대 다시 버튼을 눌렀을때 동작이 실행되도록 할려면 어떤 코드를 추가해야 하나요?
댓글 0
조회수 4,339등록된 댓글이 없습니다.