Download ppt - 8051 직렬포트

Transcript
Page 1: 8051  직렬포트

8051 직렬포트

순천향대학교 정보기술공학부

이상정

Page 2: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 2

2003-1 마이크로프로세서

개 요 4 가지의 동작 모드를 갖는 전이중 (full-duplex)

통신방식의 직렬 포트 송신부와 수신부는 각각 2 중 버퍼 (double b

uffer) 로 구성• 수 신 의 경 우 CPU 가 먼 저 수 신 된 데 이 터 를

읽 어 가 기 전 에 라 도 다 음 데 이 터 를 수 신 하 는 동작이 가능

송신 및 수신 데이터 버퍼로는 SBUF 가 사용• 송신시에는 CPU 가 송신할 데이터를 SBUF 에

라 이 트 하 면 이 는 곧 바 로 직 렬 포 트 의 송 신 레지스터에 로드되고 ,

• CPU 가 SBUF 를 리 드 하 면 수 신 레 지 스 터 가 읽혀진다 .

Page 3: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 3

2003-1 마이크로프로세서

P.190 그림 8.10

Page 4: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 4

2003-1 마이크로프로세서

SCON 레지스터

Serial Port Control Register

Page 5: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 5

2003-1 마이크로프로세서

SCON 레지스터 TI 및 RI 비트

• 각각 1 문자의 송신이 완료되어 송신부가 비거나(empty)

• 1 문자가 수신되어 수신부가 차게 되면 (full) 1 로 세트되어 인터럽트를 발생시키는 플래그

TB8 및 RB8 비트• 모드 2 와 모드 3 의 11 비트 프레임에서 9 번째

데이터 비트를 표시• 모드 1 이고 SM2=0 인 경우 RB8 은 스톱비트

저장 SM0∼SM1 비트는 직렬 포트의 동작 모드를

설정

Page 6: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 6

2003-1 마이크로프로세서

SCON 레지스터

SM2 비트• 1 로 설정하면 모드 2 와 모드 3 에서 9 번째

비트가 RB8=1 로 수신되었을 경우에만 직렬 포트 인 터 럽 트 가 발 생 되 고 RB8=0 인 경 우 에 는 인터럽트가 발생되지 않는다 .

• 모드 1 에서 SM2=1 로 설정하면 데이터 비트에 이어서 스톱 비트가 올바르게 수신된 경우에만 인터럽트가 발생한다 .

예 : MOV SCON, #52H ; 01010010B• SM0 SM1 = 01 : 모드 1, SM2 = 0• REN =1 : receive enable• TI = 1 : transmit interrupt flag

Page 7: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 7

2003-1 마이크로프로세서

PCON 레지스터

Power Control Register

Page 8: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 8

2003-1 마이크로프로세서

PCON 레지스터

보레이트 (baud rate) 발생기로 타이머 1 을 사용하는 경우에는 SMOD 비트를 사용하여 보레이트를 2 배 높게 설정• 직렬 포트의 동작 모드 1∼3 에서 SMOD=0 이면

정상적인 보레이트로 설정되고 ,• SMOD=1 이 면 보 레 이 트 가 2 배 높 은 값 으 로

설정된다 . SMOD0

• 0 이면 SCON.7 비트가 SM0 으로 사용되고 ,• 1 이 면 SCON.7 비 트 가 FE(Framing Error) 로

사용된다 .

Page 9: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 9

2003-1 마이크로프로세서

동작 모드 0 동기식 반이중 (half-duplex) 통신 모드 실제의 직렬 통신에 사용하기보다는 병렬 I/O

확장용으로 사용하기 위한 것 이 모드에서는 TxD 단자가 시프트 클럭으로

사용되고 , RxD 는 직렬 데이터 송신 및 수신 단자로 사용된다 .

송수신 데이터는 항상 8 비트로 구성되고 LSB 부 터 전 송 되 며 , 보 레 이 트 는 시 스 템 클럭의 1/12 로 고정된다 .

Page 10: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 10

2003-1 마이크로프로세서

P.193 그림 8.12

Page 11: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 11

2003-1 마이크로프로세서

동작 모드 0 송신 동작

