MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA –...

61
MDA WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port 6. 7- Segment 7. LCD Module 정보통신컴퓨터 공학부 교수 이재흥

Transcript of MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA –...

Page 1: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

MDA – WIN 8051

1. 8051 개요

2. I/O port

3. Interrupt

4. Timer/Counter

5. Serial port

6. 7-Segment

7. LCD Module정보통신•컴퓨터 공학부 교수 이 재 흥

Page 2: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

개요? Features

? bit단위의 연산(Boolean)과 제어기능 우수? 8bit 단위의 4개의 I/O port

? 2개의 16bit Timer / Counter? Program-memory / Data-memory 각각 64K까지 확장가능? 128 bytes of on-chip Data RAM

? 사용자가 임의로 지정할 수 있는 128bit의 Flag? 다중 모드로 사용할 수 있는 고속 serial port? 우선순위 설정이 가능한 4개의 interrupt

? 파워 절약 모드 (idle mode / power-down mode)

Page 3: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? CPU? CU (Control Unit)

? Source / Destination operand 제어? ALU 동작 제어

? PC (Program Counter)? 16bit Register

? ALU (Arithmetic Logic Unit)? 8bit 논리연산? 캐리 없는 덧셈, 캐리 있는 덧셈/뺄셈? 8bit / 16bit increment, 8bit decrement? BCD(Binary Coded Decimal) 10진 조정? 곱셈 / 나눗셈? AND, OR, XOR, rotate? Byte/Bit complement? Nibble 단위의 데이터 교환? Bit 단위 (Boolean) 처리기능? 조건 점프의 판단기능

개요

Page 4: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

개요? Block Diagram

Page 5: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

개요? Register / PSW

? Accumulator? PSW (Program Status Word)

? 기타 Registers? B Register? SP (Stack Pointer)? DPTR (Data PoinTeR)

CY AC F0 RS1 RS0 OV - P7 6 5 4 3 2 1 0

패리티 플래그

오버플로 플래그

뱅크 선택 비트

패리티 플래그

보조 캐리 플래그

캐리 플래그

Page 6: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? Memory Structure

개요

SFR 영역(Special Function Reg.)

0xFF

0x800x7F

0x300x2F

0x200x1F0x180x170x100x0F

0x080x07

0x00 0x0000

0x0FFF0x1000

0xFFFF

0x0000

0xFFFF

내부 RAM 및 SFR 프로그램 메모리 데이터 메모리

사용자 데이터메모리 영역

비트 단위로처리 가능한 영역

뱅크3(R0~R7)

뱅크2(R0~R7)

뱅크1(R0~R7)

뱅크0(R0~R7)

외부ROM

내부 ROMor

외부 ROM

외부 데이터메모리

Page 7: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 파워 절약 모드? PCON (Power CONtrol Register)

? SMOD (Serial MODe double baud rate)? 데이터 통신의 시리얼 클럭 생성

? GF (General purpose Flag)? 사용자가 임의로 사용

? PD (Power Down)? Set Power down mode

? IDL (IDLe mode)? Set Idle mode

개요

SMOD - - - GF1 GF0 PD IDL

7 6 5 4 3 2 1 0

Page 8: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? Pin

개요

Pin 기 능

RxD 시리얼 입력 포트

TxD 시리얼 출력 포트

INT0 외부 인터럽트 0INT1 외부 인터럽트 1T0 타이머 0 외부 입력

T1 타이머 1 외부 입력

WR 외부 데이터 메모리 출력 스트로브

RD 외부 데이터 메모리 입력 스트로브

RESET 시스템 리셋

ALE/PROG Address Latch EnablePSEN Program Strobe ENableEA/Vpp External Access EnableXTAL 1,2 반전된 발진 증폭기에 대한 입력, 출력

P0~3 입출력 포트

A0~A15 Address BusD0~D7 Data Bus

U?

8051

EA/VP31

X119

X218

RESET9

INT012

INT113

T014

T115

P1.01

P1.12

P1.23

P1.34

P1.45

P1.56

P1.67

P1.78

P0.039

P0.138

P0.237

P0.336

P0.435

P0.534

P0.633

P0.732

P2.021

P2.122

P2.223

P2.324

P2.425

P2.526

P2.627

P2.728

RD17

WR16

PSEN29

ALE/P30

TXD11

RXD10

Page 9: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

개요? Timing diagram

? Program memory read cycle

FLOAT A7 - A0 FLOAT INST IN A7 - A0 FLOAT INST IN FLOAT

ADDRESS A15 – A8 ADDRESS A15 – A8

(1) (2)

(3)

(4)

(5)

(6)

(7)

(8)(3)

OSC

PORT 2

PORT 0

RD/WR

PSEN

ALE

T12 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T1 T2

Page 10: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

개요

? Data memory read cycle

FLOAT A7 - A0 FLOAT DATA IN FLOAT

ADDRESS A15 – A8

(1) (2)

(3)

(4)

(5)

(6)

(7)

(8)(3)

OSC

PORT 2

PORT 0

RD/WR

PSEN

ALE

T12 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T1 T2

ADDRESSOR FLOATINST IN

Page 11: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

개요

? Data memory write cycle

FLOAT A7 - A0 DATA OUT FLOAT

ADDRESS A15 – A8

(1)

(2)

(4)

(5) (6)

OSC

PORT 2

PORT 0

RD/WR

PSEN

ALE

T12 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T1 T2

ADDRESSOR FLOATINST IN

(3)(2)

Page 12: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

I/O port? I/O port 기능

? P0? 외부 프로그램 메모리와 데이터 메모리 연결

: 하위 어드레스 A0~A7 과 데이터 버스 D0~D7로 사용? 외부 메모리 차단 : 일반적인 입출력 포트로 사용

? P1? 사용자가 주변장치를 제어하는데 주로 사용

? P2? 외부 메모리 연결 : 상위 어드레스 A8~A15로 사용? 외부 메모리 차단 : 일반적인 입출력 포트로 사용? 외부 메모리의 하위 어드레스(A0~A7)만 연결

: 일반적인 입출력 포트로 사용? P3

? 입출력 포트로 사용 (P1과 동일)? 비트 단위로의 다른 기능

? 사용되지 않는 비트는 입출력 포트로 사용

RD WR T1 T0 INT1 INT0 TxD RxD7 6 5 4 3 2 1 0

read write Timerexternalinput

externalinterrupt

Transmitdata

receivedata

Page 13: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 실습1 : I/O port 를 이용한 LED 점등

I/O port

[LED 점등순서]

P13 P12 P11 P10

[P1값에 따른 LED동작]

pin P1 = led Led <<= 1 Led |= 0xf1

P10 0xfe(1111 1110) 0xfc(1111 1100) 0xfd(1111 1101)

P11 0xfd(1111 1101) 0xfa(1111 1010) 0xfb(1111 1011)

P12 0xfb(1111 1011) 0xf6(1111 0110) 0xf7(1111 0111)

P13 0xf7(1111 0111) 0xee(1110 1110) 0xff(1111 1111)

Page 14: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 실습1-1 : I/O 포트를 이용한 LED 점등 (led1-1.c)

