37
8051 Serial 8051 Serial 통신 통신 8051 Serial 8051 Serial 통신 통신 Mode 0 : 동기 통신 Md 123 비동기 통신 Mode 1,2,3 : 비동기 통신 [email protected] htt ://bl /d li http://blog.naver.com/dolicom

8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

8051 Serial8051 Serial 통신통신8051 Serial8051 Serial 통신통신

Mode 0 : 동기 통신

M d 1 2 3 비동기 통신Mode 1,2,3 : 비동기 통신

[email protected] ://bl /d lihttp://blog.naver.com/dolicom

Page 2: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

통신 시 동시에 보내는 데이터 비트수통신 시 동시에 보내는 데이터 비트수

패럴럴 통신 (Parallel)

두 지점 간 데이터 시 데이터 연결 수가 많다.

8비트를 많이 사용

LPT(Printer), SCSI(HDD), ATAPI(HDD)

데이터의 비트수가 많아 여러 선이 필요하므로 원거리통신에 불리

시리얼이 고속 통신이 가능하여 사용이 주는 추세

시리얼 통신 (Serial)

동시에 보내는 데이터 수는 하나

패럴럴에 비해 원거리 전송에 유리

현재는 고속으로 전송으로 거리 제한(SATA, USB)

패럴럴에 비해 저속이었으나 현재 고속이 가능

UART, SPI, I2C, USB, SATA(HDD), Serial-SCSI

Page 3: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

시리얼통신 데이터 사이 분리 방식시리얼통신 데이터 사이 분리 방식

동기식 통신전송 후 데이터 사이 구별을 데이터 클럭 사용전송 후 데이터 사이 구별을 데이터 클럭 사용

별도의 데이터 클럭 신호 필요

비교적 고속 전송 가까운 거리 - 칩간 통신비교적 고속 전송, 가까운 거리 - 칩간 통신

SPI, I2C

비동기식 통신전송 후 데이터 사이를 수신 쪽에서 구별송 후 데이터 사이 수 쪽에서 구

별도의 데이터 클럭이 필요 없음

비교적 저속 전송 속도 원거리비교적 저속 전송 속도, 원거리

장치간 통신 ( PC – PC, PC - 전자 장치)

Page 4: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

UART (RS-232C)UART (RS 232C)

두 지점 간 비동기 시리얼 통신두 지점 간 비동기 시리얼 통신

CPU의 초기부터 사용

데이터 수 5 6 7 8로 설정 가능데이터 수 5,6,7,8로 설정 가능

에러 탐색을 위한 EVEN/ODD parity 사용

비교적 간단한 통신 방식, 속도 낮음, 원거리

BAUD RATE (BPS와 비슷함)BAUD RATE (BPS와 비슷함)

전송 라인은 디지털 전압보다 높음 – 원거리 전송

M k (1) 3 12 VMark (1) : -3 ~ -12 V

SPACE (0) : +3 ~ +12V

높은 전압 필요

Page 5: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

SPI Serial Peripheral InterfaceSPI Serial Peripheral Interface

Page 6: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

I2CI2C

수신 측에서 데이터 수신여부 확인하기 위해 송신 측에서는 1로 하고 수신 측에서ACK 신호를 출력 한다.

SCL이 1일 때 SDA가 1에서 0으로 변하면 송신 시작

Page 7: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

RS-232C 타이밍 차트RS 232C 타이밍 차트

5 6 7 8 비트 EVEN ODD 1 1 5 비트5,6,7,8 비트 EVEN,ODD 1, 1.5 비트

0x58 전송 예0x58 전송 예

Page 8: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

윈도우 설정윈도우 설정

Page 9: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

RS-232C의 전압 특성RS 232C의 전압 특성

MARK : -3 ~-12 VSPACE : +3 ~ +12V

UART모듈

TXTX

모듈RXRX

MAX232 : 5V < > 10 +10V커넥터

MAX232 : 5V <-> -10~+10VMAX3232: 3.3V <-> -10~+10V

자체 전원 변환 회로 추가 되어별도의 파워 전환 필요 없음

DS9CPU

별도의 파워 전환 필요 없음

Page 10: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

USART 신호USART 신호

Signal OriginSignal Origin

