BASIC4MCU | 질문게시판 | ATMEGA 2560 문제입니다.
페이지 정보
작성자 전기17학번 작성일2020-11-13 18:54 조회2,844회 댓글1건본문
#define F_CPU 16000000L
#include <avr/io.h>
#include <avr/interrupt.h)
#define set_bit(value, bit) ( _SFR_BYTE(value) |= _BV(bit) )
#define clear_bit(value, bit) ( _SFR_BYTE(value) &= ~_BV(bit) )
volatile int count = 0;
uint8_t state = 0;
ISR(TIMER0_COMPA_vect) {
count++;
TCNT0 = 0;
}
int main(void) {
set_bit(DDRB, 7);
clear_bit(PORTB, 7);
TCCR0B |= (1 << CS02) | (1 << CS00);
TIMSK0 |= (1 << OCIE0A);
OCR0A = 128;
sei();
while (1) {
if (count == 64) {
count = 0;
state = !state;
if (state) set_bit(PORTB, 7);
else clear_bit(PORTB, 7);
}
}
return 0;
}
이 코드는 0번 타이머/카운터의 비교일치 인터럽트를 이용하여 0.5초 간격으로 LED를 점멸하는 코드다. 여기에 2번 타이머/카운터의 비교일치 인터럽트를 이용하여 1초간격으로 LED를 점멸하는 코드를 추가해보자. 0번 타이머/카운터는 아두이노 2번(PE4) 핀에 연결된 LED를, 2번 타이머/카운터는 아두이노 3번(PE5) 핀에 연결된 LED를 점멸하도록 한다.
댓글 1
조회수 2,844master님의 댓글
master 작성일
앞의 질문글에서 타이머2로 완벽하게 변경하는데 성공했다면
0.5초를 1초로 변경하는 것은
if (count == 128) { // if (count == 64) {
체크값을 2배로 늘리면 됩니다.