I/O port

SELECT = 0x9e

P1 = led

일정시간 지연

led = led << 1

led = led | 0xf1

지역 변수 led 선언led = 0xfe

Led = 0xfe

led == 0xff ?No

Yes

LED 초기 점등값 저장

포트 선택 어드레스 설정

P1 으로 출력

LED 의 점등을 눈으로확인할 만큼의 시간 지연

LED 점등값 1bit left shift

상위 4비트는 “1111”로 마스크

P13 LED 까지점등되었는지 확인

초기값 저장

#include <win51.h>#define SELECT (*(unsigned char *)(0x2fc48))

Void delay (int del){ while(del--); }

Void main(void){

unsigned char led=0xf2 // led on 초기값

SELECT = 0x90 // led가 연결된 I/O선택

do{P1 = led; // led 점등

delay(30000);led <<=1; // led on 상태를 1bit left shiftled |= 0xf1; // 상위 4비트는 1111로 마스크

if(led==0xff) led=0xfe;} while(1); // 무한루프

}

Page 15: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 실습1-2 : I/O 포트를 이용한 LED 점등 (led1-2.ass)

I/O port

A reg. ← 11111110B

P1 ← A reg.

일정시간 지연

A reg. 1bit left shift

A reg. OR (11110001B)

A reg. ← 11111110B

A == FF ?No

Yes

LED 초기 점등값 저장

P1 으로 출력

LED 의 점등을 눈으로확인할 만큼의 시간 지연

LED 점등값 1bit left shift

상위 4비트는 “1111”로 마스크

P13 LED 까지점등되었는지 확인

초기값 저장

SELECT EQU 2fc48; I/O 선택 어드레스IO/SEL EqU 10011110 ; I/O 선택값

; 8051이 리셋되었을 경우 처음 시작번지ORG 0SJMP START ; 메인 프로그램으로 점프; 메인 프로그램 시작

START: MOV SP, #60H ; 스택 지정MOV A, #IO_SEL ; 포트선택 어드레스 설정MOV DPTR, #SELECT ; LATCH1 어드레스MOVX @DPTR, AMOV A, #11111110B ; LED ON 초기값

LP1: MOV P1, A ; LED ONCALL DELAY ; LED ON 지연시간RL A ; LED ON 상태를 왼쪽으로 1비트 이동ORL A, #0F0H ; 상위 4비트는 1111로 마스크CJNE A, #0FFH, LP1 ; P13까지 ON되었는지 검사MOV A, #11111110B ; P13까지 ON 이면 LED

ON 초기값 저장SJMP LP1 ; 무한 루프; LED 점등 시간

DELAY : MOV R0, #2 ; R0 레지스터에 2를 저장DELAY1 : MOV R1, #0 ; R1 레지스터에 0(256)을 저장DELAY2 : MOV R2, #0 ; R2 레지스터에 0(256)을 저장DELAY3 : NOP

DJNZ R2, DELAY3 ; R2=R2-1값이 0이 아니면 DELAY3로 점프DJNZ R1, DELAY2 ; R1=R1-1값이 0이 아니면 DELAY2로 점프DJNZ R0, DELAY1 ; R0=R0-1값이 0이 아니면 DELAY1로 점프RETEND

Page 16: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 인터럽트란 …? CPU 가 정해진 프로그램의 처리 중

하드웨어적인 요청으로 다른 프로그램 실행

Interrupt

프로그램 실행 중

PC값을 스택에 저장

인터럽트 처리루틴

인터럽트가 요청한 일 처리

인터럽트 리턴

PC값을 스택에서 꺼낸다

프로그램을 다시 실행

~

인터럽트 요청

인터럽트 처리 루틴으로 이동

Page 17: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

Interrupt? 인터럽트 구조

? 인터럽트 종류 및 처리 시작번지

인터럽트 처리 시작 번지인터럽트 원인

0003H외부 인터럽트 0

000BH타이머/카운터 0

0013H외부 인터럽트 1

001BH타이머/카운터 1

0023H시리얼 포트

Page 18: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 인터럽트 제어 레지스터? 인터럽트에서 사용하는 인터럽트 요청 플래그

? TCON (Timer CONtrol register)

? IE0 : external interrupt 0 edge flag? TF0 : timer 0 overflow flag? IE1 : external interrupt 1 edge flag? TF1 : timer 1 overflow flag

? SCON (Serial CONtrol register)

? TI : transmit interrupt flag? RI : receive interrupt flag

Interrupt

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

7 6 5 4 3 2 1 0

SM0 SM1 SM2 REN B8 RB8 TI RI

7 6 5 4 3 2 1 0

Page 19: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 인터럽트 제어 레지스터? IE (Interrupt Enable) 레지스터

? EA : Enable All interrupt

? ES : Enable Serial interrupt? ET1 : Enable Timer 1 interrupt? EX1 : Enable eXternal 1 interrupt

? ET0 : Enable Timer 0 interrupt? EX0 : Enable eXternal 0 interrupt

Interrupt

EA - - ES ET1 EX1 ET0 EX0

7 6 5 4 3 2 1 0

Page 20: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 인터럽트 제어 레지스터? IP (Interrupt Priority control) 레지스터

? PS : serial port priority control

? PT1 : timer 1 priority control? PX1 : external interrupt 1 priority control? PT0 : timer 0 priority control

? PX0 : external interrupt 0 priority control

Interrupt

- - - PS PT1 PX1 PT0 PX0

7 6 5 4 3 2 1 0

Page 21: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

Interrupt? C 언어에서 인터럽트 처리 루틴 만들기

? 인터럽트 처리 루틴 사용 제한? 인수 전달 불가능

? C51 라이브러리에서 제공하는 함수 사용 불가능? 인터럽트 처리 루틴으로 들어가기 전에 사용하는 레지스

터를 자동으로 저장? 인터럽트 함수를 직접 호출 불가능

? 인터럽트 종류 및 인터럽트 벡터인터럽트 원인 인터럽트 벡터번호

외부 인터럽트 0 0타이머/카운터 0 1외부 인터럽트 1 2타이머/카운터 1 3

시리얼 포트 4

Page 22: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? C 언어에서 인터럽트 처리 루틴 만들기? 인터럽트 함수 만들기

#include <win51.h>::

void main( void ){

::

}

void external(void) interrupt 1 using 2{

::

}

external(void)-인터럽트 함수 이름 (사용자 임의 정의)

interrupt 1-인터럽트 벡터 번호

. 외부 인터럽트 0 : interrupt 0

. 타이머/카운터 0 : interrupt 1

. 외부 인터럽트 1 : interrupt 2

. 타이머/카운터 1 : interrupt 3

. 시리얼 포트 : interrupt 4

using 2-인터럽트 함수에서 사용할 레지스터뱅크-Option

Interrupt

Page 23: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

Interrupt? 실습2-1 : 인터럽트를 이용한 LED 점등 (led2-1.c)

led출력값 1bit left shift

상위 4비트는 “1111”로 마스크

P13 led 까지 ON되었는지 확인

초기값 저장