DB-25 DE-9(TIA-574)

EIA/TIA 561

YostName

Abbrevation

DTE DCE

Common Ground G 7 5 4 4 5Common Ground G 7 5 4 4,5

Protective Ground PG 1 - -

T itt d D t T D ● 2 3 6 3Transmitted Data TxD ● 2 3 6 3

Received Data RxD ● 3 2 5 6

Data Terminal Ready DTR ● 20 4 3 2Data Terminal Ready DTR ● 20 4 3 2

Data Set Ready DSR ● 6 6 1 7

Request To Send RTS ● 4 7 8 1Request To Send RTS ● 4 7 8 1

Clear To Send CTS ● 5 8 7 8

Carrier Detect DCD ● 8 1 2 7

Ring Indicator RI ● 22 9 1 -

Page 11: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

모뎀 제어 신호

모뎀은 우선 전화등을 이용 통신 채널을열어야 하기 때문에 바로 옆에 있는 컴퓨터 처럼 사용할 수 없다.따라서 모뎀이 통신채널을 열었는지 확모뎀 제어 신호 따라서 모뎀이 통신채널을 열었는지 확인할 필요가 있다.

Page 12: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

clockclock

SerialSerial 관련관련 레지스터레지스터SerialSerial 관련관련 레지스터레지스터

Page 13: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

TMOD 레지스터TMOD 레지스터

7 6 5 4 3 2 1 0

GATE C/T M1 M0 GATE C/T M1 M07 6 5 4 3 2 1 0

Timer 1 Timer 0

GATE : 외부 인터럽트 핀(INT1 INT0)을 이용해서 타이머를 정지/동GATE : 외부 인터럽트 핀(INT1, INT0)을 이용해서, 타이머를 정지/동작을 제어 한다.1. GATE=1, TR0=1 : INT0=1 – 타이머0 동작, INT0 – 정지

GATE 1 TR1 1 INT1 1 타이머1 동작 INT1 정지GATE=1, TR1=1 : INT1=1 – 타이머1 동작, INT1 – 정지2. GATE=0 : INT0,INT1 핀을 사용하지 않으며, TCON내의 TR0, TR1에

따라 동작/정지 된다.C/T (Counter/Timer selector) : 카운터/타이머 모드를 결정1. C/T=1 : 카운터 모드 – 입력 핀 T0, T1에서 들어오는 펄스를 센다.

C/T=0 : 타이머 모드 – 시스템 클럭/12을 센다.

M1:M0 : 동작 모드 설정4가지 모드

Page 14: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

TCON 레지스터TCON 레지스터

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT07 6 5 4 3 2 1 0

Timer 1 Timer0 Interrupt

• TR1/TR0 : 타이머/카운터 동작/정지 제어 한다.TR0=1 : 타이머/카운터 0 동작TR0=0 : 타이머/카운터 0 정지

• TF1/TF0 : 타이머/카운터 오버플로 플래그TF0 : 타이머/카운터 0의 카운터 레지스터(TH1, TH0)가 오버플로가 되면

셋된다.*이 때 다음과 같이 인터럽트 처리 된다..- 인터럽트 인에이블되어 있고- 인터럽트 요청하게 되면- 인터럽트 처리가 끝나면 자동으로 클리어 된다

Page 15: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

T2CON 레지스터 0xC8T2CON 레지스터 0xC8

TF2 EXF2 RCLK TCLK EXEN2 TR2 CP/T2 CP/RL27 6 5 4 3 2 1 0

TF2 : Overflow가 되면 1로 되고 SW로 지움. RCLK/TCLK=1이면 동작 안함.EXF2 : Capture/Reload일 때, T2EX가 오면 1로 됨. EXEN2=1일 때 동작.XF Capture/Reload일 때, T X가 면 1 됨. X N 1일 때 동작.- 인터럽트 요청 EXF2=1이면 Timer2 Vector로 처리-인터럽트 루틴 실행.- DCEN=1로 Up/Down Counter Mode에서 동작 안함.

