2주차: 입출력 제어 복습

Similar documents
<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - Chapter 8_USART Serial Communication

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

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

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

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

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

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

<BDC7C7E83720BFB9BAF1BAB8B0EDBCAD2E687770>

슬라이드 1

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

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

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

K&R2 Reference Manual 번역본

중간고사

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

고급 프로그래밍 설계

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Microsoft PowerPoint - Java7.pptx

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

데이터 통신

PowerPoint 프레젠테이션

ATmega128

Microsoft PowerPoint - polling.pptx

ATmega128 교재 - 8장 EEPROM.hwp

untitled

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

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

untitled

<4D F736F F D20B1E2BCFAC0DAB7E1202D20454F435220B8F0B5E5B9F6BDBA20C5EBBDC5C1A6C7B020BBE7BFEBB9FD202D F302E646F63>

PowerPoint 프레젠테이션

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

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

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

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-1Array.ppt

ARDUINO Open Physical Computing Platform 오탈자, 문의및보완이필요한내용은 으로알려주세요.

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

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

PowerPoint Presentation

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

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap-06.pptx

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

(MHT-SB112\273\347\276\347\274\255.hwp)

Chapter #01 Subject

PowerPoint 프레젠테이션

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

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

CANTUS Evaluation Board Ap. Note

KEY 디바이스 드라이버

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

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

설계란 무엇인가?


Java ...

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

The Pocket Guide to TCP/IP Sockets: C Version

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

chap 5: Trees

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

Chapter_06

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

슬라이드 1

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

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

슬라이드 1

The Pocket Guide to TCP/IP Sockets: C Version

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

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63>

The Pocket Guide to TCP/IP Sockets: C Version

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

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

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

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

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

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

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

Microsoft PowerPoint - chap05-제어문.pptx

1 1. INTRODUCTION 2 2. DOWNLOAD Windows Desktop & Server Max OS X, Linux, Windows CE 2 3. API REFERENCE CAN_OpenVcp CAN_Op

Microsoft Word - LKP-RTD 사용자 설명서

C 프로그래밊 개요

Chapter 4. LISTS

Microsoft PowerPoint - es-arduino-lecture-03

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

untitled


3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

C프로-3장c03逞풚

Chapter 4. LISTS

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074>

PowerPoint 프레젠테이션

개요

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

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

Transcription:

