83
8051 8051 의 의의 의 의의 8051 의 의 의의 의 CPU 의의 의의의 의의 8051 의 의의 의의 의의 [email protected] http:// blog.naver.com/dolicom

8051 의 이해

  • Upload
    kapono

  • View
    65

  • Download
    3

Embed Size (px)

DESCRIPTION

8051 의 이해. 8051 의 칩 구성 및 CPU 이해 메모리 구조 8051 의 신호 포트 구성. [email protected] http://blog.naver.com/dolicom. 8051 의 특징. 4K 바이트의 프로그램 메모리 내장 4 개의 레지스터 뱅크를 포함한 128 바이트 데이터 메모리 사용자 지정 가능한 128 비트 플래그 불 (boolean) 대수 처리 기능 8 비트 단위의 4 개의 입 . 출력 포트 (P0,P1,P2,P3) 2 개의 16 비트 타이머 / 카운터 - PowerPoint PPT Presentation

Citation preview

80518051 의 이해의 이해

8051 의 칩 구성 및 CPU 이해 메모리 구조 8051 의 신호 포트 구성

[email protected]://blog.naver.com/dolicom

8051 의 특징

4K 바이트의 프로그램 메모리 내장4 개의 레지스터 뱅크를 포함한 128 바이트 데이터

메모리사용자 지정 가능한 128 비트 플래그불 (boolean) 대수 처리 기능8 비트 단위의 4 개의 입 . 출력 포트 (P0,P1,P2,P3)2 개의 16 비트 타이머 /카운터다중모드로 사용할 수 있는 고속 직렬 포트우선 순위 설정 가능한 4 개의 인터럽트64K 바이트까지 확장 가능한 프로그램 데이터 메모리아이들 (idle) 모드와 파워 다운 모드 기능

8051 패밀리

기능 8051 8052 8031ROM (program) 4K 8K 0KRAM ( 데이터 ) 128 256 128Timer 2 3 2I/O 핀 32 32 32Serial 포트 1 1 1인터럽트 소스 6 8 6

8051 8051 내부 구조내부 구조

8051 의 이해

8051 의 내부 구성

CPU

RAM

ROM

프로그램

4 I/O 포트

Timer 0

Serial PortOSC

Interrupt Control

외부 인터럽트

Timer 1

Timer/Counter

Bus Control

TxD RxDP0 P1 P2 P3

Address/Data

카운터

입력

CPU - 8051

제어장치 (CU : Control Unit)A,B 레지스터일반 레지스터 (R0~R7)PSW (Flag)PC (16 비트 프로그램 카운터 )SP (8 비트 내부 데이터 데이터 포인터 )데이터 포인터 (DPTR)

제어장치 CU – Control Unit

명령을 읽어 해독하고 명령이 실행될 때까지 CPU 의 내부 신호를 만든다 .

CPU 제어신호소스 /목적지 오퍼랜드를 제어하는 신호

MOV A,#10 -> 10 을 읽어 레지스터에 저장 산술논리 연산장치의 동작을 제어하는 신호

ADD A,#10 -> A 레지스터와 10( 오퍼랜드 임시버퍼 ) 와 더하기 위한 ALU 제어 신호 발생

PC 프로그램 카운터

프로그램 메모리에 저장되어 있는 명령의 실행을 위한 위치를 가리키는 16 비트 레지스터실행시킬 명령이 기억되어 있는 프로그램

메모리의 번지를 가리킨다 .

CPU 리셋 (RESET) 신호에 의해 0x0000 으로 지정됨 .리셋에 의해 프로그램 메모리의 0000H 번지

부터 실행

ALU (Arithmetic Logic Unit)

8 비트 산술 논리 연산장치덧셈 +, 뺄셈 –8/16 비트 +1 증가 , 8 비트 -1 감소BCD (Binary Coded Decimal) 10 진 조정곱셈 나눗셈AND, OR, XOR, 로테이트 (Rotate)바이트 컴플리먼트 (1 의 보수 ), 비트 컴플리먼트니블 (nibble: 4 비트 ) 단위의 데이터 교환비트 단위 처리 기능 (Boolean 대수 처리기능 )조건 점프의 판단 기능

레지스터 및 PSW

A(accumulator)산술 논리 연산명령에서 연산자로 사용 - 명령이 끝나면 결과 기억로테이트 , 패리티 검사 , 제로 테스터 명령에