RCLK : Serial Mode1/3에서 Receive clock으로 사용.TCLK : Serial Mode1/3에서 Transmit clock으로 사용.EXEN2 : Timer2 External 동작EXEN2 : Timer2 External 동작. TR2 : Timer2의 동작 시작/멈춤 설정.CP/T2 : Timer / Counter(외부 입력 사용) 설정.CP/RL2 C t /R l d 선택CP/RL2 : Capture/Reload 선택.

Page 16: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

Timer2의 동작 모드 – T2CONTimer2의 동작 모드 T2CON

TR2 TCLK/RCLK CP/RL2 T2OE 모드

1 0 0 0 16비트 Auto-Reload 모드

1 0 1 0 16비트 Capture 모드

1 1 x x 16비트 Baud Rate 발생 모드1 1 x x 16비트 Baud Rate 발생 모드

1 x x 1(C/T=0) 16비트 Programmable Clock-Out모드

0 x x x 타이머2 동작 OFF

Page 17: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

SCON 레지스터 - 1SCON 레지스터 1

SM0 SM1 SM2 REN TB8 RB8 TI RI7 6 5 4 3 2 1 0

RI : 수신완료 및 인터럽트 요청플래그0-수신없음 1-수신완료0 수신없음, 1 수신완료

TI : 송신완료 및 인터럽트 요청플래그0-송신없음 또는 송신중, 1-수신완료

RB8 : Mode 2,3시 수신 9번째 데이터 비트

TB8 : Mode 2,3시 송신 할, 9번째 데이터 비트

REN : 수신가능 제어비트REN : 수신가능 제어비트0-수신 불가, 1-수신가능

Page 18: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

SCON 레지스터 - 2SCON 레지스터 2

SM0 SM1 SM2 REN TB8 RB8 TI RI7 6 5 4 3 2 1 0

SM : 시리얼의 동작 상태 정의Mode : SM0 SM1 동작 Baud Rate (속도)Mode : SM0 SM1 동작 Baud Rate (속도)0 00 Shift Register fosc/121 01 8비트 UART 변화2 10 9비트 UART fosc/12 또는 fosc/322 10 9비트 UART fosc/12 또는 fosc/32 3 11 9비트 UART 변화

SM2 모드2 3에서 멀티통신 관련 비트SM2 : 모드2,3에서 멀티통신 관련 비트0 - 싱글 통신 기능으로 동작함.1 - 수신데이터 비트(RB8)가 1인 경우만 RI 비트를 세트시켜

8051 코어로 하여금 수신을 가능하도록 함.즉, 데이터 수신이 가능함.

Page 19: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

SMOD – PCON 레지스터SMOD PCON 레지스터

SMOD - - - GP1 GP0 *PD *ILD7 6 5 4 3 2 1 0

SMOD : 시리얼 클럭 타이머 0 사용할 때시리얼포트의 기준클록 입력소스인 타이머0의 출력 펄스와 2분주된 시시리얼포트의 기준클록 입력소스인 타이머0의 출력 펄스와 2분주된 시스템 클록을 다시 2분주할 것인지 선택하는 비트

0 – 타이머1 클럭 / 2 : 2분주 함1 타이머1의 그대로 사용1 – 타이머1의 그대로 사용

GP1 : 보통목적(General Purpose) 플래그 비트GP0 : 보통목적(General Purpose) 플래그 비트

Page 20: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

clockclock

SerialSerial 클럭클럭 발생발생SerialSerial 클럭클럭 발생발생

타이머타이머타이머타이머

Page 21: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

비동기 수신 인식 – HW로 처리비동기 수신 인식 HW로 처리

MARK

SPACE

데이터 신호가 MARK에서 SPACE로 가면 수신 시작데이터 신호가 MARK에서 SPACE로 가면 수신 시작전송하는 한 비트에 16/64개의 사이클을 사용하여 수신 시작

MARK에서 0으로 바뀌는 순간 부터 16 사이클 마다 비트를 분리MARK에서 0으로 바뀌는 순간 부터 16 사이클 마다 비트를 분리

데이터 비트 사이를 이 클럭을 사용하여 시간을 구별16개의 주기가 끝나면 무조건 다음 데이터로 인식

Page 22: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

타이머를 사용한 UART 클럭 발생타이머를 사용한 UART 클럭 발생

2XTALoscillator

÷ 2÷ 12 Timer 1/2 RX/TX

