본문 바로가기
WORK/Sotfware

RS232 통신

by KANG Stroy 2008. 6. 2.
728x90
728x90

RS232C


표준 인터페이스의 하나로서 데이터를 직렬로 전송하며 대부분의 PC에 기본으로 장착되어 있다. RS232C 인터페이스 규격은 본래 데이터 단말장치와 모뎀(Modulator/Demodulator; 변,복조기)을 접속하기 위한 것으로 퍼스널 컴퓨터에서는 RS232C 규격의 일부를 사용하여 그 접속을 간략화하고 있다.


사용자 삽입 이미지

직렬전송방식의 개략



장점       


- 배선 수가 작다.
- 통신 프로그래밍 구현이 쉽다.
- PC에 기본 장착되어 있다.

 


단점       


- 병렬 전송에 비해 전송속도가 느리다.
- 일대일 통신만 가능하다.



전기규격       


RS232C의 전기적 특성은 아래와 같다.

항 목

RS232C

무부하 출력

부하 출력

단락 출력 전류

파워온시 특성

≤ 25V

5V∼15V

≤500mA

≥300Ω

입력저항

히스테리시스

입력 최대전압

3㏀∼7㏀

±3V

±25V

최대 케이블 길이

15m

최대 전송속도

20kbit/sec

신호 논리(부논리)

- TRUE : LOW (-3V 이하)

- FALSE : HIGH(+3V 이상)

- 전송하지 않을 경우 : LOW

 RS232C 전기적 특성표



핀 규격       

 

사용자 삽입 이미지

 

신호명

명칭

방향

핀 번호(9핀)

핀 번호(25)

DCD

Data carrier detect

In

1

8

RX

Receive data

In

2

3

TX

Transmit data

Out

3

2

DTR

Data terminal ready

Out

4

20

GND

Signal ground


5

7

DSR

Data set ready

In

6

6

RTS

Request to send

Out

7

4

CTS

Clear to send

In

8

5

RI

Ring indicator

In

9

22

RS232C의 핀 규격표

- TX(데이터송신) : 데이터를 보내는 신호선. 출력은 전압이다.

- RX(데이터수신) : 데이터를 받는 신호선. 입력은 전압이다.

- RTS(송신요구) : 데이터 송신을 요구하기 위한 제어선이다.

- CTS(송신허가) : RTS에 대한 응답 신호선이다.

- DSR : 기기의 전원이 ON인지의 여부와 같은 기기의 준비상태를 조사한다.

- DTR : 데이터 터미널이 DSR과 마찬가지로 OK인가를 조사한다.


 

데이터 형식       

 

패리티 비트

통신에 있어서 어떤 데이터를 전송할 때 그 데이터가 정확히 보내졌는가를 검사하는데 사용한다. Odd 패리티와 Even 패리티 체크의 두 가지 형태가 있는데 Odd 패리티는 2진수의 1의 합이 홀수가 되게 지정하고 Even 패리티의 경우는 1의 합이 홀수가 되게 지정한다.

 예) Odd 패리티를 사용하면,

        41H : 0100 0001 의 경우는 패리티비트를 0으로 한다.


Start bit와 Stop bit

RS232C의 인터페이스 규격에서는 송수신 데이터의 신호는 부논리로 규정되어 있으므로 데이터의 각 비트는 1은 -5~-15V에 0은 5~15V에 대응한다. 실제 데이터 전송시 데이터의 앞에 Start Bit(논리 0) 1비트와 뒤에 Stop Bit(논리 1) 2비트와 패리티 비트를 부가해서 송신한다. 여기서 Start Bit와 Stop Bit을 사용해서 수신측 통신소자가 1 캐릭터(8Bit)마다 동기를 맞출 수 있기 때문에 송수신 측의 동기신호 없이도 송수신이 가능한 것이다. Stop Bit는 2비트 뿐만 아니라 1.5비트나 1비트도 설정가능하기 때문에 송수신 측의 Stop Bit를 일치 시켜야한다.


보오레이트

RS232C 인터페이스의 통신속도는 접속하는 쌍방의 장치의 성능과 통신선로의 특성에 따라 크게 좌우된다. 통신회선 상에 신호율을 측정하기 위한 기본단위를 보오레이트라고 불리며, 1초간에 송수 가능한 비트 수로 규정된다. 만약 110으로 설정된다면 패리티가 부가된 ASCII 코드 1캐릭터를 보내기 위해서

    1(Start Bit) + 7(캐릭터의 비트수) + 1(패리티 비트) + 2(Stop Bit) = 11비트

따라서 1초간에 최대 110 / 11 = 10(캐릭터)을 송수신 가능하다.

보통의 퍼스널 컴퓨터에서는 1문자 단위를 8비트(1바이트)로 다루기 때문에 하나의 문자정보를 보내기 위해서 Stop Bit를 최소 1비트로 하여

