-
[AVR]타이머/카운터 - LED패턴 변화AVR study 2013. 1. 26. 00:42반응형
LED패턴 8가지를 배열로 지정하고 switch 구문을 이용해서 LED 패턴의 변화를 주었습니다.
#include <avr/io.h>
#include <avr/interrupt.h>volatile unsigned int cnt=0; // 타이머 발생 횟수
volatile unsigned int i=0; // pattern 배열 변수
unsigned char pattern[8] = {0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff}; // pattern 8가지 종류 선언ISR(TIMER0_OVF_vect) // 타이머0 오버플로 언터럽트 서비스루틴
{
TCNT0=0x06; // 타이머/카운터 레지스터 6부터 시작
cnt++; //타이머 발생 횟수 1증가
//-------------------------------------------------------------> switch구문 시작
switch (cnt/(int)1000) // 1초 간격으로 LED 패턴 변화
{
case 0:
PORTA = pattern[0]; // 1번 LED ON
break;
case 1:
PORTA = pattern[1]; // 1,2번 LED ON
break;
case 2:
PORTA = pattern[2]; // 1,2,3번 LED ON
break;
case 3:
PORTA = pattern[3]; // 1,2,3,4번 LED ON
break;
case 4:
PORTA = pattern[4]; // 1,2,3,4,5번 LED ON
break;
case 5:
PORTA = pattern[5]; // 1,2,3,4,5,6번 LED ON
break;
case 6:
PORTA = pattern[6]; // 1,2,3,4,5,6,7번 LED ON
break;
case 7:
PORTA = pattern[7]; // 모든 LED ON
break;
case 8:
cnt=0; // 타이머 발생 횟수 초기화
break;
}
//-------------------------------------------------------------> switch구문 끝
}int main(void) {
TCNT0 = 0x06; // ---------------------> 1ms 만들기 위한 시스템 타이머 레지스터 설정
TCCR0 = 0x04; // ----------------> freescale 64배수
TIMSK = 0x01; // --------------> 오버플로우 인터럽트 사용
SREG = 0x80; // --------------> 인터럽트 허용 레지스터
DDRA = 0xff; // ---------> PORTA 출력 방향 설정 레지스터
while(1) {}
}
반응형'AVR study' 카테고리의 다른 글
[AVR] CLCD 내부구조 및 핀설명 / WH1602B-YYH-JT# (0) 2013.01.29 LCD란? LCD의 동작원리와 장단점 (1) 2013.01.27 [AVR]타이머/카운터 - 정확히 1초 주기로 LED 점등 (0) 2013.01.26 Atmega128의 타이머/카운터 및 관련 레지스터 (0) 2013.01.25 M.A.I 회사의 Atmega128 모듈, ISP 다운로더 구입기 (0) 2013.01.20