사용간접 점프 및 프로그램 읽기명령에서 오프셋

(offset) 으로 사용외부 데이터 메모리와 데이터 전송프로그램 메모리에서 데이터 읽을 때

PSW (Program Status Word)

ALU 을 통해 실행되는 결과의 플래그 상태 저장

직접 영향을 주는 명령ADD, SUBB, RRC, …모든 명령이 영향을 주지 않는다 : MOV

사용자 플래그 : F0레지스터 뱅크 선택 (RS1, RS0)

PSW 구성

CY AC F0 RS1 OVRS0 P--

RS1 RS0 레지스터 뱅크 주 소

0 0 0 00H-07H

0 1 1 08H-0FH

1 0 2 10H-17H

1 1 3 18H-1FH

PSW.0 CY : 캐리 플래그 (Carry Flag)PSW.1 AC : 보조 캐리 플래그 (Auxiliary carry flag)PSW.2 F0 : 사용자 플래그PSW.3 RS1 : 뱅크 선택 상위 비트 1PSW.4 RS0 : 뱅크 선택 상위 비트 0PSW.5 OV : 오버플로 플래그 (Overflow Flag)PSW.6 –PSW.7 P : 패리티 플래그 (odd/even parity)

리셋

B, SP

B 레지스터 8 비트 곱셈 /나눗셈 – A 레지스터와 함께 16 비트

레지스터로 사용곱셈 /나눗셈의 결과 저장

SP ( 스택 포인터 : Stack Pointer) 8 비트로 스택의 메모리 번지를 가리킴 (RAM) 8051 의 내부 메모리 사용 리셋 후 08H 번지로 지정 – 프로그래머에 의해

변경하여 사용 할 수 있다 . 스택에 저장 (PUSH) 할 때 주소값 1 증가하고 꺼낼

때 1 감소

DPTR (Data Pointer)

16 비트 레지스터 상위 8 비트 (DPH) 와 하위 8 비트

(DPL) 로 사용 가능외부 데이터 메모리에서 전송할 때

주소값으로 사용 – 어드레스 포인터간접 점프명령에서 점프할 주소값 저장프로그램 읽기 명령에서 베이스 (base)

레지스터

8051 8051 메모리 구조메모리 구조

8051 의 이해

8051 메모리 구조

7F

302F

201F

17

100F

0708

18

00

80

FF

뱅크 0(R0~R7)

뱅크 1(R0~R7)

뱅크 2(R0~R7)

뱅크 3(R0~R7)

비트단위 처리 영역

사용자 데이터 메모리 영역

특수기능레지스터

내부 RAM & SFR

(SFR)

내부 ROM

외부 ROM64K

외부 RAM64K

0000

0FFF1000

FFFF

0000

FFFF

프로그램 메모리 데이터 메모리

EA=0EA=1

4K(8051)

60K 64K

0000

0FFF

8051 의 메모리의 구성 I

내부 메모리 특수 영역 내부 RAM

일반 레지스터 일반 변수 영역 ( 사용자 데이터 영역 ) 특수 기능 레지스터 (Timer, 시리얼 통신 제어 ) 비트 단위 처리 변수 영역

프로그램 영역 4K 바이트 (8051) 프로그램 저장 다양한 용량의 패밀리 칩이 있음

8051 의 메모리의 구성 II

외부 메모리 외부 프로그램 메모리 확장 ( 외부 ROM)

64K 바이트 까지 확장 가능한 프로그램 메모리 8051 의 경우 내부 4K 바이트는 EA 핀으로

제어• EA=0 : 전 영역을 외부 ROM 으로 0x0000~0xFFFF• EA=1 : 내부 ROM (0x0000~0x0FFF)+ 외부

ROM(0x1000~0xFFFF)

외부 데이터 메모리 내부 데이터 메모리와 별도로 64K 바이트 까지

확장 가능 별도의 명령에 의해 외부 데이터 억세스

• NOVX A,@DPTR

내부 내부 RAMRAM

- 일반 레지스터일반 레지스터- 비트 어드레스 영역- 사용자 데이터 영역과 스택- SFR

8051 의 이해

8051 의 메모리의 구성

CPU 일반 레지스터 R0~R7 일반레지스터 4 뱅크

