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