마하전자기술연구소 LOGO

제품검색 고객센터053-604-2355
기술자료실

Home > 기술자료실 기술자료실

제 목 13) USA RT의 사용법
첨부파일


USA RT의 사용법 


【USA RT란? 】

USA RT란,Universal Synchronous Asynchronous Receiver Transmitter
약어로, 문자 그대로 범용의 동기식과 비동기식의 시리얼 송수신용의 기능을 가져
있습니다.
여기에서는, 가장 많은 사용법인, 비동기식(조보동기식이라고도 한다)에서의 사용법
(을)를 설명합니다.

시리얼 통신이나 조보동기식의 설명은,별페이지(을)를 참조해 주세요.

【USA RT의 구성】

USA RT기능의 구성 블록은 간단하게 가리키면(자) 밑그림과 같이 되어 있습니다.
이 그림과 같이 송신과 수신이 각각 독립하고 있으므로, 전이중 통신이 가능
되고 있습니다. 즉, 언제라도 동시에 송신과 수신을 할 수 있다고 하는 것입니다.
그러나, 이것에는 송수신의 프로그램측도 대응시키지 않으면 가능하다고는 안되어,
이것을 가능과 하기 위해서는새치기를 사용할 필요가 있습니다.

그러나, 여기서의 설명은 새치기를 사용하지 않고, 프로그램으로 센스 하는 사용법입니다
의로, 완전한 전이중은 아니고, 반이중 통신이 되고 있습니다. 정확하게 말하면(자),
수신은 상시 가능합니다만, 연속 송신은 전이중에서는 할 수 없습니다.


【USA RT의 동작】

윗 그림으로 USA RT의 동작을 설명합니다.

(1) 송신 동작
 송신의 경우에는, 우선 TRMT나 TXIF의 스테이터스로 레이디 상태를 확인해
 송신 Busy가 아니면, 송신하는 데이터를 TXREG 레지스터에 프로그램으로
 기입합니다. (MOV 명령) 직후에 TXIF가 Busy 상태로 됩니다.
 후는 자동적으로 데이터가 TXREG 레지스터로부터 TSR 레지스터의 전송 되어
 TSR 레지스터로부터 시리얼에 변환되어 TX핀에 순서 좋게 출력됩니다.
 이 전송 직후에는 TXIF가 레이디가 되어, 다음의 데이터를 TXREG 레지스터에
 세트 하는 것이 가능해집니다만, 실제로 출력되는 것은, 앞에 보냈다
 데이터가 출력 완료한 후가 됩니다.
 여기서, 시리얼로 출력할 때의 출력 펄스폭이, SPBRG에 세트 되었다
 baud rate를 결정하는 값에 따라 결정되고 제어됩니다.
 시리얼 출력이 완료하면(자) TRMT가 레이디 상태로 돌아와, 다음의 데이터 송신이
 가능해집니다

(2) 수신 동작
 수신의 경우에는, RX핀에 입력된 신호를 상시 감시해, 수신 샘플
 그리고, 미리 SPBRG에 세트 된 baud rate에 따라 입력 신호를 산
 프링 해, 우선 시작 비트를 검출하면(자), 그 후에 계속되는 데이터를 RSR
 레지스터에 순서에 담아 갑니다. 그리고 stop bit를 검출하면(자),
 RSR 레지스터로부터 RXREG 레지스터에 전송 합니다.
 이 시점에서, RCIF가 레이디가 되어, 수신 데이터의 준비를 할 수 있던 것을 통지
 . 프로그램에서는, 이 RCIF를 감시해, 레이디가 되면, RXREG
 레지스터로부터 데이터를 읽어들입니다.
 이 RXREG 레지스터는 2 계층의 더블 버퍼가 되고 있으므로, 다음의 다음의
 데이터를 수신 완료하기까지 데이타를 뽑기 시작하면 정상적으로 연속 수신을 할 수 있다
 됩니다. 이 더블 버퍼의 덕분으로, 수신 처리의 시간을 편하게 한다
 일을 할 수 있습니다만, 연속 수신때로는, 1개의 데이터를 수신하는 동안에 처리
 (을)를 완료시키는 것이 필요합니다.

