<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770>

Similar documents
슬라이드 1

인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

AVR Atmega128

인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2

Microsoft PowerPoint - 제5장 인터럽트 (HBE-MCU-Multi AVR).ppt [호환 모드]

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

슬라이드 1

ATmega128

Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역

Microsoft PowerPoint - 08-MP-4-interrupt

UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ UL UART PORT1 void UAR

<4D F736F F F696E74202D2037C0E55FC0CCC0C0C7F55FBFCFBCBA205BC8A3C8AF20B8F0B5E55D>

<BDC7C7E83320BFB9BAF1BAB8B0EDBCAD2E687770>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<BDC7C7E83220B0E1B0FABAB8B0EDBCAD202833C1D6C2F7292E687770>

<BDC7C7E83120BFB9BAF1BAB8B0EDBCAD2E687770>

<BDC7C7E83120B0E1B0FABAB8B0EDBCAD202832C1D6C2F7292E687770>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<BDC7C7E83820BFB9BAF1BAB8B0EDBCAD2E687770>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729>

HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - es-arduino-lecture-03

2주차: 입출력 제어 복습

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63>

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

Chapter #01 Subject

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

API 매뉴얼

<BDC7C7E83720BFB9BAF1BAB8B0EDBCAD2E687770>

Microsoft Word - PLC제어응용-2차시.doc

[8051] 강의자료.PDF

정보보안 개론과 실습:네트워크

목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Microsoft Word - logic2005.doc

Microsoft PowerPoint - ccs33_bios_com1_semaphore.ppt [호환 모드]

Frama-C/JESSIS 사용법 소개

PowerPoint 프레젠테이션

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

온습도 판넬미터(JTH-05) 사양서V1.0

Microsoft PowerPoint - additional01.ppt [호환 모드]

설계란 무엇인가?

Visual Basic 반복문

PowerPoint 프레젠테이션

ADP-2480

KEY 디바이스 드라이버

Microsoft PowerPoint - [2009] 02.pptx

API 매뉴얼

Microsoft PowerPoint - 제3장 GPIO 입출력 제어 (HBE-MCU-Multi AVR)

Microsoft PowerPoint - chap06-2pointer.ppt

정보보안 개론과 실습:네트워크

Microsoft PowerPoint - ccs33_bios_PRD.ppt [호환 모드]

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

논리회로설계 6 장 성공회대학교 IT 융합학부 1

<30302E20BEC6C6AEB8E120BDBAC6A9B5F0BFC020BFACBDC0B9AEC1A620C7D8B4E42E687770>

ISP and CodeVisionAVR C Compiler.hwp

<4D F736F F D20C0DBC7B0C6ED5FBDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCAD20B0B3B9DF2E646F63>

Microsoft PowerPoint - polling.pptx

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

C 프로그램의 기본

11장 포인터

Chapter ...

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

IoT FND8 7-SEGMENT api

2009년2학기 임베디드시스템 응용

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - hy2-12.pptx

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729>

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee

Page 2 of 21 Absolute Maximum Ratings Absolute Maximum Rating 값을초과하는조건에서 DTPML을동작시킬경우치명적인손상을 가할수있습니다. Parameter Symbol Conditions min Typ Max Unit Sup

목차 1. A/D 컨버터개요 2. ATMega128 의 A/D 컨버터기능 3. A/D 컨버터로광센서읽기

2009년2학기 임베디드시스템 응용

윈도우즈프로그래밍(1)

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

OCW_C언어 기초

ez-shv manual

OCW_C언어 기초

Chapter 4. LISTS

금오공대 컴퓨터공학전공 강의자료

AVR128 자료.hwp

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

슬라이드 1

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

Microsoft PowerPoint - chap10-함수의활용.pptx

PowerPoint Presentation

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

AVR ATmega128 소개 마이크로컨트롤러 AVR ATmega128 저자 : 이상설 소속 : 원광대학교전기 정보통신공학부

PowerPoint 프레젠테이션

Transcription:

