ATmega128

Similar documents
<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

슬라이드 1

슬라이드 1

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

Microsoft PowerPoint - 08-MP-4-interrupt

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

lecture4(6.범용IO).hwp

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

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

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

AVR Atmega128

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

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

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

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63>

<4D F736F F F696E74202D2037C0E55FC0CCC0C0C7F55FBFCFBCBA205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

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

<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770>

Microsoft PowerPoint - es-arduino-lecture-03

PowerPoint 프레젠테이션

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

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

<BDC7C7E83120B0E1B0FABAB8B0EDBCAD202832C1D6C2F7292E687770>

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

[8051] 강의자료.PDF

I/O (GPIO) 제어 I/0 제어 ATmega128의 I/O 구성및특징 I/O PORT 구성 8비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT A ~PORT F) 6개 5비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT G) 1개 I/O PORT 특징

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

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F D20C0DBC7B0C6ED5FBDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCAD20B0B3B9DF2E646F63>

untitled

2주차: 입출력 제어 복습

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

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

WATAVR128_manual.hwp

CodevisionAVR C compiler 사용법 ( 요약 ) (1) 1.1 마이크로프로세서시스템회로도및동작 마이크로콘트롤러 ATmega128 내부회로도 AVR 의구조및종류 ATmega128 Pin 배치및내장 I/O 종류 A

M16_32KIT_Manual.hwp

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

K&R2 Reference Manual 번역본

API 매뉴얼

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

키트전자 KE-RC-B 코드비젼

<30302E20BEC6C6AEB8E120BDBAC6A9B5F0BFC020BFACBDC0B9AEC1A620C7D8B4E42E687770>

Microsoft PowerPoint - polling.pptx

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

슬라이드 1

MAX232 MAXIM사에서생산되는 RS-232통신을가능토록해주는송수신 IC이다. 송수신드라이브를각각 2개씩가지고있다. AVR과컴퓨터가인식하는 0과 1의값이다르기때문에.. 마이컴컴퓨터 이차이를해결해주는것이다. 0 0V -10V 1 5V 10V TTL IC 의전원단자와다

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

PowerPoint 프레젠테이션

SW

1 SW

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

Page 2 of 27 Absolute Maximum Ratings - Supply voltage : 3.5V - Operating Temperature Range : -20 ~ 70 - Storage Temperature Range : -40 ~ 85 위조건을넘어서게

슬라이드 1

C & System

Chapter ...

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

PowerPoint 프레젠테이션

중간고사

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

KXATUHEFFPYO.hwp

PowerPoint 프레젠테이션

Microsoft Word doc

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

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

Microsoft PowerPoint - C++ 5 .pptx