마이크로프로세서 응용및실습 ` 13-14 주차 : 직렬통신 (2) 한철수 전자공학과

2/35 직렬통신과병렬통신 직렬통신 한가닥의선으로송수신할데이터를차례대로전송하는방식 장점 : 통신선로가적기때문에경제적임 단점 : 전송속도가느림. 송수신약속이복잡해짐 병렬통신 여러가닥의선으로동시에여러개의데이터를전송하는방식 장점 : 전송속도가빠름 단점 : 직렬통신보다비쌈

3/35 ATmega128 의통신모드 직렬통신관련용어 USART: 동기및비동기통신 ATmega128 은 USART 를지원 UART: 비동기통신 동기모드 동기신호 XCK 가있음 비동기모드 동기신호가없음

외부시리얼통신장치와의비동기통신 4/35

직렬통신회로도 5/35

ATmega128 의 USART 개요 2 개의 USART 가있음 USART0, USART1 송신과수신을동시에수행하는전이중방식임 (Full- Duplex) 동기, 비동기모드를선택할수있음 6/35

7/35 USART 의데이터프레임 시작비트 (St) 새로운프레임이시작되면반드시 0 으로, 1 비트시간을가짐 데이터비트 5~9 비트시간동안 LSB 부터 MSB 까지차례로전송 패리티비트 (P) 1 의개수가홀수또는짝수가되도록패리트비트설정 패리티비트를없음 (None) 으로설정할수도있음 정지비트 프레임과프레임사이를구분하기위해정지비트구간을둠 정지비트는 1 또는 2 일수있음

8/35 USART 의내부구조 클록생성부 송신부 수신부

USART 관련레지스터 (1/9) 9/35

USART 관련레지스터 (2/9) 10/35

11/35 USART 관련레지스터 (3/9) 통신모드 데이터비트수

12/35 USART 관련레지스터 (4/9) 패리티모드 정지비트수

13/35 USART 관련레지스터 (5/9) 클록의샘플링위치설정 ( 동기모드에서만설정 ) 클록마스터 / 슬레이브설정 ( 동기모드에서만설정 )

14/35 USART 관련레지스터 (6/9) 통신에러 UCSRnA 레지스터의 FEn, DORn, UPEn 비트가 1 일때에러가발생된상태임 UDREn 패리티에러비트, UPEn 패리티설정과다른 1 의개수가수신되었을때발생 프레임에러비트, Fen 정지비트가 1 이수신되지않았을때발생 오버런에러비트, DORn 수신레지스터 (UDRn) 가다차있는상태에서새로운데이터가또수신될때발생

15/35 USART 관련레지스터 (7/9) 전송속도 (BAUD rate, 보오레이트 ) 설정 UDREn

16/35 USART 관련레지스터 (8/9) 많이사용하는보오레이트설정을위한 UBRR

17/35 USART 관련레지스터 (9/9) 송신 UCSRnA 레지스터의 UDREn 을검사하여 1 일때, UDRn 레지스터에값을기록하면그값을전송 UDREn 수신 UCSRnA 레지스터의 RXCn 비트를검사하여값이 1 이면, UDRn 레지스터에수신된데이터가있음 UDRn 레지스터를변수에저장

18/35 실습을위한설정값 설정해야할항목 설정값 통신모드 : 비동기통신모드 데이터비트수 : 8 비트 패리티모드 : 없음 정지비트수 : 1 정지비트 전송속도 : 38,400 bps UBRR 값은?

19/35 예제 1: 폴링을이용한문자송신 LCD 에윗줄왼편에 LOVE 또는 DEATH 를출력하고, 그문자열을 PC 로송신할것 ATmega128 모듈 LOVE 또는 DEATH 전송 PC 의하이퍼터미널

예제 1 char *string="love"; int main(void) unsigned char m; unsigned int ubrr_baud=25; LCD_init(); UCSR1B = (1<<RXEN1 1<<TXEN1); UBRR1H=(ubrr_baud>>8); UBRR1L=ubrr_baud; for(m=0;m<16;m++) if(string[m]=='\0') break; LCD_data_write(string[m]); while(!(ucsr1a&(1<<udre1))); UDR1=string[m]; while(1);

21/35 예제 2: 폴링을이용한문자수신 하이퍼터미널에서키보드로문자를입력하면, 그문자를수신하여 LCD 에출력할것 ATmega128 모듈 문자수신 PC 의하이퍼터미널

예제 2 int main(void) unsigned int ubrr_baud=25; LCD_init(); UCSR1B = (1<<RXEN1 1<<TXEN1); UBRR1H=(ubrr_baud>>8); UBRR1L=ubrr_baud; while(1) while(!(ucsr1a&(1<<rxc1))); LCD_data_write(UDR1);

23/35 응용문제 하이퍼터미널에문자가입력되면그값을수신하여 LCD 의커서위치를아래와같이바꿀것 w 가입력되면커서가위로한칸 s 가입력되면커서가아래로한칸 a 가입력되면커서가좌로한칸 d 가입력되면커서가우로한칸

24/35 예제 3: 폴링을이용한문자수신 ( 수정판 ) 하이퍼터미널에서키보드로문자를입력하면, 그문자를수신하여 LCD 에출력할것 ATmega128 모듈 문자수신 while(1) while(!(ucsr1a&(1<<rxc1))); LCD_data_write(UDR1); 수정 PC 의하이퍼터미널 while(1) if(ucsr1a&(1<<rxc1)) LCD_data_write(UDR1);

25/35 예제 4: 폴링을이용한문자송수신 하이퍼터미널에서키보드로문자를입력하면, 그문자를수신하여그값에따라 LCD 에문자열을출력하고다시전송 ATmega128 모듈 a 가입력되었으면 LCD (0,0) 위치에 apple 표시하고전송 b 가입력되었으면 LCD (0,0) 위치에 banana 표시하고전송 t 가입력되었으면 LCD (0,0) 위치에 tomato 표시하고전송 키보드로문자입력하고전송 PC 의하이퍼터미널

예제 4 char *string_apple="apple"; char *string_banana="banana"; char *string_tomato="tomato"; while(1) if(ucsr1a&(1<<rxc1)) data=udr1; if(data=='a') data=0; LCD_command(0x01); LCD_command(0x02); for(m=0;m<16;m++) if(string_apple[m]=='\0') break; LCD_data_write(string_apple[m]); while(!(ucsr1a&(1<<udre1))); UDR1=string_apple[m]; else if(data=='b') data=0; LCD_command(0x01); LCD_command(0x02); for(m=0;m<16;m++) if(string_banana[m]=='\0') break; LCD_data_write(string_banana[m]); while(!(ucsr1a&(1<<udre1))); UDR1=string_banana[m]; else if(data=='t') data=0; LCD_command(0x01); LCD_command(0x02); for(m=0;m<16;m++) if(string_tomato[m]=='\0') break; LCD_data_write(string_tomato[m]); while(!(ucsr1a&(1<<udre1))); UDR1=string_tomato[m];

27/35 인터럽트를이용한통신의필요성 폴링 (polling) 방식 주기적으로데이터가수신되었는지레지스터를체크 While 루프내의처리문장이많아질경우 데이터를송수신하는시간간격이길어지고, 데이터를전송받지못하는경우도발생 인터럽트방식 While 루프와관계없이하드웨어적으로빠르게송수신할수있음

28/35 인터럽트를이용한문자송신 (1/3) LCD 에윗줄왼편에 LOVE 또는 DEATH 를출력하고, 그문자열을 PC 로송신하기 char *string="love"; #include <avr/interrupt.h> #define LENGTH_TX_BUFFER 8 unsigned char tx1_buffer[length_tx_buffer]; unsigned char tx1_head=0, tx1_tail=0;

29/35 인터럽트를이용한문자송신 (2/3) void USART_send(char data) while((tx1_head+1==tx1_tail) ((tx1_head==length_tx_buffer-1)&&(tx1_tail==0))); tx1_buffer[tx1_head]=data; tx1_head=(tx1_head==length_tx_buffer-1)?0:tx1_head+1; UCSR1B=UCSR1B 1<<UDRIE1; ISR(USART1_UDRE_vect) UDR1=tx1_buffer[tx1_tail]; tx1_tail=(tx1_tail==length_tx_buffer-1)?0:tx1_tail+1; if(tx1_tail==tx1_head) UCSR1B=UCSR1B & ~(1<<UDRIE1);

인터럽트를이용한문자송신 (3/3) int main(void) unsigned char m; unsigned int ubrr_baud=25; LCD_init(); UCSR1B = (1<<RXEN1 1<<TXEN1); UBRR1H=(ubrr_baud>>8); UBRR1L=ubrr_baud; sei(); for(m=0;m<16;m++) if(string[m]=='\0') break; LCD_data_write(string[m]); USART_send(string[m]); while(1); 30/35

31/35 인터럽트를이용한문자수신 (1/3) 하이퍼터미널에서키보드로문자를입력하면, 그문자를수신하여 LCD 에출력할것 #include <avr/interrupt.h> #define LENGTH_RX_BUFFER 8 unsigned char rx1_buffer[length_rx_buffer]; unsigned char rx1_head=0, rx1_tail=0; unsigned char trash;

인터럽트를이용한문자수신 (2/3) int USART1_receive(void) unsigned char rx_data; if(rx1_head==rx1_tail) return 0; else rx_data=rx1_buffer[rx1_tail]; rx1_tail=(rx1_tail==length_rx_buffer-1)?0:rx1_tail+1; return rx_data; ISR(USART1_RX_vect) if((rx1_head+1==rx1_tail) ((rx1_head==length_rx_buffer-1)&&(rx1_tail==0))) trash=udr1; else rx1_buffer[rx1_head]=udr1; rx1_head=(rx1_head==length_rx_buffer-1)?0:rx1_head+1; 32/35

33/35 인터럽트를이용한문자수신 (3/3) int main(void) unsigned char data=0; unsigned int ubrr_baud=25; LCD_init(); UCSR1B = (1<<RXEN1 1<<TXEN1); UBRR1H=(ubrr_baud>>8); UBRR1L=ubrr_baud; UCSR1B=UCSR1B 1<<RXCIE1; sei(); while(1) data=usart1_receive(); if(data) LCD_data_write(data);

34/35 응용문제 2: 인터럽트를이용한문자송수신 하이퍼터미널에서키보드로문자를입력하면, 그문자를수신하여그값에따라 LCD 에문자열을출력하고다시전송 ATmega128 모듈 a 가입력되었으면 LCD (0,0) 위치에 apple 표시하고전송 b 가입력되었으면 LCD (0,0) 위치에 banana 표시하고전송 t 가입력되었으면 LCD (0,0) 위치에 tomato 표시하고전송 키보드로문자입력하고전송 PC 의하이퍼터미널

질문? 전자공학과