포트 1로 led값 출력

led = led << 1

led = led | 0xf1

P1 = led

led = 0xfe

led == 0xff ?

인터럽트처리 함수

인터럽트처리함수 끝

전역변수 led = 0xfe

SELECT = 0x9c

P1 = led

ET1 = EX1 = EA = 1

While(1)

변수 led를 전역변수로 선언초기값 저장

포트 선택 어드레스 설정

포트 1로 led 변수값 출력

외부 인터럽트 1: 에지모드, 인터럽트 인에이블

인터럽트 대기

메인함수

Yes

No

Page 24: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

Interrupt? 실습2-1 : 인터럽트를 이용한 LED 점등 (led2-1.c)

#include <win51.h>

#define SELECT (*(unsigned char *)(0x2fc48))

Void main(void)

{

// led 및 INT1키가 연결된 I/O를 선택

SELECT = 0x90 // led가 연결된 I/O선택

led = 0xfe;

P1 = led; // led 점등

IT1 = 1; // 외부 인터럽트 1에지 모드

EX1 = 1; // 외부 인터럽트 인에이블

EA = 1; // 인터럽트 인에이블

while(1); // 인터럽트 대기

}

// 외부 인터럽트 1 함수

Void EXINT1(void) interrupt 2

{

// led 상태를 왼쪽으로 1비트 이동하고,

// 상위 4비트는 ‘1111’과 마스크

led = (led << 1);

// P13까지 ON되었으면, led 초기값 저장

if(led==0xff) led = 0xfe;

P1 = led;

}

Page 25: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

Interrupt? 실습2-2 : 인터럽트를 이용한 LED 점등 (led2-2.ass)

인터럽트처리루틴 설정

Buffer 선택

P1 ← A reg.

ET1 = EX1 = EA = 1

SJMP$

0013H번지에 인터럽트 처리루틴으로 점프하는 명령을써 넣는다.

포트 선택 어드레스 설정

포트 1로 led 변수값 출력

외부 인터럽트 1: 에지모드, 인터럽트 인에이블

인터럽트 대기

메인함수

led출력값 1bit 왼쪽으로 로테이트

상위 4비트는 “1111”로 마스크

P13 led 까지 ON되었는지 확인

초기값 저장

포트 1로 led값 출력

A reg. left shift

A reg. OR (11110000B)

P1 ← A reg.

A reg. ← (11110000B)

A == 0xff ?

인터럽트처리 함수

인터럽트처리함수 끝

Yes

No

Page 26: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

Interrupt? 실습2-2 : 인터럽트를 이용한 LED 점등 (led2-2.ass)

SELECT EQU 2FC48H ; latch1 addressIO_SEL EQU 10011100B ; 인터럽트 실험을

하기위한I/O 포트 선택값

; 8051이 리셋되었을때 시작번지ORG 0000HSJMP START; 외부 인터럽트 1 벡터 테이블ORG 0013HSJMP INT_1; 메인 프로그램ORG 0030H

START: MOV SP, #60H ; 스택 지정; LED 및 INT1 키가 연결된 I/O를 선택MOV A, #IO_SELMOV DPTR, #SELECTMOVX @DPTR, AMOV A, #11111110B ; LED 점등 초기값MOV P1, A ; LED 점등

;SETB IT1 ; 외부 인터럽트 1 에지 모드SETB EX1 ; 외부 인터럽트 인에이블SETB EA ; 인터럽트 인에이블

WAIT: SJMP WAIT ; 인터럽트 대기

; 인터럽트 서비스 루틴INT_1:

RL A ; LED상태를 왼쪽으로 1비트 이동ORL A, #0F0H ; 상위 4비트는 ‘1111’과 마스크CJNE A, #0FFH, SKIP ; P13까지 ON되었으면MOV A, #0FEH ; LED 초기값 저장

SKIP: MOV P1, A ; 포트 1 출력RETI ; 인터럽트 리턴END

Page 27: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

타이머 / 카운터? 타이머/카운터란…

? 타이머? 1-머신 사이클 (내부 시스템 클럭 X 1/12)을 세는 것

? 카운터? 외부 핀 T0(P3.4), T1(P3.5)에 입력되는 클럭 혹은 이벤

트를 세는 것

? 타이머/카운터 동작

Clock 입력+1 증가

Overflow 발생 TCON reg.의TF0/TF1 bit set

TH0 TL0

타이머/카운터08bit

TH1 TL1

타이머/카운터18bit

Page 28: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 레지스터? TMOD (Timer MODe)

? GATE : 외부 인터럽트 단자 핀을 이용해서,

타이머/카운터의 정지/동작을 제어? C/T (Counter/Timer) : 카운터/타이머 모드 결정? M1, M0 : 동작 모드 결정

타이머/카운터

GATE C/T M1 M0 GATE C/T M1 M0

7 6 5 4 3 2 1 0

timer1 timer0

M1 M0 동작모드

0 0 모드 00 1 모드 11 0 모드 21 1 모드 3

Page 29: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 레지스터? TCON (Timer CONtrol)

? TR1,TR0 : Timer Run control

? TF1,TF0 : Timer overflow flag? 인터럽트가 인에이블 되어 있으면, 인터럽트를 요청

? CPU가 인터럽트 처리 루틴으로 들어갈 때

자동으로 클리어 된다.

타이머/카운터

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

7 6 5 4 3 2 1 0

Page 30: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

타이머/카운터? 동작 모드

? 모드 0? TL reg. (TL0,TL1) 의 하위 5비트를 32분주용으로 사용? TH reg. (TH0,TH1) 를 8비트 카운터로 사용

? 모드 1? TH reg. 와 TL reg. 를 사용한 16비트 카운터로 사용

? 모드 2? TL reg. 을 8비트 카운터로 사용? Overflow 발생시 TH reg. 에 저장되어 있던 시정수 값을 Auto

reload

? 모드 3? TL reg. 와 TL reg. 를 독립된 8비트 타이머/카운터로 동작

Page 31: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

타이머/카운터? 실습3-1 : 타이머/카운터를 이용한 LED 점등 (led3-1.c)

led출력값 1bit left shift

상위 4비트는 “1111”로 마스크

P13 led 까지 ON되었는지 확인

초기값 저장

포트 1로 led값 출력

led = led << 1

led = led | 0xf1

P1 = led

led = 0xfe

led == 0xff ?

인터럽트처리 함수

인터럽트처리함수 끝

Yes

No

전역변수 led = 0xfe

SELECT = 0x9e

타이머 1- 타이머 모드,- 모드 1- GATE OFF- 시정수= 65536(0x0000)

P1 = led

변수 led를 전역변수로 선언초기값 저장

포트 선택 어드레스 설정

메인함수

타이머 1 런인터럽트 인에이블

인터럽트 대기

포트 1로 led값 출력

Page 32: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 실습3-1 : 타이머/카운터를 이용한 LED 점등 (led3-1.c)

타이머/카운터

#include <win51.h>

// 포트 선택 어드레스

#define SELECT (*(unsigned char *)(0x2fc48))

// led 변수를 인터럽트 함수에도 사용하기 때문에