• SBUF 에 송신 데이터를 라이트함으로써 개시되며 , • 1 머신 사이클 후에 LSB(b0) 부터 전송이 시작된다 . 정확히

1 머신 사이클에 1 비트씩 전송되며 , • MSB 가 송신되고 나면 TI 인터럽트 플래그이 1 로 세트된다 .

수신 동작• REN=1 인 상태에서 수신완료 인터럽트 플래그 RI 를 0 으로

클리어시키면 수신 데이터의 입력이 시작• RxD 단자로 입력되는 수신 데이터의 각 비트는 TxD 단자로

입력되는 동기 시프트 클럭의 상승 에지에서 직렬 포트 내부의 입력 시프트 레지스터에 차례로 저장

• 8 비트의 데이터가 모두 수신되면 시프트 레지스터의 데이터는 SBUF 로 옮겨지고 수신 인터럽트 플래그 RI 가 1로 세트된다 .

Page 12: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 12

2003-1 마이크로프로세서

그림 8.13 8.14

Page 13: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 13

2003-1 마이크로프로세서

Page 14: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 14

2003-1 마이크로프로세서

동작 모드 1

가장 널리 사용되는 표준적인 10 비트 프레임(1 스타트 비트 , 8 데이터 비트 , 1 스톱 비트 ) 의 비동기 전송 모드

보 레 이 트 는 타 이 머 1 이 나 타 이 머 2 를 사용하여 사용자가 임의로 설정

타이머 2 를 사용하는 경우에는 송신 클럭과 수신 클럭을 각각 독립적으로 인에이블시킬 수 있으므로 이들 중에 하나는 타이머 1 을 사 용 하 고 다 른 하 나 는 타 이 머 2 를 사용하도록 설정할 수도 있다 .

Page 15: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 15

2003-1 마이크로프로세서

그림 8.16

Page 16: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 16

2003-1 마이크로프로세서

동작 모드 1 송신 동작

• SBUF 에 송신 데이터를 라이트함으로써 개시• SBUF 를 라이트하면 즉시 송신 시프트 레지스터의

9 번째 비트에 1 이 로드되며 , 이것은 수신측에서 스톱 비트로 작용한다 .

• 송 신 측 에 서 9 번 째 비 트 인 스 톱 비 트 (1) 를 전 송 하 기 시 작 하 는 순 간 에 TI 를 세 트 시 켜 송신완료 인터럽트를 발생한다 .

수신 동작• REN=1 인 상태에서 RxD 신호의 하강 에지가

입력되면 시작• 스타트 비트 (0) 가 올바르게 검출되었으면 이후 8

비 트 의 데 이 터 D0∼D7 을 수 신 하 여 시 프 트 레지스터에 저장

Page 17: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 17

2003-1 마이크로프로세서

동작 모드 1

• 마지막으로 9 번째의 스톱 비트가 1 로 올바르게 수 신 되 었 으 면 RI=0 인 조 건 에 서 RI 를 1 로 세트시켜 수신 인터럽트를 발생한다

• 만약 SCON 레지스터에서 SM2=0 이면 스톱 비트의 수신에 관계없이 RI=0 이기만 하면 RI 가 세트된다 .

• 수신된 스톱 비트는 SCON 레지스터의 RB8 에 저 장 되 며 , 8 개 의 데 이 터 비 트 는 시 프 트 레지스터에서 SBUF 로 로드된다 .

Page 18: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 18

2003-1 마이크로프로세서

Page 19: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 19

2003-1 마이크로프로세서

동작 모드 2 와 3 11 비트 프레임 (1 스타트 비트 , 8 데이터 비트 ,

프로그래머블한 9 번째 비트 , 1 스톱 비트 ) 의 비동기 전송 모드

모드 3 과 함께 주로 멀티프로세서 시스템에서 프로세서 사이의 통신에 사용

9 번 째 비 트 는 SCON 레 지 스 터 의 TB8 비 트 에 라이트함으로써 송신되며 , 수신된 9 번째 비트는 SCON 레지스터의 RB8 비트에 저장된다 .

SCON 레 지 스 터 에 서 SM2=1 로 설 정 하 면 RB8 비 트 가 1 로 수 신 되 었 을 경 우 에 만 직 렬 포 트 인 터 럽 트 가 발 생 되 고 0 으 로 수 신 된 경 우 에 는 인터럽트가 발생되지 않는다 .

