1 / 59

8051 직렬포트

8051 직렬포트. 순천향대학교 정보기술공학부 이상정. 개 요. 4 가지의 동작 모드를 갖는 전이중 (full-duplex) 통신방식 의 직렬 포트 송신부와 수신부는 각각 2 중 버퍼 (double buffer) 로 구성 수신의 경우 CPU 가 먼저 수신된 데이터를 읽어가기 전에라도 다음 데이터를 수신하는 동작이 가능 송신 및 수신 데이터 버퍼로는 SBUF 가 사용 송신시에는 CPU 가 송신할 데이터를 SBUF 에 라이트하면 이는 곧바로 직렬 포트의 송신 레지스터에 로드되고 ,

cora-bailey
Download Presentation

8051 직렬포트

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 8051 직렬포트 순천향대학교 정보기술공학부 이상정

  2. 개 요 • 4가지의 동작 모드를 갖는 전이중(full-duplex) 통신방식의 직렬 포트 • 송신부와 수신부는 각각 2중 버퍼(double buffer)로 구성 • 수신의 경우 CPU가 먼저 수신된 데이터를 읽어가기 전에라도 다음 데이터를 수신하는 동작이 가능 • 송신 및 수신 데이터 버퍼로는 SBUF가 사용 • 송신시에는 CPU가 송신할 데이터를 SBUF에 라이트하면 이는 곧바로 직렬 포트의 송신 레지스터에 로드되고, • CPU가 SBUF를 리드하면 수신 레지스터가 읽혀진다. 순천향대학교 정보기술공학부 이 상 정 2

  3. P.190 그림 8.10 순천향대학교 정보기술공학부 이 상 정 3

  4. SCON 레지스터 • Serial Port Control Register 순천향대학교 정보기술공학부 이 상 정 4

  5. SCON 레지스터 • TI 및 RI 비트 • 각각 1문자의 송신이 완료되어 송신부가 비거나(empty) • 1문자가 수신되어 수신부가 차게 되면(full) 1로 세트되어 인터럽트를 발생시키는 플래그 • TB8 및 RB8 비트 • 모드 2와 모드 3의 11비트 프레임에서 9번째 데이터 비트를 표시 • 모드 1이고 SM2=0인 경우 RB8은 스톱비트 저장 • SM0∼SM1 비트는 직렬 포트의 동작 모드를 설정 순천향대학교 정보기술공학부 이 상 정 5

  6. 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 순천향대학교 정보기술공학부 이 상 정 6

  7. PCON 레지스터 • Power Control Register 순천향대학교 정보기술공학부 이 상 정 7

  8. PCON 레지스터 • 보레이트(baud rate) 발생기로 타이머 1을 사용하는 경우에는 SMOD 비트를 사용하여 보레이트를 2배 높게 설정 • 직렬 포트의 동작 모드 1∼3에서 SMOD=0이면 정상적인 보레이트로 설정되고, • SMOD=1이면 보레이트가 2배 높은 값으로 설정된다. • SMOD0 • 0이면 SCON.7 비트가 SM0으로 사용되고, • 1이면 SCON.7 비트가 FE(Framing Error)로 사용된다. 순천향대학교 정보기술공학부 이 상 정 8

  9. 동작 모드 0 • 동기식 반이중(half-duplex)통신 모드 • 실제의 직렬 통신에 사용하기보다는 병렬 I/O 확장용으로 사용하기 위한 것 • 이 모드에서는 TxD 단자가 시프트 클럭으로 사용되고, RxD는 직렬 데이터 송신 및 수신 단자로 사용된다. • 송수신 데이터는 항상 8비트로 구성되고 LSB부터 전송되며, 보레이트는 시스템 클럭의 1/12로 고정된다. 순천향대학교 정보기술공학부 이 상 정 9

  10. P.193 그림 8.12 순천향대학교 정보기술공학부 이 상 정 10

  11. 동작 모드 0 • 송신 동작 • SBUF에 송신 데이터를 라이트함으로써 개시되며, • 1머신 사이클 후에 LSB(b0)부터 전송이 시작된다. 정확히 1머신 사이클에 1비트씩 전송되며, • MSB가 송신되고 나면 TI 인터럽트 플래그이 1로 세트된다. • 수신 동작 • REN=1인 상태에서 수신완료 인터럽트 플래그 RI를 0으로 클리어시키면 수신 데이터의 입력이 시작 • RxD 단자로 입력되는 수신 데이터의 각 비트는 TxD 단자로 입력되는 동기 시프트 클럭의 상승 에지에서 직렬 포트 내부의 입력 시프트 레지스터에 차례로 저장 • 8비트의 데이터가 모두 수신되면 시프트 레지스터의 데이터는 SBUF로 옮겨지고 수신 인터럽트 플래그 RI가 1로 세트된다. 순천향대학교 정보기술공학부 이 상 정 11

  12. 그림 8.13 8.14 순천향대학교 정보기술공학부 이 상 정 12

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

  14. 동작 모드 1 • 가장 널리 사용되는 표준적인 10비트 프레임(1 스타트 비트, 8 데이터 비트, 1 스톱 비트)의 비동기 전송 모드 • 보레이트는 타이머 1이나 타이머 2를 사용하여 사용자가 임의로 설정 • 타이머 2를 사용하는 경우에는 송신 클럭과 수신 클럭을 각각 독립적으로 인에이블시킬 수 있으므로 이들 중에 하나는 타이머 1을 사용하고 다른 하나는 타이머 2를 사용하도록 설정할 수도 있다. 순천향대학교 정보기술공학부 이 상 정 14

  15. 그림 8.16 순천향대학교 정보기술공학부 이 상 정 15

  16. 동작 모드 1 • 송신 동작 • SBUF에 송신 데이터를 라이트함으로써 개시 • SBUF를 라이트하면 즉시 송신 시프트 레지스터의 9번째 비트에 1이 로드되며, 이것은 수신측에서 스톱 비트로 작용한다. • 송신측에서 9번째 비트인 스톱 비트(1)를 전송하기 시작하는 순간에 TI를 세트시켜 송신완료 인터럽트를 발생한다. • 수신 동작 • REN=1인 상태에서 RxD 신호의 하강 에지가 입력되면 시작 • 스타트 비트(0)가 올바르게 검출되었으면 이후 8비트의 데이터 D0∼D7을 수신하여 시프트 레지스터에 저장 순천향대학교 정보기술공학부 이 상 정 16

  17. 동작 모드 1 • 마지막으로 9번째의 스톱 비트가 1로 올바르게 수신되었으면 RI=0인 조건에서 RI를 1로 세트시켜 수신 인터럽트를 발생한다 • 만약 SCON 레지스터에서 SM2=0이면 스톱 비트의 수신에 관계없이 RI=0이기만 하면 RI가 세트된다. • 수신된 스톱 비트는 SCON 레지스터의 RB8에 저장되며, 8개의 데이터 비트는 시프트 레지스터에서 SBUF로 로드된다. 순천향대학교 정보기술공학부 이 상 정 17

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

  19. 동작 모드 2와 3 • 11비트 프레임(1 스타트 비트, 8 데이터 비트, 프로그래머블한 9번째 비트, 1 스톱 비트)의 비동기 전송 모드 • 모드 3과 함께 주로 멀티프로세서 시스템에서 프로세서 사이의 통신에 사용 • 9번째 비트는 SCON 레지스터의 TB8 비트에 라이트함으로써 송신되며, 수신된 9번째 비트는 SCON 레지스터의 RB8 비트에 저장된다. • SCON 레지스터에서 SM2=1로 설정하면 RB8 비트가 1로 수신되었을 경우에만 직렬 포트 인터럽트가 발생되고 0으로 수신된 경우에는 인터럽트가 발생되지 않는다. 순천향대학교 정보기술공학부 이 상 정 19

  20. 동작 모드 2와 3 • 모드 3은 모드 2와 동일한 동작을 수행하며 단지 보레이트만이 다르다. • 모드 2에서는 보레이트를 시스템 클럭의 1/32이나 1/64로 설정할 수 있는데 비하여, • 모드 3에서는 보레이트를 타이머 1이나 타이머 2를 사용하여 임의로 설정할 수 있다. 순천향대학교 정보기술공학부 이 상 정 20

  21. 보레이트(Baud rate)의 발생 • 직렬 포트의 동작 모드 1과 3 • 타이머 1을 사용하는 방법과 타이머 2를 사용하는 방법이 있다. • 이중에서 타이머 1을 사용하는 경우에는 타이머 1을 모드 2(8비트 auto-reload mode)로 설정하여 분주비를 임의로 지정 • 타이머2를 사용하여 보레이트를 발생시키는 경우킬 수도 있다. 이때는 타이머 2의 16비트 보레이트 발생기 모드를 사용하므로 시스템 클럭이 11.0592MHz가 아니더라도 상당히 정확한 보레이트를 발생시킬 수 있다. 순천향대학교 정보기술공학부 이 상 정 21

  22. 보레이트(Baud rate)의 발생 순천향대학교 정보기술공학부 이 상 정 22

  23. 보레이트(Baud rate)의 발생 순천향대학교 정보기술공학부 이 상 정 23

  24. 보레이트 발생 방법 순천향대학교 정보기술공학부 이 상 정 24

  25. 보레이트 발생 방법 순천향대학교 정보기술공학부 이 상 정 25

  26. 프로그램 예 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, 초기 무한루프 탈출 순천향대학교 정보기술공학부 이 상 정 26

  27. 프로그램 예 1 • 타이머1, 모드 2 사용하여 9600 bps 보레이트 설정 MOV TMOD, #20H ; Timer 1, Mode 2 MOV TH1, #0FDH ; 9600 bps MOV TL1, #0FDH MOV PCON, #0 ; disable double baud rate SETB TR1 • 문자 버퍼(30H)에 수신 RXD_CH: JNB RI, RXD_CH ; receive ready? CLR RI MOV 30H, SBUF ; receive 순천향대학교 정보기술공학부 이 상 정 27

  28. 프로그램 예 1 • 버퍼(30H) 문자 송신 TXD_CH: JNB TI, TXD_CH ; transmit ready? CLR TI MOV SBUF, 30H ; transmit 순천향대학교 정보기술공학부 이 상 정 28

  29. 프로그램 예 1 CSEG AT 8000H ; main program CALL SER_INIT CLR C LOOP: CALL GETCH CALL PUTCH ; echo print MOV A, 30H SUBB A, #32 ; conversion from lower to upper character MOV 30H, A CALL PUTCH JMP LOOP 순천향대학교 정보기술공학부 이 상 정 29

  30. 프로그램 예 1 ; serial port initializarion SER_INIT: MOV TMOD, #20H ; Timer 1, Mode 2 MOV TH1, #0FDH ; 9600 bps MOV TL1, #0FDH MOV PCON, #0 ; disable double baud rate MOV SCON, #52H ; TI=1, REN=1, Mode 1 SETB TR1 ; start count RET ; get character from serial port GETCH: RXD_CH: JNB RI, RXD_CH ; receive ready? CLR RI MOV 30H, SBUF ; receive RET 순천향대학교 정보기술공학부 이 상 정 30

  31. 프로그램 예 1 ; put character to serial port PUTCH: TXD_CH: JNB TI, TXD_CH ; transmit ready? CLR TI MOV SBUF, 30H ; transmit RET END 순천향대학교 정보기술공학부 이 상 정 31

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

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

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

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

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

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

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

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

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

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

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

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

  44. 프로그램 예 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; } 순천향대학교 정보기술공학부 이 상 정 44

  45. 프로그램 예 2 char getch(void) { char ch; while (!RI) ; ch = SBUF; RI = 0; return ch; } 순천향대학교 정보기술공학부 이 상 정 45

  46. 프로그램 예 2 main() { char c; serial_init(); while (1) { c = getch(); putch(c); // echo print putch(c-32); } } 순천향대학교 정보기술공학부 이 상 정 46

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

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

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

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

More Related