12. 8051 직렬포트 - 이상정

Download Report

Transcript 12. 8051 직렬포트 - 이상정

8051 직렬포트
순천향대학교 정보기술공학부
이상정
2003-1 마이크로프로세서
개요
 4가지의 동작 모드를 갖는 전이중(full-duplex)
통신방식의 직렬 포트
 송신부와 수신부는 각각 2중 버퍼(double
buffer)로 구성
• 수신의 경우 CPU가 먼저 수신된 데이터를 읽어가
기 전에라도 다음 데이터를 수신하는 동작이 가능
 송신 및 수신 데이터 버퍼로는 SBUF가 사용
• 송신시에는 CPU가 송신할 데이터를 SBUF에 라이
트하면 이는 곧바로 직렬 포트의 송신 레지스터에
로드되고,
• CPU가 SBUF를 리드하면 수신 레지스터가 읽혀진
다.
순천향대학교 정보기술공학부
이상정
2
2003-1 마이크로프로세서
 P.190 그림 8.10
순천향대학교 정보기술공학부
이상정
3
2003-1 마이크로프로세서
SCON 레지스터
 Serial Port Control Register
순천향대학교 정보기술공학부
이상정
4
2003-1 마이크로프로세서
SCON 레지스터
 TI 및 RI 비트
• 각각 1문자의 송신이 완료되어 송신부가 비거나
(empty)
• 1문자가 수신되어 수신부가 차게 되면(full) 1로 세
트되어 인터럽트를 발생시키는 플래그
 TB8 및 RB8 비트
• 모드 2와 모드 3의 11비트 프레임에서 9번째 데이
터 비트를 표시
• 모드 1이고 SM2=0인 경우 RB8은 스톱비트 저장
 SM0∼SM1 비트는 직렬 포트의 동작 모드를
설정
순천향대학교 정보기술공학부
이상정
5
2003-1 마이크로프로세서
SCON 레지스터
 SM2 비트
• 1로 설정하면 모드 2와 모드 3에서 9번째 비트가
RB8=1로 수신되었을 경우에만 직렬 포트 인터럽트
가 발생되고 RB8=0인 경우에는 인터럽트가 발생되
지 않는다.
• 모드 1에서 SM2=1로 설정하면 데이터 비트에 이어
서 스톱 비트가 올바르게 수신된 경우에만 인터럽
트가 발생한다.
 예: MOV SCON, #52H
; 01010010B
• SM0 SM1 = 01 : 모드 1, SM2 = 0
• REN =1 : receive enable
• TI = 1 : transmit interrupt flag
순천향대학교 정보기술공학부
이상정
6
2003-1 마이크로프로세서
PCON 레지스터
 Power Control Register
순천향대학교 정보기술공학부
이상정
7
2003-1 마이크로프로세서
PCON 레지스터
 보레이트(baud rate) 발생기로 타이머 1을 사
용하는 경우에는 SMOD 비트를 사용하여 보레
이트를 2배 높게 설정
• 직렬 포트의 동작 모드 1∼3에서 SMOD=0이면 정
상적인 보레이트로 설정되고,
• SMOD=1이면 보레이트가 2배 높은 값으로 설정된
다.
 SMOD0
• 0이면 SCON.7 비트가 SM0으로 사용되고,
• 1이면 SCON.7 비트가 FE(Framing Error)로 사용
된다.
순천향대학교 정보기술공학부
이상정
8
2003-1 마이크로프로세서
동작 모드 0
 동기식 반이중(half-duplex) 통신 모드
 실제의 직렬 통신에 사용하기보다는 병렬 I/O
확장용으로 사용하기 위한 것
 이 모드에서는 TxD 단자가 시프트 클럭으로
사용되고, RxD는 직렬 데이터 송신 및 수신 단
자로 사용된다.
 송수신 데이터는 항상 8비트로 구성되고 LSB
부터 전송되며, 보레이트는 시스템 클럭의
1/12로 고정된다.
순천향대학교 정보기술공학부
이상정
9
2003-1 마이크로프로세서
 P.193 그림 8.12