【관련 레지스터의 설정】

USA RT를 조보동기에 사용하는 경우의 설정은 아래와 같이 합니다.
우선 관련하는 레지스터의 일람표는 아래와 같이가 됩니다. 이 레지스터의 존재한다
뱅크가 나뉘고 있으므로 주의가 필요합니다. 특히 송신의 TRMT 스테이터스
(은)는 뱅크 1 측에 있으므로 주의가 필요합니다.

주소

뱅크 0

뱅크 1

기능 개요

0CH

PIR1

  송수신 완료 플래그
18H

RCSTA

TXSTA

스테이터스와 모드 설정
19H

TXREG


SPBRG

송신 레지스터
baud rate 설정
20H

RCREG

  수신 레지스터

(1) TXSTA 레지스터의 상세와 설정
  송신의 동작 모드를 지정하는 레지스터가 TXSTA 레지스터로, 내부 구조는
  밑그림과 같이 되어 있습니다. 밑그림과 같이 보통 조보동기식의 경우에는,
  8 빗트논파리티 (을)를 사용하기 때문에 밑그림과 같은 지정으로 합니다.
  게다가 프로그램 센스 방식에서, 레이디 체크를 할 경우에는, TRMT
  스테이터스를 사용하면(자), 확실히 전의 데이터의 송신이 완료하고 나서 레이디와
  되므로, PIR1 레지스터중의 TXIF 스테이터스를 사용하는 것보다는, 확실한 반이중
  통신으로 할 수가 있습니다.









(2) RCSTA 레지스터의 상세와 설정
  수신의 동작 모드를 지정하는 레지스터가 RCSTA 레지스터로, 내부 구성은
  밑그림과 같이 되어 있습니다. 이 설정도 송신과 같이, 조보동기식의
  경우에는 밑그림과 같은 설정으로 합니다.
  수신의 경우의 레이디 체크는 PIR1 레지스터중의 RCIF 스테이터스로 실시해
  .












(3) SPBRG의 설정 방법법
  통신 속도를 결정하는 것은, SPBRG 레지스터에 의한 baud rate 제네레이터가
  제어하고 있습니다. 이 SPBRG 레지스터에로 설정하는 수치와 baud rate의
  관계는 아래 표와 같이 됩니다. 단, 아래 표는 조보동기식의 경우 뿐입니다.
  동기식의 경우에는 다른 값이 되기 때문에, PIC의 메뉴얼을 참조해
  주세요.

  클락

baud rate

20MHz

16MHz

10MHz

SPBRG
설정치

에러
레이트

SPBRG
설정치

에러
레이트

SPBRG
설정치

에러
레이트

1200

255

1.73

207

0.16

129

0.16

2400

129

0.16

103

0.16

64

0.16

9600

32

-1. 36

25

0.16

15

1.73

19. 2K

15

1.73

12

0.16

7

1.73

76. 8K

3

1.73

----

----

1

1.73

  (주) 에라레이트란, baud rate 주파수의 엇갈림이 많음을%로 나타낸 것으로
     1 프레임내에서의 엇갈림이 됩니다만, 10비트(start stop 맞추어)
     의 프레임에서의 에러 마진은, 1/2비트폭까지의 엇갈림을 허용 하면(자)
     하면, 50%10=5%가 됩니다.

【USA RT의 사용예】

