12. 8051 직렬포트 - 이상정

Download Report

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

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