Page 20: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 20

2003-1 마이크로프로세서

동작 모드 2 와 3

모드 3 은 모드 2 와 동일한 동작을 수행하며 단지 보레이트만이 다르다 .• 모드 2 에서는 보레이트를 시스템 클럭의 1/32

이나 1/64 로 설정할 수 있는데 비하여 , • 모드 3 에서는 보레이트를 타이머 1 이나 타이머

2 를 사용하여 임의로 설정할 수 있다 .

Page 21: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 21

2003-1 마이크로프로세서

보레이트 (Baud rate) 의 발생

직렬 포트의 동작 모드 1 과 3• 타 이 머 1 을 사 용 하 는 방 법 과 타 이 머 2 를

사용하는 방법이 있다 .• 이중에서 타이머 1 을 사용하는 경우에는 타이머

1 을 모 드 2(8 비 트 auto-reload mode) 로 설정하여 분주비를 임의로 지정

• 타이머 2 를 사용하여 보레이트를 발생시키는 경우킬 수도 있다 . 이때는 타이머 2 의 16 비트 보 레 이 트 발 생 기 모 드 를 사 용 하 므 로 시 스 템 클 럭 이 11.0592MHz 가 아 니 더 라 도 상 당 히 정확한 보레이트를 발생시킬 수 있다 .

Page 22: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 22

2003-1 마이크로프로세서

보레이트 (Baud rate) 의 발생

Page 23: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 23

2003-1 마이크로프로세서

보레이트 (Baud rate) 의 발생

Page 24: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 24

2003-1 마이크로프로세서

보레이트 발생 방법

Page 25: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 25

2003-1 마이크로프로세서

보레이트 발생 방법

Page 26: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 26

2003-1 마이크로프로세서

프로그램 예 1 직렬포트를 통해 타이머 1 을 사용한 9600 bps

속도의 모드 1 동작으로 데이터를 송수신하는 어셈블리 프로그램• 데이터 송수신은 인터립트가 아닌 폴링방식 사용• 수신 ( 입력 ) 된 문자 다시 송신 ( 출력 ): echo print• 소문자를 대문자로 송신 : 수신문자 -32

모드 1 송신 MOV SCON, #52H

SM0 SM1 = 01 : 모드 1, SM2 = 0REN =1 : receive enableTI = 1 : transmit interrupt flag, 초기 무한루프 탈출

Page 27: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 27

2003-1 마이크로프로세서

프로그램 예 1 타이머 1, 모드 2 사용하여 9600 bps 보레이트 설정

MOV TMOD, #20H ; Timer 1, Mode 2MOV TH1, #0FDH ; 9600 bpsMOV TL1, #0FDHMOV PCON, #0 ; disable double baud rateSETB TR1

문자 버퍼 (30H) 에 수신RXD_CH:

JNB RI, RXD_CH ; receive ready?CLR RIMOV 30H, SBUF ; receive

Page 28: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 28

2003-1 마이크로프로세서

프로그램 예 1

버퍼 (30H) 문자 송신 TXD_CH:

JNB TI, TXD_CH ; transmit ready? CLR TI MOV SBUF, 30H ; transmit

Page 29: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 29

2003-1 마이크로프로세서

프로그램 예 1CSEG AT 8000H

; main programCALL SER_INITCLR C

LOOP:CALL GETCHCALL PUTCH ; echo printMOV A, 30HSUBB A, #32 ; conversion from lower to upper characterMOV 30H, ACALL PUTCHJMP LOOP

Page 30: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 30

2003-1 마이크로프로세서

프로그램 예 1; serial port initializarionSER_INIT:

MOV TMOD, #20H ; Timer 1, Mode 2MOV TH1, #0FDH ; 9600 bps

MOV TL1, #0FDHMOV PCON, #0 ; disable double baud rateMOV SCON, #52H ; TI=1, REN=1, Mode 1SETB TR1 ; start countRET

; get character from serial portGETCH: RXD_CH:

JNB RI, RXD_CH ; receive ready?CLR RIMOV 30H, SBUF ; receiveRET

Page 31: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 31

