BASIC4MCU | 질문게시판 | atmega128 코드 해석 문의
페이지 정보
작성자 오옹키 작성일2019-11-12 19:22 조회5,896회 댓글0건본문
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned char upDown = 1;
unsigned char Light = 0;
void operation();
SIGNAL(SIG_INTERRUPT4); //4번 인터럽트로 활용
int main(){
DDRB = 0xFF; // 11111111 B포트를 출력으로 사용
DDRE = 0x00; // E포트를 입력으로 사용
EICRA = 0x00; // EICRA 미사용
EICRB = 0x03; // 0000 0011 외부인터럽트 4에서 INT 상승 엣지에서 인터럽트 발생
EIMSK = 0x10; // 인터럽트 4번 enable
EIFR = 0x10; // 0001 0000 인터럽트 4 사용
TCCR2 = 0x69; 0110 1001 (no prescailing 클럭소스 존재) 동작모드 Fast PWM
Compare match에서 OC2 출력을 0으로 clear, TOP에서 OC2 출력을 1로 set
TCNT2 = 0;
SREG |= 0x80; //인터럽트 사용
while(1){
OCR2 = Light;
_delay_ms(10);
operation();
}
return 0;
}
void operation(){
if(upDown) Light++; // //업다운이 1이면 밝기를 올리고 그렇지 않으면 밝기를 내림
else Light--;
}
SIGNAL(SIG_INTERRUPT4){
SREG &= 0x7F; //인터럽트 미사용
upDown = !upDown;
SREG |= 0x80; // 인터럽트 사용
}
제가 해석한건 이런내용인데요,
처음 LED가 0이라서 꺼져있고 점점 밝아지는 기본동작을 하는데, 인터럽트가 발생하면 어두워지는 동작을 하고, 밝기가 0이되면 다시 255로 밝기가 255가되면 0부터 다시 시작하는 동작인것 같은데
제가 생각하는게 맞을까요? 그리고 인터럽트에서 SREG 값을 저렇게 하는게 맞는지 ?? 궁금합니다. Ox80 으로 인터럽트 사용 허용하고 Ox7F로 인터럽트 미사용 하게 해서 순서가 서로 바뀌어야 하는게 아닐까요??
그리구 TCNT와 OC2 의 동작 펄스가 어떻게 나올지도 알려주시면 정말 감사하겠습니다 ..
댓글 0
조회수 5,896등록된 댓글이 없습니다.