C & System

Size: px
Start display at page:

Download "C & System"

Transcription

1 1-1 마이크로컨트롤러 (MCU) MCU = CPU Core(Architecture) + Peripherals(Controllers) 1

2 1-2 마이크로컨트롤러동작구조 1-3 AVR ATmega128 특징 뛰어난성능 (Advanced RISC Architecture) Most Single Clock Cycle Execution 32 X 8bit General Purpose Registers 풍부한메모리 (Program, Data) 128KB Flash 4KB SRAM, 4KB EEPROM 다양한 ( 프로세서내 ) 주변장치지원 Timer/Counter 4개, TWI(I 2 C) 2포트, 10-bit ADC USART 2채널, SPI, On-chip Oscillator(=8MHz) ATmega128 : 16MHz/5V ATmega128L : 8MHz/3.3V 2

3 1-4 AVR ATmega128 입출력포트제어 AVR 외부장치제어 I/O Port 사용 53 programmable I/O ports total AVR pin is 64 block diagram 1-4 AVR ATmega128 입출력포트제어 3

4 1-4 AVR ATmega128 입출력포트제어 Input / Output DataDiRectionX 0 Input 1 Output PORTX 0 output 0V (Low active) 1 output 5V (High active) 1-4 AVR ATmega128 입출력포트제어 PORT register 로부터데이터값이출력 ex : Sensor, Motor, LCD, LED, Buzzer. Etc. PIN register 로부터데이터값입력 ex : switch 4

5 1-5 AVR ATmega128 LED 제어 LED 회로와 VMLAB(or, MultiSim) 시뮬레이션 실습보드가없을때유용 ; Control Panel / LED 회로정의 D1 VDD n1 R18 n1 PC0 1k ; LED D1이 VDD와 n1 node 사이에연결 ; 저항 R18이 n1 node와 PC0 사이에연결 D2 VDD n2 R19 n2 PC1 1k D3 VDD n3 R20 n3 PC2 1k D4 VDD n4 R21 n4 PC3 1k D5 VDD n5 R22 n5 PC4 1k D6 VDD n6 R23 n6 PC5 1k D7 VDD n7 R24 n7 PC6 1k D8 VDD n8 R25 n8 PC7 1k LED 제어예제 -1 #include <avr/io.h> #include <util/delay.h> 1-5 AVR ATmega128 LED 제어 int main(void) unsigned int k = 20; DDRC = 0xFF; PORTC = 0xFF; // LED 점등 20회로제한 // C포트출력선언 // LED OFF while(k!= 0) _delay_ms(200); PORTC = 0xFE; _delay_ms(200); PORTC = 0xFF; k--; return 1; // 무한반복시 for(;;), while(1) // 0b

6 LED 제어예제 -2 #include <avr/io.h> #include <util/delay.h> 1-5 AVR ATmega128 LED 제어 #define DDR_LED DDRC #define PORT_LED PORTC // #define PIN_LED PIND int main(void) unsigned char led_status = 0xFF; DDR_LED = 0xFF; PORT_LED = 0xFF; for(;;) led_status = ~led_status; PORT_LED = led_status; _delay_ms(200); return 1; // LED toggle 1-5 AVR ATmega128 LED 제어 LED 제어와비트연산 unsigned char led = 0xFE; DDRC = 0xFF; while(1) PORTC = led; _delay_ms(200); led <<= 1; led = 0x01; if(led == 0xFF) led = 0xFE; unsigned char led, i; DDRC = 0xFF; while(1) led = 0x01; for(i = 1; i < 8; i++) PORTC = ~led; _delay_ms(200); led <<= 1; 6

7 1-6 8*8 도트매트릭스제어 LED 를매트릭스형태로배선시켜둔흔히볼수있는전광판형태의모듈이다. 5x7, 8x8, 16x16 등이있고, 구동회로가내장되거나컬러가추가된모듈도있다. [ 내부구조와외형 ] [ 다양한종류 ] 1-6 8*8 도트매트릭스제어 회로와제어원리 SCAN SZ411588K-16P LSB MSB LSB MSB SCAN : PORTA PORTA = 0x01; PORTA = 0x02; PORTA = 0x04; PORTA = 0x08; PORTA = 0x10; PORTA = 0x20; PORTA = 0x40; PORTA = 0x80; LSB MSB DATA : PORTB DATA PORTB = 0xFE; PORTB = 0xFD; PORTB = 0xFB; PORTB = 0xF7; PORTB = 0xEF; PORTB = 0xDF; PORTB = 0xBF; PORTB = 0x7F; LSB MSB [ 범용레지스터초기화 ] DDRA = 0xFF; // output DDRB = 0xFF; // output 7

8 도트매트릭스제어예제 #include <avr/io.h> #include <util/delay.h> 1-6 8*8 도트매트릭스제어 unsigned char Pattern[8] = 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F; // data int main(void) unsigned int i = 0; DDRA = 0xFF; DDRB = 0xFF; PORTA = 0x80 >> i ; PORTB = Pattern[i]; LSB while(1) _delay_ms(250); if(++i == 8) i = 0; PORTA = 0x80 >> i; PORTB = Pattern[i]; LSB MSB MSB return 1; 1-7 Assignment-1 1. 상위 or, 하위 4bit 를 on, off 하도록제어하시오. 출력예 : loop 2. 상위비트에서하위비트로 LED 전체가순차적으로 on, off 되도록제어하시오. 출력예 : loop 3. LED 전체를왼쪽, 오른쪽으로순차적으로 on, off 되도록제어하시오. 출력예 : 4. LED 가 on 된상태로순차적으로채워지도록제어하시오. ( 왼쪽, 오른쪽 loop) 출력예 : loop 5. LED 상 / 하위 bit 를바깥쪽에서안쪽으로 on, off 되도록제어하시오. 출력예 : loop loop 8

9 1-7 Assignment-2 1. 아래출력예와같이 LED 상 / 하위 bit가채워지며순차적으로 on, off 되도록제어하시오. 출력예 : loop 2. LED 전체가서서히밝아졌다가다시서서히어두워지도록제어하시오. dummy delay routine 사용. 단, volatile 변수선언 Compile : AVR Studio 의 Project Configuration Options Optimization : -O0 설정 3. 실습보드를흔들었을때, A 가표시되도록제어하시오. ( 잔상효과이용, 이름이니셜표현 ) 출력예 : 4. 실습보드를흔들었을때, I YOU 가표시되도록제어하시오. ( 잔상효과이용 ) 출력예 : 1-7 Assignment-3 < 아래 Assignment 는 8x8 Dot Matrix 에서구현 > 1. 8x8 Dot matrix 를이용하여원하는문자나도형이표현되도록제어하시오. 출력예 : 2. 8x8 Dot matrix 를이용하여한글자씩표현이되도록제어하시오. 자신의이름영문이니셜세글자를한글자씩표현한다. 3. 8x8 Dot matrix 를이용하여문자가동적으로보이도록제어하시오. 표현되는형태는자유롭게제어한다. 상용전광판처럼창의적인효과를구상해서표현해본다. 9

10 2-1 FND (Flexible Numeric Display) 7 Segment display 라고도하며, 7 개의 LED 를이용하여 10 진수를표현한다. 각각의 LED 는 a g 로부르는것이일반적이다. [ 7 Segment display 의 16 진수표현방법 ] [ 다양한 FND 종류 ] 2-1 FND (Flexible Numeric Display) Cathode Common 형 com 단자에 (-) 전압을걸어줘야한다. vcc Anode Common 형 com 단자에 (+) 전압을걸어줘야한다. 실습보드회로 Cathode Common 형이며, 세그먼트는아노드공통이다. 10

11 2-2 FND 구동원리 FND Display Value Table (Cathode Type) PORTA bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 HEX FND h g f e d c b a xC xF xA xB x x x xF x x90 A x88 B x83 C xA7 D xA1 E x86 F x8E a f b e g d c h 2-2 FND 구동원리 Pin 효율적인 FND 연결 모든세그먼트연결시, 총 54pin 필요 8(a, b, c, d, e, f, g, h) * 6 + 6(COM0~COM5) 세그먼트공통연결시, 14pin 으로제어가능 - 8(a, b, c, d, e, f, g, h) + 6(COM0~COM5) - 잔상효과이용으로전체 FND 제어 1/16 초 ( 초 = 약 60ms) 입출력 (I/O) pin 확장디코더 + 래치 (Latch) = CD4511 등의 IC 사용 11

12 2-2 FND 구동원리 잔상효과를이용한 FND 제어 ( 다이나믹방식 ) 2-3 FND 제어 FND 제어예제 -1 FND Segment Data (Active High) PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 DP G F E D C B A FND COM (Active Low) PE7 PE6 PE5 PE4 PE3 PE2 PE1 PE0 COM3 COM2 COM1 COM0 X X X X #include <avr/io.h> #include <util/delay.h> // Int. RC Osc. 1MHz int main(void) unsigned char i, val; DDRA = 0xFF; // FND Segment A output DDRE = 0xFF; // FND COM E output PORTE = 0x03; for(;;) val = 0x01; for(i=0 ; i<4 ; i++) PORTA = val; _delay_ms(200); val <<= 1; a f b g e c d h com0 com1 com2 com3 return 1; 12

13 2-3 FND 제어 FND 제어예제 -2 FND Segment Data (Active High) PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 DP G F E D C B A FND COM (Active Low) PE7 PE6 PE5 PE4 PE3 PE2 PE1 PE0 COM3 COM2 COM1 COM0 X X X X // 모든 FND 에숫자 0 Display #include <avr/io.h> int main(void) // FND Data 초기화 DDRA = 0xFF; // Port A Direction : Output // FND COM 초기화 DDRE = 0xFF; // Port E Direction : Output f e a g d b c h // FND COM0~3 에숫자 0 Display PORTA = 0x3F; PORTE = 0x03; com0 com1 com2 com3 2-4 Assignment-1 1. 모든 FND 에순차적으로숫자 2 를 Display 되도록제어하시오. 다른숫자와문자를 Display 해보고, delay 값을바꿔보시오. 2. 각각의 FND 에숫자 1~4 까지 Display 되도록제어하시오. 출력예 : 3. 모든 FND 에순차적으로 16 진수가 Display 되도록제어하시오. Hint : FND Segment 의값을배열로선언 4. FND COM_0 부터 COM_3 까지순차적으로바뀌면서 16 진수를카운터하도록제어하시오. 출력예 : COM_0 COM_1 COM_2 COM_3 COM_0 COM_1 COM_2 COM_3 COM_0 COM_1 COM_2 COM_3 COM_0 COM_1 COM_2 COM_3 loop 13

14 2-4 Assignment-2 1. LED 와 FND 를동시에 Display 되도록제어하시오. 구현되는방식은자유롭게제어한다. 2. 오른쪽두개의 FND 를이용해서 까지 Dummy Counter 가되도록제어하시오. 구현한뒤에짝수 / 홀수만표시되도록제어해보시오. 구현한뒤에 까지다운카운터하도록제어해보시오. com0 com1 com2 com3 3. 오른쪽두개의 FND 를이용해서 까지 Dummy Counter 가되도록한뒤, 00 이되었을때, LED 전체를 on/off 한뒤다시처음부터카운터되도록제어하시오. 구현한뒤에카운터의순서를반대가되도록수정해서제어해보시오. 4. 오른쪽네개의 FND 를이용해서 0~9999 까지 Dummy Counter 가되도록제어하시오. 구현한뒤에 까지다운카운터하도록제어해보시오. 5. FND 에서자신의전화번호가한방향으로흐르도록제어하시오. ( 오른쪽 왼쪽 ) 핸드폰번호를흐르도록제어해본다. ( 왼쪽 오른쪽방향추가 ) 자신의이름이니셜과핸드폰번호, 집전화번호, 문자등의다양한텍스트를적용해본다. 힌트 : PORTA=0x00; 설정으로 FND 가활성화되지않은것처럼구현 적용회로 3-1 KEY(Switch) 입력제어 PORTC = PIND; 초기화 DDRD = 0x00;... PIND; // input // PIN 레지스터 14

15 3-1 KEY(Switch) 입력제어 Key 제어예제 -1 #include <avr/io.h> int main(void) DDRD = 0x00; PORTD = 0xFF; DDRC = 0xFF; PORTC = 0xFF; // 입력으로정의 // 생략가능 for(;;) PORTC = PIND; // LED low active Key 제어예제 KEY(Switch) 입력제어 #include <avr/io.h> #include <util/delay.h> int main(void) unsigned char key; DDRD = 0x00; DDRC = 0xFF; PORTC = 0xFF; for(;;) key = PIND & 0xFE; // PORTD = 0xFF; // if((pind 0xFE) == 0xFE) if(key == PIND) PORTC = 0xFF; _delay_ms(200); PORTC = 0x00; _delay_ms(200); else PORTC = 0xFF; // 0b , PD_0 on return 1; 15

16 3-2 KEY(Switch) 입력채터링방지 채터링 스위치 on 스위치 off 한번의기계적인개폐동작에전기적으로여러번개폐동작이발생되는것 채터링 사람은한번으로생각하는동작을마이크로프로세서는여러번의개폐동작으로판단하는오류가생길수있다. 디바운싱 (Debouncing) 은이러한채터링문제를방지하는것을말하며, 하드웨어적인방법과소프트웨어적인방법이있다. 채터링방지구현예제 // 오동작발생가능 while(1) while(!(~pind & 0x01)); if(++i == 8) i = 0; PORTC = led[i]; while(~pind & 0x01); while(1) while(!(~pind & 0x01)); _delay_ms(10); if(++i == 8) i = 0; PORTC = led[i]; while(~pind & 0x01); _delay_ms(10); // Falling edge // 디바운싱지연 // 디바운싱지연 3-3 Assignment 1. 4 개의 KEY 에각각 LED on 동작을하도록제어하시오. 구현되는방식은자유롭게한다 개의 KEY 에지시된 LED 와 FND 동작을하도록제어하시오. 각 KEY0~3 on 시, LED on 동작과 FND 숫자 1~4 가 Display 되도록제어한다. 구현되는방식은자유롭게한다 com0 com1 com2 com com0 com1 com2 com3 loop 3. 첫번째 KEY 를 on 시키면 FND 에표시되는숫자가일정시간으로증가하고, 두번째 KEY 를 on 시키면 FND 에표시되는숫자가일정시간으로감소하도록제어하시오. 16

17 4-1 인터럽트의개요 Interrupt? 소프트웨어 (S/W) 인터럽트 소프트웨어요청에의해발생되는인터럽트 프로세서 (CPU) 내부에서발생 예 : 타이머 / 카운터 [ 인터럽트서비스루틴 (ISR) 의실행순서 ] Interrupt Vector Table PC 하드웨어 (H/W) 인터럽트 하드웨어의요청에의해발생되는인터럽트 프로세서 (CPU) 외부에서발생 예 : 네트워크카드, 센서 일반적인태스크 (Task) 가실행이된다. 인터럽트발생조건이만족되어서인터럽트가발생된다. Task ISR 인터럽트가발생되면마이크로프로세서 (CPU) 는무조건인터럽트벡터 (Interrupt Vector) 들이 ( 테이블형식으로 ) 저장되어있는인터럽트벡터테이블의메모리시작주소로점프하여발생된 인터럽트종류에대한인터럽트벡터주소까지찾아가게된다. 인터럽트벡터내에는실제인터럽트가발생되었을때실행되는인터럽트서비스루틴의메모리 시작주소로점프하라는명령어가있으므로, 이점프명령어에의해실제인터럽트서비스루틴의 메모리시작주소로점프하게된다. 인터럽트서비스루틴 (ISR) 이실행된다. 인터럽트서비스루틴 (ISR) 이종료되면인터럽트가발생되기전에실행되던태스크가멈추었던곳 으로되돌아간다. Interrupt 발생 멈추었던태스크가다시실행된다. 4-1 인터럽트의개요 Interrupt Vectors Table ATmega128은인터럽트우선순위가하드웨어적으로설정되어있다. 예 : 35종의인터럽트벡터중일부설정내용 (ATmega128 데이트시트 59 page 참고 ) Alternate Function 핀인, PD0 ~ PD4 사용 ( 회로도참고 ) 17

18 Interrupt Vectors Macro 4-1 인터럽트의개요 인터럽트서비스루틴에는인터럽트벡터외에어떠한정보도인자를사용하여전달할 수없다. 그리고, 반환값이없는 void 형으로작성된다. 작성예 #include <avr/interrupt.h> ISR(INT0_vect) // routine /* SIGNAL(SIG_INTERRUPT0) // routine */ 4-1 인터럽트의개요 Polling 명령어를사용하여입력 pin 값을계속읽어서입력 pin 의변화값을읽어내는방식 폴링의예 : 여자친구가놀러오기로되어있었기때문에여자친구가도착할때까지수시로집밖으로나가서확인하는것을반복한다. Interrupt 하드웨어적으로변화를체크하여변화시에만동작하는방식 [iom128.h 참고 ] 인터럽트의예 : 여자친구가놀러오기로되어있었지만, 여자친구가집에도착해서초인종을눌렀을때밖으로나가서확인한다. 18

19 SREG : Status Register 4-2 외부인터럽트관련레지스터 Register 설명구현예제 SREG AVR Core 내부에있는 Status Register 는 ALU 연산수행후갱신됨 MCU 의현상태및최근 ALU 실행에대한결과를포함 Bit7. I (Global Interrupt Enable) : 프로세서내모든인터럽트활성화비트 허용!!! 1 로설정 인터럽트허용 sei(); // <avr/interrupt.h> // #define sei() asm volatile ("sei" ::) SREG = 1<<SREG_I; EIMSK : External Interrupt Mask Register Register 설명구현예제 EIMSK Bit 7:0 해당비트값을 1 로설정 (= Masking) 하면해당되는핀이외부 인터럽트핀으로활성화됨 EIMSK = (1<<INT3); // 1 << 3 = 0b ; EIMSK = (1<<INT0) (1<<INT3); 4-2 외부인터럽트관련레지스터 EICRA : External Interrupt Control Register A Register 설명구현예제 EICRA 트리거신호 (Trigger Signal) 를설정하기위한레지스터 EICRA = (0<<ISC21) (0<<ISC20); // INT2 핀에 Low 신호가입력되는순간인터럽트가발생됨 EICRB = (0<<ISC41) (0<<ISC40); // INT4 핀에 Low 신호가입력되는순간 인터럽트가발생됨 EICRB (External Interrupt Control Register B ) : INT7~INT4 이며, 제어방식은 EICRA 방법과동일 19

20 외부인터럽트제어예제 4-2 외부인터럽트제어 #include <avr/io.h> #include <avr/interrupt.h> //#include <avr/signal.h> // obsolete #include <util/delay.h> volatile char int_flag; int main(void) init_system(); exit0_set(); sei(); // 초기화함수호출 // 설정함수호출 void init_system(void) DDRC = 0xFF; PORTC = 0xFF; DDRD = 0x00; PORTD = 0xFF; SIGNAL(SIG_INTERRUPT0) int_flag = 1; void exit0_set(void) EICRA = 0x00; // (0<<ISC01) (0<<ISC00); EIMSK = 0x01; // (1<<INT0); for(;;) if(int_flag) PORTC = 0x00; int_flag = 0; else PORTC = 0xFF; return 1; AVR-GCC 기반의컴파일러를사용하여컴파일하는소스코드에서, 인터럽트서비스루틴내에사용된전역변수는반드시선언시에 volatile 이라는수식어를붙여야만한다. 이는컴파일러의최적화옵션 (-0s) 때문이다. 4-3 Assignment-1 1. INTERRUPT0 를발생시켜모든 LED 가 on/off 되도록제어하시오. 구현되는방식은자유롭게제어한다. 단, LED 제어에서배운방식이구현되도록한다. 2. FND 가동작하는중에특정 INTERRUPT 를발생시켜 LED 가 on/off 되도록제어하시오. 전체 FND 세그먼트가실행되도록제어한다. Low level Trigger 3. INT0~INT4 중두개이상의 INTERRUPT 에다른 LED on/off 방식이구현이되도록제어하시오. LED 제어에서배운다양한방식을적용한다. 4. LED 가왼쪽 / 오른쪽으로동작이될때 INTERRUPT 로 LED 가정지하도록제어하시오. 전자주사위구현 5. FND_COM0 에서임의의시간으로 0~F 까지카운터를하다가 INTERRUPT2 가발생되면카운터가멈추고, LED 가왼쪽으로쉬프트 on 된뒤에다시 FND 가멈추었던숫자부터다시카운터되도록제어하시오. 전자주사위구현 falling edge Trigger 20

21 4-3 Assignment-2 1. A, B, C, D 생산라인중에갤럭시S2는 A, B line에서생산되고, 갤럭시S3는 C, D line에서생산되고있다. A, B line에서생산되는전체제품수를 INTERRUPT0, 1을이용하여 FND 상위두개의 COM에표시하고, C, D line에서생산되는제품수를 INTERRUPT 2, 3을이용하여하위 COM에표시되도록제어하시오. 구현되는방식은자유롭게제어한다. [A, B line] [C, D line] 2. Dummy Counter 를구현하여 Stop Watch 기능을구현하도록제어하시오. Counter 의자리수는자유롭게구현 5-1 타이머와카운터의개요 시간측정 절대적개념의시간 : 주변환경과상관없이독립적으로제어되는시간예 ) RTC(Real-Time Clock) 상대적개념의시간 : 주변환경과맞물려제어되는시간 ATmega128 의내부또는외부클럭을이용하여계산 (8bit,16bit 각 2 개 ) ( 주기적 action) ( 주파수의 ) 진동수 = (Hz) 1 ( 시간의 ) 주기 (second) 21

22 5-1 타이머와카운터의개요 공식 1 16 구하고자하는시간 1 Clock 발생하는데걸리는시간 발생한 Clock 횟수 = 발생한 Clock 을카운팅한횟수 Timer/Counter Register TCNT0 : 8bit Register 는카운터횟수가 256 까지가범위 Prescaler( 분주 ) 로카운터횟수의한계점해결 구하고자하는시간 공식 Clock 발생하는데걸리는시간 1 카운트할때걸리는시간 최종카운트횟수 AVR 프로세서는내부적으로미리몇가지 Prescaler 들을제공하고있는데, 개발자는계산된최종 카운트값이 0 ~ 256 범위내에들어갈수있도록적절한 Prescaler 를고르면된다. 5-1 타이머와카운터의개요 Prescaler( 분주 ) 개념 22

23 5-2 타이머 / 카운터내부동작구조 Prescaler( 분주 ) 개념 Overflow Interrupt 5-2 타이머 / 카운터내부동작구조 으로초기화 bit register 한개만필요 - Overflow 는 255 에서발생 - 0~ counting 255 에서 Overflow Interrupt 발생 (n=256) 으로초기화 n=250 일때인터럽트발생 - 0 이아닌, 6 으로초기화! - 6~ counting 250 에서 Overflow Interrupt 발생 (n=250) 23