// 전역변수로 선언

Unsigned char led;

Void main(void)

{

// led 연결된 I/O를 선택한다

SELECT = 0x9e;

led = 0xfe;

// 타이머1, 모드1, 타이머모드, 게이트디스에이블

TMOD = 0x10;

TH1 = TL1 = 0; // 시정수 0000(65536)

P1 = led; // LED점등

ET1 = 1; // 타이머 1 인터럽트 인에이블

TR1 = 1; // 타이머 1 런

EA = 1; // 인터럽트 인에이블

while(1); // 인터럽트 대기

}

// 타이머 1 인터럽트 함수

Void TIMER1(void) interrupt 3

{

// led 상태를 왼쪽으로 1비트 이동하고,// 상위 4비트는 ‘1111’과 마스크

led = (led << 1) | 0xf1

// P13까지 ON되었으면, led 초기값 저장

if(led==0xff) led = 0xfe;

P1 = led; // led on

}

Page 33: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 실습3-2 : 타이머/카운터를 이용한 LED 점등 (led3-2.ass)

led출력값 1bit 왼쪽으로 로테이트

상위 4비트는 “1111”로 마스크

P13 led 까지 ON되었는지 확인

초기값 저장

포트 1로 led값 출력

A reg. left shift

A reg. OR (0F0H)

P1 ← A reg.

A reg. ← (11111110)

A reg. == 0FFH ?

인터럽트처리 함수

인터럽트처리함수 끝

Yes

No

타이머/카운터

Buffer 선택

P1 ← A reg. (0FEH)

타이머 1 런인터럽트 인에이블

A 레지스터에 초기값을저장하고 포트 1로 출력

메인함수

타이머 1- 타이머 모드,- 모드 1- GATE OFF- 시정수= 65536(0x0000)

인터럽트 대기

Page 34: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 실습3-2 : 타이머/카운터를 이용한 LED 점등 (led3-2.ass)

타이머/카운터

SELECT EQU 0FC48H ; I/O 선택 어드레스IO_SEL EQU 10011110B ; BUFFER/A,B 선택값

; 8051리셋번지ORG 0000HSJMP START ; 메인 프로그램으로 점프; 타이머 1 인터럽트 벡터 테이블ORG 001BHSJMP TIMER1 ; 인터럽트 처리루틴으로 점프; 메인 프로그램ORG 0030H

START: MOV SP, #60H ; 스택을 지정; BUFFER/A,B 선택MOV A, #IO_SELMOV DPTR, #SELECTMOVX @DPTR, A; 타이머 1 초기설정MOV TMOD, #10H

; 타이머1,모드1,타이머 모드,게이트 디스에이블; 시정수 0000(65536)

MOV TH1, #0 MOV TL1, #0 ; LED ON 초기값MOV A, #11111110B MOV P1, A ; LED 점등; 타이머 1 인터럽트 초기설정SETB ET1 ; 타이머 1 인터럽트 인에이블SETB TR1 ; 타이머 1 런SETB EA ; 인터럽트 인에이블SJMP $ ; 인터럽트 대기; 타이머 1 인터럽트 처리 루틴

INT_1: RL A ; LED상태를 왼쪽으로 1비트 이동ORL A, #0F0H ; 상위 4비트는 ‘1111’과 마스크CJNE A, #0FFH, SKIP ; P13까지 ON되었으면MOV A, #0FEH ; LED 초기값 저장

SKIP: MOV P1, A ; LED ONRETI ; 인터럽트 리턴END ; 프로그램 끝

Page 35: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

시리얼 포트? 시리얼 버퍼와 컨트롤 레지스터

? SBUF (Serial BUFfer)

? 송신할 데이터와 수신한 데이터를 일시적으로 저장하기 위한 특수 기능 레지스터

? SBUF로 데이터를 써 넣을 경우의 데이터 : 송신 데이터

? SBUF에서 데이터를 읽는 경우의 데이터 : 수신 데이터

? 수신 데이터 버퍼는 2중 구조로 되어 있어서 다음 프레임의 수신 시작 전에 CPU가 수신 인터럽트에 응답하지않아도 오버런(overrun) 에러가 일어나는 것을 방지

Page 36: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

시리얼 포트? 시리얼 버퍼와 컨트롤 레지스터

? SCON (Serial CONtrol)

? SM0,SM1 : 시리얼 포트의 모드 지정

? SM2 : 모드 2,3의 멀티 데이터 통신에서 사용? REN : Receive ENable? TB8(Transmit Bit 8) : 모드 2,3에서 전송할 9번째 비트

? RB8(Receive Bit 8) : 모드 2,3에서 수신된 9번째 비트? TI : Transmit Interrupt flag? RI : Receive Interrupt flag

SM0 SM1 SM2 REN TB8 RB8 TI RI

7 6 5 4 3 2 1 0

Page 37: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

시리얼 포트? 보레이트 (Baud rate)

? PCON (Power CONtrol)

? SMOD (Serial MODe double baud rate)

? GF0,GF1 (General Purpose flag) : 사용자 임의 사용? PD : Power Down? IDL : IDLe mode

SM0D - - - GF1 GF0 PD IDL

7 6 5 4 3 2 1 0

모드(SCON에서 지정) SMOD = 0 SMOD = 11, 3 타이머 1 오버플로/2 타이머 1 오버플로

2 시스템 클럭/4 시스템 클록/2모드 0 에서는 사용하지 않음.

Page 38: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

시리얼 포트? 보레이트 (Baud rate)

? 보레이트? 시리얼 클럭 : 시리얼로 비트를 전송하는 데 기준이 되는 신호

? 보(Baud) : 1비트를 만드는 데 필요한 클럭 수? 타이머/카운터 1에 의한 보레이트 (X : 의미 없음)

보레이트

모드 0 , 최대 1 MHz

모드 2 , 최대 375 kHz

모드 1,3 , 최대 62.5 kHz

19.2 K

9.6 K

4.8 K

2.4 K

1.2 K

137.5

110

110

시스템 클록

12 MHz

12 MHz

12 MHz

11.0592 MHz

11.0592 MHz

11.0592 MHz

11.0592 MHz

11.0592 MHz

11.0592 MHz

6 MHz

12 MHz

TMOD

X

1

1

1

0

0

0

0

0

0

0

C/T

X

1

0

0

0

0

0

0

0

0

0

모드

X

X

2

2

2

2

2

2

2

2

1

시정수

X

X

FFH

FDH

FDH

FAH

F4H

E8H

1DH

72H

FEEBH

SMOD

PCON

Page 39: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

시리얼 포트? 동작 모드

? 모드 0? 전송 포맷 : 쉬프트 레지스터

? 데이터 전송

? 데이터 수신

REN=0 SBUF에 데이터 저장 전송 전송끝 TI=1

REN=1RI=0

SBUF에 데이터 저장수신 수신끝RI=1

Page 40: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

시리얼 포트? 동작 모드

? 모드 1? 전송 포맷 : 8비트 비동기

? 데이터 전송

? 데이터 수신

REN=1 SBUF에 데이터 저장 RI=1 수신끝수신 RI=0