순천향대학교 정보기술공학부
이상정
10
2003-1 마이크로프로세서
동작 모드 0
 송신 동작
• SBUF에 송신 데이터를 라이트함으로써 개시되며,
• 1머신 사이클 후에 LSB(b0)부터 전송이 시작된다. 정확히 1
머신 사이클에 1비트씩 전송되며,
• MSB가 송신되고 나면 TI 인터럽트 플래그이 1로 세트된다.
 수신 동작
• REN=1인 상태에서 수신완료 인터럽트 플래그 RI를 0으로 클
리어시키면 수신 데이터의 입력이 시작
• RxD 단자로 입력되는 수신 데이터의 각 비트는 TxD 단자로
입력되는 동기 시프트 클럭의 상승 에지에서 직렬 포트 내부
의 입력 시프트 레지스터에 차례로 저장
• 8비트의 데이터가 모두 수신되면 시프트 레지스터의 데이터
는 SBUF로 옮겨지고 수신 인터럽트 플래그 RI가 1로 세트된
다.
순천향대학교 정보기술공학부
이상정
11
2003-1 마이크로프로세서
 그림 8.13 8.14
순천향대학교 정보기술공학부
이상정
12
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
13
2003-1 마이크로프로세서
동작 모드 1
 가장 널리 사용되는 표준적인 10비트 프레임
(1 스타트 비트, 8 데이터 비트, 1 스톱 비트)
의 비동기 전송 모드
 보레이트는 타이머 1이나 타이머 2를 사용하
여 사용자가 임의로 설정
 타이머 2를 사용하는 경우에는 송신 클럭과 수
신 클럭을 각각 독립적으로 인에이블시킬 수
있으므로 이들 중에 하나는 타이머 1을 사용하
고 다른 하나는 타이머 2를 사용하도록 설정할
수도 있다.
순천향대학교 정보기술공학부
이상정
14
2003-1 마이크로프로세서
 그림 8.16
순천향대학교 정보기술공학부
이상정
15
2003-1 마이크로프로세서
동작 모드 1
 송신 동작
• SBUF에 송신 데이터를 라이트함으로써 개시
• SBUF를 라이트하면 즉시 송신 시프트 레지스터의
9번째 비트에 1이 로드되며, 이것은 수신측에서 스
톱 비트로 작용한다.
• 송신측에서 9번째 비트인 스톱 비트(1)를 전송하기
시작하는 순간에 TI를 세트시켜 송신완료 인터럽트
를 발생한다.
 수신 동작
• REN=1인 상태에서 RxD 신호의 하강 에지가 입력
되면 시작
• 스타트 비트(0)가 올바르게 검출되었으면 이후 8비
트의 데이터 D0∼D7을 수신하여 시프트 레지스터
에 저장
순천향대학교 정보기술공학부
이상정
16
2003-1 마이크로프로세서
동작 모드 1
• 마지막으로 9번째의 스톱 비트가 1로 올바르게 수
신되었으면 RI=0인 조건에서 RI를 1로 세트시켜 수
신 인터럽트를 발생한다
• 만약 SCON 레지스터에서 SM2=0이면 스톱 비트의
수신에 관계없이 RI=0이기만 하면 RI가 세트된다.
• 수신된 스톱 비트는 SCON 레지스터의 RB8에 저장
되며, 8개의 데이터 비트는 시프트 레지스터에서
SBUF로 로드된다.
순천향대학교 정보기술공학부
이상정
17
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
18
2003-1 마이크로프로세서
동작 모드 2와 3
 11비트 프레임(1 스타트 비트, 8 데이터 비트, 프로그
래머블한 9번째 비트, 1 스톱 비트)의 비동기 전송 모
드
 모드 3과 함께 주로 멀티프로세서 시스템에서 프로세
서 사이의 통신에 사용
 9번째 비트는 SCON 레지스터의 TB8 비트에 라이트함
으로써 송신되며, 수신된 9번째 비트는 SCON 레지스
터의 RB8 비트에 저장된다.
 SCON 레지스터에서 SM2=1로 설정하면 RB8 비트가