24 5-2 타이머 / 카운터내부동작구조 Output Compare Match Interrupt 으로초기화 (n-1) 로초기화 Counter register Compare register - 두개의 register 필요 counter register ( 횟수기록 ) compare register (n 값기록 ) - counter register 가증가되다가 compare register 와그값이서로같으면인터럽트발생 Counter register 값을증가시킨후 Compare register 값과비교 Counter register Compare register - counter register 를증가하며 compare register 와비교 (Counter register == Compare register ) 인터럽트발생 Counter register Compare register - counter register 와 compare register 를비교하여값이서로같을때, 인터럽트발생 counting 5-3 타이머 / 카운터관련레지스터 TCCR0 : Timer/Counter Control Register Register 설명구현예제 Bit6,3 WGM01:0 Waveform Generation Mode 출력할파형설정 Overflow interrupt 일때 - Nomal 모드로설정 - interrupt 가발생할때마다반드시 TCN0 값을초기화해야한다. Compare match interrupt 일때 - CTC mode 로설정 - TOP 를 OCR0 로사용 OCR0 값에서인터럽트발생 - interrupt 가발생하면자동적으로 TCNT0 값이 0 으로초기화 TCCR0 = (0<<WGM00) (0<<WGM01); // Normal mode TCCR0 = (0<<WGM00) (1<<WGM01); // CTC mode Bit2,0 CS02: Clock select Prescaler( 분주 ) 설정 TCCR0 = (1<<CS02) (0<<CS01) (0<<CS00); // 1/64 Prescaler 24

25 TCNT0 : Timer/Counter Register 5-3 타이머 / 카운터관련레지스터 Register 설명구현예제 TCNT0 Prescaler 가적용된클럭주기마다 1 씩증가하는 8bit 값 하드웨어 (=counter) 에의해증가됨 Overflow interrupt 발생시점 = 256-n Output Compare Match Interrupt 발생시점 = 0 TCNT0 = 256 CPU_CLOCK/TICKS_PER_SEC/64); // CPU_CLOCK : // TICKS_PER_SEC : 1000 // 64 : 1/64 Prescaler // (CPU_CLOCK/TICKS_PER_SEC/64) == n OCR0 : Output Compare Register Register 설명구현예제 OCR0 TCNT0 와비교가되는 8bit 값 Output Compare Match Interrupt 에서사용 초기화값 = n-1 OCR0 = (CPU_CLOCK/TICKS_PER_SEC/64)-1; // CPU_CLOCK : // TICKS_PER_SEC : 1000 // 64 : 1/64 Prescaler // (CPU_CLOCK/TICKS_PER_SEC/64) == n 5-3 타이머 / 카운터관련레지스터 TIMSK : Timer/Counter Interrupt Mask Register Register 설명구현예제 Bit 1 OCIE0: Timer/Counter0 Output Compare Match Interrupt Enable Output Compare Match Interrupt 활성화 OCIE0 와 SREG_I 비트가 1 로설정되어있어야만 Output Compare Match Interrupt 가활성화됨 TIMSK = (1<<OCIE0) (0<<TOIE0); // Output Compare Match Interrupt Bit 0 TOIE0: Timer/Counter0 Overflow Interrupt Enable Overflow Interrupt 활성화 TOIE0 와 SREG_I 비트가 1 로설정되어있어야만 Overflow Interrupt 가활성화됨 TIMSK = (0<<OCIE0) (1<<TOIE0); // Overflow Interrupt 기타레지스터 ASSR : Asynchronous Status Register SFIOR : Special function I/O Register TIFR : Timer/Counter Interrupt Flag Register 25

26 타이머 / 카운터제어예제 5-4 타이머 / 카운터제어 /* *********************************************************** * File : tc01.h *********************************************************** */ #include <avr/io.h> //#include <avr/signal.h> #include <avr/interrupt.h> // 초기화 #define DDR_LED DDRC #define PORT_LED PORTC #define PIN_LED PIND #define CPU_CLOCK // CPU Clock : 16MHz #define TICKS_PER_SEC 1000 // (1/1000) 초 /* ********************************************************** * File : tc01.c ********************************************************** */ int main(void) unsigned char led_status = 0xFF; DDR_LED = 0xFF; // LED 포트를출력모드로설정 PORT_LED = 0xFF; // LED 포트초기화 // clk/64 TCCR0 = (0 <<WGM01) (0 <<WGM00) (0 <<CS02) (1<<CS01) (1<<CS00); // timer 시작값초기화 TCNT0 = (CPU_CLOCK / TICKS_PER_SEC / 32) ; // 타이머 / 카운터0 오버플로우인터럽트활성화 TIMSK = (0 <<OCIE0) (1 <<TOIE0); #include tc01.h" // 인터럽트서비스루틴에사용될전역변수선언 volatile unsigned int tic_time; sei(); SIGNAL(SIG_OVERFLOW0) // timer0 의오버플로우함수 for (;;) tic_time++; // timer 시작값초기화 led_status = ~led_status; PORT_LED = led_status; TCNT0 = (CPU_CLOCK / TICKS_PER_SEC / 32); Delay_ms(1000); void Delay_ms(unsigned int msec) tic_time = 0; while (msec >tic_time); return 1; 5-5 Assignment-1 1. Overflow Interrupt를사용한타이머를이용하여 millisecond 단위의 delay 함수를작성하고해당 delay 함수를사용하여 1초마다 8개의 LED가 Blinking(on/off) 되도록제어하시오. LED가구현되는방식은자유롭게제어한다. 2. Output Compare Match Interrupt를사용한타이머를이용하여 millisecond 단위의 delay 함수를작성하고해당 delay 함수를사용하여 1초마다 8개의 LED가 Blinking (on/off) 되도록제어하시오. LED가구현되는방식은자유롭게제어한다. 3. 임의의 KEY 를눌렀다떼는순간부터 1 초간 LED 가 Blinking(on/off) 되도록제어하시오. 타이머 / 카운터 Interrupt 방식은자유롭게선택 4. Overflow Interrupt 가발생할때, LED 가 shift 되면서 on 시키고, FND 에 0~9 까지카운터가 되도록제어하시오. FND 가구현되는방식은자유롭게제어한다. 26

27 5-5 Assignment-2 1. 타이머 / 카운터 Interrupt가발생할때마다 (1sec), LED를 shift 하면서 on 시키고, LED가 on 되어있는 bit를 FND에표시하도록제어하시오. 8bit Timer/Counter0, 2를각각제어한다. Normal Mode, CTC Mode로각각제어한다. 2. 타이머 / 카운터 Interrupt 를이용하여시계가구현되도록제어하시오. 1 초마다 LED 가 Blinking 되도록제어한다. KEY 입력으로시간과분이 +1 되도록제어한다. 3. 타이머 / 카운터 Interrupt 를이용하여 Assign 에서수행하였던전화번호가 KEY 0~4 의입력을각각받을때마다임의의속도로구분되면서흐르도록제어하시오. KEY 4 개를모두활용하며, 구현방식은자유롭게제어한다. 6-1 문자 LCD 의개요 문자 LCD의이해 Liquid Crystal Display의약자 LCD는 Character Type LCD와 Graphic Type LCD로구분한다. 최대가로로쓰여지는문자수와세로로표시되는줄수로규격이정해진다. - 16X2, 40X2, 20X4 등다양한종류가있다. LCD와 controller가결합된모듈형태이며, 대부분 Hitachi의 HD44780U 컨트롤러를내장하고있다. 2개의 register를이용하여 text 표시 RS 신호에의해서선택된다. - Instruction Register (IR) : Text LCD 모듈의환경설정 - Data Register (DR) : 모듈에글자를표시하기위한데이터값이들어가는레지스터 사용방법 : IR에명령어를세팅 DR에표시하고자하는데이터값을 write 27

28 핀구성과기능 6-1 문자 LCD 의개요 핀번호기호기능 1 Vss GND 2 V DD +5V 3 V EE 가변저항을통해 LCD 의휘도를조절 4 RS 5 R/W 6 E Register Select (PG0) H : data register Read/Write (PG1) H : Read Enable (PG2) H : Enable 7~14 B0~B7 8bits 데이터버스 L : instruction register L : Write L : Disable [ 회로도 ] DDRAM (Display Data RAM) 6-1 문자 LCD 의개요 최대 80*8bit 기억용량을가진다.( 최대 80글자기억 ) DDRAM의 1행 0x00 ~ 0x27 address(40문자 ) : 0x80 + (0x00 ~ 0x27) DDRAM의 2행 0x40 ~ 0x67 address(40문자 ) : 0x80 + (0x40 ~ 0x67) 현재실습용 LCD는한줄에 40문자중 16문자만 display DDRAM의 address 동작상태 ( 실제메모리공간 : 0x80 ~ 0xA7, 0xC0~0xE7) A 0B 0C 0D 0F A 4B 4C 4D 4F Left shift Right shift CG ROM (Character Generator ROM : 문자발생 ROM) 가로 (16) x 세로 (12) 개의 address code 를가지며 192 개의숫자, 문자패턴을가지고있다. CG RAM (Character Generator RAM : 문자발생 RAM) 사용자가프로그램으로문자패턴을만들경우사용하는 RAM(0x00 ~ 0x3F 번지저장 ) 8개의사용자공간을활용할수있으며, 전원 OFF시 data 지워진다. 28

29 레지스터선택신호 6-2 문자 LCD 명령 RS R/W 기능 0 0 IR(instruction register) 에제어데이터쓰기 0 1 LCD에문자쓰기가능여부를위하여 Busy Flag 읽기 1 0 LCD에표시할문자를 DR(data register) 에쓰기 1 1 LCD의 DR 내용을 CPU로읽기 RS = L 명 령 RW=H RW=L 명령어읽기 명령어쓰기 RS RS = H 데이터 RW=H RW=L 데이터읽기 데이터쓰기 RS = H LCD 활성화 E RS = L LCD 비활성화 6-2 문자 LCD 명령 문자 LCD 명령 명령 D7 D6 D5 D4 D3 D2 D1 D0 기능실행 표시클리어 표시클리어, 커서홈 1.64ms 커서홈 * 커서홈 1.64ms 엔트리모드셋 I/D S 커서방향, 표시이동 40us 표시온 / 오프 D C B 표시 (D), 커서 (C), 블링크 (B) 40us 표시쉬프트 S/C R/L * * 커서, 표시이동 40us Function set DL N F * * 인터페이스 (DL), 라인 (N), 폰트 (F) 40us CG 램주소 0 1 CG RAM Address CG RAM address set 40us DD 램주소 1 DD RAM Address DD RAM address set 40us BF/ 주소읽기 BF Address Counter BF, AC 내용읽기 0us 데이터쓰기 Data ( 쓸데이터 ) 데이터를쓴다 40us 데이터읽기 Data ( 읽을데이터 ) 데이터를읽는다 40us 29

30 문자 LCD 명령어 Code 의의미 6-2 문자 LCD 명령 1 Address 증가 (address +1) Increment I/D 0 Address 감소 (address +1) Decrement 1 표시 shift 동반 Shift S/C 0 커서이동 curse 1 오른쪽으로이동 Right R/L 0 왼쪽으로이동 Left 1 8bit D/L Data line 0 4bit 1 2 line N Number line 0 4 line 1 글자 display on D display 0 글자 display off 1 5x10 dot F font 0 5x7 dot 1 내부명령진행중 : 명령거부 BF Busy flag 0 명령어대기 : 명령받아들임 * Don t care ( 무의미 ) I/D = 1 표시전체좌로이동 S = 1 S = 0 이동하지않음 I/D = 0 표시전체우로이동 문자 LCD 모듈초기화 6-2 문자 LCD 명령 // LCD 초기화 void init_lcd(void) _delay_ms(15); //15msec 이상시간지연 LCD_cmd_write(0x38); // 기능셋 ( 데이터버스 8 비트, 2 줄 ) _delay_ms(5); //4.1msec 이상시간지연, 생략可 LCD_cmd_write(0x38); // 기능셋, 생략可 _delay_us(100); //100usec 이상시간지연, 생략可 LCD_cmd_write(0x38); // 기능셋, 생략可 LCD_cmd_write(0x08); // 표시 Off, 생략可 LCD_cmd_write(0x01); // 화면지우기 LCD_cmd_write(0x06); // 엔트리모드셋 LCD_cmd_write(0x0C); // 표시 On 30

31 6-3 문자 LCD 제어 문자 LCD 제어예제 #define F_CPU // 사용하는 CPU 클럭설정 #include <avr/io.h> #include <util/delay.h> // DDRAM 설정 : 0x80+DDRAM address 값 #define LINE1 0x80 // 첫번째라인의 DDRAM address : 0x00 0x80+0x00 #define LINE2 0xC0 // 두번째라인의 DDRAM address : 0x40 0x80+0x40 // PG2=LCD_EN, PG1=RW, PG0=RS 에연결 #define CMD_WRITE 0xFC // 명령어쓰기 E=1, RW=0, RS=0 #define CMD_READ 0xFE // 명령어읽기 E=1, RW=1, RS=0 #define DATA_WRITE 0xFD // 데이터쓰기 E=1, RW=0, RS=1 #define DATA_READ 0xFF // 데이터읽기 E=1, RW=1, RS=1 #define LCD_EN 0x04 // PG2에연결 // LCD에명령을쓰기위한함수 void LCD_cmd_write(unsigned char cmd) PORTG = CMD_WRITE; // PORTG에 RS, RW, E 가연결 PORTB = cmd ; // PORTB에데이터버스연결 PORTG = PORTG^LCD_EN; // E 신호를 H L로하기위해 _delay_ms(2); // LCD 내부동작시간 // LCD에데이터를쓰기위한함수 void LCD_data_write(unsigned char data) PORTG = DATA_WRITE; // PORTG에 RS, RW, E 가연결 PORTB = data ; // PORTB에데이터버스연결 PORTG = PORTG^LCD_EN; // E 신호를 H L로하기위해 _delay_ms(2); // LCD 내부동작시간 // LCD 초기화 void init_lcd(void) _delay_ms(15); // 15msec 이상시간지연 LCD_cmd_write(0x38); // 기능셋 ( 데이터버스 8비트, 라인수 :2줄) _delay_ms(5); LCD_cmd_write(0x38); _delay_us(100); LCD_cmd_write(0x38); LCD_cmd_write(0x08); LCD_cmd_write(0x01); LCD_cmd_write(0x06); LCD_cmd_write(0x0C); // 4.1msec 이상시간지연, 생략가능 // 기능셋, 생략가능 // 100usec 이상시간지연, 생략가능 // 기능셋, 생략가능 // 표시 Off, 생략가능 // 화면지우기 // 엔트리모드셋 // 표시 On // LCD에문자열을표시하기위한함수 void LCD_wr_string(char d_line, char *string) LCD_cmd_write(d_line); // 문자열을표시하기위한라인설정 while(*string!= '\0') LCD_data_write(*string); // 한개의문자씩 LCD에표시 string++; // ATmega128의포트초기화 void init_system(void) DDRB = 0xFF; // LCD 데이터버스 PORTB = 0xFF; DDRG = 0xFF; // LCD 컨트롤신호 (PG2=LCD_EN, PG1=RW, PG0=RS) PORTG = 0xFF; int main(void) init_system(); // 초기화 init_lcd(); LCD_wr_string(LINE1, " Hello AVR!! "); // LINE을지정하고문자열을쓴다. LCD_wr_string(LINE2, " LCD Test "); // LINE을지정하고문자열을쓴다. for(;;); return 1; 6-4 Assignment 1. LCD 에자신의이름과소속이출력되도록제어하시오. 16 font 를넘지않도록주의! 2. LCD 에첫번째텍스트가출력된뒤에두번째텍스트를왼쪽으로이동하였다가다시 오른쪽으로이동하도록제어하시오. 16 font 를넘지않도록주의! LCD Display Example ABCDEF Shift left/right 3. 앞서배운제어방식을구현하면서 LCD에정보가 display 되도록구현하시오. KEY, LED, FND, LCD 등을동시에제어한다. KEY 입력마다 LED 또는 FND 제어예제를동작하도록하고그동작에대한설명을 LCD에 Display 되도록제어한다. 31

32 7-1 시리얼통신개요 시리얼통신이란? 동기 (Synchronous) TCP USART TWI (I 2 C) 비동기 (Asynchronous) UDP UART GPS, BlueTooth, ZigBee 임베디드시스템용시리얼통신 UART ex) MMI (Man Machine Interface) 패러럴통신과시리얼통신방식 시리얼통신데이터전송포맷 7-1 시리얼통신개요 ATmega128은 2개의시리얼통신포트 (USART0, USART1) 를가지고있다. 데이터전송속도보오레이트 (Baud Rate), 단위는 bps(bit per sec) 시리얼통신전송속도 : 1200, 2400, 4800, 9600, 19200, 38400, 57600, bps 등 통신방식 : 동기방식, 비동기방식중선택 전송데이터길이 : 5, 6,7, 8, 9 bit 중선택 (* 8bit : ASCII code) stop bit : 1, 2 stop bit 중선택 패리티비트 송신 : 사용안함, Even( 짝수 ) 패리티비트, Odd( 홀수 ) 패리티비트중선택 수신 : 패리티에러, 오버런 (overrun) 에러, 프레임 (frame) 에러검출기능 Start parity stop 32

33 7-1 시리얼통신개요 시리얼통신회로도 +5V Powered RS-232 Transmitters / Receivers PC KiET_SB101 MAX232 는송신할때는 5V 의신호를 8~13V 로변환해주어통신할수있는거리를늘려주는역할을하고수신할경우에는 8~13V 의전압을 5V 로낮춰주는역할을한다. 시리얼통신내부구조분석 7-2 시리얼통신내부구조 : 8Mhz CPU core TXD1 RXD1 33

34 시리얼통신내부구조분석 7-2 시리얼통신내부구조 Clock Generator UDR (Transmit) : 송신버퍼 다음번데이터는송신버퍼가비워질 (empty) 때까지대기 송신버퍼 empty Transmitter 한 bit 씩 Loading TRANSMIT SHIFT REGISTER : 한 bit 씩송신 (Transmitting) TXD1 Receiver 시리얼통신내부구조분석 7-2 시리얼통신내부구조 Clock Generator Transmitter Stop bit : Data bit 수신완료 Receiver RECEIVE SHIFT REGISTER : 한 bit 씩수신버퍼에저장 RXD1 RXD1 핀으로부터한 bit 씩수신 UDR (Receive) : 수신버퍼 수신버퍼 full 34

35 UDRn : USARTn I/O Data Register 7-3 시리얼통신관련레지스터 Register 설명구현예제 UDRn 송수신데이터를저장하기위한레지스터 버퍼 (buffer) UDR1 = byte; // 송신할때 return UDR1; // 수신할때 UCSRnA : USART Control and Status Register A Register 설명구현예제 Bit7-RXCn: USART Receive Complete Bit 5 UDREn: USART Data Register Empty USART Receive Complete bit RX 핀으로부터입력된수신데이터 (8비트) 가모두수신버퍼 (UDR) 로입력이완료되는순간자동적으로 1 로설정됨. 수신버퍼가완전히채워질때 USART Data Register Empty bit 송신버퍼 (UDR) 가새로운데이터를받을준비가되어있는지알려줌 송신버퍼가완전히비워질때 while(! (UCSR1A &(1<<RXC1)) ); // RXC1 비트가 1 이될때까지대기 (wait) Polling 방식 while(!(ucsr1a &(1<<UDRE1))); // UDRE1 비트가 1 이될때까지대기 (wait) 7-3 시리얼통신관련레지스터 Polling code (ATmega128 데이터시트 179 page) 35

36 7-3 시리얼통신관련레지스터 UCSRnB : USART Control and Status Register B Register 설명구현예제 Bit7-RXENn: Receive Enable USART 수신을활성화 (enable) 수신버퍼와관련된동작이가능하도록함 UCSR1B = (1<<TXEN) (1<<RXEN) (0<<UCSZ2); Bit 3 TXENn: Transmitter Enable USART 송신을활성화 (enable) 송신버퍼와관련된동작이가능하도록함 UCSR1B = (1<<TXEN) (1<<RXEN) (0<<UCSZ2); Bit 2 UCSZn2: Character Size UCSRnC 의 UCSZn1:0 과함께송수신데이터의사이즈를결정 UCSRnC 참조 UCSR1B = (1<<TXEN) (1<<RXEN) (0<<UCSZ2); 7-3 시리얼통신관련레지스터 UCSRnC : USART Control and Status Register C Register 설명구현예제 Bit 5:4 UPMn1:0: Parity Mode Parity 모드설정 UCSR1C = (0<<UPM1) (0<<UPM0) (0<< USBS) (1<<UCSZ1) (1 <<UCSZ0); Bit 3 USBSn: Stop Bit Select Stop 비트를 1 비트와 2 비트중어느것을할지설정 UCSR1C = (0<<UPM1) (0<<UPM0) (0<< USBS) (1<<UCSZ1) (1 <<UCSZ0); Bit 2:1 UCSZn1:0: Character Size UCSRB 의 UCSZ2 와함께송수신데이터의사이즈를결정 8 비트데이터사이즈로결정함! ASCII code UCSR1C = (0<<UPM1) (0<<UPM 0) (0<< USBS) (1<<UCSZ1) (1 <<UCSZ0); 36

37 7-3 시리얼통신관련레지스터 UBRRnL, UBRRnH : USART Baud Rate Registers Register 설명구현예제 UBRRnL, UBRRnH 시리얼통신 ( 송수신 ) 속도 (Baud Rate) 를설정하기위한레지스터 7-3 시리얼통신관련레지스터 Baud Rate 에따른 UBRR 값과에러률에대한값 Table (ATmega128 데이터시트 197 page) 37

38 7-3 시리얼통신관련레지스터 UBRRnH UBRRnL UDR (Transmit) : 송신버퍼 전송속도설정 Next Data 송신버퍼 empty Clock Generator Transmitter TRANSMIT SHIFT REGISTER : 송신시프트레지스터 TXD1 USCRnA RXCn UDREn UCSRnB 송수신활성화 Data size 설정 Receiver UCSRnC Parity 모드설정 Data size 설정 7-3 시리얼통신관련레지스터 UBRRnH UBRRnL 전송속도설정 Stop bit : Data bit 수신완료 Clock Generator Transmitter Receiver RECEIVE SHIFT REGISTER : 한 bit 씩수신버퍼에저장 RXD1 RXD1 핀으로부터한 bit 씩수신 UDR (Receive) : 수신버퍼 수신버퍼 full USCRnA RXCn UDREn UCSRnB 수신활성화송신활성화 Data size 설정 UCSRnC Parity 모드설정 Stop bit 설정 Data size 설정 38