8 개의 일반 데이터 저장용 레지스터 4 개의 뱅크로 구성 뱅크 설정은 PSW 의 RS1:RS0 비트를 설정하

면 , 이 R0~R7 은 해당 메모리에 할당 된다 .

RS1:RS0 에 의해 뱅크가 할당되면 레지스터 R0~R7 은 해당 뱅크로 주소값이 설정 된다 .

뱅크의 개념

00

01

02

03

04

05

06

07

R0

R1

R2

R3

R4

R5

R6

R7

08

09

0A

0B

0C

0D

0E

0F

R0

R1

R2

R3

R4

R5

R6

R7

10

11

12

13

14

15

16

17

R0

R1

R2

R3

R4

R5

R6

R7

18

19

1A

1B

1C

1D

1E

1F

R0

R1

R2

R3

R4

R5

R6

R7

뱅크 0 뱅크 1 뱅크 2 뱅크 3

RS[1:0]=00 RS[1:0]=01 RS[1:0]=10 RS[1:0]=11PSW

MOV A,R0

R0 : 00 R0 : 08 R0 : 10 R0 : 18

MOV A,R0

00

01

02

R0

R1

R2

. . .

08

09

0A

R0

R1

R2

. . .

10

11

12

R0

R1

R2

. . .

18

19

1A

R0

R1

R2

. . .

뱅크 0 뱅크 1 뱅크 2 뱅크 3

RS[1:0]=00 RS[1:0]=01 RS[1:0]=10 RS[1:0]=11PSW

34 13 22 30

34

D3

03

13

C3

4D

22

A5

B5

30

44

B5

R0

11 22 33 44A

34 13 22 30A

실행전

실행후

뱅크의 사용 예

인터럽트가 발생하면 인터럽트 서비스 루틴에서 사용하는 모든 레지스터를 스택에 대피 해야 하는데 , 뱅크를 변경하면 기존의 뱅크 R0~R7 의 레지스터 값은 유지되고 다른 뱅크에 값이 변경 된다 .

00

01

02

R0

R1

R2

. . .

08

09

0A

R0

R1

R2

. . .

뱅크 0 뱅크 1

34

D3

03

13

C3

4D

• A,B,PSW 스택에 대피• ISR 의 시작에서 뱅크 변경

* 리셋 후초기에SP=0FH로 변경

ISR 에서 사용

ISR (Interrupt Service Rountine)인터럽트 서비스루틴 - 인터럽트 시처리 프로그램

비트 어드레스 영역

내부 RAM 0x20~0x2F 16 바이트각 비트 별로 변수 선언 가능16x8=128 개의 비트 변수 선언 가능비트 번호 0x00~0x7F 로 선언C 에서 선언과 사용 bit keyst; - 0 과 1 의 boolean 상태 bit save, cy; save = P14 ^ P15; - 포트 1 의 4 와 5 핀의 상태를 XOR

한다 cy = (P14 & P15) | (save & P16);

사용자 데이터 영역과 스택

사용자 데이터 영역사용자가 정의하여 사용하는 일반 메모리0x30~0x7F 메모리C 에서 char, int 등의 일반 변수를 선언하면 이

영역에 할당스택

스택은 SFR 외의 영역에 임의의 위치에 설정할 수 있다 .

리셋에 의 SP=0x07 로 0x08 부터 사용MOV SP,#60 명령으로 메모리 위치 변경이 가능C 에서는 내부적으로 처리 된다 .

Startup.a51 에 정의 되어 있다 .

SFR – 특수 기능 레지스터

내부 RAM 0x80 ~ 0xFF 에 할당CPU 동작과 관련된 레지스터

A,B,PSW, SP, DPTR

포트 (Port) : P0, P1, P2, P3Interrupt : IP, IEPower Control : PCONTimer : TCON,TMOD,TL0, TL1, TH0,TH1Serial 통신 : SCON, SBUF

외부 데이터 메모리

내부 RAM 과 별도 64K 바이트 까지 가능 외부에 데이터를 저장 한다 . MOVX 명령으로 전송

MOVX A,@DPTR MOVX @DPTR,A

C 에서#define SELECT (*(unsigned char*)(0x2fc48)) SELECT = 0x9e;#define ADDR (*(unsigned char xdata *)(0x22000)) ADDR = 0x31;C = *((char xdata *) 0x27000);

프로그램 메모리