제목 : 실험 #5 예비보고서 Interrupt 제어 실험목적 - Interrupt에대한기초지식을알아본다. - Atmega128의 Interrupt를사용해보고, 동작방식과동작방법및특징을확인한다. 실험장비 - ATmega128(AVR Chip), Switch, LED(Green-LED) 실험이론 - 인터럽트 (Interrupt) 인터럽트는프로그램이수행되고있는동안에어떤조건이발생하여수행중인프로그램을일시적으로중지시키게만드는조건이나사건의발생을말한다. 이러한인터럽트는사건에대해비동기적으로반응할수있도록해주며, 다른프로그램이수행되는동안사건을처리할수있게해준다. 따라서, 마이크로컨트롤러에서인터럽트구동시스템은마치동시에많은일들을처리할수있는것처럼느끼게해준다. 순차적으로모든작업을반복해주는제어루틴을일반적으로폴링이라고하는데, 폴링방식은처리할작업이적고, 작업의범위가작은기능을방복수행할때에는유리하지만반대의경우, 문제발생시문제가된작업을처리하기위해해당작업이처리되는시간까지계속진행되어야하기때문에효과적으로처리하기힘들다. - 인터럽트의종류 발생원인에따른분류 1. 하드웨어인터럽트 ( 내부, 외부 ) : 내부인터럽트는정의되지않은명령의실행이나 0으로나눗셈을시도하는등프로세서내부에서발생하는인터럽트이다. ATmega128에서는사용되지않는다. : 외부인터럽트는타이머, 입출력장치등독립된외부장치에의해발생하는인터럽트를말한다. ATmega128에서는차단불가능한인터럽트를사용하지않으며차단가능한 8개의외부인터럽트 INT0~7을가지고있다. 2. 소프트웨어인터럽트 : 일반적으로사용자의요구에따른인터럽트를발생시키는것을말한다. 반응방식에따른분류 1. 차단가능한인터럽트 (INT Maskable Interrupt) : 사용자에의해인터럽트요청을무시할수있는인터럽트를말하는데, 시간제약이있는중요한프로그램수행중다른인터럽트를처리하기위해시간을허용하게된다면, 정작중요한작업을처리할수없게되기때문에, 이때에사용할수있도록만든인터럽트이다. 인터럽트허용레지스터들을이용하여개별인터럽트들에대해각각설정할수있다. 2. 차단불가능한인터럽트 (NMI Non-Maskable Interrupt) : 사용자에의해어떤방법으로든인터럽트요청이차단될수없는인터럽트를말한다. 전원이상이나비상정지등중요성이높은특정작업에주로사용된다. ATmega128에서는사용되지않는다. 요청을확인하는방법에따른분류 1. 조사형인터럽트 (Polled Interrupt) : 인터럽트요청이발생하면, 요청한장치를찾아내기위해프로세서가각주변장치를차례로조사하는방식이다. 2. 벡터형인터럽트 (Vectored Interrupt) : 인터럽트벡터에의해즉시인터럽트서비스루틴을찾아가는형태를말한다. 응답시간이빠르며, 응답시간이주변장치의수에영향을받지않는다.

- 인터럽트벡터 (Interrupt Vector) ATmega128은리셋을포함해서 35가지의리셋및인터럽트벡터가마련되어있다. 인터럽트마스크레지스터들을이용해각각의허용여부를설정할수있고, 상태레지스터 SREG의글로벌인터럽트허용 (I) 비트를이용해전체적인허용여부를결정할수있다. - 인터럽트벡터테이블 (Interrupt Vector Table) (1/2) -

- 인터럽트벡터테이블 (Interrupt Vector Table) (2/2) - - 인터럽트의동작 요청된인터럽트가허용되면, 인터럽트서비스루틴이실행된다. 그리고동시에다른인터럽트가발생하지않도록 SREG레지스터의 I비트가 0으로클리어되어모든인터럽트가금지된다. 인터럽트서비스루틴을종료하기위해 RETI명령을실행하면 SREG레지스터의 I비트가다시 1로설정되어인터럽트허용상태로복구된다. - ATmega128의외부인터럽트 ATmega128의외부인터럽트는 INT0~7을통해입력되는신호에의해발생한다. 이핀들이출력으로설정되어있어도인터럽트는발생된다. EICR레지스터로설정한방식에의해인터럽트가발생한다. 외부인터럽트 INT0~7에대한인터럽트트리거방식을결정하는레지스터. 외부인터럽트 0~7 각각의트리거방식을설정한다. INT0~3과 INT4~7의동작에는약간의차이가있다. ICSn[1:0] - INT0~3 의트리거목록 - - INT4~7 의트리거목록 - - EICRA 레지스터 -