39 7-4 시리얼통신제어 헤더파일분석 #define CPU_CLOCK #define BAUD_RATE #define BAUD_RATE_L (CPU_CLOCK/(8l*BAUD_RATE))-1 // 하위 8 비트 #define BAUD_RATE_H ((CPU_CLOCK/(8l*BAUD_RATE))-1) >> 8 // 상위 4 비트 Case1) UBRR=51( ) 인경우 UBRRnH UBRRnL Case2) UBRR=416( ) 인경우 UBRRnH UBRRnL * 의하위 8 비트 ( ) 는 UBRRnL (BAUD_RATE_L) 에할당상위 4 비트값만걸러내기위해 를 8 번오른쪽으로 Shift 시켜남아있는값만걸러내면된다 >> Assignment 1. PC 의키보드에서입력되는문자가하이퍼터미널을통해 Return 되도록제어하시오. Baud rate 9,600bps, Normal Speed, 비동기통신, no parity, 1 stop, 8bit data 2. 하이퍼터미널에 Hello MCU World! 이라는문자가출력되도록제어하시오. Baud rate 는임의대로설정 3. 아래와같은메뉴를만들어 LED와 FND를동작시키시오. 메뉴 : 1. LED Test 2. FND Test Input number(1-2) : 동작 : 1. 전체 LED 가 Shift Blinking 되도록한다. 2. FND 의숫자를 00~99 까지 Counter 한다. 39

40 8-1 Step-Motor 1902 년에영국에서처음개발되어 1960 년대일본에서 NC 공작기계에처음도입 AC 서보, DC 서보모터에비하여값이싸고정확한각도제어에유리 기계적인이동량을정밀하게제어하는곳에스테핑모터가많이사용 펄스에의해디지털적으로제어하는것이가능하므로마이크로컨트롤러에서사용하기에적합한모터 샤프트 ( 축 ) 의위치를검출하기위한별도의피드백신호없이정해진각도를회전하고 (Open Loop Control), 상당히높은정확도로정지할수있음. 다른모터에비해정지시매우큰유지토크가있기때문에전자브레이크등의위치유지기구를필요로하지않음. 회전속도가펄스속도에비례하므로간편하게제어할수있음. 8-2 Step-Motor 의구조 스텝모터구조 고정자와회전자의구조 40

41 8-3 Step-Motor 구동방법 (1) 스테핑모터제어회로 여자신호발생부 : 펄스를인가하여각상의여자신호를발생함. 구동회로부 : 신호를받아서권선에여자전류를흘려줌. 마이크로컨트롤러 방향신호와펄스열을발생 8-3 Step-Motor 구동방법 (2) 1 상여자방식 (Full step) 구동방법 스텝핑모터를구동하기위한최소한의구동방법 STEP_A -> STEP_/A -> STEP_B -> STEP_/B -> STEP_A ->>> 정회전 특징 1 개의코일만을차례로여자하는방식 소비전력이낮고 1 스텝당각정밀도가높음 감쇠진동이크고탈조하기쉬움 구분 A B /A /B 주기 41

42 8-3 Step-Motor 구동방법 (3) 1 상여자방식동작타이밍 8-3 Step-Motor 구동방법 (4) 2 상여자방식 구동방법 항상 2 상이여자되므로기동토크가주어져난조가일어나기어렵고항상 2 개의상에서전류가흐르게하도록해야한다. STEP_A,STEP_/A -> STEP_/A, STEP_B -> STEP_B, STEP_/B -> STEP_/ B,STEP_A ->>> 정회전 특징 2 개의코일을동시에여자하는방식 1 상여자구동에비해 2 배의전류가필요하지만토크가크고감쇠진동이적음 주파수 (damping) 특성이양호하여가장널리이용되는방법 구분 A B /A /B 주기 42

43 8-3 Step-Motor 구동방법 (5) 2 상여자방식동작타이밍 8-3 Step-Motor 구동방법 (6) 1-2 상여자방식 구동방법 하나의상과두개의상에교대로전류를흐르게하는방식 스텝각은 1,2 상여자방식의 1/2 이며응답스텝비율은 1,2 상의 2 배이다. 특징 1 상여자구동에비해 1.5 배의전류가필요 1 펄스에대한스텝각은 1 상여자와 2 상여자에의한스텝각의 1/2 각도를정밀하게제어하는경우에사용 구분 A B /A /B 주기 43

44 8-3 Step-Motor 구동방법 (7) 1-2 상여자방식동작타이밍 8-4 Step-Motor 회로 44

45 8-5 Step-Motor 구동하기 실습개요 ATMega128 의 GPIO 핀을이용하여스텝모터를회전시키도록한다. 스텝모터의구동방식은 1 상, 2 상, 1-2 상여자방식모두사용하도록한다. 앞에서배운타이머인터럽트기능을복합적으로이용하여야한다. 실습목표 스텝모터의동작원리를이해 ATmega128 의 GPIO 를이용한스텝모터구동방법습득 타이머인터럽트, GPIO 제어의복합적인프로그램능력배양 구동프로그램 : 사전지식 8-5 Step-Motor 구동하기 스텝모터의 1 상여자방식신호만들기 PC(0:3) 에차례대로, 0x1, 0x2, 0x4, 0x8 을한주기로하여계속보내주면된다. 반대방향으로돌리고싶다면, 0x8, 0x4, 0x2, 0x1 순서로데이터를보내면된다. 신호 PC0(A) PC1(B) PC2(/A) PC3(/B) PC() 0x1 0x2 0x4 0x8 0x1 0x2 0x4 0x8 0x1 45

46 구동프로그램 : 사전지식 8-5 Step-Motor 구동하기 스텝모터의 2 상여자방식신호만들기 PC(0:3) 에차례대로, 0x3, 0x6, 0xC, 0x9 를한주기로하여계속보내주면된다. 반대방향으로돌리고싶다면, 0x9, 0xC, 0x6, 0x3 순서로데이터를보내면된다. 신호 PC0(A) PC1(B) PC2(/A) PC3(/B) PC() 0x3 0x6 0xC 0x9 0x3 0x6 0xC 0x9 0x3 구동프로그램 : 사전지식 8-5 Step-Motor 구동하기 스텝모터의 1-2 상여자방식신호만들기 PC(0:3) 에차례대로, 0x01, 0x3, 0x02, 0x6, 0x04, 0xC, 0x08, 0x9 를한주기로하여계속보내주면된다. 반대방향으로돌리고싶다면, 순서를역순으로데이터를보내면된다. 신호 PC0(A) PC1(B) PC2(/A) PC3(/B) PC() 0x1 0x3 0x2 0x6 0x4 0xC 0x8 0x9 0x1 46

47 구동프로그램 : 사전지식 8-5 Step-Motor 구동하기 타이머사용 1-2 상여자방식신호만들기를위해서는 PC(0:3) 에데이터를보내는시간간격은일정하게유지를해야한다. 이를위한타이머가필요하게된다. 여기서는타이머 / 카운터 0 를사용하며, 타이머의주기는 45KHz 로한다 8-6 Assignment 1. 1 상여자방식을이용하여스텝모터를정회전 - 정지 - 역회전하도록제어하시오 상여자방식을이용하여스텝모터를정회전 - 정지 - 역회전하도록제어하시오 상여자방식을이용하여스텝모터를정회전 - 정지 - 역회전하도록제어하시오. 4. 타이머인터럽트를이용, 1-2 상여자구동방식으로스텝모터를제어하시오. 타이머의주기는 45KHz 로한다. 5. 타이머인터럽트를이용, 1-2 상여자구동방식으로스텝모터를제어하시오. 가감속테이블을만들어스텝모터를구동하여보자. 47

48 A/D 컨버터 1. A/D 컨버터개요 2. ATMega128의 A/D 컨버터기능 3. A/D 컨버터로가변저항읽기 4. A/D 컨버터로 CdS 읽기 95 A/D 컨버터개요 A/D 컨버터 (Analog-to-Digital Converter) 아날로그신호를컴퓨터가읽을수있는병렬또는직렬의디지털데이터로변환하여주는장치 측정하려는아날로그물리량의범위및시스템의응용목적에따라분해능이나정밀도가적합한것을사용. 변환시간 (conversion time) A/D 변환을수행하는데필요한시간 초당샘플링속도 (sampling rate) 로나타냄 분해능 (resolution) 디지털출력값을한등급만큼변화시키기위한아날로그입력의최소변화 (A/D 컨버터가표현할수있는최소아날로그량 ) n 비트 A/D 컨버터의경우출력의데이터범위는 1/2n 48

49 ATMega128 의 A/D 컨버터기능 ATmega128 의 A/D 컨버터특징 10 비트분해능 0.5 LBS Integral Non-linearity( 적분비선형성 ) ±2 LBS 정확도 13~260usec 변환시간 (50KHz~200KHz), 15kSPS 의최대분해능, 8 채널의멀티플렉스된단일입력 (A/D 컨버터는한개이며채널을바꿔가며아날로그신호를입력받음 ) 7 채널의차동입력, 10 배또는 200 배의증폭률을가진 2 채널의차동입력, ADC 결과값의좌정렬. 0~Vcc ADC 입력전압범위, 선택가능한 2.56V 의 ADC 레퍼런스전압. 안정된동작을위한 MCU 의디지털전원과별도의아날로그회로전원단자 A VCC 를가지며, A/D 변환에필요한기준전압 AREF 단자지원 Free running 또는 Single Conversion Mode, ADC 변환완료인터럽트, Sl eep Mode Noise Canceler ATMega128 의 A/D 컨버터기능 ATMega128 A/D 컨버터레지스터 ADMUX (ADC Multiplexer Selection Register) A/D 컨버터멀티플렉서선택레지스터 ADCSRA(ADC Control and Status Register A) A/D 컨버터제어및상태레지스터 A ADCH, ADCL A/D 컨버터데이터레지스터 49

50 ATMega128 의 A/D 컨버터기능 ADMUX (ADC Multiplexer Selection Register) A/D 컨버터멀티플렉서선택레지스터 ADC모듈의아날로그입력채널선택 ADC모듈의기준전압선택 변환결과레지스터의데이터저장형식지정 REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0 ATMega128 의 A/D 컨버터기능 ADMUX (ADC Multiplexer Selection Register) 비트 7,6 : REFS1,0 (Reference Selection Bit) ADC 모듈에서사용하는기준전압을선택하는비트 ADC에대한 Voltage Reference 선택표 REFS1 REFS0 Voltage Reference 0 0 AREF, Internal Vref turnned off 0 1 AVCC with external capacitor at AREF pin 1 0 예약 1 1 Internal 2.56V Voltage Reference with external capacitor at AREF pin 50

51 ATMega128 의 A/D 컨버터기능 ADMUX (ADC Multiplexer Selection Register) 비트 5 : ADLAR (ADC Left Adjust Result) 이비트를 1 로설정하면변환결과가 ADC 데이터레지스터에저장될때 ADC Data Register 의좌측으로끝을맞추어저장 비트 4~0 : MUX4~0 (Analog Channel and Gain Selection Bit) ADC 모듈의아날로그입력채널을선택하는비트 MUX 비트에의한아날로그입력채널선택표 MUX4~0 Single Ended Input ADC ADC ADC ADC ADC ADC ADC ADC7 Positive Differential Input Negative Differential Input N/A Gain ATMega128 의 A/D 컨버터기능 MUX 비트에의한아날로그입력채널선택표 MUX4~0 Single Ended Positive Differential Input Input Negative Differential Input Gain ADC0 ADC0 10x ADC1 ADC0 10x ADC0 ADC0 200x ADC1 ADC0 200x ADC2 ADC2 10x ADC3 ADC2 10x ADC2 ADC2 200x ADC3 ADC2 200x ADC0 ADC1 1x ADC1 ADC1 1x N/A ADC2 ADC1 1x ADC3 ADC1 1x ADC4 ADC1 1x ADC5 ADC1 1x ADC6 ADC1 1x ADC7 ADC1 1x ADC0 ADC2 1x ADC1 ADC2 1x ADC2 ADC2 1x ADC3 ADC2 1x ADC4 ADC2 1x ADC5 ADC2 1x V(VBG) V(GND) N/A 51

52 ATMega128 의 A/D 컨버터기능 ADCSRA(ADC Control and Status Register A) A/D 컨버터제어및상태레지스터 A ADC 모듈의동작설정 ADC 모듈의동작상태표시 ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0 비트 7 : ADEN (ADC Enable) A/D 컨버터작동유무지정 1로설정하면 ADC 모듈 enable 0으로설정하면 ADC 모듈 disable. ATMega128 의 A/D 컨버터기능 ADCSRA(ADC Control and Status Register A) 비트 6 : ADSC(ADC Start Coversion) A/D 컨버터변환시작 이비트에 1 을설정하면 ADC 변환이시작 ADEN 이 1 로설정되고난후첫번째변환에 25 개의 ADC 클록주기가필요 다음변환부터는 13 클록이요구 AD 변환이종료되고난후자동적으로 0 으로변환 비트 5 : ADFR(ADC Free Running Select) 프리런닝모드설정 1 : Free running 모드로설정 자동으로계속해서 AD 변환실행 0 : 단일변환모드 (Single conversion mode) 로설정 사용자가시작하면한번만 AD 변환을실행 52

53 ATMega128 의 A/D 컨버터기능 ADCSRA(ADC Control and Status Register A) 비트 4 : ADIF(ADC Interrupt Flag) A/D 컨버터인터럽트플래그 A/D 변환의완료를알리는플래그 AD 변환이완료되어 ADC Data Register 값이업데이트되고나면이비트가 1 로세트되면서 AD 변환완료인터럽트를요청 이때 ADIE=1 로설정되고, SREG 레지스터의 I 비트가 1 로설정되어있으면이인터럽트가발생되어처리된다. 비트 3 : ADIE(ADC Interrupt Enable) A/D 변환완료인터럽트허용 AD 변환완료인터럽트를개별적으로설정 SREG 레지스터의 I 비트가 1 로설정되어있어야한다. ATMega128 의 A/D 컨버터기능 ADCSRA(ADC Control and Status Register A) 비트 2~0 : ADPS2~0(ADC Preslcaler Select Bit) A/D 컨버터프리스케일러선택 ADC 모듈에인가되는클록의분주비를선택한다. ADPS 에의한 ADC Prescaler 설정표 ADPS2 ADPS1 ADPS0 분주비

54 ATMega128 의 A/D 컨버터기능 ADCH, ADCL A/D 컨버터데이터레지스터 A/D 컨버터의결과를저장하는레지스터 단극성입력사용시 (Single Ended Input) ADMUX 레지스터의 MUX(4:0) 가 ~ 혹은 ~ 변환결과가 10 비트양의정수로표시된다 (0~1023) 차동입력을사용시 (Differencial Input) ADMUX 레지스터의 MUX(4:0) 가 ~ 변환결과가 10 비트 2 의보수로표현 (-512~+511) 한다. 반드시 ADCL( 하위데이터 ) 를먼저읽어서저장한다음에 ADCH( 상위데이터 ) 를저장한다. ATMega128 의 A/D 컨버터기능 ADCH, ADCL ADMUX 레지스터의 ADLAR = 0 인경우 : 우정렬 ADCH ADC9 ADC8 ADCL ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0 54

55 ATMega128 의 A/D 컨버터기능 ADCH, ADCL ADMUX 레지스터의 ADLAR = 1 인경우 : 좌정렬 ADCH ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADCL ADC1 ADC ATMega128 의 A/D 컨버터기능 ATMega128 A/D 컨버터의동작설정 ADMUX 로 A/D 신호를입력받을채널선택 ADCSR 로컨버전프리스케일러설정 인터럽트사용시, 전역인터럽트플래그를 SET 하여인터럽트활성화하고, A/D 변환완료인터럽트처리루틴을구성 ADCSR 의 6 번비트를세트하여 A/D 변환을시작 변환완료플래그를주기적으로점검하거나아날로그디지털컨버전완료인터럽트를이용하여 A/D 컨버전이후의데이터처리루틴을구성 반드시 ADCL( 하위데이터 ) 를먼저읽어서저장한다음에 ADCH( 상위데이터 ) 를저장 55

56 ATMega128 의 A/D 컨버터기능 ATMega128 의 A/D 컨버터설정시클럭의선택 10 비트분해능으로정상적인동작을위해서는 50kHz~200kH z 범위의클럭사용 ADCSRA 레지스터의 ADPS2~0 비트에의하여 2,4,8,16,32,6 4,128 중의 1 가지로선택 프리스케일러는 ADCSRA 레지스터에서 ADEN=1 로설정한경우에만동작 회로도 56

57 Assignment ADC 0 번채널을이용하여가변저항에의해변화되는전압을감지하여 FND 에 0.00~5.00V 전압으로표시 A/D 컨버터의설정방법 A/D 컨버터의입력채널결정 : 0번채널사용 입력데이터의정렬방법과기준전압선택 : 데이터정렬은디폴트인우정렬로하고, 기준전압을 VDD 5.00V 프리스케일러와인터럽트결정 : 프리스케일러는 64 분주를사용하고, 인터럽트는사용하지않음. 인터럽트를사용하지않으므로설정끝 A/D 컨버팅제어 설정을마친후, ADCSR 의 6 번비트를세트하여 A/D 변환을시작 A/D 변환도중에는변환완료플래그를주기적으로점검하면서 A/D 데이터레지스터로부터데이터를읽어들이면된다. 이때, 반드시 ADCL( 하위데이터 ) 를먼저읽어서저장한다음에 ADCH( 상위데이터 ) 를읽어내야한다. Assignment ADC 1 번채널을이용하여 CdS 로들어오는광량을감지하여 LCD 에 Lux 단위로표시 A/D 컨버터의설정방법 A/D 컨버터의입력채널결정 : 1번채널사용 입력데이터의정렬방법과기준전압선택 : 데이터정렬은디폴트인우정렬로하고, 기준전압을 VDD 5.00V 프리스케일러와인터럽트결정 : 프리스케일러는 64 분주를사용하고, 인터럽트는사용하지않음. 인터럽트를사용하지않으므로설정끝 A/D 컨버팅제어 설정을마친후, ADCSR 의 6 번비트를세트하여 A/D 변환을시작 A/D 변환도중에는변환완료플래그를주기적으로점검하면서 A/D 데이터레지스터로부터데이터를읽어들이면된다. 이때, 반드시 ADCL( 하위데이터 ) 를먼저읽어서저장한다음에 ADCH( 상위데이터 ) 를읽어내야한다. 57

58 PWM PWM 이란 Pulse Width Modulation : 펄스폭변조 주파수 f = 1 / T[Hz] Duty Ratio = Thigh / T [%] PWM PWM 은어디에사용되는가? DC Motor의속도제어 LED의밝기제어 펄스의 Duty 비를조절하여인가되는전압변화 PWM에의해인가되는평균전압 Vavg = 입력전압 (Vin) * Thigh / T 58

59 PWM AVR 에서 PWM 은어떻게구현되나? AVR 의 1 클럭당소요시간 Tsystem_clk = 1 / System Clock 예 ) ATmega128 의시스템클럭주파수가 16MHz 인경우 Tsystem_clk = 1 / 16,000,000 = 62.5ns 시스템클럭을분주하여사용할경우 Tclk = Prescaler * Tsystem_clk PWM PWM 구현을위해사용되는변수 TOP PWM 한주기에해당하는클럭갯수 Nt = T / Tclk OCR PWM On Time(Thigh) 에해당하는클럭개수 OCR = Thigh / Tclk Timer_value 각 Cycle에서 TOP 0(zero) 또는 0(zero) TOP 까지의시간값 59

60 PWM PWM 구형파의 Time 을결정하는 2 변수 TOP, Tclk T = Tclk * TOP or T = Tclk * TOP * 2(Phase Correct PWM) Duty Cycle OCR에의해결정 Duty Cycle = OCR / TOP PWM 60

61 PWM Specifying the Duty Cycle PWM PWM 신호는 PB4(OC0), PB5(OC1A), PB6(OC1B), PB7(OC2/OC1C) LED 밝기조절을위해 PB4(OC0) 만사용 61

62 PWM AVR PWM 생성프로그램 Sequence 조건 Mode : Fast PWM mode Duty Cycle : 50% Output : PB4(OC0) Sequence Step1 : PB4(OC0) 핀을출력으로설정 Step2 : Prescaler와 clock source 설정 Step3 : 파형의출력모드설정 (PWM Enable) Step4 : OCR0 = TOP / 2로설정 (50% Duty) PWM Code #include <avr/io.h> Int main(void) DDRB = (1 << PB4); TCCR0 = 0x79; OCR0 = 0x7F; // step1 // step2, step3 // 50% Duty while( 1 ) return 0; 62

63 PWM Code 분석 Step1 : PB4(OC0) 핀을출력으로설정 DDRB = (1 << PB4); Step2 : Prescaler 와 clock source 설정 Step3 : 파형의출력모드설정 (PWM Enable) TCCR0 = 0x79; WGM01 WGM00 = 10, COM01 COM00 = 11, CS02 CS01 CS00 = 001 PWM TCCR0(Timer / Counter0 Control Register) 레지스터 타이머 / 카운터 0 의동작모드설정 출력비교단자의파형발생및클럭분주비설정 Bit 7 FOC0: Force Output Compare 강제출력비교 PWM 모드가아닌경우에만사용 Bit 6, 3 WGM01:0: Waveform Generation Mode 파형발생모드설정 63

64 PWM Bit 5:4 COM01:0: Compare Match Output Mode 비교일치출력모드설정 (Fast PWM) Bit 2:0 CS02:0: Clock Select 클럭분주비설정 64

65 1. C 언어소개 1-1 C 언어의개론적이야기 프로그래밍언어란무엇인가? 사람과컴파일러가이해할수있는약속된형태의언어 C 언어도프로그래밍언어중하나이다. 컴파일이란무엇인가? 프로그래밍언어로작성된프로그램을컴퓨터가이해할수 있도록기계어로번역해주는역할을하는번역기 소스코드목적코드실행파일컴파일러링커 65

66 1-1 C 언어의개론적이야기 언어를배우는것은매우어려운작업으로, 프로그래밍언어를배우는것도이와유사함 영어를배울때의문제점 프로그래밍언어공부할때문제점과유사 문법, 독해, 회화, 작문을따로배움 오랜기간동안공부했지만, 문제풀기와간단한독해만가능 프로그래밍을배울때유의할점 반드시컴퓨터앞에서코드를입력하여결과를확인하면서공부해야함. 도서관에앉아서책만보는것은영어를배울때저지른잘못을되풀이하는것 코드가익숙해지면자신의힘으로간단한프로그램을작성하도록노력! 초기에는간단한프로그램하나만드는것이가장중요한고비를넘는것과같다. 실행파일생성과정 1-2 프로그램의완성과정 소스코드 전처리기를통한전처리 : #include, #ifdef, #define 등 컴파일 어셈블 : 어셈블러 CPU 가이해하는기계어로변환 목적 ( 표준 ) 파일 표준라이브러리등기타라이브러리 링크 실행파일 66