TI=1 SBUF에 데이터 저장 전송 TI=0

TI=1전송끝SBUF에 데이터 저장

6 5 4 3 2 1 07

StartBit

StopBit

10bit Frame8bit Data

Page 41: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

시리얼 포트

TI=1 SBUF에데이터 저장

TB8=0

TB8=1전송 TI=0 SBUF에

데이터 저장

전송끝 TI=1

REN=1 SBUF에데이터 저장

RB8 =마지막비트

수신끝수신

RB8=0

RB8=1

RI=0

RI=1

? 동작 모드? 모드 2

? 전송 포맷 : 9비트 비동기

? 데이터 전송

? 데이터 수신

6 5 4 3 2 1 07

StartBit

TB8

11bit Frame8bit Data

StopBit

Page 42: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

시리얼 포트

TI=1 SBUF에데이터 저장

TB8=0

TB8=1전송 TI=0 SBUF에

데이터 저장

전송끝 TI=1

? 동작 모드? 모드 3

? 전송 포맷 : 9비트 비동기

? 데이터 전송

? 데이터 수신

6 5 4 3 2 1 07

StartBit

TB8

11bit Frame8bit Data

StopBit

REN=1 SBUF에데이터 저장

수신끝수신 RB8=1 RI=0RI=1

Page 43: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

시리얼 포트? 실습4-1 : 시리얼 포트 모드 0 테스트 (serial.c)

수신함수 콜

일정시간 지연

송신함수 콜

수신된 값을 레벨미터에서 정확히보기 위하여 일정시간 지연

모드0 및송신 인에이블

74LS165의 LD(load)신호를 H? L?H를 가해서 DIP스위치값 IN

SELECT = 0x9bT0 = H? L? H

REN = 1

RI=0Select = 0x9f

수신 인에이블

RI = 1?

리턴 SBUF

DIP 스위치값수신해서 리턴

수신?

RI클리어 및74LS165 디스에이블

수신된 값 리턴

수신함수

No

Yes

74LS165 인에이블SELECT = 0x97

T0 = 0

REN = 0

TI = 0

수신 디스에이블

TI = 1?

송신

DIP 스위치값을레벨미터로 출력

송신 가능한가?

TI 클리어

송신

송신함수

No

Yes

ON

1 2

3 4

5 6

7

8

1 2

3 4

5 6

7

8

OND

IP S

WIT

CH

LEV

EL-M

ET

ER

Page 44: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

시리얼 포트? 실습4-1 : 시리얼 포트 모드 0 테스트 (serial.c)

#include <win51.h>// 시리얼포트 선택 어드레스#define SELECT (*(unsigned char *)(0x2fc48))// led 변수를 인터럽트 함수에도 사용하기 때문에// 송신함수. Buffer값을 받아서 송신Void TX_D(unsigned char buffer){

// SHIFT(74LS164)을 인에이블SELECT = 0x97;T0 = 0;REN = 0; // 송신 인에이블while(!TI); // 송신 가능할때까지 대기TI = 0; // 송신 플래그 클리어SBUF = buffer; // buffer값을 송신한다T0 = 1;

}// 수신함수. 수신된 값을 그대로 리턴한다Char RX_D(void){

// PISO(74LS165)의 LOAD 신호를 만든다SELECT = 0x9b;T0 = 1; // LD = HT0 = 0; // LD = LT0 = 1; // LD = H// 74LS165가 시프트가 가능해졌다REN = 1; // 수신 인에이블RI = 0;

while(!RI); // 수신 가능할때까지 대기RI = 0; // 수신 플래그 클리어SELECT = 0x9f;return(SBUF); // 수신된 값을 리턴

}// 수신, 송신 사이를 지연시키기 위한 함수Void delay(int i){

while(i--);}

Void main(void){

unsigned char dip;// 모드 0SM0 = 0;SM1= 0;TI = 1; // 송신 인에이블

// 수신된 값을 받아서 송신함수로 전달do{

dip = RX_D(); // 수신delay(5000); // 송신을 하기 위해서 일정시간 지연TX_D(dip); // 송신} while(1);

}

Page 45: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

시리얼 포트? 실습4-2 : 시리얼 포트 모드 0 테스트 (serial.ass)

수신서브루틴콜

일정시간 지연

송신서브루틴콜

수신된 값을 레벨미터에서 정확히보기 위하여 일정시간 지연

모드0 및송신 인에이블

74LS165 인에이블

ON

1 2

3 4

5 6

7

8

1 2

3 4

5 6

7

8

OND

IP S

WIT

CH

LEV

EL-M

ET

ER

74LS165의 LD(load)신호를 H? L?H를 가해서 DIP스위치값 IN

Buffer2/B 선택T0핀을 H? L? H

REN = 1

RI=0

수신 인에이블

RI = 1?

수신/수신값리턴

DIP 스위치값수신해서 리턴

수신?

RI클리어

수신된 값 리턴

수신서브루틴

No

Yes

수신 서브루틴리턴

수신 디스에이블

DIP 스위치값을레벨미터로 출력

송신 가능한가?

TI 클리어

송신

Buffer1/B 선택T0핀을 H? L? H

REN = 0

TI=0

TI = 1?

A reg.값 송신

송신서브루틴

No

Yes

송신 서브루틴리턴

Page 46: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 실습4-2 : 시리얼 포트 모드 0 테스트 (serial.ass)

SELECT EQU 0FC48H ; LATCH1 어드레스; 8051리셋 번지ORG 0000HSJMP START ; 메인 프로그램으로 점프; 메인 프로그램ORG 0030H

START : MOV SP, #60H ; 스택지정; 시리얼 포트 모드 0으로 설정CLR SM0CLR SM1SETB T0 ; T0핀=HSETB TI ; 송신 인에이블; 수신된 값을 받아서 송신 루틴으로 전달

LOOP :ACALL RX_D ; 수신ACALL DELAY ; 송신을 하기 위해서 일정시간 지연ACALL TX_D ; 송신SJMP LOOP; 수신함수. 수신된 값이 B레지스터에 로드된다

RX_D : MOV A, #10011011B ; BUFFER2/B 선택MOV DPTR, #SELECTMOVX @DPTR, A; PISO(74LS165)의 LOAD신호를 만든다SETB T0 ; LD = HCLR T0 ; LD = LSETB T0 ; LD = H; 74LS165의 스위치값을 시프트해서 로드SETB REN ; 수신 인에이블CLR RI ; 수신 플래그 클리어JNB RI,$ ; 수신가능할 때까지 대기CLR RI ; 수신 플래그 클리어

MOV B, SBUF ; 수신; BUFFER2/B를 디스에이블MOV A, #10011111BMOV DPTR, #SELECTMOVX @DPTR, ARET ; 수신 서브루틴 리턴; 송신함수. B 레지스터값을 송신

