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);
}
}
'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 |
댓글