67 1-2 프로그램의완성과정 Visual Studio 2008 초기화면 1-2 프로그램의완성과정 프로젝트생성 (Ctrl + Shift + N) 67

68 프로젝트생성을위한선택 1-2 프로그램의완성과정 프로젝트생성과정 프로그램의완성과정 68

69 프로젝트생성과정 프로그램의완성과정 Source File 생성 1-2 프로그램의완성과정! 69

70 파일생성방법 1-2 프로그램의완성과정 파일생성완료 1-2 프로그램의완성과정 70

71 1-2 프로그램의완성과정 Hello, C-Language! 출력예문 /* Hello.c */ #include <stdio.h> int main(void) printf("hello, C-Language! \n"); return 0; 1-2 프로그램의완성과정 컴파일 (Compile) : Ctrl + F7 71

72 Build Solution : F7 1-2 프로그램의완성과정 1-2 프로그램의완성과정 프로그램의실행 : Ctrl + F5 72

73 2. 기본소스분석과이해 2-1 "Hello, C-Language!" /* Hello.c */ #include <stdio.h> int main(void) printf("hello, C-Language! \n"); return 0; 73

74 2-1 "Hello, C-Language!" 헤더파일의이해 stdio.h 라는이름의헤더파일호출 헤더파일의포함을알리는선언은제일먼저등장해야한다. #include <stdio.h> int main(void) printf("hello, C-Language! \n"); return 0; 2-1 "Hello, C-Language!" 함수에대한이해 적절한입력과그에따른출력이존재하는것을가리켜함수라한다. C 언어의기본단위는함수이다. 함수호출과인자전달 인자전달 : 입력 x를전달하는행위 함수호출 : 인자를전달하면서함수의실행을요구하는행위 C 언어의함수특성 입력과출력존재 순차적으로실행 함수의기능을정의하는몸체부분존재 출력의형태함수의이름입력의형태 main 시작 main 종료 74

75 2-1 "Hello, C-Language!" 표준라이브러리에대한이해 이미표준화해서만들어놓은함수들의집합을가리켜표준라이브러리라한다. 헤더파일을포함해야사용이가능하다. 세미콜론 (;) 이필요한문장 연산을수행하는문장 : 시간의흐름에따라서컴퓨터에게 이런이런일을해라 ~" 라고명령을하는문장 2-1 "Hello, C-Language!" return 의의미 함수를종료 ( 빠져나온다 ). 함수를호출한영역으로값을반환 return 의특징 return 은함수내에서존재하지않을수도있다. 둘이상의 return 문이존재하는것도가능 75

76 2-2 주석에대한이해 주석이란? 한달뒤의자신은곧남이다 프로그래머에게메모 (memo) 기능을부여한다. 컴파일러는주석을없는것으로간주한다. 프로그램의가독성이증가된다. 코드를읽는사람이이해하기쉽도록주석을달아주는습관을들인다. 주석의두가지형태 여러줄에걸친주석처리 2-2 주석에대한이해 /* 한줄짜리주석 */ /* 여러줄에걸친주석 */ - 단일행주석처리 // 주석하나. // 주석둘. // 주석셋. 76

77 2-2 주석에대한이해 주석의예 #include <stdio.h> // stdio.h 헤더파일포함 int main(void) // main 함수의시작 /* printf 함수는모니터에출력을하는경우에사용하며, 인자로문자열을전달하면문자열이출력된다. */ printf("hello World! \n"); // 모니터로문자열출력 return 0; // 0을반환한다. // main 함수의끝 2-2 주석에대한이해 주석처리에주의할점 주석을나타내는기호는중복될수없다. /* 주석의시작, 여러행에걸쳐서 /* 단일행주석처리 */ */ 단, 단일행주석은중복이가능하다. /* 주석의시작, 여러행에걸쳐서 // 단일행주석처리 */ 77

78 2-3 자료형에대한이해 자료형 (data type) " 선언할변수의특징을나타내기위한키워드 " 기본자료형 기본적으로제공이되는자료형 사용자정의자료형 사용자가정의하는자료형 : 구조체, 공용체 2-3 자료형에대한이해 다양한자료형이제공되는이유 데이터의표현방식이다르기때문 정수형데이터를표현하는방식 (ex : int) 실수형데이터를표현하는방식 (ex : float) 메모리공간을적절히사용하기위해서 데이터의표현범위를고려해서자료형선택 작은메모리공간에큰데이터를저장하는경우데이터손실이발생할수있다. 78

79 2-3 자료형에대한이해 기본자료형종류와데이터의표현범위 자료형 (data type) 할당되는메모리크기표현가능한데이터의범위 char 1 바이트 -128 ~ +127 정수형 short 2 바이트 ~ int 4 바이트 ~ long 4 바이트 ~ 실수형 float 4 바이트 3.4*10-37 ~ 3.4* double 8 바이트 1.7* ~ 1.7* 자료형에대한이해 unsigned 가붙어서달라지는표현의범위 MSB 까지도데이터의크기를표현하는데사용 양의정수로인식 실수형자료형에는붙일수없다. 자료형메모리크기표현가능한데이터의범위 char(signed char) 1 바이트 -128 ~ +127 unsigned char 1 바이트 0 ~ ( ) short(signed short) 2 바이트 ~ unsigned short 2 바이트 0 ~ ( ) int(signed int) 4 바이트 ~ unsigned int 4 바이트 0 ~ ( ) long(signed long) 4 바이트 ~ unsigned long 4 바이트 0 ~ ( ) 79

80 2-3 자료형에대한이해 자료형선택의기준 정수형데이터를처리하는경우 컴퓨터는내부적으로 int형연산을가장빠르게처리한다. 따라서, 정수형변수는 int형으로선언 범위가 int형변수를넘어가는경우 long형으로선언 값의범위가 128 ~ +127 사이라할지라도 int형으로선언 예제 char_add.c 2-3 자료형에대한이해 자료형선택의기준 실수형데이터를처리하는경우 선택의지표는정밀도 정밀도란오차없이표현가능한정도를의미함 일반적선택은 double! 예제 circle_area.c 자료형 float double 소수이하 6 자리 소수이하 15 자리 정밀도 long double double 의정밀도와같거나크다. 80

81 2-3 자료형에대한이해 문자표현을위한 ASCII 코드의등장 미국표준협회 (ANSI) 에의해정의 컴퓨터를통해서문자를표현하기위한표준 컴퓨터는문자를표현하지못함 문자와숫자의연결관계를정의 문자 A 는숫자 65, 문자 a 는숫자 자료형에대한이해 ASCII 코드의범위 0 이상 127 이하, char형변수로처리가능 char형으로처리하는것이합리적 문자의표현 따옴표 (' ') 를이용해서표현 예제 how_char.c 참조 81

82 2-3 자료형에대한이해 ASCII (American Standards Code for Information Interchange) 2-4 데이터저장을위한변수 변수란무엇인가? 데이터를저장할수있는메모리공간에붙여진이름 자료형을먼저선언한다. 정수형 : char, int, long... 실수형 : float, double... 변수의선언및대입 대입연산자 (=) : 값을대입하기위한용도의연산자 int main(void) int val; val = 20; // int형변수 val의선언 // 변수 val에 20을저장 82

83 변수를이용한예제 #include <stdio.h> 2-4 데이터저장을위한변수 int main(void) int a, b; int c = 30, d = 40; // 쓰레기값으로초기화 a = 10; b = 20; printf("%d %d \n", a, b); printf("%d %d \n", c, d); return 0; 2-4 데이터저장을위한변수 변수선언시주의사항 첫째 : 변수의이름은알파벳, 숫자언더바 (_) 로구성 둘째 : 대소문자구분 셋째 : 변수의이름은숫자로시작불가, 키워드사용불가 넷째 : 공백이포함될수없음 적절치않은변수의이름 int 7th_val 적절치않은이유 변수의이름이숫자로시작 int live_inthe# # 과같은특수문자는올수없다. int kor year 변수이름에공백이삽입될수없다. 83

84 2-4 C 언어예약키워드 C99 를기준으로표준화 ( 예약 ) 된키워드들 auto _Bool break case char _Complex const continue default restrict do double else enum extern float for goto if _Imaginary inline int long register return short signed sizeof static struct switch typedef union unsigned void volatile while 덧셈프로그램예제 2-4 데이터저장을위한변수 /* simpleadd1.c */ #include <stdio.h> int main(void) int result; result = 3 + 4; // 변수선언 // 덧셈결과저장 printf(" 덧셈결과 : %d \n", result); printf("%d 더하기 %d 는 %d 입니다. \n", 3, 4, result); printf(" 변수 result 에저장된값 : %d \n", result); return 0; 84

85 2-5 상수에대한이해 변수와는다른개념상수! 상수도메모리공간을할당받는다. 하지만, 데이터의변경이불가능하다. 심볼릭상수와리터럴상수가있다. 상수도메모리공간에저장되기위해서자료형이결정된다. int main(void) char c = A ; int i = 5; double d = 3.15;..... // 문자상수 (char) // 정수상수 (int) // 실수상수 (double) 2-5 상수에대한이해 접미사에따른다양한상수의표현 접미사자료형사용예 u or U unsigned int 304U l or L long 304L ul or UL unsigned long 304UL f or F float 3.15F l or L long double 3.15L 85

86 2-6 printf 함수의기본적이해 printf 함수사용의예 1 /* printf1.c */ #include <stdio.h> int main(void) printf("hello Everybody \n"); printf("%d \n", 1234); printf("%d %d \n", 10, 20); return 0; 2-6 printf 함수의기본적이해 printf 함수호출의이해 1 printf("hello Everybody \n"); 86

87 2-6 printf 함수의기본적이해 printf 함수호출의이해 2 : 서식문자 서식문자 (Conversion specifier) 란출력대상의출력형태를지정하기위한문자 printf("%d \n", 1234); 2-6 printf 함수의기본적이해 printf 함수호출의이해 3 printf("%d %d \n", 10, 20); 87

88 printf 함수사용의예 printf 함수의기본적이해 /* printf2.c */ #include <stdio.h> int main(void) printf("my age : %d \n", 20); printf("%d is my point \n", 100); printf("good \nmorning \neverybody\n"); return 0; 2-6 printf 함수의기본적이해 printf 함수호출의이해 4 88

89 2-6 printf 함수의기본적이해 printf는문자열을출력하는함수이다. printf는특수문자출력이가능하다. 특수문자 의 미 \a 경고음소리발생 \b 백스페이스 (backspace) \f 폼피드 (form feed) \n 개행 \r 캐리지리턴 (carriage return) \t 수평탭 \v 수직탭 \\ 백슬래시 (\) \ 작은따옴표 \ 큰따옴표 2-6 printf 함수의기본적이해 특수문자가필요한이유 잘못된문자열출력 #include <stdio.h> int main(void) printf( 앞집강아지가말했다. 멍! 멍! 정말귀엽다. ); return 0; 89

90 2-6 printf 함수의기본적이해 printf 함수는서식지정이가능하다. printf의 f는 "formatted" 를의미한다. 서식지정 : 출력의형태를지정한다는의미 (ex : 문자열안에숫자삽입 ) 서식지정의예 #include <stdio.h> int main(void) int age = 12; printf("10진수로 %d살이고 16진수로 %x살입니다.\n", age, age); return 0; 2-6 printf 함수의기본적이해 서식문자의종류와그의미 서식문자 출력형태 %c 단일문자 %d 부호있는 10진정수, = %i %lf 배정도실수 (double or long double) %f 부호있는 10진실수 %s 문자열 %o 부호없는 8진정수 %u 부호없는 10진정수 %x 부호없는 16진정수, 소문자사용 %X 부호없는 16진정수, 대문자사용 %e e 표기법에의한실수 %E E 표기법에의한실수 %g 값에따라서 %f, %e 둘중하나를선택 %G 값에따라서 %f, %G 둘중하나를선택 %% % 기호출력 90

91 2-6 printf 함수의기본적이해 %c, %d, %f, %s 가장많이쓰이는서식문자들 %o, %u, %x, %X 부호없는정수형출력 %e, %E ' 부동소수점표현방식 ' 에의한출력 e e printf 함수의기본적이해 %g, %G 표현하고자하는실수의값이소수점이하 6자리인경우 %f 형태로출력 이범위를넘길경우 %e의형태로출력 #include <stdio.h> int main(void) printf("%g \n", ); printf("%g \n", ); printf("%g \n", ); printf("%g \n", ); // 출력 // 출력 // 1.23e-005 출력 // 1.23E-006 출력 return 0; 91

92 2-6 printf 함수의기본적이해 필드폭지정출력 필드의폭을지정하여깨끗하게출력결과를정렬한다. 예제 field_wid.c 서식문자 출력의형태 %8d 필드폭을 8 칸확보하고오른쪽정렬해서출력하라. %-8d 필드폭을 8 칸확보하고왼쪽정렬해서출력하라. %+8d 필드폭을 8 칸확보하고오른쪽정렬한상태에서양수는 +, 음수는 를붙여서출력하라. 2-6 printf 함수의기본적이해 %11.9f(float형) 또는 %11.9lf(double형) 에서 11.9의의미 11 : 전체자리수 11자리 ( 소수점도한자리로처리 ).9 : 소수점이하 9자리 %f 또는 %lf의기본출력자리수 소수점이하 6번째자리까지출력 7번째자리는반올림

93 2-7 scanf 함수 scanf 함수를이용한정수의입력 예제 simpleadd2.c int main(void) int val; scanf("%d", &val); scanf 함수 scanf 함수를이용한입력형태의지정 입력형태의지정이가능 simpleadd3.c 93

94 2-7 scanf 함수 scanf 함수사용시주의점 데이터를넣는인수는포인터이다. 공백은읽지않는다. 개행문자가버퍼에남는다 fflush(stdin); scanf 함수예제 #include <stdio.h> void main(void) int a, ch1, ch2; printf("number : "); scanf("%d", &a); printf("a = %d\n", a); printf("char1 : "); scanf("%c", &ch1); printf("ch1 = %c\n", ch1); printf("char2 : "); scanf("%c", &ch2); printf("ch2 = %c\n", ch2); 표준출력함수 2-8 기타표준입출력함수 putchar : 지정된문자를표준출력스트림으로출력하는함수. 사용예 : putchar( a ); // a 를출력한다. puts : 문자열출력함수로버퍼의문자열을 null이나올때까지화면에출력하는함수이다. null을만나면자동적으로 \n 이출력된다. - 사용예 : puts( Hello ); // Hello 를출력한다. 표준입력함수 getchar : 표준입력스트림으로부터한문자를입력받아그 code 값을되돌리는함수. 사용예 : c = getchar(); // 한문자를읽어 c에넣는다. gets : 표준입력스트림으로부터문자열을입력받는함수. 공백허용. - 사용예 : gets(str); // 문자열을 str에넣는다. 94

95 2-9 Assignment-1 1. 자신의이름영문이니셜을입력받아서출력되는프로그램을작성하시오. 출력예 : My name is OOO 2. 아래와같은정보가출력되도록프로그램을작성하시오. 출력예 : 삼성전자 OOOOO 사업부직위 : OO 3. 아래와같이영문을읽어들여역순으로출력되도록프로그램을작성하시오. 출력예 : agemta ATmega 4. 두개의변수를선언하여각각 10 과 20 을대입하여그합을나타내는식을출력한후, 각변수값을 30 과 40 으로변경하여다시결과가출력되는프로그램을작성하시오. 출력예 : = = 아래와같이반지름이입력되면원주와넓이가출력되는프로그램을작성하시오. 출력예 : 원주 = 5 * 2 * = 넓이 = 5 * 5 * = Assignment-2 1. 자신의나이와키를키보드로입력받아서아래과같이출력하시오. 입력예 : 나이 : 키 : 출력예 : 당신의나이는 OO 세이고, 키는 OOOcm 군요! 2. 두개의정수를입력받아합과곱의결과를필드폭에맞춰서출력하시오. 입력예 : 두수입력 : 3 50 출력예 : = 53 3 * 50 = 키와몸무게영문이니셜이름을입력받아출력되는프로그램을작성하시오. ( 몸무게는반올림하여소수첫째자리까지출력한다.) 입력예 : 키입력 : OOO 몸무게입력 : OO.O 이름입력 : OOO 출력예 : 키 = OOO 몸무게 = OO.O 이름 = OOO 4. float 와 double 형의두개의실수를입력받아반올림하여소수둘째자리까지출력되는프로그램을작성하시오. 입력예 : 출력예 :

96 3. 연산자 연산자 3-1 연산자란무엇인가? 연산을요구할때사용되는기호 예 : +, -, *, /, % /* op1.c */ #include <stdio.h> int main(void) int val1 = 4; int val2 = 2; printf(" 두수의덧셈 : %d \n", val1 + val2); printf(" 두수의뺄셈 : %d \n", val1 - val2); printf(" 두수의곱셈 : %d \n", val1 * val2); printf(" 두수의나눗셈 : %d \n", val1 / val2); printf(" 두수의나머지 : %d \n", val1 % val2); return 0; 96

97 3-2 C 언어의다양한연산자 ( 복합 ) 대입연산자 대입연산자와산술연산자가합해져서다양한형태의대입연산자정의 예제 op2.c 3-2 C 언어의다양한연산자 부호연산으로서 +, - 연산자 단항연산자로서 +, - 예제 op3.c 증가감소연산자 예제 op4.c, op5-1.c, op5-2.c 연산자연산의예의미결합성 ++a printf( %d, ++a) 선증가, 후연산 a++ printf( %d, a++) 선연산, 후증가 --b printf( %d, --a) 선감소, 후연산 b-- printf( %d, a--) 선연산, 후감소 97

98 3-2 C 언어의다양한연산자 관계연산자 ( 비교연산자 ) 두피연산자의관계 ( 크다, 작다, 같다등 ) 를따지는연산자 true( 논리적참, 1), false( 논리적거짓, 0) 로반환 예제 op6.c 연산자 연산의예 의미 결합성 < a < b a가 b보다작다 > a > b a가 b보다크다 == a == b a와 b가같다!= a!= b a와 b가같지않다 <= a <= b a가 b보다작거나같다 >= a >= b a가 b보다크거나같다 3-2 C 언어의다양한연산자 논리연산자 and, or, not을표현하는연산자 true(1), false(0) 반환 예제 op7.c 연산자 연산의예 의미 결합성 && a && b true면 true 리턴 a b 하나라도 true면 true 리턴!!a true면 false를, false면 true 리턴 98

99 3-2 C 언어의다양한연산자 sizeof 연산자 피연산자의메모리크기를반환 피연산자로자료형의이름이올경우괄호를사용 그이외의경우괄호의사용은선택적 예제 sizeof.c int main(void) int val = 10; printf( %d, sizeof val ); printf( %d, sizeof(int) );..... // 변수 val 의메모리크기출력 // 자료형 int 의메모리크기출력 3-2 C 언어의다양한연산자 비트단위연산자 ~, &, ^,, <<, >> 비트단위로데이터에대해논리처리, 반전, shift 등의조작을하는것이다. 어셈블러에가까운처리를할수있다. 대상은정수여야하며, float, double 형에비트연산을할수없다. 콤마 (,) 연산자 둘이상의변수동시선언시 둘이상의문장을한줄에선언시 함수의매개변수전달시 예제 comma_op.c 참조 연산자우선순위 산술연산자 > 관계연산자 > 상등연산자 > 논리연산자 99

100 4. 자료형변환 4-1 자료형변환 자료형변환의두가지형태 자동형변환 자동적으로발생하는형태의변환을의미한다. 묵시적형변환이라고도표현한다. 강제형변환 프로그래머가명시적으로형변환을요청하는형태의변환 명시적형변환이라고도표현한다. 100

101 4-1 자료형변환 자동형변환이발생하는상황 1 대입연산시 예제 auto_conv.c int main(void) int n = 5.25; double d = 3; char c = 129; // 소수부의손실 // 값의표현이넓은범위로변환 // 상위비트의손실 4-1 자료형변환 자동형변환이발생하는상황 2 정수의승격에의해... (int 형연산이빠른이유 ) 정수형연산자체를단일화시킨결과 int main(void) char c1 = 10, c2 = 20; char c3 = c1 + c2;

102 4-1 자료형변환 자동형변환이발생하는상황 3 산술연산과정에의해데이터의손실이최소화되는방향으로... int main(void) double e1 = ; double e2 = 3.14f ;..... // double + int // float + double 4-1 자료형변환 강제형변환 ( 명시적형변환 ) 프로그래머의요청에의한형변환 나눗셈을할때는캐스팅을하도록버릇을들인다. 예제 conv_div.c... int num, sum = 0; double avg = 0;... sum += num;... avg = (double)sum / 5; // int형 sum 형변환 ( 캐스팅 )

103 4-2 Assignment 두개의정수를입력받아다음과같이출력되는프로그램을작성하시오. 입력예 : 두개의정수를입력하시오 : 8 3 출력예 : = = 5 8 * 3 = 24 8 / 3 = 2 8 % 3 = 개의정수를입력받아각각의수에 +3, -3, *3, /3, %3 의연산을하여그값을저장한후차례대로출력되는프로그램을작성하시오. ( 대입연산자 ) 입력예 : 출력예 : 정수형변수 a 와 b 를만들고각각 10 으로초기화한후다음과같이출력되는프로그램을작성하시오. 출력예 : 최초값 a = 10, b = 10 a++ = 10, ++b = 11 실행후 : a = 11, b = 11 a-- = 11, --b = 10 실행후 : a = 10, b = 정수변수 a 와 b 를입력받아서 a 는전치증가연산자를사용하고, b 는후치감소연산자를사용하여두수의합을 c 에저장한후 a, b, c 값을출력하는프로그램을작성하시오. 입력예 : 5 6 출력예 : a = 6, b = 5, c = Assignment 개의정수 a, b, c 를선언하여각각 10, 20, 20 으로초기화한후 a 와 b, b 와 c 를비교하여다음과같이출력되는프로그램을작성하시오. ( 관계연산자 ) 출력예 : 개의정수 a, b, c 를각각 10, 20, 20 으로초기화한후, a 가 b 보다큰지, b 가 c 보다크거나같은지, a 가 b 보다작거나같은지, b 가 c 보다작은지를각각비교하여참이면 1, 거짓이면 0 이출력되는프로그램을작성하시오. ( 관계연산자 ) 출력예 : 개의정수 a, b, c 를각각 0, 1, 2 로초기화한후, a 와 b 가모두참인지, a 또는 b 가참인지, b 와 c 가모두참인지, a 가참이아닌지확인하여참이면 1, 거짓이면 0 이각각출력되는프로그램을작성하시오. ( 논리연산자 ) 출력예 : 성삼이와삼순이의키와몸무게를각각입력받아성삼이의키와몸무게가모두크면 1, 그렇지않으면 0 이출력되는프로그램을작성하시오. ( 관계연산자, 논리연산자 ) 입력예 : 성삼의키와몸무게입력 : ( 임의입력값 ) 삼순의키와몸무게입력 : ( 임의입력값 ) 출력예 : 0 103