1. 기본설정 목차 1-1. 설치해야할프로그램및파일 1-2. 프로그램올리기 1-3. MAKEFILE 2. 캐릭터 LCD(PORT) 3-1. 개요 3-2. 사용하는레지스터 3-3. Source Code 3-4. 실습사진 3. 타이머카운터및초음파센서활용 (PORT, TIM

untitled

시리얼통신 (USART) 범용동기및비동기시리얼수신기와송신기 (USART) 는매우유연한시리얼통신장치이다. 주요특징은다음과같다. w 송수신레지스터가독립적으로운용되는전이중방식. w 비동기또는동기동작. w 마스터또는슬레이브동기동작. w 고해상도전송속도생성기. w 5, 6, 7

Microsoft PowerPoint - MSP430_Firmware Design_Develop_V11.ppt

KEY 디바이스 드라이버

Microsoft PowerPoint - 9.Serial.pptx

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

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

Formatvorlage für Arbeitsanweisungen

API 매뉴얼

PowerPoint 프레젠테이션

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

Formatvorlage für Arbeitsanweisungen

Microsoft PowerPoint - 08-MP-8-ADC

Frama-C/JESSIS 사용법 소개

Microsoft PowerPoint - Chapter 8_USART Serial Communication

Microsoft PowerPoint - ch07 - 포인터 pm0415

Lab 3. 실습문제 (Single linked list)_해답.hwp

ABC 11장

DTS-L300-V2 Specification Page 1 of 14 비접촉온도측정 원거리온도측정 High Accuracy Digital Interface : SPI Arduino UNO 예제코드제공 제품설명 DTS-L300-V2는접촉을하지않고원하는물체표면에온도를 50

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

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

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

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

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 제11장 포인터

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

1장. 유닉스 시스템 프로그래밍 개요

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

슬라이드 1

Transcription:

ATmega128 외부인터럽트실습 Prof. Jae Young Choi ( 최재영교수 ) (2015 Spring) Prof. Jae Young Choi

외부인터럽트실험 외부인터럽트를사용하기위해관렦레지스터를설정 일반적으로 I/O 포트에대한설정이끝난후에외부인터럽트나타이머 / 카운터설정 PE4~7 번까지 4 개의외부인터럽트 INT4~INT7 까지사용

외부인터럽트사용법요약 사용하고자하는외부인터럽트인에이블비트셋 사용레지스터 : EMISK 트리거방식설정 ( 하강에지 / 상승에지 / 레벨트리거중선택 ) 사용레지스터 : EICRA(INT0~INT3, EICRB(INT4~INT7) 전역인터럽트인에이블비트 I 셋 사용레지스터 : SREG( 최상위비트 ) 가능하면모든초기설정이끝난후제일마지막에 I 비트를셋 인터럽트함수작성

( 예제 4-1) 외부인터럽트 4 에의한 LED 점멸실험 ( 하강에지 ) KUT-128_COM 보드의 SW1/INT4 이눌려질때마다외부인터럽트 4 가발생하여 LED 가순차적으로점멸하도록프로그램을작성하라. 외부인터럽트 4 의입력트리거는하강에지에서발생하도록한다.

( 예제 4-1) 외부인터럽트 4 에의한 LED 점멸실험 ( 하강에지 ) // ex4-1.c // 외부인터럽트 4 에대한 LED 순차점멸실험 ( 하강에지 ) #include <mega128.h> unsigned char led = 0xFE; void main(void) // 포트초기화 DDRC = 0xFF; // 포트 C 출력설정 DDRE = 0b00000010; // 포트 E 입력 (PE1 출력 ) // 외부인터럽트 4 서비스루틴 interrupt [EXT_INT4] void external_int4(void) led = led << 1; // 1 비트쉬프트 led = led 0b00000001; // 최하위비트셋 if(led == 0xFF) led = 0xFE; // 모두 off 상태면초기값재설정 PORTC = led; // 포트출력 PORTC = led; // 포트 C 에초기값출력 // 인터럽트초기화 EIMSK = 0b00010000; EICRB = 0b00000010; SREG = 0x80; // 외부인터럽트4 인에이블 // 외부인터럽트4 : 하강에지 // 전역인터럽트인에이블비트셋 while(1);

( 예제 4-2) 외부인터럽트 4 에의한 LED 점멸실험 ( 상승에지 ) KUT-128_COM 보드의 SW1/INT4 이눌렸다떼어지는순간 ( 상승에지 ) 외부인터럽트 4 가발생하여 LED 가순차적으로점멸되도록프로그램을작성하라.

( 예제 4-2) 외부인터럽트 4 에의한 LED 점멸실험 ( 상승에지 ) // ex4-2.c // 외부인터럽트 4 에대한 LED 순차점멸실험 ( 상승에지 ) #include <mega128.h> unsigned char led = 0xFE; void main(void) // 포트초기화 DDRC = 0xFF; // 포트 C 출력설정 DDRE = 0b00000010; // 포트 E 입력 (PE1 출력 ) // 외부인터럽트 4 서비스루틴 interrupt [EXT_INT4] void external_int4(void) led = led << 1; // 1 비트쉬프트 led = led 0b00000001; // 최하위비트셋 if(led == 0xFF) led = 0xFE; // 모두 off 상태면초기값재설정 PORTC = led; // 포트출력 PORTC = led; // 인터럽트초기화 EIMSK = 0b00010000; EICRB = 0b00000011; 지 SREG = 0x80; 트셋 // 포트 C 에초기값출력 // 외부인터럽트4 인에이블 // 외부인터럽트4 : 상승에 // 전역인터럽트인에이블비 while(1);

( 예제 4-3) 외부인터럽트 4 에의한 LED 전자룰렛실험 [ 레벨트리거 ] 외부인터럽트 4 에대한실험으로입력트리거방식을레벨트리거방식으로하여 SW1 이눌려지고있는동안 LED 가순차점멸하도록하고, SW1 에서손을떼면순차점멸하던 LED 가정지하도록프로그램을작성하라.

( 예제 4-3) 외부인터럽트 4 에의한 LED 전자룰렛실험 [ 레벨트리거 ] // ex4-3.c // 외부인터럽트 4 에의한 LED 전자룰렛실험 ( 레벨트리거 ) #include <mega128.h> #include <delay.h> unsigned char led = 0xFE; // 외부인터럽트4 서비스루틴 interrupt [EXT_INT4] void external_int4(void) // LED 순차점멸 led = led << 1; // 1비트쉬프트 led = led 0b00000001; // 최하위비트셋 if(led == 0xFF) led = 0xFE; // 모두 off 상태면초기값재설정 PORTC = led; // 포트출력 void main(void) // 포트초기화 DDRC = 0xFF; // 포트 C 출력설정 DDRE = 0b00000010; // 포트 E 입력설정 (PE1 출력 ) PORTC = led; // 포트 C 에초기값출력 // 인터럽트초기화 EIMSK = 0b00010000; // 외부인터럽트4 인에이블 EICRB = 0b00000000; // 외부인터럽트4 : low 레벨 SREG = 0x80; // 전역인터럽트인에이블비트셋 while(1); // 무한루프

( 예제 4-4) 외부인터럽트 4 에의한스위치입력실험 외부인터럽트 4 를이용하여 SW1/INT4 를누를때마다맨우측 7-Segment 의표시값이 0 1 2 3 9 0 1.. 이표시되도록프로그램을작성하라.

( 예제 4-4) 외부인터럽트 4 에의한스위치입력실험 // ex4-4.c #include <mega128.h> #include <delay.h> flash char seg_pat[16]= 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f; unsigned char N1 = 0; while(1) PORTD = ((seg_pat[n1] & 0x0F) << 4) (PORTD & 0x0F); // A, B, C, D 표시 PORTB = (seg_pat[n1] & 0x70 ) (PORTB & 0x0F); // E, F, G 표시 void main(void) DDRB = 0xF0; DDRD = 0xF0; DDRG = 0x0F; // 인터럽트초기화 EIMSK = 0b00010000; EICRB = 0b00000010; SREG = 0x80; PORTG = 0b00001000; ON(PG3=1) // 포트 B 상위 4비트출력설정 // 포트 D 상위 4비트출력설정 // 포트 G 하위 4비트출력설정 // 외부인터럽트4 인에이블 // 외부인터럽트4 : 하강에지 // 전역인터럽트인에이블비트셋 // 맨우측 7-Segment DIG4 // 외부인터럽트 4 서비스루틴 interrupt [EXT_INT4] void external_int4(void) N1 = (N1 + 1) % 10; // 값 +1

( 예제 4-5) 두개의외부인터럽트를이용한 10 진네자리입력실험 두개의스위치 SW1/INT4 와 SW2/INT5 맊을이용하여네자리를입력하는프로그램을작성하라. 여기서, SW2 는입력될자리 ( 위치 ) 를나타내고, SW1 눌려지면현재선택된자리의값을 +1 하도록한다. SW2 가눌려지면입력될위치를 1 자리 10 자리 100 자리 1000 자리 1 자리 10 자리.. 로이동하도록한다.

( 예제 4-5) 두개의외부인터럽트를이용한 10 진네자리입력실험 // ex4-5.c // 두개의스위치를이용한네자리입력실험 #include <mega128.h> #include <delay.h> typedef unsigned char u_char; flash u_char seg_pat[10]= 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f; u_char N1 = 0, N10 = 0, N100 = 0, N1000 = 0; u_char pos = 0; // 0 : 1자리, 1 : 10자리, 2 : 100자리, 3 : 1000자리 void Seg4_out(void); void main(void) DDRB = 0xF0; DDRD = 0xF0; DDRG = 0x0F; // 인터럽트초기화 EIMSK = 0b00110000; EICRB = 0b00001010; SREG = 0x80; while(1) Seg4_out(); // 네자리수 7-Segment 출력 // 포트 B 상위 4비트출력설정 // 포트 D 상위 4비트출력설정 // 포트 G 하위 4비트출력설정 // 외부인터럽트 4,5 인에이블 // 외부인터럽트 4,5 : 하강에지 // 전역인터럽트인에이블비트셋 // 네자리수 7-Segment 출력함수 void Seg4_out(void) PORTG = 0b00001000; // 7-Seg DIG4 ON(PG3=1), 1자리표시 PORTD = ((seg_pat[n1] & 0x0F) << 4) (PORTD & 0x0F); // A, B, C, D 표시 PORTB = (seg_pat[n1] & 0x70 ) (PORTB & 0x0F); // E, F, G 표시 PORTG = 0b00000100; // 7-Seg DIG3 ON(PG2=1), 10자리표시 PORTD = ((seg_pat[n10] & 0x0F) << 4) (PORTD & 0x0F); // A, B, C, D 표시 PORTB = (seg_pat[n10] & 0x70 ) (PORTB & 0x0F); // E, F, G 표시 PORTG = 0b00000010; // 7-Seg DIG2 ON(PG1=1), 100자리표시 PORTD = ((seg_pat[n100] & 0x0F) << 4) (PORTD & 0x0F); // A, B, C, D 표시 PORTB = (seg_pat[n100] & 0x70 ) (PORTB & 0x0F); // E, F, G 표시 PORTG = 0b00000001; // 7-Seg DIG1 ON(PG0=1), 1000자리표시 PORTD = ((seg_pat[n1000] & 0x0F) << 4) (PORTD & 0x0F); // A, B, C, D 표시 PORTB = (seg_pat[n1000] & 0x70 ) (PORTB & 0x0F); // E, F, G 표시 // 외부인터럽트 4 서비스루틴 interrupt [EXT_INT4] void external_int4(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 // 외부인터럽트5 서비스루틴 interrupt [EXT_INT5] void external_int5(void) pos = (pos + 1) % 4; // 입력자리이동

( 예제 4-6) 외부인터럽트를이용한간이시계제작 delay_ms() 함수를이용하여시간과분을 7-Segment 에출력하는프로그램을작성하라. 시간과분의조정은 [ 예제 4-5] 와같이두 개의스위치를이용하여입력하도록한다.

( 예제 4-6) 외부인터럽트를이용한간이시계제작 // ex4-6.c // 외부인터럽트를이용한간이시계제작 #include <mega128.h> #include <delay.h> typedef unsigned char u_char; flash u_char seg_pat[10]= 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f; u_char N1, N10, N100, N1000; u_char pos = 0; // 0 : 1자리, 1 : 10자리, 2 : 100자리, 3 : 1000자리 u_char hour = 12, min = 0, sec = 0; void Time_out(void); void main(void) char i; DDRB = 0xF0; DDRD = 0xF0; DDRG = 0x0F; // 인터럽트초기화 EIMSK = 0b00110000; EICRB = 0b00001010; SREG = 0x80; // 시간표시함수 // 포트 B 상위 4비트출력설정 // 포트 D 상위 4비트출력설정 // 포트 G 하위 4비트출력설정 // 외부인터럽트 4,5 인에이블 // 외부인터럽트 4,5 : 하강에지 // 전역인터럽트인에이블비트셋 while(1) for(i = 0;i < 49;i++) Time_out(); // 약 1 초간반복표시 sec = sec + 1; // 초값 +1 if(sec == 60) sec = 0; min = min + 1; // 분값 +1 if(min == 60) min = 0; hour = (hour + 1) % 24; // 시간 +1 // 시간표시함수 void Time_out(void) PORTG = 0b00001000; // 7-Seg DIG4 ON(PG3=1), 분 1자리표시 PORTD = ((seg_pat[min % 10] & 0x0F) << 4) (PORTD & 0x0F); PORTB = (seg_pat[min % 10] & 0x70 ) (PORTB & 0x0F); PORTG = 0b00000100; // 7-Seg DIG3 ON(PG2=1), 분 10자리표시 PORTD = ((seg_pat[min / 10] & 0x0F) << 4) (PORTD & 0x0F); PORTB = (seg_pat[min / 10] & 0x70 ) (PORTB & 0x0F); PORTG = 0b00000010; // 7-Seg DIG2 ON(PG1=1), 시간 1자리표시 PORTD = ((seg_pat[hour % 10] & 0x0F) << 4) (PORTD & 0x0F); PORTB = (seg_pat[hour % 10] & 0x70 ) (PORTB & 0x0F); PORTG = 0b00000001; // 7-Seg DIG1 ON(PG0=1), 시간 10자리표시 PORTD = ((seg_pat[hour / 10] & 0x0F) << 4) (PORTD & 0x0F); PORTB = (seg_pat[hour / 10] & 0x70 ) (PORTB & 0x0F);

( 예제 4-6) 외부인터럽트를이용한간이시계제작 ( 계속 ) // 외부인터럽트요구 4 서비스루틴 interrupt [EXT_INT4] void external_int4(void) N1 = min % 10; // 현재분 1자리추출 N10 = min / 10; // 현재분 10자리추출 N100 = hour % 10; // 현재시간 1자리추출 N1000 = hour / 10; // 현재시간 10자리추출 if(pos == 0) N1 = (N1 + 1) % 10; // 분 1 단위 +1 else if(pos == 1) N10 = (N10 + 1) % 6; // 분 10 단위 +1 else if(pos == 2) // 시간 1 단위 +1 if(n1000 == 2) N100 = (N100 + 1) % 4; else N100 = (N100 + 1) % 10; else // 시간 10 단위 +1 if(n100 < 4) N1000 = (N1000 + 1) % 3; else if(n1000!= 1) N1000 = (N1000 + 1) % 3; hour = N1000 * 10 + N100; min = N10 * 10 + N1; // 시간계산 // 분계산 // 외부인터럽트요구 5 서비스루틴 interrupt [EXT_INT5] void external_int5(void) pos = (pos + 1) % 4; // 입력자리이동