회원가입 ID/PW 찾기

하드웨어 설계에 관련한 공개 강좌를 게재하는 공간입니다.
운영진에 의해 강좌글은 편집되며, 공익을 위한 게시글은 '하드웨어 강좌'란으로 이동될 수 있습니다.

콘텐츠 수 7

제5장 시리얼(Serial) 포트

8051 어셈블리 강좌(by 허인교수님) 구매수 0 조회 수 3769 2012.04.07 19:13:48
판매자 아크마 판매 납포인트 무료 평점 0점 / 총 0명 참여

5. 시리얼(Serial) 포트

 

 

1. 시리얼 포트

Serial 통신은 하나의 신호선을 사용해서 데이터를 비트 단위로 보내는 방식

 

  8비트 UART(Universal Asynchronous Receiver/Transmitter)

 

clip_image001[4].jpg

 

 

Serial 통신 interface 통신 규격(RS-232C, RS-422, RS-423)

 

clip_image002[4].jpg

 

  - Serial 통신 이점 : 적은 수의 통신 라인과 먼 거리 전송

  - Serial 통신 전송 방식

    full duplex(동시 양방향 전송 방식) - 8051

    half duplex(서로 다른 시간 양방향 전송 방식) - 무전기

    full duplex(단방향 전송 방식) - 라디오

  - 속도

    bps(bits per second) : 1초당 전송 비트의 수

    baud rate : 1초당 전송되는 변조된 신호의 수

    * 8051에서는 하나의 비트가 하나의 신호이므로 같은 의미

 

2. 시리얼 포트 레지스터

2.1 SBUF(Serial data BUFfer) 

ㅇ 송신할 데이터와 수신할 데이터를 일시적으로 저장하는 레지스터

ㅇ 이중 구조(같은 이름, 같은 주소) ; 송신용 SBUF, 수신용 SBUF

* 그림5-1 참조

 

2.2 SCON(Serial port CONtrol register)

b7

b6

b5

b4

b3

b2

b1

b0

 

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

ㅇ 비트별 제어 가능

     b7(SM0), b6(SM1)은 모드 선택 비트

SM0  SM1   모드      기능 설명            보오 레이트  

0      0      0    Shift Register   고정 (발진 주파수÷12)    

0      1      1    8bit UART      가변 (타이머에의해 설정)

1      0      2    9bit UART      고정(발진 주파수÷32, 또는 ÷64)  

1      1      3    9bit UART      가변 (타이머에의해 설정)

 

SM2 : 시리얼 포트가 모드2,3일 때 멀티 프로세서 통신을 가능하게 한다.

          이 비트를 1로 하면, 수신 데이터의 9번째 비트가 1이면 데이터 수신,

                               수신 데이터의 9번째 비트가 0이면 데이터 무시

 

REN : 수신 가능 비트, 수신하기 위해서는 1로 설정

 

TB8 : 모드2,3에서 송신 데이터의 9번째 비트를 소프트웨어에 의해 제어

          (1로 설정하였을 때는 9번째 데이터 비트가 1인 정보를 송신하고,

           0으로 설정하였을 때는 9번째 데이터 비트가 0인 정보를 송신함)  

 

RB8 : 모드2,3에서 수신 데이터의 9번째 비트를 받음

            

TI : 송신 인터럽트 플래그, 문자 송신의 끝에서 1로 설정,

        소프트웨어에 의해 클리어 되어야 함

 

RI : 수신 인터럽트 플래그, 문자 수신의 끝에서 1로 설정,

        소프트웨어에 의해 클리어 되어야 함

 

2.3 SMOD(PCON.7)

2배의 보오 레이트 플래그

SMOD1로 하면 보오 레이트가 2

3. 동작 모드

3.1 모드0(8비트 쉬프트 레지스터) 

ㅇ 동기식, 8데이터, 보오 레이트 : OSC/12

TXD : 동기 CLOCK 신호, RXD : 데이터 입/출력

 

ㅇ 송신

  - 그림5-2 참조

  - SBUF에 데이터 넣음 SBUF의 데이터가 LSB부터 RXD 단자로 차례로 출력 TI 세트 TI를 소프트웨어적으로 클리어

 

ㅇ 수신

  - 그림5-3 참조

  - REN=1, RI=0 이면 데이터 입력 시작 데이터를 Serial Port 내부의 input shift register로 순차적으로 저장 입력이 완료되면 SBUF로 저장 RI 세트

     RI를 소프트웨어적으로 클리어

 

3.2 모드1,2,3 

ㅇ 모드1 : 비동기식, 8 데이터 UART, 보오 레이트는 타이머에 의해 가변

          (8 데이터 UART : 시작 비트, 8 비트의 데이터, 종료 비트)

ㅇ 모드2 : 비동기식, 9 데이터 UART, 보오 레이트는 OSC/32 또는 OSC/64

          (9 데이터 UART : 시작 비트, 8 비트의 데이터, 9번째 비트, 종료 비트)

ㅇ 모드3 : 비동기식, 9 데이터 UART, 보오 레이트는 타이머에 의해 가변

          (9 데이터 UART : 시작 비트, 8 비트의 데이터, 9번째 비트, 종료 비트)

 

TXD : 송신 신호, RXD : 수신 신호

 

ㅇ 송신

  - 그림5-6 참조

  - 송신 데이터를 SBUF에 데이터 넣음 TXD 단자로 자동으로 송신(시작 비트의 송신은 SBUF로 데이터를 써넣은 명령이 완료된 시점에서 시작) TI 세트(9번째(모드1) 또는 10번째(모드2,3)의 데이터를 송신할 때에 세트) TI를 소프트웨어적으로 클리어

 