104 5. 데이터표현방식 5-1 데이터표현방식의이해 진법에대한이해 n 진수표현방식 : n 개의문자를이용해서데이터를표현 104

105 5-1 데이터표현방식의이해 2 진수와 10 진수 10진수 : 0~9를이용한데이터의표현 2진수 : 0과 1을이용한데이터의표현 컴퓨터는내부적으로모든데이터를 2진수로처리 5-1 데이터표현방식의이해 16 진수와 10 진수 16 진수 : 0~9, a, b, c, d, e, f 를이용한데이터의표현 105

106 5-1 데이터표현방식의이해 데이터의표현단위인비트 (bit) 와바이트 (byte) 비트 : 데이터표현의최소단위, 2 진수값하나 (0 or 1) 를저장 바이트 : 8 비트 == 1 바이트 2 진수 10 진수변환 5-1 데이터표현방식의이해 106

107 5-1 데이터표현방식의이해 프로그램상에서의 8 진수, 16 진수표현 8진수 : 0으로시작 16진수 : 0x로시작 예제 notation.c int a = 10; int b = 0xA; int c = 012; // 10 진수. 아무런표시도없으므로 // 16 진수. 0x 로시작하므로 // 8 진수. 0 으로시작하므로 5-2 비트단위연산 비트단위연산자의종류 연산자연산자의의미결합성 & ^ ~ << >> 비트단위 AND 예 ) a & b 비트단위 OR 예 ) a b 비트단위 XOR 예 ) a ^ b 비트단위 NOT 예 ) ~a 왼쪽으로이동예 ) a << 2 오른쪽으로이동예 ) a >> 2 107

108 5-2 비트단위연산 & 연산자 : 비트단위 AND op op 결과 int main(void) int a = 15; // int b = 20; // int c = a & b; printf("and 연산결과 : %d", c); // 출력결과 4 & 비트단위연산 연산자 : 비트단위 OR op op 결과 int main(void) int a = 15; // int b = 20; // int c = a b; printf("or 연산결과 : %d", c); // 출력결과

109 5-2 비트단위연산 ^ 연산자 : 비트단위 XOR op op 결과 int main(void) int a = 15; // int b = 20; // int c = a ^ b; printf("xor 연산결과 : %d", c); // 출력결과 27 ^ 비트단위연산 ~ 연산자 : 비트단위 NOT op 0 1 결과 1 0 ~ int main(void) int a = 15; int b = ~a; printf("not 연산결과 : %d", b); // 출력결과

110 5-3 비트단위연산활용 마스크 : 특정비트가 0 인지 1 인지판단할때사용 ( 필터링기능 ) 마스크사용예 // 변수 A // 마스크 결과값 0 마스크사용예 // 변수 A // 마스크 결과값 4 하드웨어제어시비트연산예제 void FND_digit(unsigned char turn_on, unsigned char com, unsigned char digits, unsigned char dot_on) if(turn_on == 1) if(dot_on) PORTA = fnd_data[digits] 0x80; // else PORTA = fnd_data[digits]; PORTE = 0xFC; // xx : COM OFF // cbi(port, bit) (port) &= ~(1 << (bit)) cbi(porte, com + 2); // COM ON else PORTA = 0xFF; // sbi(port, bit) (port) = (1 << (bit)) sbi(porte, com + 2); // COM OFF 5-3 비트단위연산활용 << 연산자 : 왼쪽쉬프트 (shift) 연산 a << b a의비트들을 b칸씩왼쪽으로이동한값을반환 8 << 2 8의비트들을왼쪽으로 2칸씩이동한값을반환 >> 연산자 : 오른쪽쉬프트 (shift) 연산 a >> b a의비트들을 b칸씩오른쪽으로이동한값을반환 8 >> 2 8의비트를왼쪽으로 2칸씩이동한값을반환 int main(void) int a = 15; // int b = a << 2; // a의비트들을왼쪽으로 2칸씩이동 printf("<<2 연산결과 : %d", b); // 출력결과

111 [ PORTA 의 Bit 7 을 Low 로제어 ] 5-3 비트단위연산활용 마이크로프로세서제어시비트연산사용예 -1 PORTA = PORTA & 0x7F; // PORTA = PORTA & ~(0x80); // ~( ) PORTA = PORTA & ~(1 << 7); PORTA &= ~(1 << 7); // Bit 7 Low [ PORTA 의 Bit 7 을 High 로제어 ] PORTA = PORTA 0x80; // PORTA = PORTA (1 << 7); PORTA = (1 << 7); // Bit 7 High [ PORTA 의 Bit 7 을 Toggle ] PORTA = PORTA ^ 0x80; // PORTA = PORTA ^ (1 << 7); PORTA ^= (1 << 7); // Bit 7 Toggle 5-3 비트단위연산활용 마이크로프로세서제어시비트연산사용예 -2 #include <avr/io.h> #include <util/delay.h> int main(void) DDRC = 0xFF; PORTC = 0xFF; while(1) PORTC = ~( (1 << 3) (1 << 5) ); _delay_ms(50); PORTC = ~( _BV(4) _BV(6) ); _delay_ms(50); return 1; // Port C Direction : Output // Port C Output : High (Active Low) // LED D4, D6 ON // LED D5, D7 ON 111

112 6. 반복문 6-1 반복문이란? 반복문의기능 특정영역을특정조건이만족하는동안에반복실행하기 위한문장 세가지형태의반복문 while 문에의한반복 do ~ while 문에의한반복 For 문에의한반복 112

113 6-2 while 문에의한문장의반복 while 문의기본원리와의미 예제 hello_while.c 예제 nine_nine1.c 6-2 while 문에의한문장의반복 while 문의중괄호 반복하고자하는영역이둘이상의문장으로구성되는경우에필수 while(i<10) printf("hello World! \n"), i++; // 한줄일땐중괄호생략가능 무한루프 ( 반복 ) 반복의조건으로 true가오면발생 while( 1 ) // 반복의조건대신 0 이아닌정수를넣는다. printf("hello World! \n"); i++; 113

114 6-2 while 문에의한문장의반복 while 문의중첩 while 문안에 while 문을포함시킨다는뜻 반복구조내에서또하나의반복구조형성 예제 nested_while.c, two_to_nine1.c int i = 0, j = 0; int num = 0; while(i < 10) while(j < 10) num++; j++; i++; j = 0; [while 문의순서도 ] do~while 문과 while 문의차이점 6-3 do~while 문에의한문장의반복 do~while 문은일단한번실행하고나서조건검사를진행 예제 nine_nine2.c, add_end.c [do~while 문의순서도 ] 114

115 6-4 for 문에의한문장의반복 for 문의기본원리와의미 초기문, 조건문, 증감문모두를기본적으로포함! 가장많이사용되는반복문 for 문과 while 문의비교 for 문반복과정의이해 6-4 for 문에의한문장의반복 예제 add_ton.c, mean.c 예제 nested_for.c, two_to_nine2.c 115

116 6-5 Assignment 알파벳 A 부터 Z 까지출력되는프로그램을작성하시오.(while 문 / for 문으로각각구현 ) 출력예 : ABCDEFGHIJKLMNOPGRSTUVWXYZ 2. 1 부터 15 까지차례로출력되는프로그램을작성하시오.(while 문 / for 문으로각각구현 ) 출력예 : While 문을이용하여 1 부터 10 까지의합을구하여출력하고, while 문이끝난뒤의변수값이출력되는프로그램을작성하시오. 출력예 : 1 부터 10 까지의합 = 55 while 문이끝난뒤의 num( 변수명 ) 의값은 = 이하의임의의정수를입력받아서 1 부터입력받은정수까지의합을구하여출력되는프로그램을작성하시오. (while 문 / for 문으로각각구현 ) 입력예 : 100 이하의정수입력 : 10 출력예 : 1 부터 10 까지의합 : 이하의정수를입력받아입력받은정수만큼 C & MICOM 문장이출력되는프로그램을작성하시오. 입력예 : 10 이하정수입력 : 3 출력예 : C & MICOM C & MICOM C & MICOM 6-5 Assignment 개항목의평가점수를입력받아서총점과평균이출력되는프로그램을작성하시오. 입력예 : 5 개항목의평가점수입력 : 출력예 : 총점 : 423 평균 : 아래출력예와같이출력되는프로그램을작성하시오. ( 중첩 for문 ) 출력예 : 단부터 5단까지의구구단이아래처럼출력되는프로그램을작성하시오. 출력예 : 2 x 1 = 2 3 x 1 = 3 4 x 1 = 4 5 x 1 = 5 2 x 2 = 4 3 x 2 = 6 4 x 2 = 8 5 x 2 = 아래모양과같이출력되는프로그램을작성하시오. 출력예 : * ** *** *** ** * 116

117 6-5 Assignment 자연수 n 을입력받아 n 줄만큼아래와같이출력되는프로그램을작성하시오. 입력예 : 5 출력예 : * ** *** **** ***** 2. 아래와같이출력되는프로그램을작성하시오. 출력예 : * *** ***** ******* ********* 3. 자연수 n 을입력받아 n 줄만큼아래와같이출력되는프로그램을작성하시오. 입력예 : 5 출력예 : Assignment for 문을이용하여아래와같이출력되는프로그램을작성하시오. 출력예 : a b c d e f 8 9 g h i j 아래와같이출력되는프로그램을작성하시오. 출력예 : * *** ***** ******* ********* ******* ***** *** * 3. 임의의시작값과종료값을입력받아입력된범위에서 20 개의난수를발생시키는프로그램을작성하시오. (stdlib.h, time.h include) 힌트 : srand(time(null)), rand() 함수사용 117

118 7. 조건에따른흐름의분기 7-1 흐름의분기가필요한이유 상황에따른프로그램의유연성부여 두개의실수입력 선택정보입력 덧셈기능 두개의실수입력 뺄셈기능 순차실행 덧셈기능 선택실행 곱셈기능 뺄셈기능 곱셈기능 나눗셈기능 나눗셈기능 118

119 7-2 if... else 문 if 문에의한조건적실행 조건이만족되는경우에한해서실행 basic_if1.c, calcu_one.c, three_four.c 7-2 if... else 문 if, else if, else 에대해서 예제 calcu_one.c의단점 : 불필요한연산을하게된다. 예제 basic_ifelse.c, calcu_two.c, basic_if2.c와 basic_if3.c 119

120 7-2 if... else 문 조건연산자 ( 삼항연산자 ) if~else 문을간결히표현하는데사용될수있다. 예제 three_op.c 이제그만 break! ( 탈출 ) 7-3 continue & break 반복문을빠져나올때사용하며, 중첩일때가장가까운루프만탈출 예제 until_sum.c 다음으로넘어가자 continue! ( 생략 ) 다음번반복으로넘어갈때사용 예제 skip_conti.c 120

121 switch 문의구조 예제 english_school1.c 7-4 switch 에의한선택실행 switch 문에서 break 문의의미 예제 english_school2.c 7-4 switch 에의한선택실행 121

122 switch vs. if~else switch 에의한선택실행 분기의경우수가많아지면가급적 switch 문으로... switch vs. if~else switch 에의한선택실행 switch 문에서는비교연산이올수없다. 반드시정수적표현 122

123 7-5 원하는곳으로점프! goto 문 goto 문사용시주의할점. 깊게중첩된 if 문이나 while 문에서한번에탈출할때, 적절히사용! 코드의위아래를오가는스파게티프로그램이되지않도록한다. 예제 goto.c 7-6 Assignment 정수 2 개를입력받아서큰수와작은수가차례대로출력되는프로그램을작성하시오. 입력예 : 두정수입력 : 2 9 출력예 : 입력받은수중큰수는 9 이고, 작은수는 2 입니다. 2. 점수를입력받아 80 점이상이면합격아니면, 불합격이출력되는프로그램을작성하시오. 입력예 : 점수입력 : 85 출력예 : 축하합니다. 합격입니다. 3. 입력받은점수가 수 (A) 우 (B) 미 (C) 양 (D) 가 (F) 로평가되는프로그램을작성하시오. (if 문과 switch 문이포함되도록구현 ) 입력예 : 점수입력 : 91 출력예 : 수 (A) 4. 주사위를두번던져서나온수를입력받아두수가모두 4 이상이면 이겼습니다. 를한개만 4 이상이면 비겼습니다. 모두 4 미만이면 졌습니다 라고출력되는프로그램을작성하시오. 입력예 : 주사위를던진결과입력 : 3 4 출력예 : 비겼습니다. 5. 정수 3 개를입력받아그중가장큰수가출력되는프로그램을작성하시오. 입력예 : 세수를입력 : 출력예 : 입력받은수중가장큰수는 5 입니다. 123

124 7-6 Assignment 아래메뉴에서선택한메뉴를알려주는프로그램을작성하시오. (if 문과 switch 문각각구현 ) 1. 삽입 2. 수정 3. 삭제 숫자선택 : 입력예 : 2 출력예 : 수정을선택하셨습니다. 2. 점수를입력받아 80 점이상이면합격메시지를그렇지않으면, 불합격메시지를출력하는작업을반복하다가 0~100 점이외의점수가입력되면종료되는프로그램을작성하시오. 입력예 : 점수입력 : 50 출력예 : 죄송합니다. 불합격입니다. 점수입력 : 95 축하합니다. 합격입니다. 점수입력 : 정수를계속입력받다가 0 이입력되면 0 을제외하고이전에입력된자료의수와합계, 평균이출력되는프로그램을작성하시오.( 평균반올림, 소수둘째자리까지출력 ) 입력예 : 출력예 : 입력된자료의개수 = 3 입력된자료의합계 = 200 입력된자료의평균 = Assignment 정수를계속입력받다가 0 이입력되면입력된수중홀수의합과평균이출력되는프로그램을작성하시오. 입력예 : 출력예 : 홀수의합 = 53 홀수의평균 = 개의임의정수를입력받아그수들중짝수의개수가몇개인지출력되는프로그램을작성하시오. 입력예 : 출력예 : 입력된짝수 3 개 3. 1 부터차례로누적하여합을구하다가합이 1000 을넘으면중단하고마지막으로더해진값과그때까지의합이출력되는프로그램을작성하시오. 출력예 : 임의의정수를입력받아홀수와짝수를구별하는프로그램을작성하시오. 입력예 : 숫자입력 : 4 출력예 : 4( 은 ) 는짝수입니다. 5. 달팽이우물탈출하기프로그램을작성하시오. ( 조건연산자활용 ) 조건 : 우물의높이 100m, 달팽이가한번에이동하는거리 5m, 달팽이는 50m 전까지는 5 미터를이동한후 1m 밑으로미끄러지고, 50m 이후부터는 5m 이동후지쳐서 2m 씩아래로미끄러진다. 달팽이가몇회만에우물에서탈출했는지출력하라. 124

125 8. 함수 8-1 함수의정의와선언 함수를정의하는이유 반복되는작업을함수화 coding 양줄임 출력의형태함수의이름입력의형태 모듈화에의한프로그램의질향상이가능 main 시작 유지보수및확장의용이성 문제해결의용이성 : "Divide and Conquer!" main 종료 4 가지형태의함수 전달인자有, 반환값有 : int Sum(int a, int b) 전달인자有, 반환값無 : void Sum(int a, int b) 전달인자無, 반환값有 : int Sum(void) 전달인자無, 반환값無 : void Sum(void) 125

126 전달인자와반환값, 둘다있는함수 int Add(int i, int j) int result = i + j; return result; 8-1 함수의정의와선언 함수호출과정의이해 #include <stdio.h> int Add(int i, int j) int result = i + j; return result; int main(void) int d; d = Add(3, 4); printf("%d \n", d); return 0; 8-1 함수의정의와선언 126

127 다양한형태의함수 8-1 함수의정의와선언 void Result_Print(int val) printf(" 덧셈에대한결과 : %d \n", val); printf("****** END ******** \n"); int Input(void) int input; scanf("%d", &input); return input; void Intro(void) printf("****** START ****** \n"); printf(" 두개의정수입력 : "); 함수정의 8-1 함수의정의와선언 컴파일러의특성상, 함수는호출되기전에정의되어야한다. 하지만, 확장자가 *.c 일경우, 컴파일에러가발생하지않을수있다. 컴파일러특성상 함수의암시적선언 으로처리. 127

128 8-1 함수의정의와선언 함수의원형 (prototype) 선언 이후에정의될함수에대한정보제공 func_add.c, large_number.c Call-By-Value 8-2 함수의호출 - 값의복사에의한함수의호출 - 가장일반적인함수호출형태 #include <stdio.h> int add(int a, int b); int main(void) int val1 = 10; int val2 = 20; printf(" 결과 : %d \n", add(val1, val2); return 0; int add(int a, int b) return a + b; 128

129 int main(void) int val1 = 10; int val2 = 20; swap(val1, val2); 8-2 함수의호출 Call-By-Value 에의한 swap printf("val1 : %d \n", val1); printf("val2 : %d \n", val2); return 0; void swap(int a, int b) int temp = a; a = b; b = temp; printf("a : %d \n", a); printf("b : %d \n", b); Call-By-Reference 8-2 함수의호출 - 참조를인자로전달하는형태의함수호출 129

130 8-2 함수의호출 Call-By-Reference 에의한 swap int main(void) int val1 = 10; int val2 = 20; printf("before val1 : %d \n", val1); printf("before val2 : %d \n", val2); swap(&val1, &val2); //val1, val2 주소전달 printf("after val1 : %d \n", val1); printf("after val2 : %d \n", val2); return 0; void swap(int* a, int* b) int temp = *a; *a = *b; *b = temp; 8-3 변수의범위 (scope) 변수의특성에따른분류 지역변수 (Local Variable) 중괄호내에선언되는변수 전역변수 (Global Variable) 함수내에선언되지않는변수 정적변수 (Static Variable) 함수내부, 외부모두선언가능 레지스터변수 (Register Variable) 선언에제한이많이따름, 속도빠름 130

131 지역변수의접근범위 8-3 변수의범위 (scope) 지역변수는선언된함수내에서만접근가능 int fct_one(void) int one = 0; return 0; 범위 1 int fct_two(void) int two = 0; int one = 0; return 0; 범위 변수의범위 (scope) 지역변수의메모리상존재기간 int fct_one(void) int one = 10; return 0; int fct_two(void) int one = 20; int two = 30; return 0; int main(void) int val = 10; fct_one(); fct_two(); return 0; 1 단계 131

132 8-3 변수의범위 (scope) 지역변수의메모리상존재기간 2 단계 3 단계 8-3 변수의범위 (scope) 지역변수의메모리상존재기간 4 단계 132

133 8-3 변수의범위 (scope) 또다른형태의지역변수 while, for, if 와같은문장에의해형성되는지역내에서선언되는변수 예제 local_val1.c, local_val3.c 8-3 변수의범위 (scope) 지역변수의또다른특성 경우에따라서지역변수는다른지역변수를가리기도한다. /* local_val2.c */ #include <stdio.h> int main(void) int val = 0; if(1) // true int val = 0; val += 10; printf("%d", val); printf("%d", val); return 0; 133

134 8-3 변수의범위 (scope) 지역변수와매개변수 매개변수도지역변수의일종이다. int fction (int a, int b) a += 10; b += 20 return a + b; 8-3 변수의범위 (scope) 전역변수 프로그램어디에서나접근이가능한변수이다. 특정영역 ( 함수, 반복문...) 에속하지않는다. 프로그램이종료될때까지존재한다. 예제 glo_val1.c 전역변수의또다른특징 같은이름의지역변수에의해서가려지기도한다. glo_val2.c 134

135 static 변수 함수내부및외부에선언가능하다. 한번만초기화된다 : 전역변수의특징 함수내부에서선언될경우함수내에서만접근이가능하다 : 지역변수의특징 예제 static_val.c 보다빠르게! register 변수 8-3 변수의범위 (scope) int main(void) int a ; register int b;..... // 레지스터변수 b 선언 8-4 변수의범위이해 변수의범위요약 File_1.c int a_data; static int b_data; void func_1(int arg) int c_data; static int d_data; while(1) int e_data; int func_2(void) int c_data; static int d_data; File_2.c extern int a_data; // 외부변수 - 전역변수 // 외부변수 - 정적변수 // 지역변수 - 자동변수 // 지역변수 정적변수 // 지역변수 - 자동변수 // 지역변수 - 자동변수 // 지역변수 - 정적변수 b_data의범위 extern : a_data 의범위 135

136 8-5 Assignment -1 < 아래작업과제들은모두함수를포함하여구현해야한다.> 1. 사용자정의함수를만들어선을그리는프로그램을작성하시오. 출력예 : ====================== line 함수를호출하였습니다. line 함수를다시호출합니다. ====================== 2. 정수를입력받아 20 큰수와 20 작은수를출력하는프로그램을작성하시오. 입력예 : 60 출력예 : 20 큰수 : 작은수 : 임의의정수를입력받아서출력예와같이정수값만큼 * 로구성된직각삼각형을출력하는프로그램을작성하시오. (* 의출력형태는자유롭게구현가능 ) 입력예 : 입력 : 5 출력예 : * ** *** **** ***** 8-5 Assignment -2 < 아래작업과제들은모두함수를포함하여구현해야한다.> 1. 합과차를각각리턴하는함수를작성한후두정수를입력받아함수를호출하여두수의합과차가출력되는프로그램을작성하시오. 입력예 : 출력예 : 두수의합 = 80 두수의차 = 평균을구하는함수를작성한후, 세과목의점수를입력받아평균을구하여소수둘째자리까지반올림하여출력되는프로그램을작성하시오. 입력예 : 세과목의점수입력 : 출력예 : 평균 : 정수의연산식을입력받아연산을위한함수를호출하여사칙연산의연산결과가출력되는프로그램을작성하시오 ( / 의경우는정수부분만출력하고사칙연산이외의연산결과는 0 으로한다.) 입력예 : 연산식입력 ( 수연산자수 ) : 출력예 : = 임의의정수두개를입력받아합과곱이출력되는프로그램을구조화하여작성하시오. 입력예 : 두정수입력 : 출력예 : 합 : 61 곱 :

137 8-5 Assignment -3 < 아래작업과제들은모두함수를포함하여구현해야한다.> 1. 두수를입력받아순서를바꿔서출력되는프로그램을작성하시오. (call by reference) 입력예 : 두수를입력하세요 : 출력예 : 첫번째함수실행중 x =15, y = 35 첫번째함수실행후 x = 35, y = 15 두번째함수실행중 x = 15, y = 35 두번째함수실행후 x = 15, y = 개의정수를입력받아오름차순으로정렬하여출력되는프로그램을작성하시오. 입력예 : 출력예 : 세과목의점수를입력받아평균이 60점미만이거나 1과목이라도 40점미만이있으면 불합격, 아니면 합격 이라고출력되는프로그램을작성하시오. 입력예 : 세과목점수입력 : 출력예 : 축하합니다. 합격입니다. 9. 배열 137