CLOCK

Page 23: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트
Page 24: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

타이머을 사용한 클럭 발생 구조타이머을 사용한 클럭 발생 구조

TM1 OverflowC/T = 0

C/T = 1

1

TL18bits

OSC÷ 2

÷ 2

1÷ 12 T1 pin

TR1

SMOD

“0” “1”TH1

C/T = 0

T2 pin C/T = 1

RX

RCLKTL28bits

TH28bits

“1” “0”

TR21 ÷ 16

RXCLOCK

TX

TCLKRELOAD

“1” “0”

÷ 16TXCLOCKRCAP2L RCAP2H

Page 25: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

Serial Mode1 3-Timer1 Mode2

SCON:SM1=1

Serial Mode1,3 Timer1 Mode2

PMOD[1:0]:M1M0=10PMOD[2]:C/T=0

TM1 OverflowC/T = 0

C/T = 1

1

TL18bits

PCON

OSC÷ 2

÷ 2

1÷ 12 T1 pin

TCON:TR1 PCON:SMODRELOAD

SMOD

“0” “1”TH1

C/T = 0

T2 pinC/T = 1

RX

RCLKTL28bits

TH28bits

“1” “0” T2CON:RCLK=0

TR2÷ 16

RXCLOCK

TX

TCLKRELOAD

“1” “0”

÷ 16TXCLOCKRCAP2L RCAP2H

T2CON:TCLK=0

Page 26: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

Serial Mode1 3-Timer2 BaudRateSerial Mode1,3 Timer2 BaudRate

TM1 OverflowC/T = 0

C/T = 1

TL18bits

OSC÷ 2

÷ 2÷ 12 T1 pin TR1

SMOD

“0” “1”TH1

T2CON:RCLK/TCLK=1PMOD[6]:C/T=0C/T = 0

T2 pin C/T = 1

1 RX

RCLKTL28bits

TH28bits

“1” “0” T2CON:RCLK=1

TCON:TR2

1÷ 16

RXCLOCK

TX

TCLKRELOAD

“1” “0”

÷ 16TXCLOCKRCAP2L RCAP2H

T2CON:TCLK=1

Page 27: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

Baud Rate 설정Baud Rate 설정

ReloadSaud Rate fosc SMOD C/T Mode

ReloadValue

Mode0 Max: 1MHZ 12MHz X X X X

Mode2 Max: 375K 12MHz 1 X X X

Modes1,3: 62500 12MHz 1 0 2 FFH

19200 11.059MHz 1 0 2 FDH

9600 11.059MHz 0 0 2 FDH

4800 11.059MHz 0 0 2 FAH

2400 11.059MHz 0 0 2 F4H

1200 11 059MH 0 0 2 E8H1200 11.059MHz 0 0 2 E8H

137.5 11.059MHz 0 0 2 1DH

110 6MHz 0 0 2 72H110 6MHz 0 0 2 72H

Page 28: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

Serial 전송 모드Serial 전송 모드

모드 0

데이터의 시간 위치를 알리는 동기식.

RxD : Data In/Out으로 사용RxD : Data In/Out으로 사용

TxD : 데이터 클럭으로 사용

모드1

비동기 방식 – 데이터 만 사용(8bit) - UART( )

에러 체크를 위한 Parity가 없다.

모드2/3모드2/3

비동기 방식 – 데이터(8bit)+특수 1비트 – UART

SCON레지스터의 TB8/RB8비트를 CPU에서 설정SCON레지스터의 TB8/RB8비트를 CPU에서 설정

에러 체크를 위한 parity는 8051의 P을 TB8에 전송

Page 29: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

통신모드0–동기전송 (SPI와 유사)통신모드0 동기전송 (SPI와 유사)

SBUF에 송신 데이터 쓰기

Transmit

SCOC에 쓰기(RI 지워짐)SCOC에 쓰기(RI 지워짐)

Receive

Page 30: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

통신모드 1 – 비동기 전송통신모드 1 비동기 전송

SBUF에 송신 데이터 쓰기

Parity Parity 불가능불가능

Transmit

SCOC에 쓰기(RI 지워짐)

Receive

에 기( 지워짐)

Page 31: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