1로 수신되었을 경우에만 직렬 포트 인터럽트가 발생
되고 0으로 수신된 경우에는 인터럽트가 발생되지 않
는다.
순천향대학교 정보기술공학부
이상정
19
2003-1 마이크로프로세서
동작 모드 2와 3
 모드 3은 모드 2와 동일한 동작을 수행하며 단
지 보레이트만이 다르다.
• 모드 2에서는 보레이트를 시스템 클럭의 1/32이나
1/64로 설정할 수 있는데 비하여,
• 모드 3에서는 보레이트를 타이머 1이나 타이머 2를
사용하여 임의로 설정할 수 있다.
순천향대학교 정보기술공학부
이상정
20
2003-1 마이크로프로세서
보레이트(Baud rate)의 발생
 직렬 포트의 동작 모드 1과 3
• 타이머 1을 사용하는 방법과 타이머 2를 사용하는
방법이 있다.
• 이중에서 타이머 1을 사용하는 경우에는 타이머 1
을 모드 2(8비트 auto-reload mode)로 설정하여
분주비를 임의로 지정
• 타이머2를 사용하여 보레이트를 발생시키는 경우킬
수도 있다. 이때는 타이머 2의 16비트 보레이트 발
생기 모드를 사용하므로 시스템 클럭이
11.0592MHz가 아니더라도 상당히 정확한 보레이
트를 발생시킬 수 있다.
순천향대학교 정보기술공학부
이상정
21
2003-1 마이크로프로세서
보레이트(Baud rate)의 발생
순천향대학교 정보기술공학부
이상정
22
2003-1 마이크로프로세서
보레이트(Baud rate)의 발생
순천향대학교 정보기술공학부
이상정
23
2003-1 마이크로프로세서
보레이트 발생 방법
순천향대학교 정보기술공학부
이상정
24
2003-1 마이크로프로세서
보레이트 발생 방법
순천향대학교 정보기술공학부
이상정
25
2003-1 마이크로프로세서
프로그램 예 1
 직렬포트를 통해 타이머 1을 사용한 9600 bps
속도의 모드 1 동작으로 데이터를 송수신하는 어
셈블리 프로그램
• 데이터 송수신은 인터립트가 아닌 폴링방식 사용
• 수신(입력)된 문자 다시 송신(출력): echo print
• 소문자를 대문자로 송신: 수신문자-32
 모드 1 송신
MOV SCON, #52H
SM0 SM1 = 01 : 모드 1, SM2 = 0
REN =1 : receive enable
TI = 1 : transmit interrupt flag, 초기 무한루프 탈출
순천향대학교 정보기술공학부
이상정
26
2003-1 마이크로프로세서
프로그램 예 1
 타이머1, 모드 2 사용하여 9600 bps 보레이트 설정
MOV TMOD, #20H; Timer 1, Mode 2
MOV TH1, #0FDH
; 9600 bps
MOV TL1, #0FDH
MOV PCON, #0
; disable double baud rate
SETB TR1
 문자 버퍼(30H)에 수신
RXD_CH:
JNB
RI, RXD_CH
; receive ready?
CLR
RI
MOV
30H, SBUF
; receive
순천향대학교 정보기술공학부
이상정
27
2003-1 마이크로프로세서
프로그램 예 1
 버퍼(30H) 문자 송신