138 9-1 배열이란무엇인가? 둘이상의변수를동시에선언하는효과를지닌다. 많은양의데이터를일괄적으로처리해야하는경우에유용하다. 지역적특성을지닐수도있고, 전역적특성을지닐수도있다 차원배열의선언및초기화 배열선언형식 배열길이 : 배열을구성하는변수의개수 ( 반드시상수를사용 ) 배열요소자료형 : 배열을구성하는변수의자료형 배열이름 : 배열에접근할때사용되는이름 138

139 9-2 1 차원배열의선언및초기화 1 차원배열의접근 배열요소의위치를표현 : 인덱스 (index) 인덱스는 0 에서부터시작 차원배열의선언및초기화 배열선언과접근의예 (array1.c ) int main(void) int array[10]; array[0] = 10; array[1] = 20; array[2] = 30; // 배열선언 // 첫번째요소접근 // 두번째요소접근 // 세번째요소접근..... return 0; 139

140 9-2 1 차원배열의선언및초기화 선언과동시에초기화 (array2.c ) int main(void) int arr1[5] = 1, 2, 3, 4, 5; int arr2[ ] = 1, 3, 5, 7, 9; int arr3[5] = 1, 2 문자열의특징 9-3 배열기반문자열변수 문자열은널 (null) 문자를끝에지닌다. 널 (null) 문자 : '\0'( 아스키코드값으로 0) int main(void) char str[6] = "Hello"; printf("hello");

141 널 (null) 문자를지녀야하는이유 문자열의끝을표현하기위해서 쓰레기값과실제문자열의경계를나타내기위해서 printf 함수는널문자를통해서출력의범위를결정짓는다. int main(void) char str[100] = Hello World! ; printf( %s \n, str); 배열기반문자열변수 문자열변수를활용한다양한예제 va_str.c : 문자열변수의데이터조작 scanf_str.c : 문자열변수를통한문자열의입력 9-4 다차원배열 다차원배열이란무엇인가? 2 차원이상의배열을의미함 다차원배열의선언 배열선언예몇차원배열인가? int arr[100] int arr[10][10] int arr[5][5][5] 1 차원배열 10 10, 2 차원배열 5 5 5, 3 차원배열 141

142 9-4 다차원배열 2 차원배열의선언 2 차원적메모리구조를구성 int main(void) int arr1[4]; int arr2[3][4]; 다차원배열 2 차원배열요소의접근방법 popu_search.c int main(void) int arr[3][3]; arr[0][0] = 2; arr[1][0] = 4; arr[2][2] = 8;

143 9-4 다차원배열 다차원배열의실제메모리구성 1 차원배열과동일하다. 단, 접근방법을 2 차원적으로해석할뿐이다. 2 차원적으로이해하는것이좋다. int a[2][3] 9-4 다차원배열 2 차원배열! 선언과동시에초기화 case 1 : 행단위로모든요소들을초기화 case 2 : 행단위로일부요소들만초기화 143

144 9-4 다차원배열 2 차원배열! 선언과동시에초기화 case 3 : 1 차원배열형태의초기화 init_case.c 9-4 다차원배열 초기화리스트에의한배열크기의결정 1 차원배열의예 int arr[] = 1, 2, 3, 4, 5; 2차원배열의예 int arr[][] = 1, 2, 3, 4, 5, 6, 7, 8; // Error! int arr[][4] = 1, 2, 3, 4, 5, 6, 7, 8; // OK! int arr[][2] = 1, 2, 3, 4, 5, 6, 7, 8; // OK! 144

145 9-4 다차원배열 3 차원배열의선언과의미 3차원적메모리구조를의미함 개념만이해하면충분, 일반적으로필요없다. 4차원이상의배열은 4차원의형태가되므로구조적인이해불가!! int a[3][3][3] 9-5 Assignment -1 < 아래작업과제들은모두배열을포함하여구현해야한다.> 1. 다섯개의정수를입력받은후차례대로출력되는프로그램을작성하시오. 입력예 : 출력예 : 개의문자배열을선언하고 A 부터 Z 까지의대문자를차례로대입시킨후배열의마지막부터처음까지각문자가출력되는프로그램을작성하시오. 출력예 : Z Y X W V U T S R Q P O N M L K J I H G F E D C B A 3. 정수 10 개를입력받은후세번째, 다섯번째와마지막으로입력받은정수를차례로출력하는프로그램을작성하시오. 입력예 : 출력예 : 최대 100 개까지의정수를차례로입력받다가 0 이입력되면입력을중단하고짝수번째에입력된정수가모두출력되는프로그램을작성하시오. 입력예 : 출력예 :

146 9-5 Assignment -2 < 아래작업과제들은모두배열을포함하여구현해야한다.> 1. 연도와달을입력받아그달의일수를출력하다가달이 0 이면종료하는프로그램을작성하시오. ( 윤년과평년을판단하며, 달이잘못입력되면 잘못입력하였습니다. 를출력 ) 윤년판단 : 연도가 400 배수, 연도가 4 의배수이면서 100 의배수가아니다. 출력예 : YEAR = 2000 MONTH = 2 입력한 2000 년 2 월은 29 일까지있습니다 개의자연수를입력받아그중가장큰수가출력되는프로그램을작성하시오. 입력예 : 출력예 : 자리이하의 10 개의정수를입력받아짝수중가장큰값과홀수중가장작은값이출력되는프로그램을작성하시오. 입력예 : 출력예 : 명의과제평가점수를입력받아배열에저장하고총점과평균이출력되는프로그램을작성하시오. ( 평균은반올림하여소수첫째자리까지출력한다.) 입력예 : 출력예 : 총점 = 840, 평균 = Assignment -3 < 아래작업과제들은모두배열을포함하여구현해야한다.> 1. 5 개의정수를 95, 75, 85, 100, 50 으로초기화하고, 오름차순으로정렬하여출력되는프로그램을작성하시오. 출력예 : 부터 10 까지의정수를입력받다가입력된정수가범위를벗어나면그때까지한번이상입력된각숫자의개수를오름차순으로출력하는프로그램을작성하시오. 입력예 : 출력예 : 3 : 2 개 5 : 3 개 6 : 1 개 9 : 1 개 10 : 1 개 3. 3 행 3 열의배열을선언하고아래의출력예와같이초기화한후출력되는프로그램을작성하시오. 출력예 : 피보나치수열을구현하는프로그램을작성하시오. 146

147 9-5 Assignment -4 < 아래작업과제들은모두배열을포함하여구현해야한다.> 1. 3 행 3 열의배열두개를만들어서입력을받고두배열의합을구하여출력하는프로그램을작성하시오. 입력예 : 첫번째배열 1 행 첫번째배열 2 행 첫번째배열 3 행 두번째배열 1 행 두번째배열 2 행 두번째배열 3 행 출력예 : 학생세명의전기, 전자, 회로평가점수를입력받아학생별총점과과목별합계가아래와같이출력 되는프로그램을작성하시오. 입력예 : 1번째학생의점수 번째학생의점수 번째학생의점수 출력예 : 전기 전자 회로 총점 1번 번 번 합계 파스칼의삼각형을출력하는프로그램을작성하시오. 10. 포인터 147

148 10-1 포인터의개념과선언 메모리의주소값 (address value) 을저장하는변수 주소값과포인터는다른것이다. 포인터의선언형식 자료형 * 식별자 ; 자료형 * 식별자 ; 자료형 * 식별자1, * 식별자2; 자료형 * 식별자1, 식별자2; // 자료형쪽에 * 가붙어도상관없음 // 여러개를선언할수있음 // 식별자1만포인터, 식별자2는변수 포인터의의미 : int *p; 로선언했을경우 p : 포인터 p 가가리키고있는변수의주소값 *p : 포인터 p 가가리키고있는변수의내용 포인터사용예 int i = 5; // 정수형변수 i를선언하고 5로초기화 int *p; // 정수형포인터 p를선언 p = &i; // 포인터 p가변수 i를가리키도록함. ( 변수 i의주소값을저장 ) 10-1 포인터의개념과선언 포인터예제 하드웨어제어시포인트사용예제 #include <stdio.h> int main(void) int num = 1; int *p; p = &num; printf("num = %d \n", num); *p = 5; printf("num = %d \n", num); * Result : num = 1 num = 5 // LCD에문자열을표시하기위한함수 void LCD_wr_string(char d_line, char *string) // 문자열을표시하기위한라인설정 LCD_cmd_write(d_line); while(*string!= '\0') // 한개의문자씩 LCD에표시 LCD_data_write(*string); string++; 148

149 10-2 배열과포인터의관계 배열은일종의상수포인터로취급 배열이름은배열첫요소의주소값저장 배열의사용과포인터의비교 array 주소 :fa30 값 :10 주소 :fa34 값 :15 주소 :fa38 값 :25 주소 :fa3c 값 :30 주소 :fa40 값 :53 int array[5] = 10, 15, 25, 30, 53; 배열형태 array[0] array[1] array[2] array[3] array[4] 포인터형태 *array 또는 *(array+0) *(array+1) *(array+2) *(array+3) *(array+4) 잘못된배열사용의예 int a[10], *p; a = p; // 포인터상수 a의값을포인터변수 p의값으로변경하려했음 ++a; // 포인터상수 a의값을 1증가시키려고했음 a += 2; // 포인터상수 a의값을 2증가시키려고했음 배열이름의활용 10-2 배열과포인터의관계 배열이름을포인터처럼, 포인터를배열이름처럼활용가능 포인트배열 : 배열의요소로포인터를지니는배열 (ptr_arr.c) /* pointer_array2.c */ #include <stdio.h> int main(void) int arr[3] = 0, 1, 2; int *ptr; ptr = arr; printf("%d, %d, %d \n", ptr[0], ptr[1], ptr[2]); return 0; int a=10, b=20, c=30; int* arr[3]=&a, &b, &c; 149

150 10-3 포인터연산 포인터연산 포인터가지니는값을증가또는감소시키는연산을의미한다. 포인터가가리키는대상의자료형에따라서증가및감소되는값이차이를지님 /* pointer_op.c */ #include <stdio.h> int main(void) int *ptr1 = 0; char *ptr2 = 0; double *ptr3 = 0; // int* ptr1 = NULL; 과같은문장 // char* ptr2 = NULL; 과같은문장 // double* ptr3 = NULL; 과같은문장 printf("%d 번지, %d 번지, %d 번지 \n", ptr1++, ptr2++, ptr3++); printf("%d 번지, %d 번지, %d 번지 \n", ptr1, ptr2, ptr3); return 0; 10-3 포인터연산 포인터연산을통한배열요소의접근 /* pointer_array3.c */ #include <stdio.h> int main(void) int arr[5] = 1, 2, 3, 4, 5; int* parr = arr; printf("%d \n", *parr); printf("%d \n", *(++parr)); printf("%d \n", *(++parr)); printf("%d \n", *(parr + 1)); printf("%d \n", *(parr + 2)); return 0; 150

151 10-3 포인터연산 포인터연산의이해 /* two_same.c */ #include <stdio.h> int main(void) int arr[2] = 1, 2; int *parr = arr; printf("%d, %d \n", arr[0], *(arr + 1)); printf("%d, %d \n", parr[0], *(parr + 1)); return 0; 10-4 문자열과포인터 문자열표현방식의이해 배열기반의문자열변수 포인터기반의문자열상수 Str_prn.c 참조 char str1[5] = "abcd"; char *str2 = "ABCD"; 151

152 10-5 포인터와함수의이해 함수의기본적인인자전달방식 값의복사에의한전달 배열의함수인자전달방식 10-5 포인터와함수의이해 값의배열이름 ( 배열주소, 포인터 ) 에의한전달 #include <stdio.h> void Fct(int *arr2) printf("%d \n", arr2[0]); arr2[0] = 3; int main(void) int arr1[2] = 1, 2; Fct(arr1); printf("%d \n", arr1[0]); return 0; 152

153 10-5 포인터와함수의이해 배열의배열이름, 포인터의 sizeof 연산 값의배열이름 : 배열전체크기를바이트단위로반환 포인터 : 포인터의크기 (4) 를바이트단위로반환 arr_adder.c 참조 #include <stdio.h> int main(void) int arr[5]; int *parr = arr; printf( %d \n, sizeof(arr) ); printf( %d \n, sizeof(parr) ); return 0; // 20 출력 // 4 출력 10-5 포인터와함수의이해 "int * parr" 과 "int parr[ ] 둘다같은의미를지닌다. 선언 "int parr[ ]" 은함수의매개변수선언시에만사용가능 max_fct.c 참조 int function(int parr[]) int a = 10; parr = &a; // parr이다른값을지니게되는순간 return *parr; 153

154 10-6 포인터와 const 키워드 포인터가가리키는변수의상수화 int a = 10; const int * p = &a; *p = 30 // Error! a = 30 // OK! 포인터상수화 int a = 10; int b = 20; int * const p = &a; p = &b // Error! *p = 30 // OK! 10-6 포인터와 const 키워드 const 키워드를사용하는이유 컴파일시잘못된연산에대한에러메시지 프로그램을안정적으로구성 #include <stdio.h> float PI = 3.14; #include <stdio.h> const float PI = 3.14; int main(void) float rad; PI = 3.07; // 실수 int main(void) float rad; PI = 3.07; // Compile Error 발생! scanf("%f", &rad); printf(" 원의넓이는 %f \n", rad*rad*pi); return 0; scanf("%f", &rad); printf(" 원의넓이는 %f \n", rad*rad*pi); return 0; 154

155 포인터의포인터 10-7 포인터의포인터 더블포인터라고불린다. 싱글포인터의주소값을저장하는용도의포인터 int main(void) double val = 3. 14; double *ptr1 = &val; double **ptr2 = &ptr1;... // 싱글포인터 // 더블포인터 10-8 Assignment -1 < 아래작업과제들은모두포인터를포함하여구현해야한다.> 1. 정수변수를 10 으로초기화하고정수포인터변수에그주소를대입한후두변수를이용하여값과주소를출력하는프로그램을작성하시오. 출력예 : a = 10, &a = *p = 10, p = 정수변수를선언하고정수포인터변수에주소를대입하여두정수값을입력받아연산을실행하여아래와같이출력되는프로그램을작성하시오. 입출력예 : 5 a = 5, *p = 5 10 a = 10, *p = 10 a = 15, *p = 15 a = 30, *p = 30 a = 29, *p = 정수형포인터변수두개를선언하여값을입력받고합을출력하는프로그램을작성하시오. 입력예 : 출력예 : = 정수형배열을선언하고포인터변수에저장한후포인터변수를이용하여입력받은후홀수번째입력값을출력하는프로그램을작성하시오. 입력예 : 출력예 :

156 10-8 Assignment -2 < 아래작업과제들은모두포인터를포함하여구현해야한다.> 1. 정수배열을선언하여 10, 20, 30 으로초기화하고정수포인터를이용하여아래와같이출력하는프로그램을작성하시오. 단, 포인터연산을모두다르게활용하여출력되도록한다. 출력예 : a = , p = 정수배열과문자열을선언하고정수포인터와문자포인터에각각의주소를대입한후아래와같이출력되는프로그램을작성하시오. 입력예 : abcde 출력예 : st=abcde, ps=abcde 3. 배열의크기를입력받아정수포인터를이용하여동적배열을생성하고배열의크기만큼입력받아입력받은정수를역순으로출력하는프로그램을작성하시오.. 입력예 : 출력예 : 두정수를입력받아값을바꾸어출력하고, 5 개의정수를 5, 1, 19, 8, 29 로초기화한후오름차순으로정렬하여출력하는프로그램을작성하시오. (call by reference 를이용한함수로작성 ) 입력예 : 7 9 출력예 : 매크로와전처리기 156

157 11-1 전처리기에의한매크로처리 전처리기에의한전처리 11-1 전처리기에의한매크로처리 #define 으로시작하는전처리기지시자 단순문자열, 인수를포함한문자열을치환한다. 컴파일러에의해처리되는것이아니다. 관습적으로매크로명은다른변수나변수명과차이를위해서대문자를사용한다. 157

158 11-1 전처리기에의한매크로처리 /* Circle1.c */ #include <stdio.h> #define PI /* Circle1.c */ int main (void) double area; double radius; int main (void) double area; double radius; fputs(" 반지름 : ", stdout); scanf("%lf", &radius); fputs(" 반지름 : ", stdout); scanf("%lf", &radius); area=radius*radius*pi; printf(" 넓이는 %f 입니다 \n", area); return 0; area=radius*radius* ; printf(" 넓이는 %f 입니다 \n", area); return 0; 11-1 전처리기에의한매크로처리 /* Preproc.c */ #include <stdio.h> #define string "C++ Compatible C" #define cal (3 * 4) + (12 / 4) #define ONE 1 #define TWO ONE + ONE #define THREE TWO + ONE int main (void) printf("string : %s \n", string); printf("cal : %d \n", cal); printf("one = %d, TWO = %d, THREE = %d \n", ONE, TWO, THREE); return 0; 158

159 11-2 매크로를이용한함수의구현 매크로함수란? 매크로를기반으로정의되는함수 함수가아니라매크로다! 다만함수의특성을지닐뿐이다. 예제 square1.c 11-2 매크로를이용한함수의구현 매크로함수의장점 자료형에독립적이다. 실행속도가향상된다. 매크로함수의단점 구현이어렵다. 디버깅이어렵다. 매크로함수가되기위한조건 함수의크기가작아야한다. 그렇지않을경우실행파일의크기가커지게된다. 159

160 12. 모듈화프로그래밍 12-1 프로그래밍의모듈화 모듈 (module) 이란무엇인가? 프로그램을구성하는구성요소의일부 관련된데이터와함수들이묶여서모듈을형성한다. 파일단위로나뉘는것이보통 모듈화프로그래밍 기능별로파일을나눠가며프로그래밍하는것 유지보수성이좋아진다. 160

161 12-1 프로그래밍의모듈화 파일의분할및컴파일 파일을나눌지라도완전히독립되는것은아니다. 파일이나뉘어도상호참조가발생할수있는데, 이는전역변수및전역함수로제한된다. 외부접근금지 12-1 프로그래밍의모듈화 static 키워드에의한접근의제한 링크에대한이해 링크라는이름이의미하는것처럼연결에관련된작업을한다. 선언된함수의정의를찾아서연결시켜주는작업 ( 여기서말하는연결이라는용어는다양한의미로사용 ) 161

162 12-2 헤더파일의구현과유용성 헤더파일의포함이지니는의미 전처리기에의해하나의파일을다른하나의파일에포함시키는작업 12-2 헤더파일의구현과유용성 헤더파일포함방법 #include <abc.h> #include c:/include/abc.h // 표준디렉토리에서 abc.h 를찾아서포함 // c:\include 에서 abc.h 를찾아서포함 #include plus.h 현재작업디렉토리에존재하는 plus.h 를포함하라는의미 #include c:/header/lib/plus.h c:/header/lib 에존재하는 plus.h 포함 162

163 12-2 헤더파일의구현과유용성 헤더파일의정의방법및유용성 함수및변수의 extern 선언의간략화 파일변경최소화! 예제 calculator.c, cal_main.c 참조 예제 calculator.h, calculator.c, cal_main.c 참조 12-3 조건부컴파일 #if, #elif, #else, #endif 기반조건부컴파일 hello1.h, hello2.h, hello3.h, condi_main.c 참조 #if CONDITION1 expression1 #elif CONDITION2 expression2 #else expression3 #endif 163

164 12-3 조건부컴파일 헤더파일포함관계에서발생하는문제 하나의헤더파일을두번이상포함! 이는중복해서함수가정의되거나, 변수가선언되는문제점 조건부컴파일로문제해결! 12-3 조건부컴파일 #ifndef, #endif 기반조건부컴파일 164

165 C 언어 : 문자열 입 출력의이해 13-1 스트림과데이터의전송 파일, 콘솔, 소켓입 출력 스트림 : 데이터를송수신하기위한일종의다리 System 출력스트림 Running Program 입력스트림 165

166 13-1 스트림과데이터의전송 표준입 출력스트림 프로그램실행시자동으로생성및소멸 모니터와키보드를그대상으로함 이름 스트림의종류 입 출력장치 stdin 표준입력스트림 키보드 stdout 표준출력스트림 모니터 stderr 표준에러스트림 모니터 문자출력함수 13-2 문자단위입 출력함수 문자입력함수 166

167 13-2 문자단위입 출력함수 EOF 에대한이해 - fgetc, getchar 함수가파일의끝에도달하는경우반환 - End-Of-File의약자로서, 파일의끝을표현하기위한상수 (-1의값을지닌다 ) - 콘솔의경우 Ctrl-Z가파일의 EOF를의미 ( 예제 Ctrl_Z.c 참조 ) 문자단위입 출력함수의필요성 - 용도에맞는적절한함수를제공함으로써성능향상을도모 문자열출력함수 13-3 문자열단위입 출력함수 문자열입력함수 167

168 13-3 문자열단위입 출력함수 /* puts_fputs.c*/ /* fputs.c */ #include <stdio.h> #include <stdio.h> int main() fputs("fputs 함수에의한출력, ", stdout); fputs("i Love Linux ", stdout); fputs("\n", stdout); // 한줄건너뛰기위해서 int main() char str[10]; fputs(" 문자열을입력하세요 : ", stdout); fgets(str, sizeof(str), stdin); puts("puts 함수에의한출력,"); puts("i Love Linux "); fputs(" 입력된문자열 : ", stdout); fputs(str, stdout); return 0; return 0; 13-4 표준입 출력과버퍼 (Buffer) 입출력사이에존재하는버퍼에대한이해 - 여분의임시메모리적특징을지닌다. - 성능향상이목적이다. - 모아서보내고, 모아서받는역할 System Running Program 출력버퍼 입력버퍼 출력스트림 입력스트림 168

169 13-4 표준입 출력과버퍼 (Buffer) 버퍼를비우는작업을하는 fflush 함수 #include <stdio.h> int fflush(file * stream); 성공시 0, 실패시 EOF 리턴 fflush 함수의필요성 Running Program 입력버퍼 입력값과관련된것이남는다 입력스트림 13-4 표준입 출력과버퍼 (Buffer) /* fflush.c */ #include <stdio.h> int main(void) char perid[7]; // 6+null 문자 =7 char name[10]; fputs(" 주민번호앞 6 자리입력 : ", stdout); fgets(perid, sizeof(perid), stdin); fflush(stdin); // 입력버퍼를비운다. fputs(" 이름입력 : ", stdout); fgets(name, sizeof(name), stdin); printf(" 주민번호앞자리 : %s\n", perid); printf( 이름 : %s\n", name); return 0; 169