실제로 USA RT를 사용한 예를 설명합니다. 여기에서는, PC의 RS232C의 시리얼
인터페이스와의 접속을 예로 해 구체적인 사용법을 설명합니다.
우선, 이 때문에의 PIC측의 회로도는 밑그림과 같이 합니다. 여기에서는, 필요한 부분
마셔 가리키고 있습니다. 사용한 PIC는 PIC16C73/JP입니다.
RS232C의 인터페이스에 맞추기 위한 레벨 변환에는, 유명한 MAX232
그렇다고 하는 IC를 사용하고 있습니다. 이것에는 최근에는 각사로부터 동일한 기능의 IC가 발매되어
있으므로, 어떤 것에서도 OK입니다. PC측은 DOS/V기이면, COM2 포토에 접속
합니다.



    

【프로그램예】

상기 회로도에서 실제의 통신을 테스트하기 위한 프로그램예를 설명합니다.
이번 테스트에 사용한 프로그램은, 아래와 같은 기능을 갖고 있습니다.

·통신 속도는 19. 2 Kbps로 해, 8 빗트논파리티의 조보동기식으로 한다.

·PC로부터의 데이터 수신을 상시 감시해, 데이터를 수신하면(자) 데이타메모리
 의 뱅크 1측의 96바이트의 영역에 격납한다.
·수신한 데이터가 CR코드(0 D)이면(자), 그 시점에서 데이타메모리에 격납
 하고 있던 데이터를 차례차례 PC 측에 송신한다.
·수신 데이터를 격납하는 시점에서 96바이트를 넘었을 때에는, 그 시점에서의
 데이타메모리의 96바이트의 내용을 모두 PC에 송신한다.
·데이터 송신의 마지막에는, 항상”End of TX”라고 하는 고정 메세지를 부가해
 송신한다.

★USA RT테스트 프로그램 원시 파일


본프로그램예에서는, 통신 처리를 실시할 때의 버퍼의 처리의 취급 방법도 예와
해 넣어 둡니다.
 ·데이터 메모 리에 리어에 격납해 나가는 방법
 ·고정 포맷의 데이터를 송신하는 방법
의 2 종류를 예로서 있습니다.


;*********************************************
;
; USART test program using USART module.
; Test condition is below
;  Mode : Asyncronous transfer mode only
;  Speed: 1200,2400,9600,19Kbps switchable
;  Bit : startx1 datax8 stopx1
;  Not use interrupt
;
;*********************************************
;
   LIST    P=PIC16C73A
   INCLUDE  "P16C73A.INC"

;***********************************
; 변수 정의
; 뱅크 1의 전부(96바이트)를 송수신
; 버퍼로서 사용합니다.
;***********************************
TEMP   EQU  020H    ;work area
POINT  EQU  021H    ;pointer of table

BUFFER  EQU  020H    ;buffer


     ORG  0
;***********************************
; 송수신 모드의 초기화
; 뱅크의 위치에 주의
; Baud rate setting is below
;    Clock 10MHz   20MHz     
;    Baud  SPBRG   SPBRG
;    1200  81H    FFH
;    2400  40H    81H
;    9600  0FH    20H
;    19K   07H    0FH  
;***********************************
INIT
    BSF   STATUS, RP0  ;뱅크 1에 전환
    MOVLW  081H     ;set portc
    MOVWF  TRISC     ;PORTC
;
    MOVLW  020H     ;Set Async mode 
    MOVWF  TXSTA     ;Set TX mode
    MOVLW  07H      ;Set Baud Rate 19Kbps
    MOVWF  SPBRG     ;Set BRG
    BCF   STATUS, RP0  ;뱅크 0에 되돌린다
    MOVLW  090H     ;Set Async mode 
    MOVWF  RCSTA     ;Set RX mode

;****************************************
; Main routine
; 데이터를 수신해 버퍼에 격납한다.
; 만약 데이터가 CR라면 지금까지의 데이터를
; 송신 출력한다.
; 또 버퍼가 가득하게 되었을 때도 송신한다.
;****************************************
MAIN
;****** Wait Receive data ******
    MOVLW  0A0H     ;set buffer top address
    MOVWF  FSR      ;간접 주소 포인터 초기화
