BASIC4MCU | 질문게시판 | 답변 : 인터럽트/타이머를 이용한 led shift
페이지 정보
작성자 master 작성일2019-11-06 09:04 조회5,888회 댓글2건본문
![]()
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-11-06 오전 8:59:22// by Ok-Hyun Park//#include <avr/io.h>#include <avr/interrupt.h>//volatile char i=0;//ISR(TIMER1_COMPA_vect){ // 1secPORTB=1<<i;if(++i>3)i=0;}//int main(void){DDRB=0x0F;TCCR1B=0x0D; OCR1A=15624; TIMSK=0x10; SREG=0x80; //1secwhile(1){ }}
네이버에 질문한거 답변해주셨는데, interrupt.h 헤더파일이 include 되지않고, <-- 코드비젼 사용하나보죠?
timer2로, 분주비를 고려해서 코드를 짜야하는데 잘 이해가 안되서
제가 짜봤는데, 원하는건 1초마다 led 쉬프트하는건데, 실행을 누르면 led가 PORTB 2,6,7에만 켜지고,
DDRB=0x0F; 포트 출력 설정은 반드시 있어야합니다.
스위치를 눌러도 반응이없습니다.. 여기서 코드를 어떻게 수정해야 될까요?
과제 지문에도 스위치에 관한 언급이 없습니다.
작성한 코드에도 스위치 관련 코드가 없습니다.
지문에서는 스위치 없이 타이머 인터럽트만으로 자동으로 쉬프트 하도록 작성되어 있습니다.
#include
#include "lcd.h"Byte c_cnt;
void timer2_comp_isr()
{
c_cnt++;
}void Init_Timer2(void)
{
TCCR2=0x00;
TCCR2|=(1< OCR2=12; // 50us와 가깝게 4x12 =48us로 OCR값 설정
TIMSK|=(1< DDRB=0xff;
}void main(void)
{
c_cnt=0;
Init_Timer2();
SREG|=0x80;
TCCR2|=(1< PORTB=0xfe;int i;
Byte led;
PORTB=led;
led=0xfe; // led가 PORTB0만 켜진 상태while(1){
if(c_cnt==1041) // 50000us / 48us (1s= 1,000,000us)
// 1041x48= 50000us
{led=(led<<1)|0x01; // led를 1개씩만 켜지도록 쉬프트
c_cnt=0; // 카운트 초기화
if(led=0xf7) // led가 PORTB3만 켜질경우
{led=0xfe;} // led를 PORTB0으로 돌아가게함
}
}
}
//
상세하게 작성해야지 코드를 작성할 수 있습니다.
댓글 2
조회수 5,888jjw332님의 댓글
jjw332 작성일
잘 모르겠는부분이 타이머2를 사용해서 분주비를 맞추고 코드를 짜려면 TCCR2와 OCR2를 이용해서 코드를 짜야하는걸로 알고있습니다
TCCR1B=0x0D, OCR1A=15624 라는 코드를 사용해도 되는건지, 이 코드가 의미하는게 무엇인지 알고싶습니다!
master님의 댓글
master
좌측 AVR 게시판 아래에 보면 타이머게시판이 있습니다.
공부하시려면 게시판글의 설명과 예제를 보면 되고요
//
일단 과제를 해결하고 싶다면 제가 적은 글을 잘 읽어보시고
상세하게 작성해야지 제가 코드를 도와드릴 수 있습니다.