통신모드 2 3(가변속도만 다름)통신모드 2, 3(가변속도만 다름)

Transmit

Receive

Page 32: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

ProgramProgram

SerialSerial 프로그램프로그램SerialSerial 프로그램프로그램

Page 33: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

UART

// file : uart.h#ifndef _UART_H#define _UART_H

void Init SerialTm(void) ; // Serial & Timer 초기화 UART

#include <reg8051 h> #include <stdio h>

_ ( ) ; // 초기화void putchar(char ch);

#endif

#include <reg8051.h>

void putchar(char ch){

while (!TI); //시리얼 버퍼 SBUF가 비어질 때까지 대기

#include <stdio.h>#include “uart.h”

void main(void){while (!TI); //시리얼 버퍼 SBUF가 비어질 때까지 대기

SBUF = ch;TI =0;

}

{BYTE i,c;Init_SerialTm();putchar(‘*’); // 초기화while(1) {

////////////////////////////////////////////////////////// Serial & Timer 초기화void Init_SerialTm(void){

while(1) {putchar(‘.’); //데이터송신delay(2);P1= c; // Port1 출력

}{ TMOD = 0x20; // 타이머1 : 모드2, 내부클럭사용

PCON = 0x00; // 만약에 19200보레이트인경우 SMOD =1TH1 = 0xfd; // 9600 보레이트로 사용

}}void delay(int p){int i j;TH1 = 0xfd; // 9600 보레이트로 사용

SCON = 0x50; // 시리얼통신모드1 사용SBUF = 0; // 초기값을 0설정(쓰레기값 방지)TR1 = 1; // Timer1 run

}

int i,j;for( j=0;j<p;j++)for(i=0;i<1000;i++);

}}

Page 34: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

UART#ifndef _UART_H#define _UART_H

void Init_SerialTm(void) ; // Serial & Timer 초기화void putchar(char ch);BYTE t h ()

#include <reg8051.h>typedef unsigned char BYTE;

#include <stdio.h>#i l d “ h”

BYTE getchar();

#endif

typedef unsigned char BYTE;

void Init_SerialTm(void) // Serial & Timer 초기화{

TMOD = 0x20; // 타이머1 : 모드2, 내부클럭사용

#include “uart.h”

void main(void){

BYTE hPCON = 0x00; // 만약에 19200보레이트인경우 SMOD =1TH1 = 0xfd; // 9600 보레이트로 사용SCON = 0x50; // 시리얼통신모드1 사용SBUF = 0; // 초기값을 0설정(쓰레기값 방지)

BYTE ch, cnt;Init_SerialTm();putchar(‘*’); // 초기화while(1) {

h h () // 데이터 수신TR1 = 1; // Timer1 run}

void putchar(char c){

ch= getchar(); // 데이터 수신cnt++; // 수신 데이터 1증가P1 = cnt; // LED에 데이터 표시putchar(ch); // 데이터 송신

}{

while (!TI); //시리얼 버퍼 SBUF가 비어질 때까지 대기SBUF = c;TI =0;

}

}}void delay(int p){i t i j

BYTE getchar(){

BYTE ch;while(!RI); // 수신 버퍼h S

int i,j;for( j=0;j<p;j++)for(i=0;i<1000;i++);

}ch = SBUF;RI=0;return ch;

}

Page 35: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

UART

#include <reg8051.h>#include “uart.h”

BYTE g_uCh; // UART 수신 문자BYTE g RxFlag; // 수신이 되었는지를 나타냄

#ifndef _UART_H#define _UART_H

void Init_SerialTm(void) ; // Serial & Timer 초기화UART#include <reg8051.h>

g_ g; // 수신이 되었는지를 나타냄

unsigned int g_tmCount; // Timer0 인터럽트에 의해 1 증가

void main(void){

void putchar(char ch);

#endif

void Init_SerialTm(void) // Serial & Timer 초기화{

TMOD = 0x21; // 타이머1 : 모드2, 내부클럭사용// 타이머0 : mode 1, 내부 클럭사용

PCON = 0x00; // 만약에 19200보레이트인경우 SMOD =1

BYTE cnt;

Init_SerialTm();g_tmCount = 0; cnt = 0;

TH1 = 0xfd; // 9600 보레이트로 사용SCON = 0x50; // 시리얼통신모드1 사용SBUF = 0; // 초기값을 0설정(쓰레기값 방지)TR1 = 1; // Timer1 run

}