외부인터럽트들을개별적으로허가하는데사용되는레지스터. 각외부인터럽트에해당하는비트를 1로설정하면인터럽트가허가되고, 0으로설정 INTn 하면인터럽트가금지된다. 이비트들이 1로설정되어있어도 SREG의 I비트가 1로설정되어있지않으면인터럽트가발생하지않는다. - EIMSK 레지스터 - INTn 핀에인터럽트신호가입력되어해당인터럽트가발생하였음을알려주는레지스터. 외부인터럽트단자에인터럽트요청신호가발생하면해당하는비트가 1로설정된다. SREG의 I비트가 1로설정되어있고, 이레지스터의해당외부인터럽트가 1로설정되었다 INTFn 면 MCU는해당인터럽트벡터로이동하여인터럽트서비스루틴을수행한다. 이때이플래그는다시 0으로클리어된다. 사용자가직접플래그를클리어하려면해당비트에 1을쓰면된다. 외부인터럽트의트리거방식이 Low level이라면이비트는항상클리어된다. - 인터럽트의동작및처리과정 1. 인터럽트요청신호검출 2. 인터럽트우선순위제어및허용여부 3. 인터럽트처리루틴의시작번지확인 4. 복귀주소및레지스터저장 5. 인터럽트서비스루틴실행 6. 인터럽트서비스루틴종료후, 이전상태로복귀 - EIFR 레지스터 - - 채터링 (Chattering) 스위치나릴레이등의접점이개폐될때기계에서발생하는진동을말한다. 스위치를 ON 또는 OFF로했을때, 접점부분의진동으로인해 ON-OFF 상태가반복되어발생한다. 키보드에서이상태가발생하면같은문자가여러개찍히게된다. 이를방지하기위해하드웨어내부나소프트웨어에특수장치가첨가되는데, RS 플립회로가대표적이다. - 채터링을피하기위한방법 하드웨어적해결방법 : 스위치의접점에풀업저항과 RS 래치를부착해 ON 또는 OFF 한가지상태가완전히고정된상태의값만을필터링하도록한다. 소프트웨어적해결방법 : 일반적으로스위치의입력시, 처음입력후채터링이끝난이후로판단되는일정시간 ( 보통 100ms) 의딜레이를주고, 스위치의상태를검출하여여전히이전상태와동일한지판별하는방법을사용한다.

실험방법 - AVR Studio 4를이용하여프로그램소스코드작성후빌드하여실행파일 (.hex) 을생성한다. - AVR Studio 4의 AVR Programmer 를이용, AVR칩에프로그램을다운로드하여실험킷에서의동작을확인한다. 예비과제시뮬레이션회로 - 예제회로의저항이너무높아위와같이실험킷과동일한환경으로수정하여시뮬레이션하였다. - 외부인터럽트의 Low level 트리거테스트에서는실제로는버튼을누르고있는동안 LED 값이계속증가하여순차적으로켜져야하지만프로테우스시뮬레이션상에서는 Falling edge와동일하게작동하였다. - 예제소스들은실험킷에서테스트할수있도록메모리맵드 IO로작성되어있어해당부분을 PORTB로출력하도록수정하였다. 예비과제코드분석 외부인터럽트 C 언어소스코드 #include <avr/io.h> #include <avr/interrupt.h> #define LED_CS PORTB uint16_t INT_CNT; ISR(INT4_vect) { LED_CS = ++INT_CNT; void Platform_Init(void) { EICRB = 0b00000000; EIMSK = 0b00010000; EIFR = 0xFF; DDRB = 0xFF; LED_CS = 0x00; 인터럽트관련함수와 ISR 함수원형이선언되어있는헤더파일 인터럽트요청횟수를저장하는변수 외부인터럽트 4 의서비스루틴인터럽트요청횟수값을증가시키고그값을 LED 에출력한다. 장치초기화루틴모든외부인터럽트의트리거를 Low level 로설정한다. 00: Low level 01: Status changed (INT4~7), Reserved (INT0~3) 10: Falling edge 11: Rising edge 외부인터럽트 4 를 Enable 한다. 모든외부인터럽트의플래그를 0 으로초기화한다. LED 가 PORTB 에연결되어있기때문에 PORTB 를출력으로설정한다. 모든 LED 를 OFF 상태로초기화한다.

