6.8051의 이해 - pds17.egloos.compds17.egloos.com/pds/200908/31/64/6.8051.pdf · 8051...
TRANSCRIPT
80518051의의 이해이해
8051의 칩 구성 및 CPU 이해
메모리 구조메모리 구조
8051의 신호
포트 구성포트 구성
[email protected]://blog naver com/dolicomhttp://blog.naver.com/dolicom
8051의 특징8051의 특징
4K 바이트의 프로그램 메모리 내장4K 바이트의 프로그램 메모리 내장
4개의 레지스터 뱅크를 포함한 128바이트 데이터 메모리리
사용자 지정 가능한 128비트 플래그
불(boolean) 대수 처리 기능불(boolean) 대수 처리 기능
8비트 단위의 4개의 입.출력 포트(P0,P1,P2,P3)
2개의 16비트 타이머/카운터/
다중모드로 사용할 수 있는 고속 직렬 포트
우선 순위 설정 가능한 4개의 인터럽트
64K 바이트까지 확장 가능한 프로그램 데이터 메모리
아이들(idle) 모드와 파워 다운 모드 기능
8051 패밀리8051 패밀리
기능 8051 8052 8031ROM (program) 4K 8K 0KROM (program) 4K 8K 0KRAM (데이터) 128 256 128Timer 2 3 2Timer 2 3 2I/O 핀 32 32 32Serial 포트 1 1 1Serial 포트 1 1 1인터럽트 소스 6 8 6
8051의 이해8051의 이해
80 180 1 내부내부 구조구조8051 8051 내부내부 구조구조
8051의 내부 구성8051의 내부 구성
ROM
외부 인터럽트
Timer/Counter
RAM
ROM
프로그램Timer 0
Interrupt Control
Timer 1 카운터
입력
CPU
4 I/O 포트Serial PortOSC
Bus Control
TxD RxDP0 P1 P2 P3
Address/Data
CPU - 8051CPU 8051
제어장치 (CU : Control Unit)
A B레지스터A,B레지스터
일반 레지스터 (R0~R7)
PSW (Flag)
PC (16비트 프로그램 카운터)PC (16비트 프로그램 카운터)
SP (8비트 내부 데이터 데이터 포인터)
데이터 포인터 (DPTR)
제어장치 CU – Control Unit제어장치 CU Control Unit
명령을 읽어 해독하고 명령이 실행될 때까지 CPU의 내부 신호를 만든다.까지 의 내부 다
CPU 제어신호소스/목적지 오퍼랜드를 제어하는 신호소스/목적지 오퍼랜드를 제어하는 신호
MOV A,#10 -> 10을 읽어 레지스터에 저장
산술논리 연산장치의 동작을 제어하는 신호ADD A,#10 -> A 레지스터와 10(오퍼랜드 임시버퍼)와 더하기 위한 ALU 제어 신호 발생퍼)와 더하기 위한 ALU 제어 신호 발생
PC 프로그램 카운터PC 프로그램 카운터
프로그램 메모리에 저장되어 있는 명령의실행을 위한 위치를 가리키는 16비트 레행 위 위치 가리키 비 레지스터
실행시킬 명령이 기억되어 있는 프로그램 메실행시킬 명령이 기억되어 있는 프로그램 메모리의 번지를 가리킨다.
CPU 리셋(RESET) 신호에 의해 0 0000CPU 리셋(RESET) 신호에 의해 0x0000으로 지정됨.
리셋에 의해 프로그램 메모리의 0000H번지부터 실행
ALU (Arithmetic Logic Unit)ALU (Arithmetic Logic Unit)
8비트 산술 논리 연산장치덧셈 +, 뺄셈 –8/16비트 +1 증가, 8비트 -1 감소
BCD (Binary Coded Decimal) 10진 조정
곱셈 나눗셈
AND, OR, XOR, 로테이트(Rotate)
바이트 컴플리먼트(1의 보수), 비트 컴플리먼트
니블(nibble: 4비트) 단위의 데이터 교환
비트 단위 처리 기능 (Boolean 대수 처리기능)
조건 점프의 판단 기능
레지스터 및 PSW레지스터 및 PSW
A(accumulator)산술 논리 연산명령에서 연산자로 사용산술 논리 연산명령에서 연산자 사용
- 명령이 끝나면 결과 기억
로테이트 패리티 검사 제로 테스터 명령에로테이트, 패리티 검사, 제로 테스터 명령에사용
간접 점프 및 프로그램 읽기명령에서 오프셋간접 점프 및 프로그램 읽기명령에서 오프셋(offset)으로 사용
외부 데이터 메모리와 데이터 전송외부 데이터 메모리와 데이터 전송
프로그램 메모리에서 데이터 읽을 때
PSW (Program Status Word)PSW (Program Status Word)
ALU을 통해 실행되는 결과의 플래그 상태 저장태 저장
직접 영향을 주는 명령ADD SUBB RRCADD, SUBB, RRC, …모든 명령이 영향을 주지 않는다 : MOV
사용자 플래그 : F0
레지스터 뱅크 선택 (RS1 RS0)레지스터 뱅크 선택 (RS1, RS0)
PSW 구성PSW 구성
CY AC F0 RS1 OVRS0 PCY AC F0 RS1 OVRS0 P--
PSW.0 CY : 캐리 플래그 (Carry Flag)PSW.1 AC : 보조 캐리 플래그 (Auxiliary carry flag)PSW.2 F0 : 사용자 플래그PSW.3 RS1 : 뱅크 선택 상위 비트 1PSW 4 RS0 : 뱅크 선택 상위 비트 0PSW.4 RS0 : 뱅크 선택 상위 비트 0PSW.5 OV : 오버플로 플래그 (Overflow Flag)PSW.6 –PSW.7 P : 패리티 플래그 (odd/even parity)
RS1 RS0 레지스터뱅크 주 소
0 0 0 00H 07H 리셋0 0 0 00H-07H
0 1 1 08H-0FH
1 0 2 10H-17H
리셋
1 1 3 18H-1FH
B SPB, SP
B 레지스터B 레지스터8비트 곱셈/나눗셈 – A레지스터와 함께 16비트 레지스터로 사용스터로 사용
곱셈/나눗셈의 결과 저장
SP (스택 포인터 : Stack Pointer)SP (스택 포인터 : Stack Pointer)8비트로 스택의 메모리 번지를 가리킴(RAM)
8051의 내부 메모리 사용8051의 내부 메모리 사용
리셋 후 08H 번지로 지정 – 프로그래머에 의해 변경하여 사용 할 수 있다.
스택에 저장(PUSH) 할 때 주소값 1증가하고 꺼낼 때1 감소
DPTR (Data Pointer)DPTR (Data Pointer)
16비트 레지스터
상위 8비트 (DPH)와 하위 8비트(DPL)로상위 8비트 (DPH)와 하위 8비트(DPL)로사용 가능
외부 데이터 메모리에서 전송할 때 주소외부 데이터 메모리에서 전송할 때 주소값으로 사용 – 어드레스 포인터
간접 점프명령에서 점프할 주소값 저장
프로그램 읽기 명령에서 베이스(b ) 레프로그램 읽기 명령에서 베이스(base) 레지스터
8051의 이해8051의 이해
80518051 메모리메모리 구조구조8051 8051 메모리메모리 구조구조
8051 메모리 구조8051 메모리 구조
FF특수기능레지스터
FFFF FFFF
7F
30
80
사용자 데이터메모리 영역
(SFR)
302F
20
비트단위처리 영역 외부 ROM
64K외부 RAM
64K60K 64K
1F
1718
뱅크 2
뱅크 3(R0~R7)
64K
100F
0708
뱅크 0
뱅크 1(R0~R7)
(R0~R7)
내부 ROM 0FFF1000
EA=0EA 1
4K(8051)0FFF
00뱅크 0
(R0~R7)
내부 RAM & SFR
0000 0000
프로그램 메모리 데이터 메모리
EA=10000
8051의 메모리의 구성 I8051의 메모리의 구성 I
내부 메모리특수 영역 내부 RAM특수 영역 내부 RAM
일반 레지스터
일반 변수 영역(사용자 데이터 영역)일 수 영역(사용자 데이터 영역)
특수 기능 레지스터 (Timer, 시리얼 통신 제어)
비트 단위 처리 변수 영역
프로그램 영역프로그램 영역4K 바이트(8051) 프로그램 저장
다양한 용량의 패밀리 칩이 있음다양한 용량의 패밀리 칩이 있음
8051의 메모리의 구성 II8051의 메모리의 구성 II
외부 메모리외부 메모리외부 프로그램 메모리 확장 (외부 ROM)
64K 바이트 까지 확장 가능한 프로그램 메모리
8051의 경우 내부 4K 바이트는 EA 핀으로 제어EA 0 전 영역을 외부 ROM으로 0 0000 0 FFFF• EA=0 : 전 영역을 외부 ROM으로 0x0000~0xFFFF
• EA=1 : 내부 ROM (0x0000~0x0FFF)+외부ROM(0x1000~0xFFFF)
외부 데이터 메모리내부 데이터 메모리와 별도로 64K 바이트 까지 확장 가능장 가능
별도의 명령에 의해 외부 데이터 억세스• NOVX A @DPTR• NOVX A,@DPTR
8051의 이해8051의 이해
내부내부 RAMRAM내부내부 RAMRAM
-- 일반일반 레지스터레지스터
- 비트 어드레스 영역
- 사용자 데이터 영역과 스택
- SFRSFR
8051의 메모리의 구성8051의 메모리의 구성
CPU 일반 레지스터R0~R7 일반레지스터 4뱅크R0 R7 일반레지 터 4뱅
8개의 일반 데이터 저장용 레지스터
4개의 뱅크로 구성개의 뱅 구성
뱅크 설정은 PSW의 RS1:RS0 비트를 설정하면, 이 R0~R7은 해당 메모리에 할당 된다.
RS1:RS0에 의해 뱅크가 할당되면 레지스터 R0~R7은 해당 뱅크로 주소값이 설스터 R0 R7은 해당 뱅크로 주소값이 설정 된다.
뱅크의 개념 MOV A R0뱅크의 개념 MOV A,R0
07R7 0FR7 17R7 1FR7
RS[1:0]=00 RS[1:0]=01 RS[1:0]=10 RS[1:0]=11PSW
05
06
07
R5
R6
R7
0D
0E
0F
R5
R6
R7
15
16
17
R5
R6
R7
1D
1E
1F
R5
R6
R7
03
04
R3
R4
0B
0C
R3
R4
13
14
R3
R4
1B
1C
R3
R4
01
02
R1
R2
09
0A
R1
R2
11
12
R1
R2
19
1A
R1
R2
00R0 08R0 10R0 18R0
뱅크 0 뱅크 1 뱅크 2 뱅크 3
R0 : 00 R0 : 08 R0 : 10 R0 : 18
MOV A R0MOV A,R0
. . . . . . . . . . . .
뱅크 0 뱅크 1 뱅크 2 뱅크 3
01
02
R1
R2
09
0A
R1
R2
11
12
R1
R2
19
1A
R1
R2
D3
03
C3
4D
A5
B5
44
B5
00R0 08R0 10R0 18R034 13 22 30
RS[1:0]=00 RS[1:0]=01 RS[1:0]=10 RS[1:0]=11PSW
34 13 22 30R0
11 22 33 44A
34 13 22 30A
실행전
실행후 34 13 22 30A실행후
뱅크의 사용 예ISR (Interrupt Service Rountine)인터럽트 서비스루틴-인터럽트 시처리 프로그램뱅크의 사용 예 처리 프로그램
인터럽트가 발생하면 인터럽트 서비스 루틴에서 사용하는 모든 레지스터를 스택에에서 사용하 레지 터 택에대피 해야 하는데, 뱅크를 변경하면 기존의 뱅크 R0~R7의 레지스터 값은 유지되의 뱅크 R0 R7의 레지스터 값은 유지되고 다른 뱅크에 값이 변경 된다.
. . . . . .
뱅크 0 뱅크 1• A,B,PSW 스택에대피
리셋 후
01
02
R1
R2
09
0A
R1
R2
D3
03
C3
4D• ISR의 시작에서뱅크 변경
* 리셋 후초기에SP=0FH로 변경00R0 08R034 13로 변경
ISR에서 사용
비트 어드레스 영역비트 어드레스 영역
내부 RAM 0 20 0 2F 16바이트내부 RAM 0x20~0x2F 16바이트각 비트 별로 변수 선언 가능16 8 128개의 비트 변수 선언 가능16x8=128개의 비트 변수 선언 가능비트 번호 0x00~0x7F로 선언C에서 선언과 사용C에서 선언과 사용bit keyst; - 0과 1의 boolean 상태bit ;bit save, cy;save = P14 ^ P15;
포트1의 4와 5핀의 상태를 XOR 한다- 포트1의 4와 5핀의 상태를 XOR 한다cy = (P14 & P15) | (save & P16);
사용자 데이터 영역과 스택사용자 데이터 영역과 스택
사용자 데이터 영역사용자 데이터 영역사용자가 정의하여 사용하는 일반 메모리
0 30 0 7F 메모리0x30~0x7F 메모리
C에서 char, int 등의 일반 변수를 선언하면 이 영역에할당할당
스택스택은 SFR외의 영역에 임의의 위치에 설정할 수 있다.스택은 SFR외의 영역에 임의의 위치에 설정할 수 있다.
리셋에 의 SP=0x07로 0x08 부터 사용
MOV SP,#60 명령으로 메모리 위치 변경이 가능
C에서는 내부적으로 처리 된다.Startup.a51에 정의 되어 있다.
SFR – 특수 기능 레지스터SFR 특수 기능 레지스터
내부 RAM 0x80 ~ 0xFF에 할당
CPU 동작과 관련된 레지스터A,B,PSW, SP, DPTR
포트 (Port) : P0, P1, P2, P3포트 (Port) P0, P1, P2, P3
Interrupt : IP, IE
P C t l : PCONPower Control : PCON
Timer : TCON,TMOD,TL0, TL1, TH0,TH1
Serial 통신 : SCON, SBUF
외부 데이터 메모리외부 데이터 메모리
내부 RAM과 별도
64K 바이트 까지 가능64K 바이트 까지 가능
외부에 데이터를 저장 한다.
MOVX 명령으로 전송MOVX A,@DPTR
MOVX @DPTR,A
C에서C에서#define SELECT (*(unsigned char*)(0x2fc48))
SELECT = 0x9e;#d fi ADDR ( ( i d h d t )(0 22000))#define ADDR (*(unsigned char xdata *)(0x22000))
ADDR = 0x31;C = *((char xdata *) 0x27000);
프로그램 메모리프로그램 메모리
8051은 내부 4K 바이트 ROM8051은 내부 4K 바이트 ROM 0x0000~0x0FFF
외부 프로그램 메모리 가능 (64K 바이트)외부 프로그램 메모리 가능 (64K 바이트)
내부 ROM과 외부 ROM이 있을 경우 내부의4K 바이트 ROM을 선택 가능
FFFF
외부 ROM60K
FFFFEA=1 EA=0
외부 ROM64K
FFFF
내부 ROM사용
60K
0FFF10004K(8051)
0FFF 내부 ROM사용 않함
0FFF10004K(8051)
0FFF외부 ROM
사 않함사용0000
프로그램 메모리
0000사용 않함
000000004K사용 않함
프로그램 메모리
C51에서 사용하는 메모리형C51에서 사용하는 메모리형
C51에서 사용하는 메모리형과 포인터값
메모리형포인터
설 명메모리형터
값설 명
idata 1간접 액세스 가능한 내부 RAM
idata 10x00~0x7F
xdata 2 외부 데이터 메모리 0x0000~0xFFFFxdata 2
pdata 3페이지화된 외부 데이터 메모리
0x00~0xFF0x00~0xFF
data 4직접 액세스 가능한 내부데이터0x00~0x7F0x00 0x7F
code 5 프로그램 메모리 (64K 0x0000~0xFFFF)
파워 절약 모드파워 절약 모드
8051의 파워 절약 모드아이들 모드(idle mode)아이들 (idle mode)
파워 다운 모드
PCON으로 설정 한다PCON으로 설정 한다.IDL=1 : 아이들 모드
PD=1 : 파워 다운 모드
IDL=1, PD=1 : 파워 다운 모드, 파워 다
7 6 5 4 3 2 1 0
SMOD GF1 GF0 PD IDLPCON0x87
SMOD GF1 GF0 PD IDL- - -
XTAL2 XTAL18051
OSC
클럭발생회 로
•인터럽트 로직•시리얼 포트•타이머
OSC
회 로
CPU
•타이머
PD
IDL
아이들 모드 (Idle Mode)아이들 모드 (Idle Mode)
타이머/시리얼 인터럽트에 의해 아이들 모드빠져 나온다.
ISR에서 IDL을 클리어 하여 보통상태로
시스템 쉬지 있다가 외부 입력이 들어오면 응답시스템 쉬지 있다가 외부 입력이 들어오면 응답시스템 초기설정
이벤트가 발생할 때까지 대기하여 파워 절약이벤트가 발생할 때까지 대기하여 파워 절약
이벤트시 인터럽트 요청 -> ISR로 들어 간다.
ISR에서 IDL 클리어 하여 처리하고ISR에서 IDL 클리어 하여 처리하고
다시 IDL로 들어 간다.
파워 다운 모드파워 다운 모드
클럭 발진 자체를 정지하여 파워 다운에서 빠져 나오려면 리셋 밖에는 없다.서 빠져 나 려 리셋 밖에 다
데이터 메모리와 레지스터 값 유지
시스템 이상 시 내부 데이터 AM 보존시스템 이상 시 내부 데이터 RAM 보존
데이터 메모리는 백업 배터리가 연결되어데이터 메모리는 백업 배터리가 연결되어있어야 하며, 전원 감시가 필요
파워다운 모드 시 진행 절차파워다운 모드 시 진행 절차
시스템을 초기설정하고 프로그램 실행
전원 이상 장치를 계속 감시전원 이상 장치를 계속 감시
전원 이상 발생하면 내부 데이터 메모리를 백업 배터리가 있어 데이터 보존이 가를 백업 배터리가 있어 데이터 보존이 가능한 외부 메모리로 옮김
CPU는 PD를 1로 셋 하여 파워다운 모드로 들아감로 들아감
파워다운 모드는 하드웨어 리셋으로 해제
8051의 이해8051의 이해
80518051 핀핀 기능기능 및및 인터페이스인터페이스8051 8051 핀핀 기능기능 및및 인터페이스인터페이스
8051 칩 구조8051 칩 구조
123
403938
P1.0P1.1P1 2
VccP0.0(AD0)P0 1(AD1)3
4567
3837363534
P1.2P1.3P1.4P1.5P1 6
P0.1(AD1)P0.2(AD2)P0.3(AD3)P0.4(AD4)P0 5(AD5)
8051(8031)
7891011
3433323130
P1.6P1.7RST
(RXD)P3.0(TXD)P3 1
P0.5(AD5)P0.6(AD6)P0.7(AD7)EA/VPPALE/PROG11
12131415
3029282726
(TXD)P3.1
(T0)P3.4(T1)P3 5
(INT0)P3.2(INT1)P3.3
ALE/PROGPSENP2.7(A15)P2.6(A14)P2 5(A13)15
16171819
2625242322
(T1)P3.5
XTAL2XTAL1
(RD)P3.7(WR)P3.6
P2.5(A13)P2.4(A12)P2.3(A11)P2.2(A10)P2 1(A9)19
202221
XTAL1GND
P2.1(A9)P2.0(A8)
8051의 핀 기능8051의 핀 기능
포트의 구조 및 기능
RESET 리셋RESET 리셋
ALE (Address Latch Enable)
PSEN
EAEA
XTAL1, XTAL2
전원 : VCC(+5V), VSS(GND)
8051핀 – 전원과 클럭 발진8051핀 전원과 클럭 발진
Vcc(40핀):
칩에 Vcc 전압을 공급 한다.
+5V 전원.
GND(20핀):GNDGND(20핀) GND
클럭 : XTAL1 / XTAL2(19,18핀)
단순한 크리스탈 발진기을 XTAL1과 XTAL2에단순한 크리스탈 발진기을 XTAL1과 XTAL2에연결
외부에서 발진 클럭을 XTAL1에만 공급외부에서 발진 클럭을 XTAL1에만 공급
클럭의 발진 방법 1클럭의 발진 방법 1
CPU는 이 클럭에 맞추어 동작.
C2XTAL1
30pF발진회로
XTAL1
C1 XTAL2
GND
30pF
CPU
외부 클럭을 사용외부 클럭을 사용
외부에서 완전한 클럭을 만들어 공급
Vcc CPU 클럭Vcc CPU 클럭
XTAL1
발진회로사용 하지 않음
XTAL1발진회로
사용하지사용하지 않음않음
XTAL2
GNDCPUCPU
Machine CycleMachine Cycle
한 명령이 실행되기 까지의 전체 시간한 명령이 실행되기 까지의 전체 시간Fetch -기계어 명령 읽기
Decode - 기계어 기능 해석
Execute - 실행
Store - 메모리에 저장
ADD A,R0
외부 데이터와 클럭-MOVX 예외부 데이터와 클럭 MOVX 예
머신 사이클머신 사이클
한 명령이 실행되는 시간(12클럭)한 명령이 실행되는 시간(12클럭)
주파수와 시간과는주파수와 시 과
시간 = 1
주파수주파수 =
1시간
XTAL = 11.0592 MHz11.0592 MHz / 12 = 921.6 kHzmachine cycle = 1 / 921.6 kHz = 1.085 μs
XTAL = 16 MHz.16 MHz / 12 = 1.333 MHz;;machine cycle = 1 / 1.333 MHz = 0.75 μs
RESET 리셋RESET 리셋
RST(9핀):reset
Active high : 리셋 시 1을 입력 CPU동작 시Active high 리셋 시 1을 입력 CPU동작 시적어도 2 머신사이클 동안 1로 유지
파워 온 리셋 (Power-on reset)파워 온 리셋 (Power on reset)
5V
R 4.7K
ViR VRESETRESET
74HC14C
ViR VRESET
4.7uF
74HC1474HC14
VIN VOUT
RESET TimeRESET Time
R과 C의 값에 따라 시간이 결정 된다.
ViR
ViH
ViR
5V
R
t
R 4.7K
ViR VRESET ViL0
V14in74LS14 내부 입력 처리
74HC14C4.7uF
VRESET
쉬미트 트리거
RESET time=2머신사이클 이상
리셋 (Reset) 시 초기값 설정리셋 (Reset) 시 초기값 설정
리셋 값레지스터
0000ACC0000PC
0000PSW0000B
0007SP0000PSW
0000DPTR
모든 RAM 0으로 채움모든 RAM 0으로 채움
8051 외부 데이터 액세스 신호8051 외부 데이터 액세스 신호
/EA(31핀):External Access – 외부 프로그램 메모리사용
8031 8032은 ROM이 없어 의미 없다8031, 8032은 ROM이 없어 의미 없다.
/EA = 0 외부 프로그램 메모리 사용
/EA = 1 내부 프로그램 메모리 사용/EA 1 내부 프로그램 메모리 사용
/PSEN(29핀):Program Store Enable
프로그램 메모리를 읽고 있다는 의미프로그램 메모리를 읽고 있다는 의미
ROM의 /CS 및 /OE 신호를 만드는데 사용
ALE(30핀):Address Latch Enable - Active highg
포트 0 어드레스 버스와 데이터 버스 양쪽 다 사용하기때문에 구분 필요
ALE=1일 때, 포트0은 어드레스버스이므로 74LS373에래치하여 하위8비트 주소값으로 사용
8051의 이해8051의 이해
80518051 포트포트 PP00~P~P338051 8051 포트포트 PP00~P~P33
Read-Modify-Write InstructionRead Modify Write Instruction
한 명령에 의해 데이터를 읽고한 명령에 의해 데이터를 읽고,조작 한 후 다시 쓰는 명령
ANL (AND) ANL PI, AORL (OR) ORL P2, A( ) ,XRL (XOR) XRL P3, AJBC (조건 점프) JBC P1.1,LABELCPL (비트보수) CPL P3 0CPL (비트보수) CPL P3.0INC (1증가) INC P2DEC (1감소) DEC P2)DJNZ (0일때 까지 반복) DJNZ P3 LABELDJNZ (0일때 까지 반복) DJNZ P3, LABELMOV PX.Y,C (Port X.Y에 캐리값을 세트)CLR PX.Y (Port X.Y 클리어)SETB PX Y (P t X Y에 1 세트)SETB PX.Y (Port X.Y에 1 세트)
Read-Modify-Write 예Read Modify Write 예
ExampleMnemonics
XRL P1 AXRL
ORL P1,AORL
ANL P1,AANL
CPL P1.2CPL
JBC P1.1, TARGETJBC PX.Y, TARGET
XRL P1,AXRL
DJNZ P1 TARGETDJNZ PX TARGET
INC P1INC
DEC P1DEC
CLR P1.3CLR PX.Y
MOV P1.2,CMOV PX.Y,C
DJNZ P1,TARGETDJNZ PX, TARGET
SETB P1.4SETB PX.Y
8051 Port 구조8051 Port 구조
포트 0 (P0 0 ~ P0 7)포트 0 (P0.0 P0.7)
8비트 오픈 드레인 (Open Drain)
일반 포트 사용–외부메모리 사용 않 할일반 포트 사용 외부메모리 사용 않 할때
입력으로 사용할 때는 1을 출력하고 사용입력으로 사용할 때는 1을 출력하고 사용
외부메모리 사용할 때 하위 어드레스외부메모리 사용할 때 하위 어드레스A0~A7로 사용
ALE 1일 때 하위 어드레스 임을 나타내ALE=1일 때 하위 어드레스 임을 나타내므로 74LS373으로 래치 하여 사용
포트0 - 일반 포트 동작 구조포트0 일반 포트 동작 구조
래치 읽기TB2
P0 X
TB2
D Q
Clk Q래치에 쓰기
CPU 내부데이터 버스
M1
P0.X 핀P1.X
Clk Q래치에 쓰기제어 신호
핀 입력
TB1
포트0 출력으로 사용포트0 출력으로 사용
오픈 드레인 – 풀업 저항 필요
Vcc
오픈 드레인 – 풀업 저항 필요
Vcc
10 K
P0.0
10 K
0.0P0.1P0.2P0.38051
Port
0P0.4P0.5P0.6P0 7
0
P0.7
포트0 – 출력 구조포트0 출력 구조
래치 읽기TB2
+5V
D QCPU 내부
TB2
10K
D Q
Clk Q래치에 쓰기
CPU 내부데이터 버스
M1 P0.XP1.X
Q래치에 쓰기제어 신호
핀 입력
TB1
포트0 출력 – 출력 0포트0 출력 출력 0
CLR P0 0
래치 읽기TB2
+5V
CLR P0.0
0
D QCPU 내부
TB2
10K
00 출력0
MOV P1,#0FFH
D Q
Clk Q래치에 쓰기
CPU 내부데이터 버스
M1 P0.XP1.X
0
1On
Q래치에 쓰기제어 신호
핀 입력
TB10
포트0 출력 – 출력 1포트0 출력 출력 1
래치 읽기TB2
+5V
0
D QCPU 내부
TB2
10KMOV P1,#0FFH
1
0
1D Q
Clk Q래치에 쓰기
CPU 내부데이터 버스
M1 P0.XP1.X Off
1 출력
1
0Q래치에 쓰기제어 신호
핀 입력
TB10
포트0 – 입력으로 사용포트0 입력으로 사용
• 초기 설정으로 1을 출력 한다.
래치 읽기TB2
시스템이 시작할 때 한번 한다.P0.x = 1;P0 = 0xFF;
D QCPU 내부
TB2MOV P0,#0FFH
11D Q
Clk Q래치에 쓰기
CPU 내부데이터 버스
M1 P0.XP1.X Off
1
0Q래치에 쓰기제어 신호
핀 입력
TB1
• 입력 명령으로 핀의 상태를 읽는다MOV A P0
1
unsigned char pst;pst = P0;
MOV A,P0
포트0 외부 메모리의 버스로 사용포트0 외부 메모리의 버스로 사용
외부 메모리를 액세스 하기 위해서는 포트0는 주소 하위8비트와 데이터 비트로주 하위 비 와 데이터 비사용 한다.
입출력을 위한 풀업 저항은 필요 없다입출력을 위한 풀업 저항은 필요 없다.
ALE, /PSEN, /RD, /WR 신호와 함께ROM과 RAM의 제어 신호를 만든다.
외부 ROM외부 ROM
74LS373ALEPSEN OE
CSG
DP0.0
P0.7
A0
A7
D0
D7D7EA
P2.0
P2.7
A8
A15
8051 ROM
외부 ROM 읽기 – step1외부 ROM 읽기 step1
1. 8051 읽기 2 74373에 하위
74LS373ALEPSEN OE
CSG
신호 보냄2. 74373에 하위
8비트 주소값을 저장
D
74LS373P0.0
P0.7
A0
A7
CSG
D0
Address하위 8비트
D7EA
P2.0
P2.7
A8
A12
Address 상위 8비트
P2.7 A12
8051 ROM
외부 ROM 읽기 – step2외부 ROM 읽기 step2
2. 74373에 하위비 소값을
74LS373ALEPSEN OE
CSG
8비트 주소값을저장 되어 있다.
DP0.0
P0.7
A0
A7Address
D0
D7D7EA 3. ROM은 데이터
보낸다.
P2.0
P2.7
A8
A12
8051 ROM
외부 프로그램 메모리 읽기외부 프로그램 메모리 읽기
ALE
PSEN
PORT0 명령어 A0-A7 명령어 IN A0-A7
PORT2 A8-A15 OUT
A0-A7 LATCH OUT74LS373에래치
외부 RAM외부 RAM
외부RAMPSEN CS
WEOE
WR
74LS373ALEG
OERD
DP0.0
P0.7
A0
A78051
D0
EA D7
P2.0 A8
EA
P2.7 A15
외부 RAM 쓰기 MOVX @DPTR A외부 RAM 쓰기 MOVX @DPTR,A
PSEN CS
WEOE
WR
1
01
0
01
74LS373ALEG
외부RAM
OERD 1 1
DP0.0
P0.7
A0
A78051
RAM
D0
D7
P2.0 A8
P2.7 A15
외부 데이터 메모리 쓰기외부 데이터 메모리 쓰기
ALE
WR
PSEN
PORT0 명령어 A0-A7 DATA OUT A0-A7
PORT2 A8-A15 OUT
A0-A7 latch74LS373에래치
RD = 1
외부 데이터 메모리 쓰기외부 데이터 메모리 쓰기
외부 RAM 읽기 MOVX A @DPTR외부 RAM 읽기 MOVX A,@DPTR
외부RAMPSEN CS
WEOE
WR
1
10
0
10
74LS373ALEG
OERD 0 0
DP0.0
P0.7
A0
A78051
D0
D7
P2.0 A8
P2.7 A15
외부 데이터 메모리 읽기외부 데이터 메모리 읽기
ALE
PSEN
PORT0
RD
명령어 A0-A7 DATA IN A0-A7
PORT2
명령어 A0 A7 DATA IN A0 A7
A8-A15 OUTA8 A15 OUT
A0-A7 LATCH OUT74LS373에래치74LS373에래치
WR = 1
포트 1포트 1
P1.0 ~ P1.7
8비트 양방향 입출력 단자
내부 풀업 되어 있다외부 저항이 필요 없다
범용 입출력으로 사용 한다.
포트1의 구조포트1의 구조
래치 읽기TB2
Vcc
D QCPU 내부 P1 X 핀
TB2Load(L1)
D Q
Clk Q래치에 쓰기
CPU 내부데이터 버스
M1
P1.X 핀
P1.X
Q래치에 쓰기제어 신호
핀 입력
TB1
포트1 – 출력 1을 했을 때포트1 출력 1을 했을 때
래치 읽기TB2
Vcc0
Z
D QCPU 내부
TB2Load(L1)1. 핀에 1을 출력
MOV P1,#0FFH 2. 출력 Vcc1
Z
1D Q
Clk Q래치에 쓰기
CPU 내부데이터 버스
M1P1.X 핀P1.X Off
1
0Q래치에 쓰기제어 신호
Z
핀 입력
TB10
Z
포트1 – 출력 0을 했을 때포트1 출력 0을 했을 때
래치 읽기TB2
Vcc
0Z
D QCPU 내부
TB2Load(L1)1. 핀에 0을 출력
MOV P1,#00H
0Z
00
0D Q
Clk Q래치에 쓰기
CPU 내부데이터 버스
M1
P1.X핀P1.X
2. 출력 GNDOn
00
1Q래치에 쓰기제어 신호
Z 0
핀 입력
TB10
Z 0
포트1 – 입력 1포트1 입력 1
래치 읽기TB2
Vcc
0Z
D QCPU 내부
TB2Load(L1)1. 핀에 1출력
MOV P1,#0FFH 2. MOV A,P1 외부 핀=High
1
0Z
11D Q
Clk Q래치에 쓰기
CPU 내부데이터 버스
M1
P1.X 핀P1.X 11
0Off
Q래치에 쓰기제어 신호
11
핀 입력
TB11
1
포트1 – 입력 0포트1 입력 0
래치 읽기TB2
Vcc
0Z
D QCPU 내부
TB2Load(L1) 2. MOV A,P1
외부 핀=0V
0
0Z1. 핀에 1출력MOV P1,#0FFH
1 1D Q
Clk Q래치에 쓰기
CPU 내부데이터 버스
M1
P1.X 핀P1.X
01
0 OffQ래치에 쓰기
제어 신호
3. 내부버스로 전달 00
핀 입력
TB11
0
포트 프로그램포트 프로그램
;초기 설정 과정
MOV A,#0FFH ;A=11111111BMOV P1,A ;P1을입력으로 설정
; 포트로 부터 입력하기
에서 읽어BACK: MOV A,P1 ; 포트에서 읽어 A로
MOV P2,A ; P2에 출력
SJMP BACK ; 반복
C에서의 사용C에서의 사용
#include <win51 h>#include <win51.h>void init_port(){
P1 0 FF 포트를 입력으로 하기 위해 초기값을 설정P1 = 0xFF; - 포트를 입력으로 하기 위해 초기값을 설정}
unsigned char pdata;
void main()(){
init_port();while (1)while (1) {
pdata = P1;P2 = pdata ;P2 = pdata ;
}}
Read-Modify-Write 명령어 실행Read Modify Write 명령어 실행
MOV P1,#55H ;P1=01010101ORL P1,#0F0H ;P1=11110101
11110101
래치 읽기 Vcc
Load(L1)1
P1.7=0
D QCPU 내부 P1.7 핀
TB2 Load(L1)CPU P1.7=0 OR 1
0
P1.7 0
0 1P1.7=1
Clk Q래치에 쓰기제어 신호
데이터 버스
M1
P1.711
00
제어 신호
TB1Z
핀 입력
TB10
포트 2포트 2
P2.0 ~ P2.7
8비트 양방향 입출력 단자8비트 양방향 입출력 단자
내부 풀업 되어 있다외부 저항이 필요 없다
범용 입출력으로 사용 한다.범용 입출력으로 사용 한다.
외부 메모리 사용할 때는 A8~A15로 사용용
포트3포트3
P3.0 ~ P3.7
8비트 양방향 입출력 단자비 양방향 력 자
내부 풀업 되어 있다
다른 기능과 선택적으로 사용다른 기능과 선택적으로 사용시리얼 통신 신호:RxD, TxD외부 인터럽트 신호:/INT0, /INT1타이머의 클럭 입력:T0 T1타이머의 클럭 입력:T0, T1외부 메모리 액세스 신호:/WR, /RD
포트3의 다른 기능 신호포트3의 다른 기능 신호
핀번호기능P3 비트
10RxDP3.0핀번호기능P3 비트
11TxDP3.110RxDP3.0
13INT1P3.312INT0P3.2
15T1P3 514T0P3.413INT1P3.3
16WRP3.615T1P3.5
17RDP3.7