TX_D : MOV A, #10010111B MOV DPTR, #SELECT; SHIFT(74LS164)를 인에이블MOVX @DPTR, A; 송신이 가능한가 검사한다CLR T0 ; T0핀 “L”(74LS164 B 신호 “L”)CLR REN ; 송신 인에이블JNB TI, $ ; 송신 가능할 때까지 대기; 송신CLR TI ; 송신 플래그 클리어MOV SBUF, B ; 송신SETB T0 ; TO핀 “L”(74LS164 B 신호 “H”)RET ; 송신 서브루틴 리턴; 수신, 송신 사이를 지연시키기 위한 루틴

DELAY :MOV R0, #50H

DELAY1 : DJNZ R1, $DJNZ R0, DELAY1RETEND ; 프로그램 끝

시리얼 포트

Page 47: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

7-세그먼트? 7-세그먼트의 외부모양 및 드라이버

a

b

c

d

e

fg

dp

[외부 모양]

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

B

C

BI

LT

LATCH

D

A

GND

VCC

f

g

a

b

c

d

e

[4511 외부 핀 배치도]

X

BI LTLE D C B A a b c e f g

X X X X X 1 1 1 1 1 10

입 력 출 력

d

1

디스플레이숫자

8X 0 X X X X 0 0 0 0 0 01 0 Blank

0 1 0 0 0 0 1 1 1 1 1 01 1 00 1 0 0 0 1 0 1 1 0 0 01 0 10 1 0 0 1 0 1 1 0 1 0 11 1 20 1 0 1 1 1 1 1 0 0 11 1 30 1 0 1 0 0 0 1 1 0 1 11 0 40 1 0 1 0 1 1 0 1 0 1 11 1 50 1 0 1 1 0 0 0 1 1 1 11 1 60 1 0 1 1 1 1 1 0 0 01 0 7

0

10 1 1 0 0 0 1 1 1 1 1 11 1 80 1 1 0 0 1 1 1 1 0 1 11 0- 90 1 X 0 0 0 0 1 01 0 Blank

[4511 기능표]

Page 48: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

7-세그먼트? 실습5 : 시계 만들기

min_h min_l sec_h sec_l

초가 59초가 넘으면 +1씩 증가.60분이 되면 00으로 초기화.

1초마다 +1 증가.60초가 되면 00으로 초기화

Page 49: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

7-세그먼트? 실습5-1 : 시계 만들기 (watch.c)

0.071 초마다 인터럽트 요청10진수로 증가

처리루틴을 실행하는 동안 정지0.71초 마다 +1증가

1초?

1초마다 +1증가

10이면 클리어 하고, 초 상위 숫자 +1

6이면 클리어 하고, 분 하위 숫자를 +1

10이면 클리어 하고, 분 상위 숫자를 +1

6이 되었으면 클리어

시정수 저장 및 타이머 1 런

초의 하위숫자가 10이 되었는지 검사

수의 상위숫자가 6이 되었는지 검사

분의 하위숫자가 10이 되었는지 검사

초, 분을 디스플레이

타이머1 인터럽트 처리함수

타이머1 정지, count++

count=14 ?

sec_l++

sec=10 ?

sec_l=0, sec_h++

sec_h=6 ?

sec_h=0, min_l++

min_l=10 ?

min_l=0, min_h++

min_h=6 ?

min_h=0

디스플레이

시정수 저장, 타이머1 런

인터럽트 처리 함수 끝

Y

Y

Y

Y

N

N

Y

N

N

N

분의 상위숫자가 10이 되었는지 검사

메인함수

count, sec_h, sec_l,min_h, min_l 전역변수 정의

타이머1, 모드1, GATE ON

TH1=TL1=0

count=sec_h=sec_l=min_h=min_l=0

ET1=TR1=EA=1

메인함수 끝

Count는 인터럽트 수, sec_h, sec_l 은 분 저장

INT1 키를 누르면 동작을 정지시키기 위하여 GATE ON

시정수가 0.071초가 된다.0.71x14=0.994

INT1키, 소수점 선택

Count, 초, 분 변수 초기설정

타이머 1 런, 인터럽트 인에이블

SELECT = 0xbd

Page 50: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 실습5-1 : 시계 만들기 (watch.c)

7-세그먼트

#include <win8051.h>// 포트 선택 어드레스#define SELECT (*(unsigned char*)(0x2fc48))// 7-세그먼트 상위 어드레스#define FNDH (*(unsigned char*)(0x2fc4c))// 7-세그먼트 하위 어드레스#define FNDL (*(unsigned char*)(0x2fc4d))// 전역변수로 선언, // 인터럽트 수 카운터용, 초, 분 저장하는데 사용unsigned char count, sec_l, sec_h, min_l, min_h;

void main(void){// 7세그먼트 클리어FNDH=0;FNDL=0;// 타이머 1, 모드 1, GATE ONTMOD = 0x90;// 1초에 대한 시정수는 다음과 같이 계산한다.// 11.0592[MHz]/12 = 921600, 1/921600=1.085[us]// 타이머 1의 최대 카운터 값은 65536 이기 때문에// 1.085[us] x 65536 = 0.071초// 0.071초 x 14 = 1초// 즉 인터럽트를 14번 요청하면 1초가 된다.TH=0;TL1=0;// INT1 키 및 소수점 디스플레이SELECT = 0튱;// 카운터, 초, 분 변수를 클리어count=sec_l=sec_h=min_l=min_h=0;// 인터럽트 인에이블 및 타이머 1 런ET1 = 1;TR1=1;EA = 1;while(1); // 인터럽트 대기

}

// 타이머 1 인터럽트 함수void TIMER1(void) interrupt 3{

TR1=0; // 타이머 정지count++; // 0.71초 마다 증가// count가 14가 되면 1초if(count==14) {

count=0;sec_l++; // 초 증가// 하위 4비트가 10이 되면 상위값 증가if(sec_l==10) {

sec_l=0;sec_h++;// 상위값이 6이 되면 분 하위 4비트 증가if(sec_h==6) {

sec_h=0;min_l++;// 하위 4비트가 10이 되면 상위 값 증가if(min_l==10) {min_l=0;min_h++;// 상위값이 6이 되면 1시간if(min_h==6)

min_h=0;}

}}

}// 현재값 디스플레이FNDL = sec_l | (sec_h << 4);FNDH = min_l | (min_h << 4);

}// 0.017초 시정수값 다시 저장TH1=0;TL1=0;TR1=1; // 타이머 런

}

Page 51: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

7-세그먼트? 실습5-2 : 시계 만들기 (watch.ass)

메인함수

타이머1, 모드1, GATE ON

TH1=TL1=0

count = sec = min = 0

ET1=TR1=EA=1

인터럽트 대기

INT1 키를 누르면 동작을 정지시키기 위하여 GATE ON

시정수가 0.071초가 된다.0.71x14=0.994

INT1키, 소수점 선택

Count, 초, 분 변수 초기설정

타이머 1 런, 인터럽트 인에이블

Buffer1/A 선택

처리루틴을 실행하는 동안 정지

0.71초 마다 +1증가

1초?

Count=0.71 이면 클리어하고1초마다 +1증가

sec이 60이면, 분 증가

min값을 클리어

시정수 저장 및 타이머 1 런

60초가 되었는지 검사

60분이 되었는지 검사