2003-1 마이크로프로세서

프로그램 예 1; put character to serial portPUTCH: TXD_CH:

JNB TI, TXD_CH ; transmit ready?CLR TIMOV SBUF, 30H ; transmitRET

END

Page 32: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 32

2003-1 마이크로프로세서

Page 33: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 33

2003-1 마이크로프로세서

Page 34: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 34

2003-1 마이크로프로세서

Page 35: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 35

2003-1 마이크로프로세서

Page 36: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 36

2003-1 마이크로프로세서

Page 37: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 37

2003-1 마이크로프로세서

Page 38: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 38

2003-1 마이크로프로세서

Page 39: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 39

2003-1 마이크로프로세서

Page 40: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 40

2003-1 마이크로프로세서

Page 41: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 41

2003-1 마이크로프로세서

Page 42: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 42

2003-1 마이크로프로세서

Page 43: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 43

2003-1 마이크로프로세서

프로그램 예 2

직렬포트를 통해 타이머 1 을 사용한 9600 bps 속도의 모드 1 동작으로 데이터를 송수신하는 C 프로그램• 데이터 송수신은 인터립트가 아닌 폴링방식 사용• 수신 ( 입력 ) 된 문자 다시 송신 ( 출력 ): echo print• 소문자를 대문자로 송신 : 수신문자 -32

Page 44: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 44

2003-1 마이크로프로세서

프로그램 예 2#include <reg52.h>void serial_init(void){ TMOD = 0x20; // Timer 1, Mode 2 TH1 = TL1 = 0xfd; // 9600 bps PCON = 0x00; // disable double baud rate SCON = 0x52; // TI=1, REN=1, Mode 1 TR1 = 1; // start count}void putch(char ch){ while (!TI) ; SBUF = ch; TI = 0;}

Page 45: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 45

2003-1 마이크로프로세서

프로그램 예 2

char getch(void){ char ch; while (!RI) ; ch = SBUF; RI = 0; return ch;}

Page 46: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 46

2003-1 마이크로프로세서

프로그램 예 2main(){ char c;

serial_init();

while (1) { c = getch();

putch(c); // echo print putch(c-32); }}

Page 47: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 47

2003-1 마이크로프로세서

Page 48: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 48

2003-1 마이크로프로세서

Page 49: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 49

2003-1 마이크로프로세서

Page 50: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 50

2003-1 마이크로프로세서

Page 51: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 51

2003-1 마이크로프로세서

Page 52: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 52

2003-1 마이크로프로세서

프로그램 3

직렬 인터럽트를 사용하여 직렬포트로 19200 bps 속도로 “ Soonchunhyang University Information Technology” 문자열을 출력하는 C 프로그램

Page 53: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 53

2003-1 마이크로프로세서

프로그램 3#include <reg52.h>char buffer[] = "Soonchunhyang University Information Technology\r\n";unsigned char i = 0;void delay(unsigned int k) // delay function { while (k--) ;}void serial_service(void) interrupt 4 // 8*n + 3{ SBUF = buffer[i]; delay(50); TI = 0; if (buffer[i++] =='\0') i = 0;}

Page 54: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 54

2003-1 마이크로프로세서

프로그램 3void serial_init(void){ EA = 0; TMOD = 0x20; // Timer 1, Mode 2 TH1 = 0xfd; // 19200 bps PCON = 0x80; // enable double baud rate SCON = 0x52; // TI=1, REN=1, Mode 1 ES = 1; EA = 1; TR1 = 1; // start count}main(){ serial_init(); while (1) ;}

Page 55: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 55

2003-1 마이크로프로세서

Page 56: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 56

2003-1 마이크로프로세서

Page 57: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 57

2003-1 마이크로프로세서

Page 58: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 58

2003-1 마이크로프로세서

Page 59: 8051  직렬포트

순천향대학교 정보기술공학부 이 상 정 59

2003-1 마이크로프로세서

프로그램 과제

프로그램 1 – 3 까지 작성하고 실행하여라 프로그램 2 의 C 프로그램을 수정하여 다음과

같이 변환하여 출력하는 프로그램을 작성하라• 소문자 -> 대문자 변환• 대문자 -> 소문자 변환• 기타 -> 변환하지 않음