Microsoft PowerPoint - 08-MP-4-interrupt

Similar documents
ATmega128

AVR Atmega128

슬라이드 1

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

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074>

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

슬라이드 1

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

<4D F736F F F696E74202D2037C0E55FC0CCC0C0C7F55FBFCFBCBA205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

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

<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

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 F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729>

lecture4(6.범용IO).hwp

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

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

Chapter ...

MPLAB C18 C

Chapter #01 Subject

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

2주차: 입출력 제어 복습

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63>

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

Microsoft PowerPoint - 08-MP-8-ADC

K&R2 Reference Manual 번역본

[8051] 강의자료.PDF

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

PowerPoint 프레젠테이션

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - es-arduino-lecture-03

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

PowerPoint 프레젠테이션

// 변수선언 unsigned char i; unsigned char FONT[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xD8, 0x80, 0x98}; //PORTA 를출력으로설정하고초기값은모두 0 PORTA = 0x00; DD

PowerPoint 프레젠테이션

OCW_C언어 기초

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

슬라이드 1

Microsoft PowerPoint os2.ppt [호환 모드]

BMP 파일 처리

온라인 IT 교육최강 ( 강의정보처리필기강사조대호 차시명 [CA-06 강 ] 프로세서와명령어차시 6 차시 학습내용 프로세서와명령어 학습목표 컴퓨터의구조와프로세서에대해이해할수있다 컴퓨터의명령어에대해이해할수있다 학습내용 1. 컴퓨터의구성 - 1

목차 1. ATMega128의외부메모리인터페이스 2. TEXT LCD 3. TEXT LCD에글자쓰기 4. SRAM 5. 외부메모리인터페이스에 SRAM붙이기

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729>

Microsoft PowerPoint - 부호기와 복호기.PPT

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-2pointer.ppt

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft PowerPoint - CSharp-10-예외처리

ADP-2480

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

Microsoft Word doc

Microsoft PowerPoint - AD-USBISP_V03_사용법.pptx

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

Microsoft PowerPoint - polling.pptx

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

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Here is a "PLDWorld.com"... // EXCALIBUR... // Additional Resources // µc/os-ii... Page 1 of 23 Additional Resources: µc/os-ii Author: Source: HiTEL D

KEY 디바이스 드라이버

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint - chap03-변수와데이터형.pptx

슬라이드 1

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

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

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

가. 도트매트릭스제어하기 단일 LED와는다르게도트매트릭스를구동시는구동전류가프로세서에서출력되는전류보다사용량을더많이필요하기때문에 TTL 계열의 IC로구동시키기에는무리가따른다. 이러한문제를해결하기위해서사용전압, 전류정격이높은달링턴트랜지스터가어레이형태로들어있는 ULN2803을

중간고사

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-GCC SRAM 에서의변수및상수특별히속성을정하지않고변수를정의하면 SRAM 영역에저장된다. 이것들은외부메모리에저장되는경우에비하여빠르게엑세스할수있다. 축약표현은 <stdio.h> 에정의되어있다. 그러나, <io.h> 를인클루드하면내부적으로 <stdio.h> 파일을자

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

Microsoft PowerPoint - o8.pptx

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

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

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

IoT FND8 7-SEGMENT api

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

Microsoft PowerPoint - hy2-12.pptx

<BDC7C7E83120B0E1B0FABAB8B0EDBCAD202832C1D6C2F7292E687770>

1. 제품소개 그림. 1.1 이란? DC 모터구동시하드웨어제작에소요되는시간을단축시켜프로그래밍연구개발및학습효과를극대화시켜주는 입니다. 또한당사 DEV 보드와 1P 점퍼클립케이블을이용하여연동이가능하며, 산업용 DC 모터의정회전, 역회전구동및속도제어시유용하게사용되는 입니다.

C언어 및 실습 C Language and Practice

Microsoft Word - AM-2560PRO_V01 메뉴얼.doc

<BDC7C7E83220B0E1B0FABAB8B0EDBCAD202833C1D6C2F7292E687770>

4. 다음주소지정방식중속도가가장빠른주소방식은? 가. immediate addressing mode 나. direct addressing mode 다. indirect addressing mode 라. index register. 5. 간접주소 (indirect addr

Formatvorlage für Arbeitsanweisungen

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

프로그램카운터 (Program Counter) 명령레지스터 (Instruction Register) 누산기 (AC: Accumulator) 상태레지스터 (Status Register) PSWR(Program Status Word Register) 메모리주소레지스터 (M

M16_32KIT_Manual.hwp

C 언어 프로그래밊 과제 풀이

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

Microsoft PowerPoint - chap04-연산자.pptx

<C6F7C6AEB6F5B1B3C0E72E687770>

<BDC7C7E83720BFB9BAF1BAB8B0EDBCAD2E687770>

Computer Architecture

Transcription:

순천향대학교컴퓨터학부이상정 1 학습내용 인터럽트기본 ATmega128 인터럽트벡터외부인터럽트인터페이스외부인터럽트프로그램예 순천향대학교컴퓨터학부이상정 2

인터럽트기본 순천향대학교컴퓨터학부이상정 3 인터럽트개념 CPU 내부또는외부의요구에의해서정상적인프로그램의실행순서를변경하여보다시급한작업 ( 인터럽트서비스루틴 ) 을먼저수행한후에다시원래의프로그램으로복귀하는것 인터럽트는주변장치의서비스요청에 CPU가가장빠르게대응할수있는방법. 주변장치측으로부터의발생시기를예측하기어려운비동기적인일 (event, 사건 ) 을 CPU가빠르게처리. 서로비동기적으로동작하는 CPU( 매우고속으로동작 ) 와주변장치 ( 비교적저속으로동작 ) 사이에서효율적으로일을수행하는중요한수단. 순천향대학교정보기술공학부이상정 4

인터럽트종류 (1) 인터럽트발생원인에따라분류 하드웨어인터럽트 CPU 코어기준으로내부, 외부분류 내부인터럽트 산술연산오버플로우, 잘못된명령실행, 메모리보호위반 외부인터럽트 외부입력핀, 타이머, 직렬포트, A/D 변환완료, DMA 동작의종료 소프트웨어인터럽트 소프트웨어명령 (supervisor call) 에의해인터럽트발생 순천향대학교정보기술공학부이상정 5 인터럽트종류 (2) 인터럽트를요구한외부하드웨어를확인하는방법에따른분류 조사형인터럽트 (polled interrupt) 외부인터럽트을요청한장치를소프웨어적으로확인하여인터럽트서비스루틴으로점프 벡터형인터럽트 (vectored interrupt) 인터럽트를요청한장치가 CPU에인터럽트벡터 (interrupt vector) 를전송 인터럽트벡터는인터럽트서비스루틴주소의힌트를갖는번호 메모리특정영역에서비스루틴의주소나점프명령등을저장하는인터럽트벡터테이블설정 인터럽트발생시인터럽트벡터테이블참조하여인터럽트서비스으로분기 순천향대학교컴퓨터학부이상정 6

인터럽트의우선순위제어 인터럽트우선순위 (priority) 제어의필요성 2개이상의주변장치가동시에신호를보내인터럽트를요청하는경우 하나의인터럽트가서비스되고있는동안에또다른인터럽트 가요청되는경우 조사형인터럽트의경우 CPU가각주변장치를소프트웨어적으로차례로폴링하는순서에의하여인터럽트의우선순위가결정 필요할때마다소프트웨어를수정하여손쉽게우선순위를변경하는것이가능 인터럽트제어기를사용하는벡터형인터럽트의경우 하드웨어인터럽트인터페이스가우선순위결정 인터럽트마스크레지스터또는인터럽트허용레지스터를가지고있어서인터럽트허용여부를설정 인터럽트우선순위제어레지스터로우선순위를지정 순천향대학교정보기술공학부이상정 7 인터럽트처리과정 프로그램 인터럽트벡터테이블 인터럽트벡터 처리흐름 인터럽트서비스루틴 인터럽트발생 인터럽트금지 프로세서상태저장 인터럽트처리 프로세서상태복구 인터럽트복귀 인터럽트허용 순천향대학교컴퓨터학부이상정 8

ATmega128 인터럽트벡터 순천향대학교컴퓨터학부이상정 9 ATmega128 인터럽트 35 개의인터럽트소스제공 리셋, 외부입력핀, 타이머 / 카운터, 직렬통신, A/D변환완료등 각인터럽트소스는고유의인터럽트벡터로표시 인터럽트인에이블 SREG 레지스터의 I 비트로전체인터럽트인에이블지정 각인터럽트소스개별적으로인에이블지정 인터럽트벡터테이블에는서비스루틴의점프명령저장 표5-1, 낮은주소의인터럽트소스가우선순위높음 MCUCR 레지스터의 IVSEL 값에따라저장위치다름 IVSEL=0 이면0번지부터저장 IVSEL= 1 이면부트플래시섹션의시작번지 순천향대학교컴퓨터학부이상정 10

인터럽트벡터테이블 순천향대학교컴퓨터학부이상정 11 MCUCR 레지스터 MCUCR MCU 제어레지스터 (MCU Control Register) 비트 1, IVSEL (Interrupt Vector Select) 인터럽트벡터테이블저장위치지정 0 : 인터럽트벡터테이블이플래시메모리시작에위치 1: 인터럽트벡터테이블이플래시메모리의부트로더섹션시작에위치 비트 0, IVCE (Interrupt Vector Change Enable) IVSEL 변경시 1 로세팅 비트 7 6 5 4 3 2 1 0 0x35(0x55) SRE SRW10 SE SM1 SM0 SM2 IVSEL IVCE MCUCR 읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기 초기값 0 0 0 0 0 0 0 0 순천향대학교컴퓨터학부이상정 12

인터럽트벡터테이블위치 퓨즈비트 (fuse bit) BOOTRST 와 IVSEL 조합으로리셋및인터럽트벡터테이블위치조정 퓨즈비트는 CodeVisionAVR C 컴파일러에서세팅 퓨즈비트가 0인경우에선택 (programmed) [Project] 메뉴 -> Configure -> [After Build] 탭 BOOTRST IVSEL Reset 어드레스인터럽트벡터시작어드레스 1 0 0x0000 0x002 1 1 0x0000 Boot Reset address + 0x0002 0 0 Boot Reset address 0x002 0 1 Boot Reset address Boot Reset address + 0x002 순천향대학교컴퓨터학부이상정 13 메모리섹션예 BOOTSZ 2 비트퓨즈비트에따라부트로더크기지정 순천향대학교컴퓨터학부이상정 14

BOOTRST=1, IVSEL=0 0x0000 rjmp RESET ; Reset Handler 0x0002 rjmp EXT_INT0 ; IRQ0 Handler 0x0004 rjmp EXT_INT1 ; IRQ1 Handler 0x0006 rjmp EXT_INT2 ; IRQ2 Handler 0x0044 rjmp SPM_RDY ; SPM Ready Handler ; 0x046 RESET: ldi r16,high(ramend) ; Main program start 0x012 out SPH,r16 ; Set Stack Pointer to top of RAM 0x013 ldi r16,low(ramend) 0x014 out SPL,r16 0x015 sei ; Enable interrupts 0x016 <instr> xxx......... 순천향대학교컴퓨터학부이상정 15 BOOTRST=1, IVSEL=1, 부트로더 8KB 0x000 RESET: ldi r16,high(ramend) ; Main program start 0x001 out SPH,r16 ; Set Stack Pointer to top of RAM 0x002 ldi r16,low(ramend) 0x003 out SPL,r16 0x004 sei ; Enable interrupts 0x005 <instr> xxx.org 0xF002 0xF002 rjmp EXT_INT0 0xF004 rjmp EXT_INT1........ ; 0xF044 rjmp SPM_RDY ; IRQ0 Handler ; IRQ1 Handler ; Store Program memory Ready 순천향대학교컴퓨터학부이상정 16

외부인터럽트 순천향대학교컴퓨터학부이상정 17 ATmega128 외부인터럽트 외부입력핀으로부터인터럽트신호수신 하강에지, 상승에지, 레벨트리거신호에의해발생 INT0 INT7 의 8 개외부인터럽트소스 I/O 포트와핀공유 포트 D의하위 4비트 : INT0 INT3 포트 E 의상위 4 비트 :INT4 INT7 제어레지스터 외부인터럽트제어레지스터 EICRA, EICRB 외부인터럽트마스크레지스터 EIMSK 외부인터럽트플래그레지스터 EIFR 상태레지스터 SREG 순천향대학교컴퓨터학부이상정 18

외부인터럽트제어레지스터 (1) EICRA (External Interrupt Control Register A) INT0 INT3 의인터럽트트리거방식설정 비트 7 6 5 4 3 2 1 0 0x6A ISC31 ISC30 ISC21 ISC20 ISC11 ISC10 ISC01 ISC00 EICRA 읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기 초기값 0 0 0 0 0 0 0 0 ISCn1 ISCn0 설명 0 0 INTn 의 Low 레벨에서인터럽트요구 0 1-1 0 INTn 의하강에지에서비동기적으로인터럽트요구 1 1 INTn 의상승에지에서비동기적으로인터럽트요구 순천향대학교컴퓨터학부이상정 19 외부인터럽트제어레지스터 (2) EICRB (External Interrupt Control Register B) INT4 INT7 의인터럽트트리거방식설정 비트 7 6 5 4 3 2 1 0 0x3A(0x5A) ISC71 ISC70 ISC61 ISC60 ISC51 ISC50 ISC41 ISC40 EICRB 읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기 초기값 0 0 0 0 0 0 0 0 ISCn1 ISCn0 설명 0 0 INTn 의 Low 레벨에서인터럽트요구 0 1 INTn 에논리적인변화가있을때인터럽트요구 1 0 INTn 의하강에지에서인터럽트요구 1 1 INTn 의상승에지에서인터럽트요구 순천향대학교컴퓨터학부이상정 20

외부인터럽트마스크레지스터 EIMSK(External Interrupt Mask Register) 8개의외부인터럽트를인에이블 SREG의 I 비트를세트시키고, EIMSK 레지스터의각비트를세트하여인터럽트인에이블 비트 7 6 5 4 3 2 1 0 0x39(0x59) INT7 INT6 INT5 INT4 INT3 INT2 INT1 INT0 EIMSK 읽기 / 쓰기 읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기 초기값 0 0 0 0 0 0 0 0 SREG(Status Register) I 비트를세트하여전역인터럽트를인에이블 비트 7 6 5 4 3 2 1 0 0x3F(0x5F) I T H S V N Z C SREG 읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기 초기값 0 0 0 0 0 0 0 0 순천향대학교컴퓨터학부이상정 21 외부인터럽트플래그레지스터 EIFR(External Interrupt Flag Register) 외부인터럽트발생여부표시 INT0 INT7에인터럽트요구이벤트발생시해당비트세트 인터럽트루틴이실행되면플래그는자동적으로클리어 강제로클리어할려면해당플래그비트에 1을쓰기하면됨 레벨트리거로설정된경우에는항상클리어 비트 7 6 5 4 3 2 1 0 0x38(0x58) INTF7 INTF6 INTF5 INTF4 INTF3 INTF2 INTF1 INTF0 EIFR 읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기읽기 / 쓰기 초기값 0 0 0 0 0 0 0 0 순천향대학교컴퓨터학부이상정 22

외부인터럽트설정예 하강에지에트리거되는 INT0 외부인터럽트설정 EICRA = 0x02 ; EIMSK = 0x01; SREG = 0x80; // INT0 하강에지설정 // INT0 인에이블 // 전역인터럽트인에이블 레벨트리거로트리거되는 INT5 외부인터럽트설정 EICRB = 0 ; EIMSK = 0b00100000; SREG = 0x80; // INT5 레벨트리거설정 // INT5 인에이블 // 전역인터럽트인에이블 순천향대학교컴퓨터학부이상정 23 외부인터럽트프로그램예 순천향대학교컴퓨터학부이상정 24

인터럽트서비스루틴작성 CodeVisionAVR 에서인터럽트서비스루틴작성 인터럽트소스명은헤더파일 <mega128.h> 에정의된소스명을사용 함수명은사용자가임의로지정 // Interrupt vectors definitions interrupt [ 인터럽트소스명 ] void 함수명 (void) 인터럽트서브루틴 순천향대학교컴퓨터학부이상정 25 #define EXT_INT0 2 #define EXT_INT1 3 #define EXT_INT2 4 #define EXT_INT3 5 #define EXT_INT4 6 #define EXT_INT5 7 #define EXT_INT6 8 #define EXT_INT7 9 #define TIM2_COMP 10 #define TIM2_OVF 11 #define TWI 34 #define SPM_RDY 35 #endif 인터럽트서비스루틴작성예 [ 예 ] 외부인터럽트 0 interrupt [EXT_INT0] void ext_int0(void) [ 예 ] 타이머 / 카운터0 비교매치 interrupt t [TIM0_COMP] void tim0_comp(void) id) 순천향대학교컴퓨터학부이상정 26

프로그램예제 4-1 토글스위치를사용하여하강에지의 INT4 외부인터럽트신호가들어올때마다 LED가 5번깜빡거리는프로그램 토글스위치 1을 INT4핀 (PE4 핀 ) 에연결 포트 A에 LED 연결 토글스위치가 1 -> 0 인경우만인터럽트가발생하여 LED 5번깜빡거림을확인 순천향대학교컴퓨터학부이상정 27 #include <mega128.h> #include <delay.h> 프로그램예제 4-1 #define LED_OFF 0x00 #define LED_ON 0xff void main() // LED 포트초기화 DDRA=0xff; PORTA = LED_OFF; //PORTA 출력설정 // 인터럽트초기화 EICRB = 0b00000010; // INT4 하강에지설정 EIMSK = 0b00010000; // INT4 인에이블 SREG = 0x80; // 전역인터럽트인에이블 while(1) // 무한루프 ; 순천향대학교컴퓨터학부이상정 28 interrupt [EXT_INT4] void led_blink(void) unsigned char i; for (i=0; i < 5; i++) PORTA = LED_ON; delay_ms(100); PORTA = LED_OFF; delay_ms(100);

프로그램예제 4-2 인터럽트택트스위치를사용하여레벨트리거의 INT6 외부인터럽트신호가들어올때마다 LED가 5번깜빡거리고, 7- 세그먼트 LED에는인터럽트인가횟수가표시되는프로그램 인터럽트택트스위치 INT0를 INT6 핀 (PE6 핀 ) 에연결 포트 A 에 LED 연결 7-세그먼트 a~g, dp 데이터라인은포트 B에연결 7-세그먼트 C1-C4 선택라인은포트 C에연결 인터럽트택트스위치 5V 평소에는 5V 인가 누르면 0V 인가 0V 누름 순천향대학교컴퓨터학부이상정 29 #include <mega128.h> #include <delay.h> _ #define LED_ON 0xff #define U0 PORTC.0 // 첫째자릿수를선택 #define U1 PORTC.1 // 둘째자릿수를선택 #define U2 PORTC.2 // 셋째자릿수를선택 #define U3 PORTC.3 // 넷째자릿수를선택 unsigned int number[4]; const unsigned char font[16]= 0xc0,0xf9,0xa4, //0,1,2 0xb0,0x99,0x92, 0x99 0x92 //3,4,5 0x82,0xf8,0x80, //6,7,8 0x90,0x88,0x83, //9,A,b 0xc6,0xa1,0x86, 0xa1 0x86 //c,d,e 0x8e; // F #define LED_OFF 0x00 프로그램예제 4-2 // 포트초기화 void port_init(void) // LED 포트초기화 DDRA=0xff; // 포트 A 출력설정 PORTA = LED_OFF; 순천향대학교컴퓨터학부이상정 30 // 7-세그먼트포트초기화 DDRB=0xff; // 데이터라인포트 B 출력 DDRC=0xff; // 선택라인포트 C 출력 PORTB=0xff; PORTC=0xff; // 인터럽트초기화 EICRB = 0; // INT6 0V레벨트리거설정 EIMSK = 0x40; // INT6 인에이블 SREG = 0x80; // 전역인터럽트인에이블 // num을 4자리 10진수로변환 void fnd_number(unsigned int num) unsigned char i; for (i=0; i < 4; i++) number[3-i] = num % 10; num =num / 10;

// 7-SEG. LED에표시 void dp_fnd(void) U0=0; // 첫째자릿수를선택 PORTB = ~font[number[0]]; // 반전출력 delay_ms(5); // 잔상효과지연 U0=1; U1=0; // 둘째자릿수선택 PORTB = ~font[number[1]]; delay_ms(5); U1=1; 1; U2=0; // 셋째자릿수를선택 PORTB = ~font[number[2]]; delay_ms(5); U2=1; U3=0; // 넷째자릿수를선택 PORTB = ~font[number[3]]; delay_ms(5); U3=1; 순천향대학교컴퓨터학부이상정 31 unsigned int counter = 0; void main() 프로그램예제 4-2 port_init(); // 포트초기화 while(1) fnd_number(counter); number(counter); // 10 진수생성 dp_fnd(); // 7-세그먼트 10진수출력 interrupt [EXT_INT6] void led_blink(void) unsigned char i; ++counter; if (counter == 9999) counter = 0; for (i=0; i < 5; i++) PORTA = LED_ON; delay_ms(100); PORTA = LED_OFF; delay_ms(100); 실습예제 4-1 평소에는 LED 가좌우로시프트하다가상승에지의인터업트인가시에 LED가 5번깜빡거린후다시좌우시프트하도록다음과같이프로그램을작성하라. 인터럽트택트스위치 INT1를 INT5 핀 (PE5 핀 ) 에연결 포트 F 에 LED 연결 7-세그먼트 LED에는인터럽트인가횟수가표시 7-세그먼트 a~g, dp 데이터라인은포트 A에연결 7- 세그먼트 C1-C4 선택라인은포트 B 에연결 순천향대학교컴퓨터학부이상정 32

프로그램예제 4-3 두개의인터럽트택트스위치에서하강에지의인터럽트인가하여 7-세그먼트 4자리를입력하는프로그램 외부인터럽트 INT4 (PE4) 택트스위치 INT0에를연결하고, 인터럽트인가시마다현재선택된자리의값 +1 외부인터럽트 INT5 (PE5) 택트스위치 INT1에를연결하고, 인터럽트인가시마다입력될위치를 1자리 -> 10자리 -> 100자리 -> 1000자리 -> 1자리 로자리이동 7-세그먼트 LED 7-세그먼트 a~g, dp 데이터라인은포트 B에연결 7- 세그먼트 C1-C4 C4 선택라인은포트 C 에연결 순천향대학교컴퓨터학부이상정 33 프로그램예제 4-3 #include <mega128.h> #include <delay.h> #define U0 PORTC.0 // 첫째자릿수를선택 #define U1 PORTC.1 // 둘째자릿수를선택 #define U2 PORTC.2 // 셋째자릿수를선택 #define U3 PORTC.3 // 넷째자릿수를선택 const unsigned char font[16]= 0xc0,0xf9,0xa4, //0,1,2 0xb0,0x99,0x92, //3,4,5 0x82,0xf8,0x80, 0xf8 0x80 //6,7,8 0x90,0x88,0x83, //9,A,b 0xc6,0xa1,0x86, //c,d,e 08 0x8e; //F unsigned char N1, N10, N100, N1000; char pos = 0; // 0 : 1 자리, 1 : 10 자리 // 2 : 100자리, 3 : 1000자리 void 순천향대학교 Seg4_out(void); 컴퓨터학부이상정 34 // 포트초기화 void port_init(void) // 7-세그먼트포트초기화 DDRB=0xff; // 데이터라인포트 B 출력 DDRC=0xff; // 선택라인포트 C 출력 PORTB=0xff; PORTC=0xff; // 인터럽트초기화 EICRB = 0x0a; // INT4,5 하강에지설정 EIMSK = 0x30; // INT4,5 인에이블 SREG = 0x80; // 전역인터럽트인에이블 // 자릿수초기화 N1 = N10 = N100 = N1000 = 0; void main() port_init(); while(1) Seg4_out(); // 포트초기화

// 7-SEG. LED에표시 void Seg4_out(void) U0=0; // 1000자리 PORTB = ~font[n1000]; delay_ms(5); U0=1; 프로그램예제 4-3 U1=0; // 100 자리 PORTB = ~font[n100]; delay_ms(5); U1=1; 1; U2=0; // 10자리 PORTB = ~font[n10]; delay_ms(5); U2=1; 프로그램예제 4-3 // 외부인터럽트4 서비스루틴 interrupt [EXT_INT4] void num_incr(void) if (pos == 0) N1 = (N1 + 1) % 10; // 1자리 +1 else if (pos == 1) N10 = (N10 + 1) % 10; // 10자리 +1 else if (pos == 2) N100 = (N100 + 1) % 10; // 100자리 +1 else N1000 = (N1000 + 1) % 10; // 1000자리 +1 U3=0; // 1자리 PORTB = ~font[n1]; delay_ms(5); U3=1; 순천향대학교컴퓨터학부이상정 35 // 외부인터럽트5 서비스루틴 interrupt [EXT_INT5] void position_sel(void) pos = (pos + 1) % 4; // 입력자리이동 실습예제 4-2 두개의인터럽트택트스위치에서하강에지의인터럽트인가하여 7- 세그먼트 4자리를토글스위치로입력하는프로그램 외부인터럽트 INT6 (PE6) 택트스위치 INT0 에를연결하고, 인터럽트인가시마다입력될위치를 1 자리 - > 10자리 -> 100자리 -> 1000자리 -> 1자리 로자리이동 외부인터럽트 INT7 (PE7) 택트스위치 INT1 에를연결하고, 인터럽트인가시마다 LED 깜빡깜빡 토글스위치 포트 E의하위 4비트에연결하고, INT6 인터럽트인가시입력된값이 7-세그먼트에표시 LED 포트 A 에연결되고좌우시프트하다가인터럽트인가되면 5 번깜빡깜빡 7- 세그먼트 LED 7- 세그먼트 a~g, dp 데이터라인은포트 B 에연결 7- 세그먼트 C1-C4 선택라인은포트 C 에연결 순천향대학교컴퓨터학부이상정 36