시리얼(UART) 통신하기.

Serial(UART) 통신

 

UART (Universal Asynchronous Receiver/Transmitter) 라고도 하며, 전송거리가 짧고, 잡음에 약하지만, 필요한 배선수가 적고 간단하다는 이점 때문에 데이터 전송 표준으로 많이 사용하고 있습니다.
흔히 RS-232 통신이라 함은 PC 상의 UART 규약이며 +- 12V 의 범위를 가지고 있습니다.

8051 같은 MCU 들은 TTL 레벨(5V)로 동작하기 때문에 PC와의 시리얼 통신을 위해서는 max232 와 같은 칩을 사용하게 됩니다.
max232의 역할은 PC단에서는 12V로 MC단에서는 5V로 변환시켜주는 일을 합니다.
따라서 MCU 간의 UART 통신은 12V로의 변환이 필요 없으므로 max232 와 같은 칩은 사용하지 않습니다.

 

관련 레지스터
SBUF : 데이터송수신에 사용되며 읽을때, 쓸때 같은 이름으로 사용합니다. 하지만 같은 번지를 사용하진 않습니다.
TMOD : 시리얼통신은 타이머를 이용하여 통신속도를 결정하기 위하여 사용됩니다.
PCON : 파워컨트롤 레지스터 이지만 UART 클럭을 세팅하기 위한 비트(SMOD)가 최상위비트에 존재하므로 사용됩니다.
SCON : Serial Control 레지스터 입니다.

 

FAK-4D 세팅
1. 시리얼 연장케이블을 FAK-4D 보드에 연결합니다.
2. 하이퍼터미널을 열고 새연결 메뉴에서 적당한 이름과, COM Port 를 지정한다음, 다음과 같이 설정합니다.

3. 키보드에서 문자를 입력해서 나타나는지 확인합니다.

 


8051의 크리스탈을 11.0592MHz 를 사용하는 이유가 바로 이 시리얼 통신을 위한 클럭을 만들기가 쉽기 때문에 사용됩니다.

본 강좌에서는 클럭을 계산하고 설정하는 부분은 생략하고 넘어가도록 하겠습니다.
관련 서적에 자세히 나와 있기도 하려니와, 실제 그렇게 계산하고 프로그래밍 하는 프로그래머들은 거의 없기 때문입니다.
본 강좌에서는 실제 많이 사용하는 코드 위주로 설명하도록 하겠습니다.

 


/*
    다음과 같이 TH1 의 값만 바꾸는것으로 통신속도를 설정할 수 있다.
    19200 : PCON = 0x80, TH1 = 0xfd
    14400 : TH1 = 0xfe
    9600  : TH1 = 0xfd
    4800  : TH1 = 0xfa
    2400  : TH1 = 0xf4

    PC에서 한문자를 받으면 받은 문자를 PC로 다시 보내는 예제임.
    즉, 키보드로 치는 글자기 하이퍼 터미널에 보여지게 됨.
*/
#include "reg51.h"

void SER_init(void);
void delay(int j);
unsigned char RX_D(void);
void TX_D(UC buffer);


void SER_init(void)
{
    // 9600 baud rate, use 11.0592 MHz Crystal
    TMOD = 0x20;  //Timer 1, mode2 (start bit + data(8bit) + stop bit)
   
    PCON = 0x00;  // set 0 to SMOD bit
    TH1= 0xfd;       // 9600bps
    TR1= 1;           // Timer start
    SCON = 0x52;  // mode=1, receive on, initial Tx/Rx
}

 

void delay(int j)
{
    while(j--);
}

 

unsigned char RX_D(void)
{
    while(!RI);


    RI=0;
    return(SBUF);
}

 

void TX_D(UC buffer)
{
    while(!TI);


    TI=0;
    SBUF = buffer;
}

 

void main(void)
{
    unsigned char i;

 

    SER_init();

 

    while(1){
        i = RX_D();

 

        TX_D(i);

 

        delay(2000);
    }
}

 

'프로그래밍 > 통신 프로그래밍' 카테고리의 다른 글

C#소켓 프로그램입니다.  (1) 2007.10.25
시리얼(UART) 통신하기.  (0) 2007.10.20
[PLC] 통신의 이해와 동향  (0) 2007.05.07
[PLC]  (0) 2007.05.07
시리얼 통신 - windows program 3  (0) 2007.03.26
시리얼통신 4 - windows program 1  (0) 2007.03.26

댓글을 남겨주세요~ 밝은 인터넷을 위한 네티켓, 아시죠?

이 페이지에는...