8051 은 내부 4K 바이트 ROM 0x0000~0x0FFF

외부 프로그램 메모리 가능 (64K 바이트 )내부 ROM 과 외부 ROM 이 있을 경우 내부의

4K 바이트 ROM 을 선택 가능

내부 ROM사용

외부 ROM60K

0000

0FFF1000

FFFF

프로그램 메모리

EA=1 EA=0

4K(8051)

0000

0FFF 내부 ROM 사용 않함

외부 ROM64K

0000

0FFF1000

FFFF

4K(8051)

0000

0FFF

외부 ROM4K 사용 않함

프로그램 메모리

C51 에서 사용하는 메모리형

C51 에서 사용하는 메모리형과 포인터값

메모리형포인터

값설 명

idata 1 간접 액세스 가능한 내부 RAM 0x00~0x7F

xdata 2 외부 데이터 메모리 0x0000~0xFFFF

pdata 3페이지화된 외부 데이터 메모리0x00~0xFF

data 4 직접 액세스 가능한 내부데이터 0x00~0x7F

code 5 프로그램 메모리 (64K 0x0000~0xFFFF)

파워 절약 모드

8051 의 파워 절약 모드아이들 모드 (idle mode)파워 다운 모드

PCON 으로 설정 한다 . IDL=1 : 아이들 모드 PD=1 : 파워 다운 모드 IDL=1, PD=1 : 파워 다운 모드

PCON0x87

7 6 5 4 3 2 1 0

SMOD GF1 GF0 PD IDL- - -

XTAL2 XTAL1

클럭발생회 로

PDIDL

CPU

•인터럽트 로직•시리얼 포트•타이머

8051

OSC

아이들 모드 (Idle Mode)

타이머 /시리얼 인터럽트에 의해 아이들 모드 빠져 나온다 .

ISR 에서 IDL 을 클리어 하여 보통상태로시스템 쉬지 있다가 외부 입력이 들어오면 응답

시스템 초기설정이벤트가 발생할 때까지 대기하여 파워 절약이벤트시 인터럽트 요청 -> ISR 로 들어 간다 .ISR 에서 IDL 클리어 하여 처리하고다시 IDL 로 들어 간다 .

파워 다운 모드

클럭 발진 자체를 정지하여 파워 다운에서 빠져 나오려면 리셋 밖에는 없다 .

데이터 메모리와 레지스터 값 유지시스템 이상 시 내부 데이터 RAM 보존데이터 메모리는 백업 배터리가 연결되어

있어야 하며 , 전원 감시가 필요

파워다운 모드 시 진행 절차

시스템을 초기설정하고 프로그램 실행전원 이상 장치를 계속 감시전원 이상 발생하면 내부 데이터

메모리를 백업 배터리가 있어 데이터 보존이 가능한 외부 메모리로 옮김

CPU 는 PD 를 1 로 셋 하여 파워다운 모드로 들아감

파워다운 모드는 하드웨어 리셋으로 해제

8051 8051 핀 기능 및 인터페이스핀 기능 및 인터페이스

8051 의 이해

8051 칩 구조

1234567891011121314151617181920

4039383736353433323130292827262524232221

P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RST

(RXD)P3.0(TXD)P3.1

(T0)P3.4(T1)P3.5

XTAL2XTAL1

GND

(INT0)P3.2(INT1)P3.3

(RD)P3.7(WR)P3.6

VccP0.0(AD0)P0.1(AD1)P0.2(AD2)P0.3(AD3)P0.4(AD4)P0.5(AD5)P0.6(AD6)P0.7(AD7)EA/VPPALE/PROGPSENP2.7(A15)P2.6(A14)P2.5(A13)P2.4(A12)P2.3(A11)P2.2(A10)P2.1(A9)P2.0(A8)

8051(8031)

8051 의 핀 기능

포트의 구조 및 기능RESET 리셋ALE (Address Latch Enable)PSENEAXTAL1, XTAL2전원 : VCC(+5V), VSS(GND)

8051 핀 – 전원과 클럭 발진

Vcc( 40핀): 칩에 Vcc 전압을공급한다 . +5V 전원 .

GND( 20핀):GND 클럭 : XTAL1 / XTAL2( 19,18 핀 )

단순한 크리스탈발진기을 XTAL1 과XTAL2 에 연결