int main(void) { Platform_Init(); sei(); 장치를초기화한다. SREG 레지스터의 I 비트를 1 로설정해인터럽트를사용하도록한다. while(1); 프로그램종료를방지하기위한루프 return 0; 외부인터럽트 어셈블리어소스코드.equ SPH = 0x3E 레지스터들을사용하기편하게키워드로매핑.equ SPL = 0x3D.equ MCUCR = 0x35.equ PORTB = 0x18.equ DDRB = 0x17.equ EICRB = 0x3A.equ EIMSK = 0x39.equ EIFR = 0x38.equ LED_CS = PORTB.def INT_COUNT = R18.cseg.org 0x0000 JMP RESET_ISR.org 0x000A JMP INT4_ISR.org 0x0046 RESET_ISR: LDI R16, high(0x10ff) LDI R17, low(0x10ff) OUT SPH, R16 OUT SPL, R17 LDI R16, 0xFF OUT DDRB,R16 LDI R16,0x00 OUT LED_CS, R16 CLR INT_COUNT LDI R16, 0b00000000 OUT EICRB, R16 LDI R16, 0b00010000 OUT EIMSK, R16 LDI R16, 0xFF OUT EIFR, R16 SEI LOOP: RJMP LOOP INT4_ISR: PUSH R16 PUSH R17 IN R16, $3F PUSH R16 INC INT_COUNT MOV R16, INT_COUNT OUT LED_CS, R16 LED 출력을 PORTB 로설정했다. 인터럽트요청횟수를 R18 레지스터에저장하도록설정했다. 프로그램코드의시작 Reset 인터럽트 (Power on 등 ) 의인터럽트벡터주소메인프로그램의주소로이동한다. 외부인터럽트 4 의인터럽트벡터주소외부인터럽트 4 의서비스루틴으로이동한다. 인터럽트벡터테이블이후의주소부터사용하도록주소지정메인프로그램루틴프로그램의스택설정인터럽트는함수와비슷하게동작하므로복귀주소를스택에저장하기위해스택포인터의설정이필요하다. LED 가 PORTB 에연결되어있기때문에 PORTB 를출력으로설정한다. 모든 LED 를 OFF 상태로초기화한다. 인터럽트요청횟수값을 0 으로초기화한다. 모든외부인터럽트의트리거를 Low level 로설정한다. 00: Low level 01: Status changed (INT4~7), Reserved (INT0~3) 10: Falling edge 11: Rising edge 외부인터럽트 4 를 Enable 한다. 모든외부인터럽트의플래그를 0 으로초기화한다. SREG 레지스터의 I 비트를 1 로설정해인터럽트를사용하도록한다. 프로그램종료를방지하기위한루프 외부인터럽트 4 의서비스루틴함수내부에서 R16 과 R17 값을변경하기때문에복귀전복원하기위해현재값을스택에저장한다. 0x3F = SREG. 현재 SREG 레지스터의값을가져와서스택에저장한다. ( 인터럽트처리중변경될수있기때문 ) 인터럽트요청횟수값을증가시킨다. R16 에인터럽트요청횟수값을복사한다. LED 에현재인터럽트요청횟수값을출력한다.

POP R16 OUT $3F, R16 POP R17 POP R16 RETI 스택에저장했던 SREG 레지스터의값을가져온다. SREG 레지스터를인터럽트요청시의값으로복원한다. R16 과 R17 도스택에서가져와복원한다. 인터럽트서비스루틴을끝내고이전코드로복귀한다. 이프로그램은외부인터럽트의트리거설정에따른동작을이해하기위한프로그램이다. 외부인터럽트와연결된버튼을누르거나, 누르고있거나, 손을뗄때등, 트리거로설정한값에따라그에해당하는동작을보였다. 하지만시뮬레이션프로그램상의오류로 Low level 트리거는 Falling edge시와동일하게동작하였다. 타이머 / 카운터0 인터럽트 - C언어소스코드 #include <avr/io.h> #include <avr/interrupt.h> 인터럽트관련함수와 ISR 함수원형이선언되어있는헤더파일 #define LED_CS PORTB uint8_t LED_DATA; ISR(TIMER0_COMP_vect) { LED_CS = LED_DATA; LED_DATA++; void Platform_Init(void) { TCCR0 = 0x0F; ASSR = 0x00; OCR0 = 156; TCNT0 = 0; TIMSK = 0x02; TIFR = 0x03; sei(); DDRB = 0xFF; LED_CS = 0x00; 인터럽트요청횟수를저장하는변수 타이머 / 카운터 0 비교일치시의서비스루틴현재요청횟수값을 LED 에출력한다. 인터럽트요청횟수값을증가시킨다. 장치초기화루틴 CTC 모드, 1024 분주비를사용한다. 외부클럭을사용하지않는다. 비교일치시비교할값을 156 으로설정한다. 타이머값을 0 으로초기화한다. 0.125us * 1024 * (156 + 1) = 20096us 20ms 타이머 / 카운터 0 의비교일치인터럽트를 Enable 한다. 타이머 / 카운터 0 의 OCF0, TOV0 플래그를 0 으로초기화한다. SREG 레지스터의 I 비트를 1 로설정해인터럽트를사용하도록한다. LED 가 PORTB 에연결되어있기때문에 PORTB 를출력으로설정한다. 모든 LED 를 OFF 상태로초기화한다. int main(void) { Platform_Init(); while(1); return 0; 장치를초기화한다. 프로그램종료를방지하기위한루프 타이머 / 카운터0 - 어셈블리어소스코드.equ SPH = 0x3E 레지스터들을사용하기편하게키워드로매핑.equ SPL = 0x3D.equ MCUCR = 0x35.equ TCCR0 = 0x33.equ TCNT0 = 0x32.equ OCR0 = 0x31.equ ASSR = 0x30.equ TIFR = 0x36.equ TIMSK = 0x37.equ ETIMSK = 0x7D.equ ETIFR = 0x7C.equ DDRB = 0x17.equ PORTB = 0x18.equ LED_CS = PORTB.def AH = R16.def AL = R17.def INT_CNT = R19.cseg.org 0x0000 JMP RESET_ISR PORTB 를 LED_CS 라는키워드로사용한다. 인터럽트요청횟수를저장하는변수 프로그램코드의시작 Reset 인터럽트 (Power on 등 ) 의인터럽트벡터주소메인프로그램의주소로이동한다.

.org 0x001E JMP TIMER0_COMPA.org 0x0046 RESET_ISR: LDI AH, high(0x10ff) LDI AL, low(0x10ff) OUT SPH, AH OUT SPL, AL LDI R16, 0b00001111 OUT TCCR0, R16 LDI R16, 0b00000000 OUT ASSR, R16 LDI R16, 156 OUT OCR0, R16 LDI R16, 0b00000000 OUT TCNT0, R16 LDI R16, 0b00000010 OUT TIMSK, R16 LDI R16, 0b00000011 OUT TIFR, R16 SEI LDI R19, 0xFF OUT DDRB, R19 LDI R19, 0x00 OUT LED_CS, R19 LOOP: RJMP LOOP 타이머 / 카운터 0 비교일치의인터럽트벡터주소타이머 / 카운터 0 비교일치의서비스루틴으로이동한다. 인터럽트벡터테이블이후의주소부터사용하도록주소지정메인프로그램루틴프로그램의스택설정인터럽트는함수와비슷하게동작하므로복귀주소를스택에저장하기위해스택포인터의설정이필요하다. CTC 모드, 1024 분주비를사용한다. 외부클럭을사용하지않는다. 비교일치시비교할값을 156 으로설정한다. 타이머값을 0 으로초기화한다. 0.125us * 1024 * (156 + 1) = 20096us 20ms 타이머 / 카운터 0 의비교일치인터럽트를 Enable 한다. 타이머 / 카운터 0 의 OCF0, TOV0 플래그를 0 으로초기화한다. SREG 레지스터의 I 비트를 1 로설정해인터럽트를사용하도록한다. LED 가 PORTB 에연결되어있기때문에 PORTB 를출력으로설정한다. 모든 LED 를 OFF 상태로초기화한다. 프로그램종료를방지하기위한루프 참고문헌 TIMER0_COMPA: INC R19 OUT LED_CS, R19 RETI 타이머 / 카운터 0 비교일치시의서비스루틴인터럽트요청횟수값을증가시킨다. 현재요청횟수값을 LED 에출력한다. 이프로그램은약 20ms 마다타이머 / 카운터 0 의비교일치인터럽트를발생시키고인터럽트요청시, 값을 1 씩증가시키며, 그값을 LED 를통해출력하는프로그램이다. 시뮬레이션을통해 LED 값이순차적으로증가함을확인하였다. 타이머 / 카운터 1 의예제소스는 OCR1 을 624 로설정해 0.125us * 1024 * (624 + 1) = 80000 80ms 마다위의동작을수행하도록작성되어있다. - 채터링이론 : 네이버지식백과 - 채터링 ( http://terms.naver.com/entry.nhn?cid=2915&docid=1595169 ) - 채터링방지이론1: 과일쥬스블로그 - 채터링방지회로 ( http://blog.naver.com/l_2442_l?redirect=log&logno=90049261377 ) - 채터링방지이론2: 당근이의 AVR 갖고놀기 - 채터링방지 Q&A ( http://cafe.naver.com/carroty/150549 )