1(Start Bit) + 8(문자 데이터 비트수) + 1(Stop Bit) = 10비트

로 1문자 전송에 10비트를 사용한다.


문자 데이터 비트수

문자 데이터에 사용되는 비트수로 5∼8bit를 사용한다.



전송제어       


PC로 통신을 하는 경우 전혀 절차 없이 실행하는 경우(데이터의 최후에만 종료부호를 송출함)도 있지만 일반적인 경우 일정한 통신규약에 의해 통신을 실행한다.


통신규약의 대표적인 예는

- 회선이 접속되었는지를 확인(회선접속)

- 상대방의 확인(데이터 링크의 확립, 송수신의 확립)

- 데이터가 올바르게 전송되었는지 확인

- 데이터의 송신이 종료했는지 확인

등이 있다. 이와 같이 데이터의 전송에 대한 제어 절차를 전송제어(Transfer control)라고 한다.


기본형 데이터 전송제어

기본형 데이터 전송제어는 ISO/CCITT 7비트 부호를 사용한 데이터 전송방식이다.

 

부 호

명 칭

용 도

SOH

Start of Heading

헤딩 개시

STX

Start of Text

텍스트 개시

ETX

End of Text

텍스트 종료

EOT

End of Transmission

전송종료

ENQ

Enquiry

문의

ACK

Acknowledge

긍정응답

DLE

Data Link Escape

전송제어 확장

NAK

Negative Acknowledge

부정응답

SYN

Synchronous Idle

동기

ETB

End of Transmission Block

전송 블록 종료

( 각 부호에 대한 ASCII CODE 는 자료실을 참고 하세요. )


정보 메시지의 데이터 형식(패킷)

정보 메시지는 그림 7과 같이 크게 나누어 Heading 부분과 Text 부분으로 구성된다.


- Heading 부분: 경로, 메시지 번호

- Text 부분    : 송수신하려는 정보

 

사용자 삽입 이미지

패킷 형식



전송제어 캐릭터

- ENQ(Enquiry) : 상대 단말의 응답을 구하기 위해 사용되는 부호이다.

- ACK(Acknowledge) : 수신측에서 송신측으로 반송하는 부호로 "접속이 정상" 및 "오류없이 수신하였음"의 두 가지 의미가 있다.

- NAK(Negative Acknowledge) : ACK의 반대의미이다.

- EOF(End of Transmission) : 텍스트 전송의 끝을 알리거나 송신권의 인도등에 사용한다.

- DLE(Data Link Escape) : 전송제어 확장부호로서 전송제어 기능을 확장하기 위해 사용한다.



결선 방식 (NULL MODEM 경우)        

RS-232C NULL MODEM 통신 케이블은 MODEM 통신 케이블과는 달리 RX와 TX 핀을 서로 엇갈리게 연결한 결선방식을 사용한다. 케이블 판매점에서 시리얼 crossover 케이블이나 시리얼 FX 케이블이란 이름으로 쉽게 구할 수 있다. 굳이 제작을 필요하다면 아래의 그림을 참고해서 제작할 수 있다.

RS232C 3선 결선방식 (NULL MODEM)


프로그램 예제 (Turbo-C)       

사용자 삽입 이미지

#include <bios.h>

#include <conio.h>

#define COM1          0

#define COM2          1


#define SET            0

#define SEND          1

#define RECEIVE       2

#define ESC            '\x1B'


#define BAUD_110      0x00

#define BAUD_150      0x20

#define BAUD_300      0x40

#define BAUD_600      0x60

#define BAUD_1200     0x80

#define BAUD_2400     0xA0

#define BAUD_4800     0xC0

#define BAUD_9600     0xE0


#define PARITY_NONE 0x00

#define PARITY_ODD   0x08

#define PARITY_EVEN 0x18


#define BITS_7         0x02

#define BITS_8         0x03


#define STOP_1         0x00

#define STOP_2         0X04


void main(void)

{

    int out, in;

    bioscom(SET, BAUD_9600 | BITS_8 | STOP_1 | PARITY_NONE, COM1);

    cprintf("... BIOSCOM [ESC] to exit ...\n");

    while (1)

    {

        if (kbhit()){

           if ((in = getch())== ESC) exit(0);

           bioscom(SEND, in, COM1);

        }

        if ( (out = bioscom(RECEIVE, 0, COM1) & 0x7F) != 0)

            putch(out);

    }

}

728x90

'WORK > Sotfware' 카테고리의 다른 글

AfxBeginThread 사용하기  (0) 2008.06.02
Edit Clear  (0) 2008.06.02
MFC Thread 완전정복 ( 마지막 )  (0) 2008.06.02
MFC Thread 완전정복 3 - 동기화  (0) 2008.06.02
MFC Thread 완전정복 2 - Thread 종료하기  (0) 2008.06.02

댓글