170 13-5 문자열조작함수 문자열의길이를반환하는 strlen 함수 문자열을복사하는함수 13-5 문자열조작함수 /* strlen.c */ #include <stdio.h> #include <string.h> int main(void) char str[100]; while(1) fgets(str, sizeof(str), stdin); printf(" 문자열의길이 : %d \n", strlen(str)); return 0; 170

171 문자열을추가하는함수 13-5 문자열조작함수 #include <string.h> char* strcat(char* dest, const char* src); char* strncat(char* dest, const char* src, size_t n); 리턴시추가된문자열의포인터리턴 13-5 문자열조작함수 /* strcat.c */ #include <stdio.h> #include <string.h> int main(void) char str1[30] = "Your favorite language is "; char str2[10]; // null 문자포함 27 문자 fputs("what is your favorite computer lanaguage? : ", stdout); fgets(str2, sizeof(str2), stdin); strcat(str1, str2); printf(" 생성된문자열 : %s \n", str1); return 0; 171

172 문자열을비교하는함수 13-5 문자열조작함수 #include <string.h> int strcmp(const char* s1, const char* s2); int strncmp(const char* s1, const char* s2, size_t n); 리턴시추가된문자열의포인터리턴 리턴값 의미 0 보다큰값 ( 양수 ) str1 이 str2 보다큰경우 0 str1 과 str2 가완전히같은경우 0 보다작은값 ( 음수 ) str1 이 str2 보다작은경우 /* strcamp.c */ #include <stdio.h> #include <string.h> char* str1 = "ABC"; char* str2 = "ABD"; int main (void) int result; result = strcmp(str1, str2); if(result>0) puts("str1 이 str2 보다큽니다 "); else if(result<0) puts("str2 가 str1 보다큽니다 "); else puts(" 두문자열이정확히같습니다 "); 13-5 문자열조작함수 return 0; 172

173 13-5 문자열조작함수 문자열을숫자로변환하는함수들 #include <stdlib.h> int atoi(char *ptr); long atol(char *ptr); double atof(char *str); // 문자열을 int 형데이터로변환 // 문자열을 long 형데이터로변환 // 문자열을 double 형데이터로변환 대 소문자의변환을처리하는함수들 #include <ctype.h> int toupper(int c); int tolower(int c); // 소문자를대문자로 // 대문자를소문자로 13-5 문자열조작함수 문자열의종류를확인하는함수 (ctype.h 선언 ) isupper() 대문자인지확인한다. islower() 소문자인지확인한다. isalpha() 알파벳인지확인한다. isdigit() 숫자문자인지확인한다. isalnum() 숫자또는영문자인지확인한다. #include <stdio.h> #include <ctype.h> void main(void) char ch; ch = getchar(); fflush(stdin); if(isupper(ch)) printf( 대문자! \n ); else printf( don t care \n ); 173

174 13-6 Assignment -1 < 아래작업과제들은모두문자열로구현해야한다.> 1. 문자를입력받아서그문자의아스키코드를출력하는프로그램을작성하시오. (while(1)) 입력예 : a 출력예 : a 문자를입력받다가입력없이 Enter 를치면입력받은문자를모두출력하는프로그램을작성하시오. 입력예 : ATmega128 출력예 : ATmega 문자열을입력받아그문자열의길이를구하고입력받은문자를역순으로출력하는프로그램을작성하시오. 입력예 : System 출력예 : 6 / metsys 4. 문자형배열에 System 엔지니어 로초기화하고그길이를출력하는프로그램을작성하시오. 출력예 : System 엔지니어문자열의길이는 15 입니다. 5. 단어를입력받다가 0 을입력받으면입력을종료하고그때까지입력받은단어의개수와홀수번째입력받은단어를모두출력하는프로그램을작성하시오. ( 단어의개수는 20 개를넘지않는다.) 입력예 : mouse keyboard 출력예 : 2 / mouse 13-6 Assignment -2 < 아래작업과제들은모두문자열로구현해야한다.> 1. 문자를입력받아어떤종류인지구분하여출력하는작업을반복하다가영문자와숫자이외의문자가입력되면종료하는프로그램을작성하시오. 입출력예 : a 소문자 # 영문, 숫자이외의문자 2. 문자열을입력받아대문자는소문자로소문자는대문자로변환하여출력하는프로그램을작성하시오. 입력예 : ILoveYou. 출력예 : iloveyou. 3. 공백을포함한문자열 ( 문장 ) 을입력받아공백을기준으로줄을바꾸어출력하는프로그램을작성하시오. 입력예 : l Love You 출력예 : I Love You 4. 공백을포함한문자열을입력받아문장을이루는단어의개수를출력하는프로그램을작성하시오. 입력예 : My name is Honggildong 출력예 : 4 174

175 13-6 Assignment -3 < 아래작업과제들은모두문자열로구현해야한다.> 1. 문자열을입력받아서문자수만큼왼쪽으로한바퀴회전하여출력하는프로그램을작성하시오. 입력예 : ABCDE12345 출력예 : BCDE12345A CDE12345AB DE12345ABC E12345ABCD 12345ABCDE 2345ABCDE1 345ABCDE12 45ABCDE123 5ABCDE1234 ABCDE 한문장을입력받아단어단위로구분하여문자열을배열에저장한후출력되는프로그램을작성하시오. 입력예 : Well begun is half done. 출력예 : Well begun is half done. 3. 두문자열을입력받아 ASCII 코드를기준으로크기를비교한결과를출력하고앞의세문자가같은지의여부를출력하는프로그램을작성하시오. 입력예 : program professional 출력예 : program 이 ASCII 코드상더크고, 입력된두단어는앞의세문자가같다 Assignment -4 < 아래작업과제들은모두문자열로구현해야한다.> 1. plant, flower, leaf, vegetable, field 를포함한임의의단어들을배열로초기화한후한개의문자를입력받아입력받은문자로시작하는단어와개수를출력하는프로그램을작성하시오. 입력예 : f 출력예 : flower field 2 개의단어를찾았습니다. 2. 두개의단어를입력받아길이가짧은단어를먼저출력하는프로그램을작성하시오. 입력예 : programmer engineer 출력예 : engineer programmer 3. 두개의단어를입력받아순서를바꾸어한단어로출력되는프로그램을작성하시오. 입력예 : Engineer System 출력예 : SystemEngineer 4. 임의의단어들을배열로초기화하고문자 ( 단어 ) 를입력하면입력된문자 ( 단어 ) 가포함된단어들을출력하는프로그램을작성하시오. ( 초기화단어 20 개이내 ) 입력예 : search char i 출력예 : champion, informaition, lion 개의단어를입력받아사전순으로정렬하여출력하는프로그램을작성하시오. 입력예 : AP MFC C BASIC XML 출력예 : API BASIC C MFC XML 175

176 13-6 Assignment -5 < 아래작업과제들은모두문자열로구현해야한다.> 1. a1b2c3d4e5 처럼입력된문자열에서숫자만출력하는프로그램을작성하시오. 입력예 : a1b2c3d4e5 출력예 : 주어진문자열에서특정문자를대문자로변환하여출력하는프로그램을작성하시오. 입력예 : it is a good time. (i 를대문자 I 로변환 ) 출력예 : It Is a good time. 3. 주어진문자열에서특정단어 ( 문자열 ) 를변환하여출력되는프로그램을작성하시오. (strstr() 함수 ) 입력예 : They is good friends. 출력예 : They are good friends. C 언어 : 구조체와공용체 176

177 14-1 구조체의정의 구조체의정의 - 하나이상의기본자료형을기반으로사용자정의자료형을 만들수있는문법요소 struct tag // tag라는이름의구조체선언 int x; // 구조체멤버 int x int y; // 구조체멤버 int y ; 14-1 구조체의정의 구조체의변수의선언 -1 struct point int x; int y; p1, p2, p3; int main(void)..... 구조체의변수의선언 -2 struct point int x; int y; ; int main(void) struct point p1, p2, p3;... return 0; 177

178 14-1 구조체의정의 구조체변수의접근 - distance1.c, TelPhone1.c 참조 struct point int x; int y; ; int main(void) struct point p1; p1.x = 10; p1.y = 20;... return 0; // p1 의멤버 x 에 10 을대입 // p1 의멤버 y 에 20 을대입 14-1 구조체의정의 구조체변수의초기화 - 배열초기화문법과일치 struct person char name[20]; char phone[20]; int age; ; int main (void) struct person p= KIET", " ", 20; return 0; 178

179 14-2 구조체와배열 구조체배열의선언 struct person int main (void) char name[20]; struct person parray[10]; char phone[20]; int age; return 0; ; 14-2 구조체와배열 구조체배열요소의접근 - TelPhone2.c 참조 parray[1].age = 10; strcpy(parray[1].name, 홍길동 ); strcpy(parray[1].phone, ); // 두번째요소의 age 에접근 // 두번째요소의 name 에접근 // 두번째요소의 phone 에접근 179

180 14-2 구조체와배열 구조체배열의초기화 struct person int main (void) char name[20]; struct person parray[3] = char phone[20]; Lee, 333, ; Kim, 555, SES, 777 ; return 0; 14-3 구조체와포인터 구조체와포인터 첫째 : 구조체포인터를선언하여구조체변수를가리키는경우 struct_pointer1.c 둘째 : 구조체의멤버로포인터변수가선언되는경우 struct_pointer2.c struct_pointer3.c struct person char name[20]; char phone[20]; ; int main() struct person man = "Thomas", "354-00xx"; struct person * pman; pman = &man; // 구조체변수를이용한출력 printf("name : %s\n", man.name); printf("phone : %s\n", man.phone); // 구조체포인터를이용한출력 1 printf("name : %s\n", (*pman).name); printf("phone : %s\n", (*pman).phone); // 구조체포인터를이용한출력 2 printf("name : %s\n", pman->name); printf("phone : %s\n", pman->phone); return 0; 180

181 14-3 구조체와포인터 #include <stdio.h> struct perinfo char addr[30]; char tel[20]; ; struct person char name[20]; char pid[20]; struct perinfo* info; ; int main() struct perinfo info = "Korea Seoul", " "; struct person man = "Mr. Lee", " xxxx512"; man.info = &info; struct person char name[20]; char pid[20]; struct person* frnd; ; int main() struct person man1 = "Mr. Lee", " "; struct person man2 = "Mr. Lee's Friend", " "; man1.frnd = &man2; printf("[mr. Lee]\n"); printf("name : %s\n", man1.name); printf("pid : %s\n", man1.pid); printf("name : %s\n", man.name); printf("pid : %s\n", man.pid); printf("addr : %s\n", man.info->addr); printf("tel : %s\n", man.info->tel); return 0; printf("[his Friend]\n"); printf("name : %s\n", man1.frnd->name); printf("pid : %s\n", man1.frnd->pid); return 0; 14-3 구조체와포인터 구조체변수와주소값의관계 /* pointer_pointer.c */ #include <stdio.h> struct simple int data1; int data2; ; int main() struct simple s = 1, 2; printf("address1 : %d\n", &s); printf("address2 : %d\n", &(s.data1)); return 0; 181

182 14-4 구조체변수의전달과리턴 함수의인자로전달되는구조체변수 구조체변수의인자전달방식은기본자료형변수의인자전달방식과동일 struct_callby.c 참조 구조체변수의연산 허용되는대표적인연산은대입연산 (=) 이며, 이외의사칙연산들은적용불가능 struct_op.c 참조 구조체변수의리턴방식 14-4 구조체변수의전달과리턴 기본자료형변수의리턴방식과동일 struct_return.c 참조 182

183 14-5 구조체를포함하는구조체 중첩된구조체 구조체의멤버로구조체변수가오는경우 overlapped.c 참조 14-5 구조체를포함하는구조체 중첩된구조체변수의초기화방식

184 14-5 구조체를포함하는구조체 중첩된구조체변수의초기화방식 -2 Typedef 키워드의이해 typedef.c 참조 14-6 새로운자료형 typedef 의적용 def_struct1.c, def_struct2.c 참조 184

185 14-6 새로운자료형 구조체이름의생략 def_struct3.c 참조 공용체의특성 14-7 공용체 하나의메모리공간을둘이상의변수가공유하는형태 union.c 참조 185

186 열거형의정의와의미 enum.c 참조 14-8 열거형 enum color c c = RED; c = GREEN; c = BLUE; // 열거형 color의변수 c를선언 // c에 RED 대입 // c에 GREEN 대입 // c에 BLUE 대입 14-8 열거형 할당되는상수의값 enum color RED, GREEN, BLUE; enum color RED, GREEN = 100, BLUE; 열거형을사용하는이유 특정정수값에의미를부여할수있다. 프로그램의가독성을높이는데한몫을한다. enum_usable1.c와 enum_usable2.c 비교 186

187 14-9 Assignment -1 < 아래작업과제들은모두구조체를포함하여구현해야한다.> 1. 이름과나이를입력받아아래와같이출력되는프로그램을작성하시오. 입력예 : 이름 : OOO 나이 : OO 세 출력예 : OOO 님은 OO 세로입력하였습니다. 2. 자신의이름과부서를초기화하고친구의이름과나이를입력받아모두출력하는프로그램을작성하시오. 입력예 : friend information : OOO, OOOOOO 출력예 : OOOOOO 부서의 OOO 는친구이다. ( 초기화한자신의정보출력 ) 3. 두명의이름, 이론, 실무점수를각각입력받아그합계를포함하여출력되는프로그램을작성하시오. 입력예 : OOO OOO 출력예 : OOO OOO 합계 두점의좌표를입력받아두점의중심점좌표를소수첫째자리까지출력하는프로그램을작성하시오. 입력예 : 좌표 (x, y) 10 5 좌표 (x, y) 출력예 : 중심점위치 : (11.0, 20.5) 5. 사원 5 명의저축액을입력받아그중에저축왕의번호와저축액을출력하는프로그램을작성하시오. 입력예 : 1 번 : 1000, 2 번 : 12000, 3 번 : 33200, 4 번 : 5200, 5 번 : 출력예 : 저축왕 3 번 원 14-9 Assignment -2 < 아래작업과제들은모두구조체를포함하여구현해야한다.> 1. 5 명의이름과키, 몸무게를입력받아키가작은순으로정렬하여출력되는프로그램을작성하시오. 입출력예 : OOO OOO OOO OOO OOO F 부품의길이는 A 와 B 부품길이의평균보다 1cm 크고무게는 A 와 B 부품의무게평균보다 10g 가볍다고한다. 길이와무게를멤버변수로갖는구조체를정의하고 A 와 B 부품의길이와무게를입력받아 F 부품의길이와무게를출력하는프로그램을작성하시오. (cm/g) 입력예 : A 부품길이 / 무게 : B 부품길이 / 무게 : 출력예 : F 부품길이 : 15cm F 부품무게 : 12g 이하의정수 n 을입력받은후 n 명의이름과세항목의평가점수를입력받아총점이높은순으로정렬하여출력되는프로그램을작성하시오. 입력예 : 3 OOO OOO OOO 출력예 : OOO OOO OOO 문자열에저장된시간을읽어아래와같이출력하는프로그램을작성하시오. 입력예 : 출력예 : 2012/01/01 08:30:00 187

188 C 언어 : 파일입 출력 15-1 파일의 Open 과 Close 파일의개방 데이터를주고받을수있는스트림의생성 #include <stdio.h> FILE* fopen(const char * filename, const char * mode) 성공시해당파일의파일포인터, 실패시 NULL 포인터리턴 파일개방모드 파일접근모드 + 데이터입 출력모드 188

189 파일접근모드 15-1 파일의 Open 과 Close 개방한파일의사용용도를결정 모드 의미 r 파일을읽기위해서개방한다. 오로지읽는것만가능하다. w a r+ w+ a+ - 데이터를쓰기위해개방한다. 오로지쓰는것만가능하다. - 만약에 fopen 함수호출시지정해준파일이존재하지않으면, 새로운파일을생성해서데이터를쓰게한다 - 지정해준파일이존재하면, 그파일의데이터를지워버리고데이터를쓰게한다. - w 모드와달리, 지정해준파일이존재하면데이터를지우지않고파일의끝에서부터데이터를추가한다. - 나머지특징은 w 모드와같다. - 파일을읽고쓰기위해개방한다. - 파일이존재하지않는경우, 새로운파일을생성한다. - 파일이존재하는경우파일의데이터를지우지는않지만원래존재하는파일의데이터를덮어쓰게된다. - r+ 모드와달리, 지정해준파일이존재하면몯느데이터를지워버리고데이터를기록한다. - 나머지특징은 r+ 와같다. - r+ 모드와달리, 지정해준파일이존재하면파일의끝에서부터데이터를추가한다. ( 나머지특징은 r+ 와같다 ) 파일의 Open 과 Close 데이터입 출력모드 모드 t b 의미 텍스트모드 (text mode) 2 진모드 (binary mode) 텍스트모드와 2 진모드의차이점 189

190 CR & LF 파일개방모드의완성 15-1 파일의 Open 과 Close CR 은특수문자 '\r' 로표시 LF 는특수문자 '\n' 로표시 예제 carriage.c, CR_LF.c 참조 FILE 구조체의포인터 15-1 파일의 Open 과 Close fopen 함수의리턴타입 흔히파일포인터라불린다. 개방한파일에대한여러가지정보를지니는변수를가리키는포인터 FILE 구조체포인터의용도 데이터입 출력함수의호출 위치정보의참조 파일의끝확인 190

191 15-1 파일의 Open 과 Close 파일의종결 (CLOSE) 스트림의종결을의미함 file_basic.c 참조 #include <stdio.h> int fclose(file * stream) 종료가오류없이제대로이뤄지면 0 을리턴 15-2 파일입 출력함수 기능 스트림 키보드 / 모니터선택 ( 키보드 / 모니터, 파일 ) 문자출력 int putchar(int c) int fputc(int c, FILE* stream) 문자입력 int getchar(void) int fgetc(file* stream) 문자열출력 int puts(const char* s) int fputs(const char* s, FILE* stream) 문자열입력 char* gets(char* s) char* fgets(char* s, int n, FILE* stream) 형식지정출력 int printf(const* format,...) int fprintf(file* stream, const char* format,...) 형식지정입력 int scanf(const char* format,...) int fscanf(file* stream, const char* format,...) 191

192 파일위치지시자 15-2 파일입 출력함수 FILE 구조체변수의멤버로서존재 READ & WRITE에대한위치정보가된다. 입 출력함수의호출에의해이동 순차적인입력및출력이가능한이유 15-3 파일의끝확인 리턴값참조에의한구분 eof_prob1.c 참조 feof 함수를사용하는방법 FILE 구조체변수를참조하는방법 eof_pro3.c 참조 192

193 Random Access 15-4 Random Access 특정위치임의접근방식의입 출력 fseek 함수의사용예 fseek.c 참조 15-4 Random Access 193

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The 6 th Lecture 유명환 ( yoo@netplug.co.kr) 1 2 통신 관련이야기 시리얼통신 관련이야기 INDEX 3 ATmega128 시리얼통신회로도분석 4 ATmega128 시리얼통신컨트롤러 (USART) 분석 5 ATmega128 시리얼통신관련레지스터분석 6 ATmega128 시리얼통신실습 1 통신 관련이야기 동기

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The 4 th Lecture 유명환 ( yoo@netplug.co.kr) 1 시간 (Time) 에대한정의 INDEX 2 왜타이머 (Timer) 와카운터 (Counter) 인가? 3 ATmega128 타이머 / 카운터동작구조 4 ATmega128 타이머 / 카운터관련레지스터 5 뻔뻔한노하우 : 레지스터비트설정방법 6 ATmega128

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729> 8주차중간고사 ( 인터럽트및 A/D 변환기문제및풀이 ) Next-Generation Networks Lab. 외부입력인터럽트예제 문제 1 포트 A 의 7-segment 에초시계를구현한다. Tact 스위치 SW3 을 CPU 보드의 PE4 에연결한다. 그리고, SW3 을누르면하강 에지에서초시계가 00 으로초기화된다. 동시에 Tact 스위치 SW4 를 CPU 보드의

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729> 7주차 AVR의 A/D 변환기제어레지스터및관련실습 Next-Generation Networks Lab. 3. 관련레지스터 표 9-4 레지스터 ADMUX ADCSRA ADCH ADCL 설명 ADC Multiplexer Selection Register ADC 의입력채널선택및기준전압선택외 ADC Control and Status Register A ADC 의동작을설정하거나동작상태를표시함

More information

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

목차 1. A/D 컨버터개요 2. ATMega128 의 A/D 컨버터기능 3. A/D 컨버터로광센서읽기 Chapter. 9 A/D 컨버터 HBE-MCU-Multi AVR Jaeheug, Lee 목차 1. A/D 컨버터개요 2. ATMega128 의 A/D 컨버터기능 3. A/D 컨버터로광센서읽기 A/D 컨버터개요 A/D 컨버터 (Aalog-to-Digital Coverter) 아날로그신호를컴퓨터가읽을수있는병렬또는직렬의디지털데이터로변환하여주는장치 측정하려는아날로그물리량의범위및시스템의응용목적에따라분해능이나정밀도가적합한것을사용.

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

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

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 IMC-V0.1 예제소스파일 1. UART 소스코드 (page 1-3) 2. Encoder 소스코드 (page 4-7) 3. ADC 소스코드 (page 8-10) UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

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

정보보안 개론과 실습:네트워크 ` 마이크로프로세서설계및실습 12-13 주차강의자료 학습목표 A/D 변환기의제어방법을이해한다 능숙하게 A/D 변환기를제어할수있도록반복실습한다 2/28 아날로그 - 디지털변환회로 아날로그 - 디지털변환회로 (A/D 변환회로 ) 는, 아날로그전기신호를디지털전기신호로변환하는전자회로이다 A/D 컨버터 (ADC: Analog-to-digital converter) 라고도불린다

More information

lecture4(6.범용IO).hwp

lecture4(6.범용IO).hwp 제 2 부 C-언어를 사용한 마이크로컨트롤러 활용기초 66 C-언어는 수학계산을 위해 개발된 FORTRAN 같은 고급언어들과는 달 리 Unix 운영체제를 개발하면서 같이 개발된 고급언어이다. 운영체제의 특성상 C-언어는 다른 고급언어에 비해 컴퓨터의 하드웨어를 직접 제어할 수 있는 능력이 탁월하여 마이크로프로세서의 프로그램에 있어서 어셈블 리와 더불어 가장

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

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

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

ATmega128

ATmega128 ATmega128 외부인터럽트실습 Prof. Jae Young Choi ( 최재영교수 ) (2015 Spring) Prof. Jae Young Choi 외부인터럽트실험 외부인터럽트를사용하기위해관렦레지스터를설정 일반적으로 I/O 포트에대한설정이끝난후에외부인터럽트나타이머 / 카운터설정 PE4~7 번까지 4 개의외부인터럽트 INT4~INT7 까지사용 외부인터럽트사용법요약

More information

Microsoft PowerPoint - Chapter_04.pptx

Microsoft PowerPoint - Chapter_04.pptx 프로그래밍 1 1 Chapter 4. Constant and Basic Data Types April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 이장의강의목표 2 기본자료형문자표현방식과문자자료형상수자료형변환 기본자료형 (1/8) 3 변수 (Variables)

More information

2주차: 입출력 제어 복습

2주차: 입출력 제어 복습 마이크로프로세서 응용및실습 ` 13-14 주차 : 직렬통신 (2) 한철수 전자공학과 2/35 직렬통신과병렬통신 직렬통신 한가닥의선으로송수신할데이터를차례대로전송하는방식 장점 : 통신선로가적기때문에경제적임 단점 : 전송속도가느림. 송수신약속이복잡해짐 병렬통신 여러가닥의선으로동시에여러개의데이터를전송하는방식 장점 : 전송속도가빠름 단점 : 직렬통신보다비쌈 3/35

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

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

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

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

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee 목차 1. D/A 변환기 2. 병렬 D/A 변환기로 LED 밝기제어하기 3. 직렬 D/A 변환기로 LED 밝기제어하기 D/A 변환기 D/A 변환기 (Digital to Analog Converter) 디지털데이터를아날로그전압으로변환하는소자 A/D변환기와함께마이크로프로세서응용회로에서널리사용됨.