초, 분을 디스플레이

타이머1 인터럽트 처리 루틴

count++

count=14 ?

count = 0 , sec++

sec=60 ?

sec=0, min++

min=60

min=0

디스플레이 서브루틴 콜

TL1=TH1=0, TR1=1

인터럽트 처리 루틴 끝

Y

Y

N

N

YN

타이머1 정지

0.071 초마다 인터럽트 요청10진수로 증가

Page 52: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

? 실습5-2 : 시계 만들기 (watch.ass)

7-세그먼트

SELECT EQU 0FC48H ; 포트 선택 어드레스FNDH EQU 0FC4CH ; 7-세그먼트 상위 어드레스FNDL EQU 0F4CDH ; 7-세그먼트 하위 어드레스

; 8051 리셋번지ORG 0000H SJMP START

; 타이머1 인터럽트 벡터 테이블ORG 001BHSJMP TIMER1 ; 인터럽트 처리 루틴으로 점프

; 메인 프로그램ORG 0030H

START : MOV SP, #60H : 스택 지정MOV PSW, #00H : 뱅크 0 사용; 7-세그먼트 상위 클리어MOV A, # 0MOV DPTR, #FNDHMOV @DPTR, A; 7-세그먼트 하위 클리어MOV DPTR, #FNDLMOV @DPTR, A; 타이머 1초기설정MOV TMOD, #90H ;타이머 1, 모드 1, GATE ON; 1초에 대한 시정수는 다음과 같이 계산한다.; 11.0592[MHZ]/12 = 921600. 1/921600 = 1.085[㎲]; 타이머 1의 최대 카운터 값은 65536 이기 때문에; 1.085 [㎲] X 65536 = 0.071초; 0.071초 X 14 = 1초; 즉, 인터럽트를 14번 요청하면 1초가 된다.MOV TH1, #0MOV TL1, #0; 그림 8-3의 I/O(INT 1 키)와 7-세그먼트 소수점 선택MOV A, #10111101BMOV DPTR, #SELECTMOVX @DPTR, A;MOV R7, #0 ; 분 버퍼 클리어MOV R6, #0 ; 초 버퍼 클리어MOV B, #0 ; 인터립트 카운터 클리어; 타이머 1 인터럽트 인에이블SETB ET1 ; 타이머 1 인터럽트 인에이블SETB TR1 ; 타이머 1 런

SETB EA ; 모든 인터럽트 인에이블SJMP $ ; 인터럽트 대기

; 디스플레이 서브루틴DISPLAY : MOV A, R7 ; 분 디스플레이

MOV DPTR, #FNDH ; 상위값 디스플레이MOVX @DPTR, A ; 초 디스플레이MOV A, R6MOV DPTR, #FNDL ; 하위값 디스플레이MOVX @DPTR, ARET; 타이머 1 인터럽트 처리 루틴

TIMER1 : CLR TR1 ; 타이머 정지INC B ; 인터럽트 수 카운트MOV A, BCJNE A, #14, NEXT1; R5가 14번이면 1초MOV B, #0 ; 인터럽트 카운터 클리어; 초를 10진수로 +1해서 초 버퍼에 다시 저장MOV A, R6ADD A, #1DA AMOV R6, A; 60초가 되었는지 검사CJNE A, #60H, NEXT ; 60초가 되지 않았으면 디스플레이; 60초가 되었으면 분 버퍼 증가MOV R6, #0 ; 초 버퍼 클리어MOV A, R7ADD A, #1 ; 분 증가DA A ; 10진 조종MOV R7, ACJNE A, #60H, NEXT ; 60분이 되었나 검사; 60분이 되었으면 분 버퍼 클리어MOV R7, #0 ; 분, 초 디스플레이

NEXT : CALL DISPLAY; 0.017초 시정수값 다시 저장

NEXT1 : MOV TH1, #0 MOV TL1, #0SETB TR1 ; 타이머 런RETI ; 인터럽트 리턴END ; 프로그램 끝

Page 53: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

LCD 모듈? Display RAM 구조 (128 X 64 dot)

(64dot)

8biY

8biY X0~X7Y0X0~X7Y1

X8~X15Y0

… …

X16~X23Y0

X24~X31Y0

X32~X39Y0

X40~X47Y0

X48~X55Y0

X56~X63Y0

… … … … …

X0~X7Y2 … … … … … … …

X0~X7Y3 … … … … … … …

X0~X7Y4 … … … … … … …

X0~X7Y5 … … … … … … …

X0~X7Y6 … … … … … … …

X0~X7Y7 … … … … … … …

page0page1page2

page7

page1page2

page7

LCD0(64dot)

LCD1(64dot)

page0X0~X7Y0X0~X7Y1

X8~X15Y0

… …

X16~X23Y0

X24~X31Y0

X32~X39Y0

X40~X47Y0

X48~X55Y0

X56~X63Y0

… … … … …

X0~X7Y2 … … … … … … …

X0~X7Y3 … … … … … … …

X0~X7Y4 … … … … … … …

X0~X7Y5 … … … … … … …

X0~X7Y6 … … … … … … …

X0~X7Y7 … … … … … … …

Page 54: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

LCD 모듈? Font Data 만들기 (8 X 8 dot)

Font Data = 0x42, 0x61, 0x51, 0x49, 0x47, 0x00, 0x00, 0x00

0 1 1 1 1 0 0 0 1 0 0 0 1 0 0 00 0 0 0 1 0 0 00 0 0 1 0 0 0 00 0 1 0 0 0 0 0 0 1 0 0 0 0 0 01 1 1 1 1 0 0 00 0 0 0 0 0 0 0

Page 55: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

LCD 모듈? 제어 명령

기 호DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

기 능명 령R/W D/I

디스플레이 on/off0 0 1 1 1 1 1 10 0 디스플레이 ON

디스플레이 시작 라인 1 1디스플레이 스타트 라인

(0~63)0 0LCD 꼭대기에 디스플레이 할RAM 라인을 지정

페이지 셋 (X 어드레스) 1 0 1 1 1 페이지(0~7)0 0 X 어드레스 셋

Y 어드레스 셋 0 1 Y 어드레스 (0~63)0 0 Y 어드레스 셋

③ 0 ② ① 0 0 0 01 0

스테터스 리드 ① 리셋; 1:리셋, 0:보통② 디스플레이 ON/OFF ; 1:OFF, 0:ON③ BUSY; 1:내부동작 중, 0:리드/라이트 가능

디스플레이 데이터 라이트 라이트 데이터0 1 디스플레이 RAM으로 라이트

디스플레이 데이터 리드 리드 데이터1 1 디스플레이 RAM으로 리드

디스플레이 RAM에서 리드/라이트를 하면 Y어드레스는 +1 증가한다.R/W : READ/WRITE, D/I : DATA/INSTRUCTION

0 0 1 1 1 1 1 00 0 디스플레이 OFF

Page 56: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

LCD 모듈? LCD 어드레스

어드레스

0xfc40

0xfc41

0xfc42

0xfc43

LCD1 인스트럭션 (LCD0_IW)

LCD1 데이터라이트 (LCD0_DW)

