2009년 12월 18일 금요일

[8051] 직렬통신 정리

 8051의 직렬통신을 간략하게 정리하면 동기/비동기 및 4가지 모드중 하나를 선택하여 적절한 통신을 하면되는데 다른거 별로 관심없고 모드1, 그러니까 시리얼통신, UART, RS232C, 9600bps 등등 하면 떠오르는 직렬통신을 하기 위한 설정과 기타 관련 정보를 알아본다.

 그런데 왜 비동기라 부르나? 시스템은 클럭을 기준으로 내부통신을 한다. 같은 주파수로 진동을 하니까 모든 얘들이 동기화 되어 통한다고 생각하자. 그러나 시리얼 통신은 시스템 클럭을 사용하지 않기  때문에 서로 진동하지 못하고, 알아듣지 못한다.

■ 4가지 모드 (다른거 관심없다 1번만 기억하자)
. 모드 0 : I/O확장용의 동기식 통신모드
. 모드 1 : 10비트 프레임의 비동기 통신모드, START(1)+DATA(8)+STOP(1)=10비트
. 모드 2 : 11비트 프레임의 비동기 통신모드
. 모드 3 : 11비트 프레임의 비동기 통신모드

■ 직렬통신과 관련있는 레지스터
* SBUF(Serial Port Buffer Register) : 버퍼의 역할을 이해해야 한다. 주거니 받거니...
* SCON(Serial Port Control Register) : 시리얼 포트의 각종 설정
* PCON(Power Control Register) : 가소롭게 2배속 모드가 있다.

■ 어셈코드 셈플
.
.
.
INIT_SERIAL:                      ; 직렬 통신 설정 (직렬 통신을 하기 위해 설정해 주어야 할 것들)
        CLR      ET1               ; 타이머1 interrupt Disable
        MOV     TMOD, #20H   ; [GATE|C/T_|M1|M0|GATE|C/T_|M1|M0] #00100000B, 1번 타이머 모드2(8비트 재저장 모드), 보레이트 발생용   
        MOV     SCON, #52H   ; [SM0|SM1|SM2|REN|TB8|RB8|TI|RI] #01010010B, 모드1을 사용
        MOV     A, PCON        ; PCON의 현재값만 읽어들이고
        SETB    ACC.7           ; 해당비트값만 수정
        MOV     PCON, A        ; [SMOD|-|-|-|GF1|GF0|PD|IDL] SMOD=1, 가속모드 사용
        MOV     TH1, #0FDH    ; 19200bps
        SETB    TR1               ; 타이머1 시작
        RET                          ; 복귀
.
.
.

댓글 없음:

댓글 쓰기