BASIC4MCU | 질문게시판 | 입력캡쳐 관련 질문
페이지 정보
작성자 이름두글자 작성일2022-12-01 22:38 조회373회 댓글0건본문
타이머 카운터 1, 3에서 입력캡쳐 모드(CTC 모드12) 에 대한 질문입니다.
예를 들어 입력캡쳐 인터럽트를 통해 10ms를 카운터하는 용도로 사용한다면 그냥 CTC모드 사용하듯이 사용하면 되나요???
현재 코드에서는 C비교매치를 통해서 10ms를 카운트하게 설계하였습니다.
코드도 첨부합니다.
#include <mega128.h>
flash char seg_pat[16]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f};
unsigned char n1, n10, n100, n1000, dip = 0;
unsigned char msec, sec = 0;
void main(void)
{
DDRB = 0xFF;
DDRF = 0xF0;
TIMSK = 0b00010000; //타카 1 A비교매치
ETIMSK = 0b00100000; //타카 3 캡처 인터럽트
TCCR1A = 0b01000000;
TCCR1B = 0b00001011; //A비교매치에서 출력토글 주기 5ms
OCR1AH = 1249 >> 8;
OCR1AL = 1249 & 0x0FF;
TCNT1 = 0x0;
TCCR3A = 0b00001000; //C비교매치에서 입력 캡처 토글 10ms 근데 의문. 과연 입력캡처는 그냥 인터럽트로도 출력이 가능한건가?
TCCR3B = 0b00011100;
ICR3H = (624 & 0xFF00) >> 8;
ICR3L = 624 & 0x00FF;
TCNT3H = 0x0;
TCNT3L = 0x0;
SREG = 0x80;
}
interrupt [TIM3_COMPC] void ten_timer (void)
{
msec++;
if(msec == 100)
{
sec++;
msec = 0;
if(sec == 60)
{
sec = 0;
}
}
}
interrupt [TIM1_COMPA] void seg_out (void)
{
n1 = msec % 10;
n10 = msec / 10;
n100 = sec % 10;
n1000 = sec / 10;
if(dip == 0)
{
PORTF = 0b11100000;
PORTB = seg_pat[n1];
}
else if(dip == 1)
{
PORTF = 0b11010000;
PORTB = seg_pat[n10];
}
else if(dip == 2)
{
PORTF = 0b10110000;
PORTB = seg_pat[n100];
}
else
{
PORTF = 0b01110000;
PORTB = seg_pat[n1000];
}
dip = (dip + 1) % 4;
}
댓글 0
조회수 373등록된 댓글이 없습니다.