TXD_CH:
JNB TI, TXD_CH
; transmit ready?
CLR TI
MOV SBUF, 30H; transmit
순천향대학교 정보기술공학부
이상정
28
2003-1 마이크로프로세서
프로그램 예 1
CSEG AT
8000H
; main program
CALL SER_INIT
CLR C
LOOP:
CALL GETCH
CALL PUTCH
MOV A, 30H
SUBB A, #32
MOV 30H, A
CALL PUTCH
JMP LOOP
순천향대학교 정보기술공학부
이상정
; echo print
; conversion from lower to upper character
29
2003-1 마이크로프로세서
프로그램 예 1
; serial port initializarion
SER_INIT:
MOV TMOD, #20H
; Timer 1, Mode 2
MOV TH1, #0FDH
; 9600 bps
MOV TL1, #0FDH
MOV PCON, #0
; disable double baud rate
MOV SCON, #52H ; TI=1, REN=1, Mode 1
SETB TR1
; start count
RET
; get character from serial port
GETCH:
RXD_CH:
JNB RI, RXD_CH
; receive ready?
CLR RI
MOV 30H, SBUF
; receive
RET
순천향대학교 정보기술공학부
이상정
30
2003-1 마이크로프로세서
프로그램 예 1
; put character to serial port
PUTCH:
TXD_CH:
JNB TI, TXD_CH
CLR TI
MOV SBUF, 30H
RET
; transmit ready?
; transmit
END
순천향대학교 정보기술공학부
이상정
31
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
32
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
33
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
34
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
35
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
36
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
37
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
38
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
39
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
40
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
41
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
42
2003-1 마이크로프로세서
프로그램 예 2
 직렬포트를 통해 타이머 1을 사용한 9600 bps
속도의 모드 1 동작으로 데이터를 송수신하는
C 프로그램
• 데이터 송수신은 인터립트가 아닌 폴링방식 사용
• 수신(입력)된 문자 다시 송신(출력): echo print
• 소문자를 대문자로 송신: 수신문자-32
순천향대학교 정보기술공학부
이상정
43
2003-1 마이크로프로세서
프로그램 예 2
#include <reg52.h>
void serial_init(void)
{
TMOD = 0x20;
TH1 = TL1 = 0xfd;
PCON = 0x00;
SCON = 0x52;
TR1 = 1;
}
void putch(char ch)
{
while (!TI) ;
SBUF = ch;
TI = 0;
}
순천향대학교 정보기술공학부
이상정
//
//
//
//
//
Timer 1, Mode 2
9600 bps
disable double baud rate
TI=1, REN=1, Mode 1
start count
44
2003-1 마이크로프로세서
프로그램 예 2
char getch(void)
{
char ch;
while (!RI) ;
ch = SBUF;
RI = 0;
return ch;
}
순천향대학교 정보기술공학부
이상정
45
2003-1 마이크로프로세서
프로그램 예 2
main()
{
char c;
serial_init();
while (1) {
c = getch();
putch(c);
putch(c-32);
}
// echo print
}
순천향대학교 정보기술공학부
이상정
46
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
47
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
48
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
49
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
50
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
51
2003-1 마이크로프로세서
프로그램 3
 직렬 인터럽트를 사용하여 직렬포트로 19200
bps 속도로 “Soonchunhyang University
Information Technology” 문자열을 출력하는
C 프로그램
순천향대학교 정보기술공학부
이상정
52
2003-1 마이크로프로세서
프로그램 3
#include <reg52.h>
char buffer[]
= "Soonchunhyang University Information Technology\r\n";
unsigned char i = 0;
void delay(unsigned int k)
// delay function
{
while (k--) ;
}
void serial_service(void) interrupt 4
// 8*n + 3
{
SBUF = buffer[i];
delay(50);
TI = 0;
if (buffer[i++] =='\0')
i = 0;
}
순천향대학교 정보기술공학부
이상정
53
2003-1 마이크로프로세서
프로그램 3
void serial_init(void)
{
EA = 0;
TMOD = 0x20;
TH1 = 0xfd;
PCON = 0x80;
SCON = 0x52;
ES = 1;
EA = 1;
TR1 = 1;
}
main()
{
serial_init();
while (1) ;
}
순천향대학교 정보기술공학부
이상정
//
//
//
//
Timer 1, Mode 2
19200 bps
enable double baud rate
TI=1, REN=1, Mode 1
// start count
54
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
55
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
56
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
57
2003-1 마이크로프로세서
순천향대학교 정보기술공학부
이상정
58
2003-1 마이크로프로세서
프로그램 과제
 프로그램 1 – 3 까지 작성하고 실행하여라
 프로그램 2의 C 프로그램을 수정하여 다음과
같이 변환하여 출력하는 프로그램을 작성하라
• 소문자 -> 대문자 변환
• 대문자 -> 소문자 변환
• 기타 -> 변환하지 않음
순천향대학교 정보기술공학부
이상정
59