외부에서 발진 클럭을 XTAL1 에만공급

클럭의 발진 방법 1

CPU 는 이 클럭에맞추어 동작 .

GND

30pF

30pF

C1

C2

발진회로

CPU

XTAL1

XTAL2

외부 클럭을 사용

외부에서 완전한 클럭을 만들어 공급

GND

발진회로사용 하지 않음

CPU

Vcc

사용하지 않음사용하지 않음

CPU 클럭

XTAL1

XTAL2

발진회로

Machine Cycle

한 명령이 실행되기 까지의 전체 시간Fetch - 기계어 명령 읽기Decode - 기계어 기능 해석Execute - 실행Store - 메모리에 저장

ADD A,R0

외부 데이터와 클럭 -MOVX 예

머신 사이클

XTAL = 11.0592 MHz 11.0592 MHz / 12 = 921.6 kHz machine cycle = 1 / 921.6 kHz = 1.085 sXTAL = 16 MHz. 16 MHz / 12 = 1.333 MHz; machine cycle = 1 / 1.333 MHz = 0.75 s

한 명령이 실행되는 시간 (12 클럭 )주파수와 시간과는

시간 = 1주파수 주파수 = 1

시간

RESET 리셋

RST(9 핀): resetActive high : 리셋 시 1 을 입력 CPU 동작

시 적어도 2 머신사이클 동안 1 로 유지 파워 온 리셋 (Power-on reset)

5V

R 4.7K

RESET

74HC14C4.7uF

ViR VRESET

74HC14

VIN VOUT

RESET Time

R 과 C 의 값에 따라 시간이 결정 된다 .

ViH

t

V14in

VRESET

RESET time=2 머신사이클 이상

ViR

74LS14 내부 입력 처리

5V

R 4.7K

74HC14C4.7uF

ViR VRESET ViL0

쉬미트 트리거

리셋 (Reset) 시 초기값 설정

0000DPTR

0007SP

0000PSW

0000B

0000ACC

0000PC

리셋 값레지스터

모든 RAM 0 으로채움

8051 외부 데이터 액세스 신호

/EA( 31핀): External Access – 외부 프로그램 메모리 사용

8031, 8032 은 ROM 이 없어 의미없다 ./EA = 0 외부 프로그램 메모리 사용/EA = 1 내부 프로그램 메모리 사용

/PSEN( 29핀): Program Store Enable 프로그램 메모리를 읽고 있다는 의미ROM 의 /CS 및 /OE 신호를 만드는데 사용

ALE( 30핀): Address Latch Enable - Active high 포트 0 어드레스 버스와 데이터 버스 양쪽다 사용하기

때문에 구분필요ALE=1 일 때 , 포트 0 은 어드레스버스이므로

74LS373에 래치하여 하위 8 비트 주소값으로 사용

8051 8051 포트 포트 P0~P3P0~P3

8051 의 이해

Read-Modify-Write Instruction한 명령에 의해 데이터를 읽고 , 조작 한 후 다시 쓰는 명령

ANL (AND) ANL PI, AORL (OR) ORL P2, AXRL (XOR) XRL P3, AJBC ( 조건 점프 ) JBC P1.1,LABELCPL ( 비트보수 ) CPL P3.0INC (1 증가 ) INC P2DEC (1 감소 ) DEC P2)DJNZ (0 일때 까지 반복 ) DJNZ P3, LABELMOV PX.Y,C (Port X.Y 에 캐리값을 세트 )CLR PX.Y (Port X.Y 클리어 )SETB PX.Y (Port X.Y 에 1 세트 )

Read-Modify-Write 예

ExampleMnemonics

SETB P1.4SETB PX.Y

CLR P1.3CLR PX.Y

MOV P1.2,CMOV PX.Y,C

DJNZ P1,TARGETDJNZ PX, TARGET

INC P1INC

CPL P1.2CPL

JBC P1.1, TARGETJBC PX.Y, TARGET

XRL P1,AXRL

ORL P1,AORL

ANL P1,AANL

DEC P1DEC

8051 Port 구조

포트 0 (P0.0 ~ P0.7)

8 비트 오픈 드레인 (Open Drain)일반 포트 사용–외부메모리 사용 않 할 때입력으로 사용할 때는 1 을 출력하고 사용외부메모리 사용할 때 하위 어드레스