LCD1 스테터스 (LCD0_IR)

LCD1 데이터 리드 (LCD0_DR)

레지스터

LCD0 인스트럭션 (LCD0_IW)

LCD0 데이터라이트 (LCD0_DW)

LCD0 스테터스 (LCD0_IR)

LCD0 데이터 리드 (LCD0_DR)

0xfc41

0xfc42

0xfc43

0xfc44

Page 57: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

LCD 모듈? 실습6 : 폰트 “M” LCD display

1Byte

1Byte

1Byte 1Byte

왼쪽-윗부분 8X8 : 0xff, 0xff, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0오른쪽-윗부분 8X8 : 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0xff, 0xff

왼쪽-아래부분 8X8 : 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01

오른쪽-아래부분 8X8 : 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff

Page 58: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

LCD 모듈? 실습6-1 : 폰트 “M” LCD display (lcd.c)

“M” 은 16X8 상위 폰트“M1” 은 16X8 하위 폰트

LCD 기본 명령들 삽입

LCD 전 화면 클리어

왼쪽 LCD 페이지, 어드레스 설정

루프 카운터 클리어

폰트를 얻어서 LCD로 출력

폰트 모두 디스플레이 ?

왼쪽 LCD 페이지, 어드레스 설정

루프 카운터 클리어

폰트를 얻어서 LCD로 출력

폰트 모두 디스플레이 ?

“M”,”M1” 글자폰트배열

메인 함수

인클루드 LCD_IW.h

LCD 클리어 함수 콜

LCDpage0, address0셋

i = 0

Font=M[i++], font(font)

i=16?

LCDpage1, address0셋

i = 0

Font=M1[i++], font(font)

i=16?

무한 루프

No

No

Yes

Yes

Page 59: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

LCD 모듈? 실습6-1 : 폰트 “M” LCD display (lcd.c)

#include <win51.h>

// “M” 상위 16X8 폰트unsigned char M[]={0xff, 0xff, 0x06, 0x0c,

0x18, 0x30,0x60, 0xc0,0xc0, 0x60, 0x30, 0x18,0x0c 0x06, 0xff, 0xff}

// “M1” 하위 16X8 폰트unsigned char M1[]={0xff, 0xff, 0x00, 0x00,

0x00, 0x00, 0x00, 0x01,0x01, 0x00, 0x00, 0x00,0x00, 0x00, 0xff, 0xff}

// LCD0,1 명령어가 있는 헤더 파일#include “lcd_iw.h”

//메인 프로그램void main(void){

unsigned char i, font; // LCD 전화면을 클리어clear(); //페이지0, 어드레스0의 위치에 displaylcd0_page(0x00);lcd0_address(0x00);for(i=0; i<16; i++){

font=M[i];font0(font);

}

lcd0_page(0x01);lcd0_address(0x00);for(i=0; i<16; i++){

font=M1[i];font0(font);

}while(1);

}

Page 60: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

LCD 모듈? 실습6-2 : 폰트 “M” LCD display (lcd.ass)

LCD 전 화면 클리어

폰트를 얻는다.

폰트를 LCD로 출력

LCD 클리어

메인 프로그램

LCDpage0, address0셋

R7←0, DPTR←M

A←R7, MOVC A, @DPTR

폰트 디스플레이 서브루틴 콜

A←R7, MOVC A, @DPTR

폰트 디스플레이 서브루틴 콜

R7←R7+1

R7=16?

JMP 0006H

No

Yes

R7←R7+1

R7=16?No

Yes

LCDpage1, address0셋

R7←0, DPTR←M1

“M”,”M1” 글자 폰트 테이블

인클루드 LCD_IW.h

왼쪽 LCD 페이지, 어드레스 설정

루프 카운터 겸폰트 테이블 인덱스 클리어,

DPTR을 상위 16X8 폰트테이블로 설정

폰트 테이블 인덱스 +1

폰트 모두 디스플레이 ?

왼쪽 LCD 페이지, 어드레스 설정

루프 카운터 겸폰트 테이블 인덱스 클리어,DPTR을 상위 16X8 폰트테이블로 설정

폰트를 얻는다.

폰트를 LCD로 출력

폰트 테이블 인덱스 +1

폰트 모두 디스플레이 ?

MDA-WIN8051로 리턴

“M” 은 16X8 상위 폰트“M1” 은 16X8 하위 폰트

LCD 기본 명령들을 삽입

Page 61: MDA WIN 8051artoa.hanbat.ac.kr/lecture_data/microprocessor/8051_old.pdf · 2012-08-02 · MDA – WIN 8051 1. 8051 개요 2. I/O port 3. Interrupt 4. Timer/Counter 5. Serial port

Hanbat National University prof. Lee Jae-heung

LCD 모듈? 실습6-2 : 폰트 “M” LCD display (lcd.ass)

; 파일 이름 : LCDO. A51ORG 0000H ; 8051 리셋 번지JMP START ; 메인 프로그램으로 점프; 메인 프로그램ORG 0030H

START: MOV SP, #60HMOV PSW, #0CALL CLEAR0 ; LCD0 클리어CALL CLEAR1 ; LCD1 클리어; 페이지 0, 어드레스 0 설정MOV A, #0CALL XPAGE0MOV A, #0CALL ADDR0; 페이지 0부터 가로로 16폰트 디스플레이MOV DPTR, #M ; 폰트 어드레스 설정MOV R7, #0 ; 폰트 인덱스 클리어

LOOP1: MOV A, R7 ; 폰트 인덱스 로드MOVC A, @A+DPTR ; 폰트 로드CALL FONT0 ; 폰트 디스플레이INC R7 ; 폰트 인덱스 + 1CJNE R7, #16, LOOP1 ;16개의 폰트 디스플레이; 페이지 1, 어드레스1 설정MOV A, #1 ; 페이지 1 설정CALL XPAGE0MOV A, #0 ; 어드레스 0 설정CALL ADDR0; 페이지 1부터 가로로 16 폰트 디스플레이MOV DPTR, #M1 ; 폰트 어드레스 설정MOV R7, #0 ; 폰트 포인터 초기 설정

LOOP2: MOV A, R7 ; 폰트 포인터 로드MOVC A, @A+DPTR ; 폰트를 리드한다.CALL FONT0 ; 폰트 출력INC R7 ; 폰트 포인터를 +1CJNE R7, #16, LOOP2 ; 16번 루프JMP 0006H ; MDA-WIN8051로 리턴; “M” 16 X 16 폰트

M: DB 11111111B, 11111111B, 00000110B, 00001100BDB 00011000B, 00110000B, 01100000B, 11000000BDB 11000000B, 01100000B, 00110000B, 00011000BDB 00001100B, 00000110B, 11111111B, 11111111BDB 11111111B, 11111111B, 00000000B, 00000000BDB 00000000B, 00000000B, 00000000B, 00000001BDB 00000001B, 00000000B, 00000000B, 00000000BDB 00000000B, 00000000B, 11111111B, 11111111B; LCD 기본 명령어들을 삽입

$INCLUDE (LCD_IW. INC)END