LPRCV
    BCF   PORTC, 5    ;LED on
;
    BTFSS  PIR1, RCIF   ;check receive end flag
    GOTO  LPRCV
;
    BSF   PORTC, 5    ;LED off
;**** error check ****
    BTFSC  RCSTA, FERR  ;framing error check
    GOTO  FRAME
    BTFSC  RCSTA, OERR  ;overrun error
    GOTO  OVER
;***** get data and save *****
;** 간접 애드레싱으로 버퍼에 격납한다 ***
    MOVF  RCREG, W    ;get received data
    MOVWF  INDF     ;save in buffer
    SUBLW  0DH      ;CR code?
    BTFSC  STATUS, Z   ;data=CR?
    GOTO  SEND     ;to transfer
;**** if buffer full then end *****
CHKBF
    INCF  FSR, F     ;pointer+1
    BTFSS  STATUS, Z   ;buffer full?
    GOTO  LPRCV
    GOTO  SEND     ;full then end 


;******** ERROR PROCES ******
;**** framing error
FRAME
    MOVF  RCREG, W    ;dumy input & reset FERR
    MOVLW  '? '
    MOVWF  INDF     ;save ?
    BTFSS  RCSTA, OERR  ;check more error?
    GOTO  CHKBF     ;to next
;***** overrun error
OVER
    BCF   RCSTA, CREN  ;reset OERR
    BSF   RCSTA, CREN
    MOVLW  '? '
    MOVWF  INDF     ;save ?
    GOTO  CHKBF     ;to next

;*************************
;****** Send answer ******
SEND
    MOVLW  0A0H     ;reset pointer
    MOVWF  FSR
LPSD
    BCF   PORTC, 5   ;LED on 
    MOVF   INDF, W    ;get data
    CALL   TX      ;send execute
    BSF   PORTC, 5   ;LED off
    MOVF   INDF, W    ;re-get data
    SUBLW  0DH     ;CR?
    BTFSC  STATUS, Z   ;end check
    GOTO   TEXT     ;end text send
;**** if buffer end then end *****
    INCF   FSR, F    ;pointer+1
    BTFSS  STATUS, Z   ;buffer end?
    GOTO   LPSD     ;loop
    GOTO   TEXT     ;end

;************ text send process  *****
;** 고정 데이터의 송신예 ****
TEXT
    CLRF   POINT    ;reset table pointer
LPTEX
    MOVF   POINT, W   ;get pointer offset
    ANDLW  0FH     ;limit upper
    CALL   TABLE    ;get text data
    ADDLW  0      ;test zero?
    BTFSC  STATUS, Z   ;end zero?
    GOTO   MAIN
    CALL   TX      ;send
    INCF   POINT, F   ;pointer+1
    GOTO   LPTEX
;***** text data table *****
;** RETLW 명령으로 테이블을 작성 ****
TABLE
    ADDWF  PCL, F    ;PC+offset
    DT    "End of TX", 0,0,0,0,0,0,0,0


;**************************************
; Transmit subroutine
; 레이디 체크는 송신 레지스터하늘에서 확인
; 즉, TRMT=1으로 레이디와 판정
; TXSTA가 있는 뱅크에 주의
;**************************************
TX
    MOVWF  TEMP     ;data save
    BSF   STATUS, RP0  ;switch to Bank1
LPTX
    BTFSS  TXSTA, TRMT  ;ready check
    GOTO   LPTX
;
    BCF   STATUS, RP0  ;return to Bank0
    MOVF   TEMP, W    ;get data
    MOVWF  TXREG     ;start send
    RETURN

    END


목록보기

www.1chip.com, www.1chip.co.kr
www.micom114.com
자료실바로가기

대구광역시 북구 산격2동 1629 산업용재관 10동 13호 (2층) / Tel. 053-604-2355 / Fax. 053-383-2354 / E-mail. maha@paran.com