A0~A7 로 사용ALE=1 일 때 하위 어드레스 임을 나타내므로

74LS373 으로 래치 하여 사용

포트 0 - 일반 포트 동작 구조

D Q

Clk Q

래치 읽기

핀 입력

래치에쓰기 제어 신호

CPU 내부 데이터 버스

M1

P0.X 핀P1.X

TB1

TB2

포트 0 출력으로 사용

P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7

8051

Vcc

10 K

Port 0

오픈 드레인 – 풀업 저항 필요

포트 0 – 출력 구조

D Q

Clk Q

래치 읽기

핀 입력

래치에쓰기 제어 신호

CPU 내부 데이터 버스

M1P0.X

P1.X

TB1

TB2

+5V

10K

포트 0 출력 – 출력 0

D Q

Clk Q

래치 읽기

핀 입력

래치에쓰기 제어 신호

CPU 내부 데이터 버스

M1P0.X

P1.X

TB1

TB2

+5V

10K

0

1On

0 출력0

CLR P0.0

0

0

MOV P1,#0FFH

포트 0 출력 – 출력 1

D Q

Clk Q

래치 읽기

핀 입력

래치에쓰기 제어 신호

CPU 내부 데이터 버스

M1P0.X

P1.X

TB1

TB2

+5V

10K

Off1 출력

MOV P1,#0FFH

1

0

0

1

0

포트 0 – 입력으로 사용

D Q

Clk Q

래치 읽기

핀 입력

래치에쓰기 제어 신호

CPU 내부 데이터 버스

M1P0.X

P1.X

TB1

TB2

Off

• 초기 설정으로 1 을 출력 한다 . 시스템이 시작할 때 한번 한다 .P0.x = 1;P0 = 0xFF;

• 입력 명령으로 핀의 상태를 읽는다unsigned char pst; pst = P0;

MOV P0,#0FFH

1 1

0

MOV A,P0

1

포트 0 외부 메모리의 버스로 사용

외부 메모리를 액세스 하기 위해서는 포트 0는 주소 하위 8 비트와 데이터 비트로 사용 한다 .

입출력을 위한 풀업 저항은 필요 없다 .ALE, /PSEN, /RD, /WR 신호와 함께

ROM 과 RAM 의 제어 신호를 만든다 .

외부 ROM

D

74LS373ALE

P0.0

P0.7

PSEN

A0

A7

D0

D7

P2.0

P2.7

A8

A15

OE

CS

EA

G

8051 ROM

외부 ROM 읽기 – step1

D

74LS373ALE

P0.0

P0.7

PSEN

A0

A7

D0

D7

P2.0

P2.7

A8

A12

OE

CS

EA

G

8051 ROM

1. 8051 읽기 신호 보냄

2. 74373 에 하위 8 비트 주소값을 저장

Address 하위 8 비트

Address 상위 8비트

외부 ROM 읽기 – step2

D

74LS373ALE

P0.0

P0.7

PSEN

A0

A7

D0

D7

P2.0

P2.7

A8

A12

OE

CS

EA

G

8051 ROM

2. 74373 에 하위 8 비트

주소값을 저장 되어 있다 .

Address

3. ROM 은 데이터 보낸다 .

외부 프로그램 메모리 읽기

ALE

PORT0

PORT2

PSEN

명령어 A0-A7 명령어 IN A0-A7

A8-A15 OUT

A0-A7 LATCH OUT74LS373 에 래치

외부 RAM

D

74LS373ALE

P0.0

P0.7

PSEN

A0

A7

D0

D7

P2.0

P2.7

A8

A15

CS

WE

EA

G

8051

외부RAM

OERDWR

외부 RAM 쓰기 MOVX @DPTR,A

D

74LS373ALE

P0.0

P0.7

PSEN

A0

A7

D0

D7

P2.0

P2.7

A8

A15

CS

WE

G

8051

외부RAM

OERDWR

1

01

0

01

외부 데이터 메모리 쓰기

ALE

PORT0

PORT2

WR

PSEN

명령어 A0-A7 DATA OUT A0-A7

A8-A15 OUT

A0-A7 latch74LS373 에 래치

RD = 1

외부 데이터 메모리 쓰기

외부 RAM 읽기 MOVX A,@DPTR

D

74LS373ALE

P0.0

P0.7

PSEN

A0

A7