putchar(‘*’); // 초기화

TR0 = 1; // 타이머0 실행ET0 = 1; // 타이머0인터럽트 인에이블( enable)EA = 1;

void putchar(char ch){

while (!TI); //시리얼 버퍼 SBUF가 비어질 때까지 대기SBUF = ch;TI =0;

}

while(1) {if (g_RxFlag) {

putchar(g_uCh); //데이터송신g_RxFlag = 0;

}if ( t C t & 0 FF00) {}

// 시리얼 포트의 인터럽트 벡터void RxUart(void) interrupt 4 {

BYTE h

if (g_tmCount & 0xFF00) {P1= cnt++; // Port1 출력

}}

}BYTE ch;EA = 0; // 모든 인터럽트 디스인에이블(disable)

if (RI) {g_uCh = SBUF;RI = 0;

// 타이머 0 오버풀로워( Overflow)void intrTm0(void) interrupt 1 {

TR0 = 0; // 타이머0 정지TH0 = 0xf7; // 인터럽트 기간을 2ms ? 2170RI = 0;

SBUF = g_uCh;}EA = 1; //모든 인터럽트 인에이블(enable)

}

TH0 = 0xf7; // 인터럽트 기간을 2ms ? 2170TL0 = 0x86; //11.0592M/12=0.9216us-RELOADg_tmCount ++;TR0 = 1; // 타이머0을 다시 시작

}

Page 36: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

void Init_Uart(void){

SCON = 0x40; // mode 1, 8-bit UART, disable rcvrTMOD = 0x20; // timer 1, mode 2, 8-bit reloadPCON &= 0x7f; // SMOD = 0TH1 = 0xfd; // reload value for 19,200 baud

#include <stdio h>

TR1 = 1; // timer 1 runTI = 1; // set TI to send first char of UART

}#include <stdio.h>void main(void){

unsigned int cnt;u s g ed t c t;

Init_Uart();printf(“Hello\n”);p ( )putchar(‘O’); putchar(‘K’);putchar(‘\n’); cnt = 0;while(1) {

if (! (cnt & 0x0FFF)) printf("%d ", cnt);

cnt++;}

}

Page 37: 8051Serial8051 Serial통신pds17.egloos.com/pds/200909/01/64/9.Serial.pdf · 1 01 8비트UART 변화 210 92 10 9비트UART fosc/12 또는fosc/32 3 11 9비트UART 변화 SM2 : 모드232,3에서멀티통신관련비트

TX Interrupt 예p#include <reg8051.h>

void Init_SerialTm(void) // Serial & Timer 초기화{

#include <stdio.h>#include “uart.h”

{ TMOD = 0x20; // 타이머1 : 모드2

PCON = 0x80; // 19200인경우 SMOD =1TH1 = 0xfd; // 19200SCON = 0x52; // 시리얼통신모드1 사용

int g_suCnt;char buffer[] = “8051 serial₩r₩n";

void main(void)SCON = 0x52; // 시리얼통신모드1 사용SBUF = 0; // 초기값을 0설정(쓰레기값 방지)ES = 1; // IE – ES:SerialPorfinterruptenablebitTR1 = 1; // Timer1 run

}void putchar(char ch)

void main(void){

BYTE i,c;Init_SerialTm();EA = 1;void putchar(char ch)

{while (!TI); //시리얼 버퍼 SBUF가 비어질 때까지 대기SBUF = ch;TI =0;

}

EA = 1;putchar(‘*’); // 초기화while(1) {

putchar(‘.’); //데이터송신delay(2);}

// 시리얼 포트의 인터럽트 벡터void Uart_ISR(void) interrupt 4 {

BYTE ch;

delay(2);P1= c; // Port1 출력

}}void delay(unsigned int k) // delay function

SBUF = buffer[g_suCnt];delay(50);TI = 0;if (buffer[g_suCnt +] =='₩0')

void delay(unsigned int k) // delay function{

while (k--) ;}

g_suCnt = 0;}