More information

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

인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2 ATmega128 인터럽트 1 제 04 강 인터럽트 (Interrupt) 인터럽트개요외부인터럽트참고 ) FND 회로실습및과제 인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2 인터럽트 ( 계속 ) ATmega128 인터럽트 3 * 인터럽트벡터 (P.104 표 7.1 참조 ) : 35 개 인터럽트 ( 계속 ) * 인터럽트허용 / 금지메커니즘 ATmega128

More information

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

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드] Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨

More information

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

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

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

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음 프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음 CHAPTER 9 둘중하나선택하기 관계연산자 두개의피연산자를비교하는연산자 결과값은참 (1) 아니면거짓 (0) x == y x 와 y 의값이같은지비교한다. 관계연산자 연산자 의미 x == y x와 y가같은가? x!= y

More information

Microsoft PowerPoint - Chapter 8_USART Serial Communication

Microsoft PowerPoint - Chapter 8_USART Serial Communication MEC382 마이크로프로세서응용및실습 USART Serial Communication Jee-Hwan Ryu School of Mechanical Engineering 통신방법 병렬통신 고속데이터전송이필요한곳에서이루어짐 여러개의라인에서동시에이루어짐 직렬통신 한라인에서이루어짐 데이터의송수신속도가느리다 라인수적고멀리까지통신 동기식, 비동기식있음 동기식 : 기준클럭인동기클럭라인과데이터송

More information

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - chap04-연산자.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); } 1 학습목표 수식의 개념과 연산자, 피연산자에 대해서 알아본다. C의 를 알아본다. 연산자의 우선 순위와 결합 방향에

More information

[8051] 강의자료.PDF

[8051] 강의자료.PDF CY AC F0 RS1 RS0 OV - P 0xFF 0x80 0x7F 0x30 0x2F 0x20 0x1F 0x18 0x17 0x10 0x0F 0x08 0x07 0x00 0x0000 0x0FFF 0x1000 0xFFFF 0x0000 0xFFFF RAM SFR SMOD - - - GF1 GF0 PD IDL 31 19 18 9 12 13 14 15 1 2 3 4

More information

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

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 3 장 : 변수와데이터형 2012 년 이은주 학습목표 변수와상수의개념에대해알아본다. 리터럴상수, 매크로상수, const 변수에대해알아본 다. C 언어의데이터형에대해알아본다. 2 목차 변수와상수 변수 상수 데이터형 문자형 정수형 실수형 sizeof 연산자 3 변수와상수 변수 : 값이변경될수있는데이터 상수 : 값이변경될수없는데이터

More information

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

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

More information

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

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp

À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp l Y ( X g, Y g ) r v L v v R L θ X ( X c, Yc) W (a) (b) DC 12V 9A Battery 전원부 DC-DC Converter +12V, -12V DC-DC Converter 5V DC-AC Inverter AC 220V DC-DC Converter 3.3V Motor Driver 80196kc,PWM Main

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

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

HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터 HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터 타이머와카운터 1. 클럭과카운터 2. ATMega128 의타이머 / 카운터 3. 8 비트타이머 / 카운터의일반동작모드 4. 타이머로 LED 점멸시키기 5. 타이머로디지털시계만들기 타이머 / 카운터 타이머와카운터 정확한시간의측정이필요하다.( 자명종과스톱워치

More information

Microsoft PowerPoint - AVR 시리얼 통신.ppt [호환 모드]

Microsoft PowerPoint - AVR 시리얼 통신.ppt [호환 모드] AVR UART 통신 류대우 davidryu@newtc.co.kr 시리얼 (Serial) 통신이란? Serial 통신은하나의신호선을이용해서데이터를비트단위로보내는방식 8 비트비동기식통신콘트롤러 (UART : Universal Asynchronous Receiver Transmitter) 데이터는 LSB 부터 MSB 순으로데이터전송 Serial interface

More information

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

Microsoft PowerPoint - 제5장 인터럽트 (HBE-MCU-Multi AVR).ppt [호환 모드] Chapter. 5 인터럽트 HBE-MCU-Multi AVR Jaeheung, Lee 목차 1. 폴링과인터럽트그리고인터럽트서비스루틴 2. ATMega128 인터럽트 3. 인터럽트로 LED 점멸시키기 4. 인터럽트로스톱워치만들기 인터럽트 1. 폴링과인터럽트그리고인터럽트서비스루틴 2. ATMega128 인터럽트 3. 인터럽트로 LED 점멸시키기 4. 인터럽트로스톱워치만들기

More information

Microsoft PowerPoint - es-arduino-lecture-03

Microsoft PowerPoint - es-arduino-lecture-03 임베디드시스템개론 : Arduino 활용 Lecture #3: Button Input & FND Control 2012. 3. 25 by 김영주 강의목차 디지털입력 Button switch 입력 Button Debounce 7-Segment FND : 직접제어 7-Segment FND : IC 제어 2 디지털입력 : Switch 입력 (1) 실습목표 아두이노디지털입력처리실습

More information

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

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - (Asynchronous Mode) - - - ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - UART (Univ ers al As y nchronous Receiver / T rans mitter) 8250A 8250A { COM1(3F8H). - Line Control Register

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2> 쉽게풀어쓴 C 언어 Express 제 3 장 C 프로그램구성요소 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() * 산술연산 * 대입연산 이번장에서는 C 프로그램을이루는구성요소들을살펴봅니다. 일반적인프로그램의형태 데이터를받아서 ( 입력단계 ), 데이터를처리한후에 ( 처리단계 ), 결과를화면에출력

More information

슬라이드 1

슬라이드 1 AVR(Atmega128) Interrupt 1 Interrupt Polling 사용자가명령어를사용하여입력핀의값을계속읽어서변화를알아냄 모든경우의입력또는값의변화에대응하여처리가가능 Interrupt MCU 자체가하드웨어적으로그변화를체크하여변화시에만일정한동작 하드웨어적으로지원되는몇개의입력또는값의변화에만대응처리가가능 처리속도는일반적인경우인터럽트가빠름 인터럽트발생시

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

Microsoft PowerPoint - chap-03.pptx

Microsoft PowerPoint - chap-03.pptx 쉽게풀어쓴 C 언어 Express 제 3 장 C 프로그램구성요소 컴퓨터프로그래밍기초 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() * 산술연산 * 대입연산 이번장에서는 C프로그램을이루는구성요소들을살펴봅니다. 컴퓨터프로그래밍기초 2 일반적인프로그램의형태 데이터를받아서 ( 입력단계 ), 데이터를처리한후에

More information

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

// 변수선언 unsigned char i; unsigned char FONT[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xD8, 0x80, 0x98}; //PORTA 를출력으로설정하고초기값은모두 0 PORTA = 0x00; DD Code Vison AVR C ATmega8535 ATmega8535 제어실습 Chapter 1 I / O 포트제어하기 FND 제어 FND에는 Vcc를이용하는애노드 (anode) 형과 Gnd를이용하는 cathode형이있다. LED가여러개모여있다생각하고 LED선택에따라문자와숫자를만들어낼수있다. 최대한많은영문자를만들기위해대문자와소문자를혼합한다. ( 표현가능한문자

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 변수와상수의개념에대해알아본다.

More information

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

목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기 Chapter. 13 KeyPAD 를이용한비밀번호입력기 HBE-MCU-Multi AVR Jaeheung, Lee 목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기 키패드 (KeyPAD) 키패드 (KeyPAD) 마이크로컨트롤러활용에서사용자의입력을받아들이기위한장치 전화기, 컴퓨터, 핸드폰, 냉장고등거의모든가전제품에서사용 키패드인터페이스방식

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장 C 프로그램구성요소 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() * 산술연산 * 대입연산 이번장에서는 C 프로그램을이루는구성요소들을살펴봅니다. 일반적인프로그램의형태 데이터를받아서 ( 입력단계 ), 데이터를처리한후에 ( 처리단계 ), 결과를화면에출력 ( 출력단계 ) 한다. 데이터입력

More information

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

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 Introduction to software design 2012-1 Final 2012.06.13 16:00-18:00 Student ID: Name: - 1 - 0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x

More information

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63>

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63> 라인트레이서강좌 4. 프로그래밍 2005년 8월 1일류대우 (davidryu@newtc.co.kr) 1. 라인트레이서란? 라인트레이서는정해진주행선을따라움직이는자율이동로봇이다. 현재공장자동화부분에서이용되고있는무인반송차가라인트레이서이다. 라인트레이서의기본적인원리는주어진주행선을센서로검출하여이것에따라목적위치까지이동하는것이다. 라인트레이서는크게 3부분 - 컨트롤러부,

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

윤성우의 열혈 TCP/IP 소켓 프로그래밊

윤성우의 열혈 TCP/IP 소켓 프로그래밊 윤성우저열혈강의 C 프로그래밍개정판 Chapter 05. 상수와기본자료형 Chapter 05-1. C 언어가제공하는기본자료형의이해 윤성우저열혈강의 C 프로그래밍개정판 자료형은데이터를표현하는방법입니다. 실수를저장할것이냐? 정수를저장할것이냐! 값을저장하는방식이실수냐정수냐에따라서달라지기때문에용도를결정해야한다. 얼마나큰수를저장할것이냐! 큰수를표현하기위해서는많은수의바이트가필요하다.

More information

목차 1. UART와 RS232 개요 2. ATMega128의 USART 포트 3. UART로 Hello 보내기 4. UART로 PC와데이터주고받기

목차 1. UART와 RS232 개요 2. ATMega128의 USART 포트 3. UART로 Hello 보내기 4. UART로 PC와데이터주고받기 Chapter. 8 UART HBE-MCU-Multi AVR Jaeheug, Lee 목차 1. UART와 RS232 개요 2. ATMega128의 USART 포트 3. UART로 Hello 보내기 4. UART로 PC와데이터주고받기 UART 와 RS232 개요 UART(Uiversal Asychroous Receiver/Trasmitter) 시리얼기반의통신방식으로일반적으로

More information

Microsoft PowerPoint - Lesson2.pptx

Microsoft PowerPoint - Lesson2.pptx Computer Engineering g Programming g 2 제 3 장 C 프로그래밍구성요소 Lecturer: JUNBEOM YOO jbyoo@konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() *

More information

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

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

KEY 디바이스 드라이버

KEY 디바이스 드라이버 KEY 디바이스드라이버 임베디드시스템소프트웨어 I (http://et.smu.ac.kr et.smu.ac.kr) 차례 GPIO 및 Control Registers KEY 하드웨어구성 KEY Driver 프로그램 key-driver.c 시험응용프로그램 key-app.c KEY 디바이스드라이버 11-2 GPIO(General-Purpose Purpose I/O)

More information

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

MAX232 MAXIM사에서생산되는 RS-232통신을가능토록해주는송수신 IC이다. 송수신드라이브를각각 2개씩가지고있다. AVR과컴퓨터가인식하는 0과 1의값이다르기때문에.. 마이컴컴퓨터 이차이를해결해주는것이다. 0 0V -10V 1 5V 10V TTL IC 의전원단자와다 Code Vison AVR C ATmega 8535 RS232 시리얼통신 컨넥터와신호선 RS232 통신을위한컨넥터는 9핀과 25핀컨넥터가있으나, 최근에는 9핀컨넥터를많이사용한다. 실제데이터가송수신되는핀은 TXD(3) 와 RXD(2) 이고기능은다음과같다. 9 핀컨넥터의모습 TXD - Transmit Data 비동기식직렬통신장치가외부장치로데이터를보낼때, 직렬통신데이터가나오는신호선

More information

CANTUS Evaluation Board Ap. Note

CANTUS Evaluation Board Ap. Note Preliminary CANTUS - UART - 32bits EISC Microprocessor CANTUS Ver 1. October 8, 29 Advanced Digital Chips Inc. Ver 1. PRELIMINARY CANTUS Application Note( EVM B d ) History 29-1-8 Created Preliminary Specification

More information

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

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

More information

untitled

untitled int i = 10; char c = 69; float f = 12.3; int i = 10; char c = 69; float f = 12.3; printf("i : %u\n", &i); // i printf("c : %u\n", &c); // c printf("f : %u\n", &f); // f return 0; i : 1245024 c : 1245015

More information

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

C 언어 프로그래밊 과제 풀이 과제풀이 (1) 홀수 / 짝수판정 (1) /* 20094123 홍길동 20100324 */ /* even_or_odd.c */ /* 정수를입력받아홀수인지짝수인지판정하는프로그램 */ int number; printf(" 정수를입력하시오 => "); scanf("%d", &number); 확인 주석문 가필요한이유 printf 와 scanf 쌍

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 06 반복문 01 반복문의필요성 02 for문 03 while문 04 do~while문 05 기타제어문 반복문의의미와필요성을이해한다. 대표적인반복문인 for 문, while 문, do~while 문의작성법을 알아본다. 1.1 반복문의필요성 반복문 동일한내용을반복하거나일정한규칙으로반복하는일을수행할때사용 프로그램을좀더간결하고실제적으로작성할수있음.

More information

중간고사

중간고사 중간고사 예제 1 사용자로부터받은두개의숫자 x, y 중에서큰수를찾는알고리즘을의사코드로작성하시오. Step 1: Input x, y Step 2: if (x > y) then MAX

More information

C 언어의구성요소인상수, 변수, 입 출력함수에 대하여학습

C 언어의구성요소인상수, 변수, 입 출력함수에 대하여학습 C 언어의구성요소인상수, 변수, 입 출력함수에 대하여학습 구성요소 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() * 산술연산 * 대입연산 예 /* 두개의숫자의합을계산하는프로그램 */ #include { int main(void) int x; // 첫번째정수를저장할변수 int y; // 두번째정수를저장할변수

More information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

Microsoft Word - logic2005.doc

Microsoft Word - logic2005.doc 제 8 장 Counters 실험의목표 - Catalog counter 의동작원리에대하여익힌다. - 임의의 counter를통하여 FSM 구현방법을익힌다. - 7-segment display 의동작원리를이해한다. 실험도움자료 1. 7-segment display 7-segment는디지털회로에서숫자를표시하기위하여가장많이사용하는소자이다. 이름에서알수있듯이 7개의 LED(

More information

C 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12

More information

Microsoft PowerPoint - Chapter_02.pptx

Microsoft PowerPoint - Chapter_02.pptx 프로그래밍 1 1 Chapter 2. Types, Operators, and Expressions March, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 이장의강의목표 2 변수의이해 C언어의표준키워드연산자소개키보드입력 변수의이해 (1/9) 3 덧셈예제 3 +

More information

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013. 쉽게풀어쓴 C 언어 Express 제 3 장 C 프로그램구성요소 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() * 산술연산 * 대입연산 이번장에서는 C 프로그램을이루는구성요소들을살펴봅니다. 일반적인프로그램의형태 덧셈프로그램 #1 데이터를받아서 ( 입력단계 ), 데이터를처리한후에 ( 처리단계

More information

BY-FDP-4-70.hwp

BY-FDP-4-70.hwp RS-232, RS485 FND Display Module BY-FDP-4-70-XX (Rev 1.0) - 1 - 1. 개요. 본 Display Module은 RS-232, RS-485 겸용입니다. Power : DC24V, DC12V( 주문사양). Max Current : 0.6A 숫자크기 : 58mm(FND Size : 70x47mm 4 개) RS-232,

More information

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어 개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

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

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

Microsoft PowerPoint - c2.ppt

Microsoft PowerPoint - c2.ppt 프로그램과표준입출력 프로그램 (program) 자료를입력받아서이를처리하여출력을하는일을수행함 2 장 C 언어의기초 입력 프로그램 ( 처리 ) 출력 식별자, 예약어 자료형 상수와변수 수식 연산자 : 산술연산자 자료형변환 표준입출력 (standard input and output: stdio) 표준입력 : 키보드입력 표준출력 : 모니터또는터미널로출력 (cf) DOS,

More information

Microsoft PowerPoint - 2주차-1차시 (강의자료) ch01 - C Programming 기초 (part 2)

Microsoft PowerPoint - 2주차-1차시 (강의자료) ch01 - C Programming 기초 (part 2) 일반적인프로그램의기본구성형태 데이터를받아서 ( 입력단계 ), 데이터를처리한후에 ( 처리단계 ), 결과를화면에출력 ( 출력단계 ) 한다. 데이터입력 데이터처리 결과출력 1-23 덧셈프로그램 #1 주석 전처리기지시어 /* 두개의숫자의합을계산하는프로그램 */ #include 함수 int main(void) { int x; int y; int sum;

More information

ABC 2장

ABC 2장 3 장 C 프로그램을이루는구성요소 김명호 내용 주석문 토큰 키워드 식별자 상수 문자열상수 구두자 1 구문 Syntax 올바른프로그램을만들수있게하는규칙 컴파일러 C 프로그램이구문에맞는지검사 오류가있다면, 오류메시지출력 오류가없다면, 목적코드생성 전처리기 컴파일러이전에호출 2 컴파일러 컴파일과정 C 프로그램 토큰으로분리 토큰을목적코드로변환 토큰종류 : 키워드,

More information

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074>

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074> 7 장. 인터럽트의동작 한국산업기술대학교 이응혁교수 WWW.ROBOTICSLAB.CO.KR 1 7.1 인터럽트 (Interrupt) 개요 인터럽트개념 프로그램이수행되고있는동안에어떤조건이발생하여수행중인프로그램을일시적으로중지시키게만드는조건이나사건의발생 비동기적으로처리 다른프로그램이수행되는동안여러개의사건을처리할수있는메커니즘 인터럽트가발생하면마이크로컨트롤러는현재수행중인프로그램을일시중단하고,

More information

T100MD+

T100MD+ User s Manual 100% ) ( x b a a + 1 RX+ TX+ DTR GND TX+ RX+ DTR GND RX+ TX+ DTR GND DSR RX+ TX+ DTR GND DSR [ DCE TYPE ] [ DCE TYPE ] RS232 Format Baud 1 T100MD+

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.

More information

슬라이드 1

슬라이드 1 3. 자료와변수 3.1 자료형 자료형 컴퓨터는숫자 (= 데이터 ) 를다룬다. 컴퓨터가다룰수있는숫자의유형이있다. C 언어에서의자료형 크기 (byte) 정수형 ( 문자형 ) char 1 정수형 실수형 ( 부동소수형 ) short 2 int 4 long 4 long long 8 float 4 double 8 long double 8 / 16 강 C 프로그래밍 3

More information

Microsoft Word - PEB08_USER_GUIDE.doc

Microsoft Word - PEB08_USER_GUIDE.doc 0. PEB08 이란? PEB08(PIC EVALUATION BOARD 8bits) 은 Microchip 8bit Device 개발을쉽고편리하게할수있는보드입니다. 1. 다양한 8bit Device 지원 기존대부분의 8bit 보드의경우일부 Pin-Count만지원을하였지만, PEB08은 PIC10, PIC12, PIC16, PIC18의 DIP Type Package의모든

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

IoT FND8 7-SEGMENT api

IoT FND8 7-SEGMENT api IoT FND8 7-SEGMENT api http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 1 Document History

More information

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

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

C 프로그래밊 개요

C 프로그래밊 개요 구조체 2009 년 5 월 19 일 김경중 강의계획수정 일자계획 Quiz 실습보강 5 월 19 일 ( 화 ) 구조체 Quiz ( 함수 ) 5 월 21 일 ( 목 ) 구조체저녁 6 시 5 월 26 일 ( 화 ) 포인터 5 월 28 일 ( 목 ) 특강 (12:00-1:30) 6 월 2 일 ( 화 ) 포인터 Quiz ( 구조체 ) 저녁 6 시 6 월 4 일 ( 목

More information

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

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

More information

untitled

untitled if( ) ; if( sales > 2000 ) bonus = 200; if( score >= 60 ) printf(".\n"); if( height >= 130 && age >= 10 ) printf(".\n"); if ( temperature < 0 ) printf(".\n"); // printf(" %.\n \n", temperature); // if(

More information

C 프로그램의 기본

C 프로그램의 기본 C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석

More information

Microsoft PowerPoint - 2장 변수와 자료형 pptx

Microsoft PowerPoint - 2장 변수와 자료형 pptx C 프로그래밍및실습 2. 변수와자료형 세종대학교 목차 1) 변수와자료형개요 4) 부동소수자료형 6) 자료형변환 2 1) 변수와자료형개요 변수 : 값을담을그릇 자료형 : 그릇의모양 이그릇안에 10+20 의결과저장 자료형 int main() { int c ; c=10+20; 변수 int 30 c printf("c=10+20 출력 :"); printf("%d",

More information

PowerPoint Presentation

PowerPoint Presentation 컴퓨터프로그래밍 Computer Programming 04 전처리와입출력 목차 1. 전처리 2. 출력함수 printf() 3. 입력함수 scanf() 3 1. 전처리 전처리개요 전처리기역할 컴파일 compile 전에전처리기 preprocessor 의전처리 preprocess 과정이필요 결과인전처리출력파일을만들어컴파일러에게보내는작업을수행 전처리지시자preprocess

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 누구나즐기는 C 언어콘서트 제 5 장조건문 이번장에서학습할내용 조건문이란? if 문 if, else 문 중첩 if 문 switch 문 goto 문 이제까지는문장들이순차적으로실행된다고하였다. 하지만필요에따라서조건이만족되면문장의실행순서를변경할수있는기능이제공된다. 조건문 조건에따라서여러개의실행경로가운데하나를선택 문장이실행되는순서에영향을주는문장 조건에따라서여러개의같은처리를반복

More information