D0

D7

P2.0

P2.7

A8

A15

CS

WE

G

8051

외부RAM

OERDWR

1

10

0

10

외부 데이터 메모리 읽기

ALE

PORT0

PORT2

RD

PSEN

명령어 A0-A7 DATA IN A0-A7

A8-A15 OUT

A0-A7 LATCH OUT74LS373 에 래치

WR = 1

포트 1

P1.0 ~ P1.7

8 비트 양방향 입출력 단자

내부 풀업 되어 있다 외부 저항이 필요 없다

범용 입출력으로 사용 한다 .

포트 1 의 구조

D Q

Clk Q

래치 읽기

핀 입력

래치에쓰기 제어 신호

CPU 내부 데이터 버스

M1

P1.X 핀P1.X

TB1

TB2

Vcc

Load(L1)

포트 1 – 출력 1 을 했을 때

D Q

Clk Q

래치 읽기

핀 입력

래치에쓰기 제어 신호

CPU 내부 데이터 버스

M1

P1.X 핀

P1.X

TB1

TB2

Vcc

Load(L1)1. 핀에 1 을 출력 MOV P1,#0FFH

2. 출력 Vcc

Off

1

0

0Z

0

Z

1

포트 1 – 출력 0 을 했을 때

D Q

Clk Q

래치 읽기

핀 입력

래치에쓰기 제어 신호

CPU 내부 데이터 버스

M1

P1.X핀P1.X

TB1

TB2

Vcc

Load(L1)1. 핀에 0 을 출력 MOV P1,#00H

2. 출력 GND

On

0Z

0

Z

0

0

0 0

1

포트 1 – 입력 1

D Q

Clk Q

래치 읽기

핀 입력

래치에쓰기 제어 신호

CPU 내부 데이터 버스

M1

P1.X 핀

P1.X

TB1

TB2

Vcc

Load(L1)1. 핀에 1 출력 MOV P1,#0FFH

2. MOV A,P1 외부 핀

=High1

1

11

0Z

1 1

0Off

포트 1 – 입력 0

D Q

Clk Q

래치 읽기

핀 입력

래치에쓰기 제어 신호

CPU 내부 데이터 버스

M1

P1.X 핀P1.X

TB1

TB2

Vcc

Load(L1)

3. 내부버스로 전달

2. MOV A,P1 외부 핀=0V0

1

00

0Z1. 핀에 1 출력 MOV P1,#0FFH

1 1

0 Off

포트 프로그램

; 초기 설정 과정 MOV A,#0FFH ;A=11111111B

MOV P1,A ;P1 을 입력으로 설정

; 포트로 부터 입력하기BACK: MOV A,P1 ; 포트에서 읽어 A 로

MOV P2,A ; P2 에 출력 SJMP BACK ; 반복

C 에서의 사용

#include <win51.h>void init_port(){ P1 = 0xFF; - 포트를 입력으로 하기 위해 초기값을

설정}

unsigned char pdata;

void main(){ init_port(); while (1) { pdata = P1; P2 = pdata ; }}

Read-Modify-Write 명령어 실행MOV P1,#55H ;P1=01010101ORL P1,#0F0H ;P1=11110101

D Q

Clk Q

래치 읽기

핀 입력

래치에쓰기 제어 신호

CPU 내부 데이터 버스

M1

P1.7 핀P1.7

TB1

TB2

Vcc

Load(L1)CPU P1.7=0 OR 1

1

0

0

Z

1

11110101

P1.7=0

0

1

0

1

0

P1.7=1

포트 2

P2.0 ~ P2.78 비트 양방향 입출력 단자내부 풀업 되어 있다

외부 저항이 필요 없다범용 입출력으로 사용 한다 .외부 메모리 사용할 때는 A8~A15 로

사용

포트 3

P3.0 ~ P3.78 비트 양방향 입출력 단자내부 풀업 되어 있다다른 기능과 선택적으로 사용

시리얼 통신 신호: RxD, TxD외부 인터럽트 신호: /INT0, /INT1타이머의 클럭 입력: T0, T1외부 메모리 액세스 신호: /WR, /RD

포트 3 의 다른 기능 신호

17RDP3.716WRP3.615T1P3.514T0P3.413INT1P3.312INT0P3.2

11TxDP3.1

10RxDP3.0

핀번호기능P3 비트