ㅇ 수신

  -  REN=1, RI=0 이면 데이터 입력 준비 수신은 RXD 1-0 전이에 의해 시작, 모든 데이터가 Serial Port 내부의 input shift register로 순차적으로 저장   9번째 비트(또는 종료 비트) SCON RB8에 실림 SBUF 8 데이터 비트가 실림 RI 세트 RI를 소프트웨어적으로 클리어

  

 

ㅇ 모드별 구조 (보오 레이트)

clip_image003[6].jpg

 

4. 시리얼 포트 레지스터의 초기화 및 접근

4.1 수신 가능 

ㅇ 수신을 위해서는 REN 플래그를 1로 설정

  - SETB REN

  - MOV SCON, #xxx1xxxxB

 

4.1 9번째 데이터 비트 

ㅇ 모드2,3에서 송신되는 9번째 데이터 비트는 TB8에 실림,

   수신되는 9번째 데이터 비트는 RB8에 위치

9번째 데이터 비트는 다중 프로세서 통신에 중요한 역할

 

4.3 패리티 비트 추가

PSW P비트는 짝수 패리티 설정

9번째 데이터 비트에 짝수 패리티 추가

    MOV C, P

    MOV TB8, C

    MOV SBUF, A

9번째 데이터 비트에 홀수 패리티 추가

    MOV C, P

    CPL C

    MOV TB8, C

    MOV SBUF, A

ㅇ 모드1에서의 패리티 추가(7비트 ASCII 코드 전송)

    CLR ACC.7

    MOV C, P

    MOV ACC.7, C

    MOV SBUF, A

 

4.4 인터럽트 플래그

TI, RI 플래그는 하드웨어에 의해 1로 설정, 소프트웨어에 의해 0(클리어)

RI는 문자 수신 끝에서 1로 설정, 초기 값은 0으로 설정해야함

   WAIT: JNB RI, WAIT

          CLR RI

          MOV A, SBUF

TI는 문자 송신 끝에서 1로 설정, 따라서 초기 값도 1로 설정해야됨

   WAIT: JNB TI, WAIT

          CLR TI

          MOV SBUF, A

 

 

5. 다중 프로세서 통신

ㅇ 모드2,3에서 SM2 1로 설정하면, 전송 수신 데이터의 9번째 데이터 비트가 1      아니면 인터럽트를 발생하지 않음, 이 기능을 이용하여 다중 프로세서 통신

clip_image004[4].jpg

 

 

순서

(Master)

(Slave) #1

(Slave) #2

(Slave) #n

1

 

2

 

3

 

4

 

5

 

6

 

7

 

TB8=1 설정

 

어드레스 발생

 

-

 

TB8=0 설정

 

데이터 송신

 

데이터 송신 완료

 

-

 

SM2=1 설정

 

인터럽트 발생

 

어드레스 판정(No)

 

SM2=1(그대로)

 

무시

 

-

 

어드레스 발생에 따른 인터럽트 대기

SM2=1 설정

 

인터럽트 발생

 

어드레스 판정(No)

 

SM2=O 설정

 

데이터 수신

 

SM2=1 설정

 

어드레스 발생에 따른 인터럽트 대기

SM2=1 설정

 

인터럽트 발생

 

어드레스 판정(No)

 

SM2=1(그대로)

 

무시

 

-

 

어드레스 발생에 따른 인터럽트 대기

 

6. 시리얼 포트 보오 레이트

ㅇ 모드0 보오 레이트 : OSC/12

   모드1, 3 보오 레이트 : 타이머/카운터1 OV

   모드2 보오 레이트 : OSC/32(SMOD=1)  or  OSC/64(SMOD=0)

SMOD 설정은 비트 제어가 불가하여 읽기-변경-쓰기 명령 필요

     MOV A, PCON

     SETB ACC.7

     MOV PCON, A

 

clip_image003[7].jpg

 

6.1 모드1,3 의 보오 레이트 설정

ㅇ 타이머/카운터1 사용

  - 모드2(8비트 재 적재 모드) 사용

  - TH1에 보오 레이트에 맞는 재적재 값 설정

       

      SMOD = 0인 경우

         clip_image005[4].jpg

 

          예를 들어, 보오 레이트를 1200으로 가정하면

         clip_image006_2.jpg

          타이머/카운터1 OV = 1200 × 32 = 38400

 

          clip_image007_2.jpg

 

          12㎒ 크리스탈 사용할 경우 타이머/카운터1 1클록은 1

             MOV TH1, #-26

             10진수 -26 Hex로 변환하면,

          256 - 26 = 230 = E6H

         MOV TH1, #0E6H


위 내용은 청강대학교 허인 교수님의 고마운 공유정신 발휘로 마이컴박스에 게시 및 수정 업데이트됩니다.
허인 교수님 및 마이컴박스(개정부분)의 동의 없이 무단 복재 및 전재, 재배포 금지합니다.

모르는 것이 무엇인지 스스로 정리하고 질문하는 습관을 가집시다.
무성의/광범위하거나 직접 해보지 않고 올리는 질문은 서로를 피곤하게 합니다.
질문쪽지는 사절이오니 게시판에 글을 남겨주세요. 그래야 다같이 공유할 수 있으니까요.

첨부

search

8051 어셈블리 강좌(by 허인교수님) : (7)
■ 제3장. 명령어 2019-04-17 14:58
ETC
  • 누구도 자기가 하는 말이 다 뜻이 있어서 하는 것이 아니다. 그럼에도 자기가 뜻하는 바를 모두 말하는 사람은 거의 없다.
    - H.애덤즈
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.