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

Slides:



Advertisements
Similar presentations
Embedded System 2009 년 11 월 16 일 Embedded Computer1 ● Hardware 와 Software 가 조합되어 특정한 복적을 수행하는 시스템 ● 특정한 기능을 수행하도록 Micro Processor 와 I/O Device 를 내장하며,
Advertisements

Family 의 개요 의 외부 Pin 기능과 내부 기능 Memory 구조 Timing 2 장 8051 의 구조.
제 2 장 74HC574 소자를 이용한 LED DISPLAY.
3 8051을 위한 C 언어 프로그래밍.
8051타이머/카운터 순천향대학교 정보기술공학부 이상정.
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
인터럽트 종류 인터럽트 요구시 I/O장치 인식 방법
4장 마이크로프로세서 외부 신호 Slide 1 (of 22).
4. 컴퓨터 조직 순천향대학교 정보기술공학부 이상정.
6장 마이크로프로세서 메모리 및 입출력장치 인터페이스.
제 3 장 74HC541 소자를 이용한 키 입력 및 74HC574로 출력하기.
UNIT 15 Timer & Watch Dog 로봇 SW 교육원 조용수.
제 9 장 구조체와 공용체.
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
12장. 제어 장치 다루는 내용 CPU속의 제어장치 마이크로 연산 제어장치의 동작.
어셈블리 문법 보강 4월 10일.
Text LCD control.
시스템 보안 [Buffer Overflow] DEC, 15, 2013 By 박동혁.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
9장. 중앙처리 장치의 조직과 기능 다루는 내용 컴퓨터 본체에서 CPU의 위치 살펴보기 CPU의 성능, 기능, 조직
AT MEGA 128 기초와 응용 I 기본적인 구조.
07. 디바이스 드라이버의 초기화와 종료 김진홍
제10강 중앙처리장치 1.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
6 중앙처리장치의 조직과 기능 IT CookBook, 컴퓨터 구조와 원리 2.0.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
DK-128 ADC 실습 아이티즌 기술연구소
부트로더와 Self Programming
마이크로 시스템 lecture8. Interrupt Greet class 선 덕 한.
LCD 모듈의 특징 LCD 컨트롤러 내장으로 모든 디스플레이 기능을 명령어로 제어 8비트 혹은 4비트로 인터페이스
제 3 장 Memory - SRAM.
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
타이머카운터 사용법 휴먼네트웍스 기술연구소
PSW : PROGRAM STATUS WORD
ATmega128 FND 실습 휴먼네트웍스 기술연구소
DK-128 FND 실습 아이티즌 기술연구소 김태성 연구원
Microprocessor I/O Port & CLCD Noh Jin-Seok.
디지털회로설계 (15주차) 17. 시프트 레지스터와 카운터 18. 멀티바이브레이터 * RAM & ROM.
디 지 털 공 학 한국폴리텍V대학.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
컴퓨터시스템 구조 Computer System Architecture.
8051 IO-PORT 정보통신•컴퓨터 공학부 송명규
DK-128 FND 실습 아이티즌 기술연구소
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
논리회로 설계 및 실험 5주차.
6 레지스터와 카운터.
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
DK-128 실습 타이머카운터 사용법 아이티즌 기술연구소
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
6. 레지스터와 카운터.
제4강 처리장치 1.
13장 CTC and DMA Slide 1 (of 10).
ARM Development Suite v1.2
UNIT 25 SPI 로봇 SW 교육원 조용수.
ATmega128의 특징 아이티즌 기술연구소
9장. 중앙처리 장치의 조직과 기능 다루는 내용 컴퓨터 본체에서 CPU의 위치 살펴보기 CPU의 성능, 기능, 조직
MEGA8_XBee CPUPLAZA
DK-128 직렬통신 실습 아이티즌 기술연구소
AT MEGA 128 기초와 응용 I 기본적인 구조.
Ⅰ 전자기초 Ⅱ 디지털 논리회로 Ⅲ C언어 기초 Ⅳ AVR 마이크로 컨트롤러 Ⅴ 마이크로 컨트롤러 개발환경
UNIT 25 SPI 로봇 SW 교육원 조용수.
ARM Development Suite v1.2
컴퓨터구조 연습문제 발표 Chapter 3 - 컴퓨터의 기능 및 상호연결의 최상위 관점
논리회로 설계 및 실험 4주차.
시리얼 UART 정리 정보통신•컴퓨터 공학부 송명규
AdcRead API 함수 분석 마이크로프로세서.
제 5 장 82C55를 이용한 포트 출력.
버스와 메모리 전송 버스 시스템 레지스터와 레지스터들 사이의 정보 전송을 위한 경로
Assembly 05 방호남 07 반지훈 09 박상욱.
Presentation transcript:

8051의 칩 구성 및 CPU 이해 메모리 구조 8051의 신호 포트 구성 8051의 이해 8051의 칩 구성 및 CPU 이해 메모리 구조 8051의 신호 포트 구성 dolicom@naver.com http://blog.naver.com/dolicom

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

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

8051의 이해 8051 내부 구조

8051의 내부 구성 외부 인터럽트 ROM 프로그램 Interrupt Control Timer 1 카운터 RAM 입력 Timer/Counter ROM 프로그램 Interrupt Control Timer 1 카운터 입력 RAM Timer 0 CPU Serial Port Bus Control 4 I/O 포트 OSC P0 P1 P2 P3 TxD RxD Address/Data

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

제어장치 CU – Control Unit 명령을 읽어 해독하고 명령이 실행될 때까지 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 RS0 OV -- P 리셋 PSW.0 CY : 캐리 플래그 (Carry Flag) PSW.1 AC : 보조 캐리 플래그 (Auxiliary carry flag) PSW.2 F0 : 사용자 플래그 PSW.3 RS1 : 뱅크 선택 상위 비트 1 PSW.4 RS0 : 뱅크 선택 상위 비트 0 PSW.5 OV : 오버플로 플래그 (Overflow Flag) PSW.6 – PSW.7 P : 패리티 플래그 (odd/even parity) RS1 RS0 레지스터 뱅크 주 소 0 0 0 00H-07H 리셋 0 1 1 08H-0FH 1 0 2 10H-17H 1 1 3 18H-1FH

B, SP B 레지스터 SP (스택 포인터 : Stack Pointer) 곱셈/나눗셈의 결과 저장 SP (스택 포인터 : Stack Pointer) 8비트로 스택의 메모리 번지를 가리킴(RAM) 8051의 내부 메모리 사용 리셋 후 08H 번지로 지정 – 프로그래머에 의해 변경하여 사용 할 수 있다. 스택에 저장(PUSH) 할 때 주소값 1증가하고 꺼낼 때 1 감소

DPTR (Data Pointer) 16비트 레지스터 상위 8비트 (DPH)와 하위 8비트(DPL)로 사용 가능 외부 데이터 메모리에서 전송할 때 주소값으로 사용 – 어드레스 포인터 간접 점프명령에서 점프할 주소값 저장 프로그램 읽기 명령에서 베이스(base) 레지스터

8051의 이해 8051 메모리 구조

8051 메모리 구조 특수기능 레지스터 (SFR) 사용자 데이터 메모리 영역 비트단위 처리 영역 외부 RAM 외부 ROM FF FFFF FFFF 특수기능 레지스터 80 (SFR) 7F 사용자 데이터 메모리 영역 30 2F 비트단위 처리 영역 64K 외부 ROM 64K 60K 외부 RAM 64K 20 1F 뱅크 3 (R0~R7) 18 17 뱅크 2 (R0~R7) 10 4K(8051) 1000 0F 뱅크 1 (R0~R7) 0FFF 0FFF 내부 ROM 08 07 EA=0 뱅크 0 (R0~R7) EA=1 0000 0000 0000 00 프로그램 메모리 데이터 메모리 내부 RAM & SFR

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

8051의 이해 내부 RAM 일반 레지스터 비트 어드레스 영역 사용자 데이터 영역과 스택 SFR

8051의 메모리의 구성 CPU 일반 레지스터 R0~R7 일반레지스터 4뱅크 8개의 일반 데이터 저장용 레지스터 4개의 뱅크로 구성 뱅크 설정은 PSW의 RS1:RS0 비트를 설정하면, 이 R0~R7은 해당 메모리에 할당 된다. RS1:RS0에 의해 뱅크가 할당되면 레지스터 R0~R7은 해당 뱅크로 주소값이 설정 된다.

뱅크의 개념 MOV A,R0 R0 : 18 R0 : 10 R0 : 08 R0 : 00 PSW RS[1:0]=00 07 R7 0F R7 17 R7 1F R6 06 R6 0E R6 16 R6 1E R5 05 R5 0D R5 15 R5 1D R4 04 R4 0C R4 14 R4 1C R3 03 R3 0B R3 13 R3 1B R2 02 R2 0A R2 12 R2 1A R1 01 R1 09 R1 11 R1 19 R0 00 R0 08 R0 10 R0 18 뱅크 0 뱅크 1 뱅크 2 뱅크 3 R0 : 10 R0 : 18 R0 : 00 R0 : 08

MOV A,R0 뱅크 0 뱅크 1 뱅크 2 뱅크 3 . . . . . . . . . . . . R2 03 02 R2 4D 0A R2 B5 12 R2 B5 1A R1 D3 01 R1 C3 09 R1 A5 11 R1 44 19 R0 34 00 R0 13 08 R0 22 10 R0 30 18 PSW RS[1:0]=00 RS[1:0]=01 RS[1:0]=10 RS[1:0]=11 R0 34 13 22 30 실행전 A 11 22 33 44 실행후 A 34 13 22 30

ISR (Interrupt Service Rountine) 인터럽트 서비스루틴-인터럽트 시 처리 프로그램 뱅크의 사용 예 인터럽트가 발생하면 인터럽트 서비스 루틴에서 사용하는 모든 레지스터를 스택에 대피 해야 하는데, 뱅크를 변경하면 기존의 뱅크 R0~R7의 레지스터 값은 유지되고 다른 뱅크에 값이 변경 된다. 뱅크 0 뱅크 1 A,B,PSW 스택에 대피 ISR의 시작에서 뱅크 변경 . . . . . . * 리셋 후 초기에 SP=0FH 로 변경 R2 03 02 R2 4D 0A R1 D3 01 R1 C3 09 R0 34 00 R0 13 08 ISR에서 사용

비트 어드레스 영역 내부 RAM 0x20~0x2F 16바이트 각 비트 별로 변수 선언 가능 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, P3 Interrupt : IP, IE Power Control : PCON Timer : TCON,TMOD,TL0, TL1, TH0,TH1 Serial 통신 : SCON, SBUF

외부 데이터 메모리 내부 RAM과 별도 64K 바이트 까지 가능 외부에 데이터를 저장 한다. MOVX 명령으로 전송 C에서 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을 선택 가능 FFFF FFFF EA=0 EA=1 외부 ROM 64K 외부 ROM 60K 4K(8051) 1000 4K(8051) 1000 0FFF 0FFF 0FFF 0FFF 내부 ROM 사용 않함 내부 ROM 사용 외부 ROM 4K사용 않함 0000 0000 0000 0000 프로그램 메모리 프로그램 메모리

C51에서 사용하는 메모리형 C51에서 사용하는 메모리형과 포인터값 idata 1 xdata 2 pdata 3 data 4 설 명 idata 1 간접 액세스 가능한 내부 RAM 0x00~0x7F xdata 2 외부 데이터 메모리 0x0000~0xFFFF pdata 3 페이지화된 외부 데이터 메모리 0x00~0xFF data 4 직접 액세스 가능한 내부데이터 0x00~0x7F code 5 프로그램 메모리 (64K 0x0000~0xFFFF)

파워 절약 모드 8051의 파워 절약 모드 PCON으로 설정 한다. 아이들 모드(idle mode) 파워 다운 모드 PD=1 : 파워 다운 모드 IDL=1, PD=1 : 파워 다운 모드 7 6 5 4 3 2 1 0 - - - PCON 0x87 SMOD GF1 GF0 PD IDL

XTAL2 XTAL1 8051 OSC 인터럽트 로직 시리얼 포트 타이머 클럭발생 회 로 CPU PD IDL

아이들 모드 (Idle Mode) 타이머/시리얼 인터럽트에 의해 아이들 모드 빠져 나온다. ISR에서 IDL을 클리어 하여 보통상태로 시스템 쉬지 있다가 외부 입력이 들어오면 응답 시스템 초기설정 이벤트가 발생할 때까지 대기하여 파워 절약 이벤트시 인터럽트 요청 -> ISR로 들어 간다. ISR에서 IDL 클리어 하여 처리하고 다시 IDL로 들어 간다.

파워 다운 모드 클럭 발진 자체를 정지하여 파워 다운에서 빠져 나오려면 리셋 밖에는 없다. 데이터 메모리와 레지스터 값 유지 시스템 이상 시 내부 데이터 RAM 보존 데이터 메모리는 백업 배터리가 연결되어 있어야 하며, 전원 감시가 필요

파워다운 모드 시 진행 절차 시스템을 초기설정하고 프로그램 실행 전원 이상 장치를 계속 감시 전원 이상 발생하면 내부 데이터 메모리를 백업 배터리가 있어 데이터 보존이 가능한 외부 메모리로 옮김 CPU는 PD를 1로 셋 하여 파워다운 모드로 들아감 파워다운 모드는 하드웨어 리셋으로 해제

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

8051 칩 구조 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (T0)P3.4 (T1)P3.5 XTAL2 XTAL1 GND (INT0)P3.2 (INT1)P3.3 (RD)P3.7 (WR)P3.6 Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) EA/VPP ALE/PROG PSEN P2.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) PSEN EA XTAL1, XTAL2 전원 : VCC(+5V), VSS(GND)

8051핀 – 전원과 클럭 발진 Vcc(40핀): GND(20핀):GND 클럭 : XTAL1 / XTAL2(19,18핀)

클럭의 발진 방법 1 CPU는 이 클럭에 맞추어 동작. XTAL1 XTAL2 GND C2 30pF 발진회로 C1 30pF

외부 클럭을 사용 외부에서 완전한 클럭을 만들어 공급 GND Vcc CPU 클럭 발진 회로 발진회로 사용 하지 않음 XTAL1 발진 회로 발진회로 사용 하지 않음 XTAL2 사용하지 않음 GND CPU

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

외부 데이터와 클럭-MOVX 예

머신 사이클 한 명령이 실행되는 시간(12클럭) 주파수와 시간과는 XTAL = 11.0592 MHz 시간 = 주파수 = 주파수 시간 XTAL = 11.0592 MHz 11.0592 MHz / 12 = 921.6 kHz machine 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 리셋 RST(9핀):reset Active high : 리셋 시 1을 입력 CPU동작 시 적어도 2 머신사이클 동안 1로 유지 파워 온 리셋 (Power-on reset) 5V R 4.7K ViR VRESET RESET C 4.7uF 74HC14

74HC14 VIN VOUT

RESET Time R과 C의 값에 따라 시간이 결정 된다. ViR ViH ViL VRESET ViR t V14in 4.7K ViL VRESET ViR t C 4.7uF 74HC14 V14in 74LS14 내부 입력 처리 VRESET 쉬미트 트리거 RESET time=2머신사이클 이상

리셋 (Reset) 시 초기값 설정 레지스터 리셋 값 PC 0000 ACC 0000 B 0000 PSW 0000 SP 0007 DPTR 0000 모든 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~P3

Read-Modify-Write Instruction 한 명령에 의해 데이터를 읽고, 조작 한 후 다시 쓰는 명령 ANL (AND) ANL PI, A ORL (OR) ORL P2, A XRL (XOR) XRL P3, A JBC (조건 점프) JBC P1.1,LABEL CPL (비트보수) CPL P3.0 INC (1증가) INC P2 DEC (1감소) DEC P2) DJNZ (0일때 까지 반복) DJNZ P3, LABEL MOV PX.Y,C (Port X.Y에 캐리값을 세트) CLR PX.Y (Port X.Y 클리어) SETB PX.Y (Port X.Y에 1 세트)

Read-Modify-Write 예 Mnemonics Example ANL ANL P1,A ORL ORL P1,A XRL XRL P1,A JBC PX.Y, TARGET JBC P1.1, TARGET CPL CPL P1.2 INC INC P1 DEC DEC P1 DJNZ PX, TARGET DJNZ P1,TARGET MOV PX.Y,C MOV P1.2,C CLR PX.Y CLR P1.3 SETB PX.Y SETB P1.4

8051 Port 구조

포트 0 (P0.0 ~ P0.7) 8비트 오픈 드레인 (Open Drain) 일반 포트 사용–외부메모리 사용 않 할 때 입력으로 사용할 때는 1을 출력하고 사용 외부메모리 사용할 때 하위 어드레스 A0~A7로 사용 ALE=1일 때 하위 어드레스 임을 나타내므로 74LS373으로 래치 하여 사용

포트0 - 일반 포트 동작 구조 래치 읽기 TB2 P0.X 핀 CPU 내부 데이터 버스 P1.X M1 래치에 쓰기 제어 신호 D Q Clk Q P1.X M1 래치에 쓰기 제어 신호 TB1 핀 입력

포트0 출력으로 사용 오픈 드레인 – 풀업 저항 필요 Port 0 Vcc 8051 P0.0 P0.1 P0.2 P0.3 P0.4 10 K Port 0 P0.0 P0.1 P0.2 8051 P0.3 P0.4 P0.5 P0.6 P0.7

포트0 – 출력 구조 +5V 래치 읽기 TB2 10K CPU 내부 데이터 버스 P1.X P0.X M1 래치에 쓰기 제어 신호 D Q Clk Q P1.X P0.X M1 래치에 쓰기 제어 신호 TB1 핀 입력

포트0 출력 – 출력 0 MOV P1,#0FFH CLR P0.0 +5V 래치 읽기 TB2 10K 0 출력 TB2 MOV P1,#0FFH 10K 0 출력 1 CPU 내부 데이터 버스 D Q Clk Q P1.X On P0.X M1 래치에 쓰기 제어 신호 TB1 핀 입력

포트0 출력 – 출력 1 MOV P1,#0FFH +5V 래치 읽기 TB2 10K 1 1 CPU 내부 데이터 버스 Off TB2 MOV P1,#0FFH 10K 1 1 CPU 내부 데이터 버스 D Q Clk Q Off P1.X 1 출력 P0.X M1 래치에 쓰기 제어 신호 TB1 핀 입력

포트0 – 입력으로 사용 MOV P0,#0FFH MOV A,P0 초기 설정으로 1을 출력 한다. 시스템이 시작할 때 한번 한다. P0.x = 1; P0 = 0xFF; 래치 읽기 TB2 MOV P0,#0FFH 1 1 CPU 내부 데이터 버스 D Q Clk Q P1.X Off P0.X M1 래치에 쓰기 제어 신호 TB1 1 핀 입력 입력 명령으로 핀의 상태를 읽는다 unsigned char pst; pst = P0; MOV A,P0

포트0 외부 메모리의 버스로 사용 외부 메모리를 액세스 하기 위해서는 포트0는 주소 하위8비트와 데이터 비트로 사용 한다. 입출력을 위한 풀업 저항은 필요 없다. ALE, /PSEN, /RD, /WR 신호와 함께 ROM과 RAM의 제어 신호를 만든다.

외부 ROM 8051 ROM 74LS373 PSEN OE ALE CS P0.0 P0.7 A0 A7 D0 D7 EA P2.0 G P0.0 P0.7 A0 A7 D D0 D7 EA P2.0 P2.7 A8 A15 8051 ROM

외부 ROM 읽기 – step1 8051 ROM 74LS373 1. 8051 읽기 신호 보냄 2. 74373에 하위 8비트 주소값을 저장 PSEN OE ALE 74LS373 CS G P0.0 P0.7 A0 A7 D Address 하위 8비트 D0 D7 EA Address 상위 8비트 P2.0 P2.7 A8 A12 8051 ROM

외부 ROM 읽기 – step2 8051 ROM 74LS373 2. 74373에 하위 8비트 주소값을 저장 되어 있다. PSEN OE ALE 74LS373 CS G P0.0 P0.7 A0 A7 D Address D0 D7 EA 3. ROM은 데이터 보낸다. P2.0 P2.7 A8 A12 8051 ROM

외부 프로그램 메모리 읽기 ALE PORT0 PORT2 PSEN 명령어 A0-A7 명령어 IN A8-A15 OUT A0-A7 LATCH OUT 74LS373에 래치

외부 RAM 외부RAM 8051 74LS373 PSEN CS WR WE RD OE ALE P0.0 P0.7 A0 A7 D0 G 8051 P0.0 P0.7 A0 A7 D D0 D7 EA P2.0 P2.7 A8 A15

외부 RAM 쓰기 MOVX @DPTR,A 외부 RAM 8051 74LS373 1 PSEN CS WR WE 1 1 RD OE PSEN CS WR WE 1 1 RD OE 외부 RAM ALE 74LS373 G 8051 P0.0 P0.7 A0 A7 D D0 D7 P2.0 P2.7 A8 A15

외부 데이터 메모리 쓰기 명령어 ALE PORT0 PORT2 WR PSEN A0-A7 DATA OUT A8-A15 OUT A0-A7 latch 74LS373에 래치 RD = 1

외부 데이터 메모리 쓰기

외부 RAM 읽기 MOVX A,@DPTR 외부RAM 8051 74LS373 PSEN 1 CS 1 1 WR WE RD OE CS 1 1 WR WE RD OE ALE 74LS373 G 8051 P0.0 P0.7 A0 A7 D D0 D7 P2.0 P2.7 A8 A15

외부 데이터 메모리 읽기 명령어 ALE PORT0 PORT2 RD PSEN A0-A7 DATA IN A8-A15 OUT A0-A7 LATCH OUT 74LS373에 래치 WR = 1

포트 1 P1.0 ~ P1.7 8비트 양방향 입출력 단자 내부 풀업 되어 있다 범용 입출력으로 사용 한다. 외부 저항이 필요 없다 범용 입출력으로 사용 한다.

포트1의 구조 Vcc 래치 읽기 TB2 Load(L1) CPU 내부 데이터 버스 P1.X 핀 P1.X M1 D Q Clk Q P1.X 핀 P1.X M1 래치에 쓰기 제어 신호 TB1 핀 입력

포트1 – 출력 1을 했을 때 핀에 1을 출력 MOV P1,#0FFH 2. 출력 Vcc Vcc 래치 읽기 TB2 Z TB2 Z 핀에 1을 출력 MOV P1,#0FFH Load(L1) 2. 출력 Vcc 1 1 CPU 내부 데이터 버스 D Q Clk Q P1.X Off P1.X 핀 M1 래치에 쓰기 제어 신호 Z TB1 핀 입력

포트1 – 출력 0을 했을 때 2. 출력 GND Vcc 래치 읽기 TB2 Z 핀에 0을 출력 Load(L1) TB2 Z 핀에 0을 출력 MOV P1,#00H Load(L1) 1 CPU 내부 데이터 버스 D Q Clk Q P1.X핀 P1.X On 2. 출력 GND M1 래치에 쓰기 제어 신호 Z TB1 핀 입력

포트1 – 입력 1 Vcc 래치 읽기 TB2 Z 핀에 1출력 Load(L1) MOV P1,#0FFH 2. MOV A,P1 TB2 Z 핀에 1출력 MOV P1,#0FFH Load(L1) 2. MOV A,P1 외부 핀=High 1 1 CPU 내부 데이터 버스 D Q Clk Q 1 P1.X 핀 P1.X Off M1 래치에 쓰기 제어 신호 1 1 TB1 1 핀 입력

포트1 – 입력 0 Vcc 래치 읽기 TB2 Z 핀에 1출력 Load(L1) MOV P1,#0FFH 2. MOV A,P1 TB2 Z 핀에 1출력 MOV P1,#0FFH Load(L1) 2. MOV A,P1 외부 핀=0V 1 1 CPU 내부 데이터 버스 D Q Clk Q P1.X 핀 P1.X Off M1 래치에 쓰기 제어 신호 3. 내부버스로 전달 TB1 1 핀 입력

포트 프로그램 ;초기 설정 과정 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=01010101 ORL P1,#0F0H ;P1=11110101 11110101 래치 읽기 Vcc 1 P1.7=0 Load(L1) TB2 CPU P1.7=0 OR 1 P1.7=1 1 1 CPU 내부 데이터 버스 D Q Clk Q P1.7 핀 1 P1.7 M1 래치에 쓰기 제어 신호 Z TB1 핀 입력

포트 2 P2.0 ~ P2.7 8비트 양방향 입출력 단자 내부 풀업 되어 있다 범용 입출력으로 사용 한다. 외부 저항이 필요 없다 범용 입출력으로 사용 한다. 외부 메모리 사용할 때는 A8~A15로 사용

포트3 P3.0 ~ P3.7 8비트 양방향 입출력 단자 내부 풀업 되어 있다 다른 기능과 선택적으로 사용 시리얼 통신 신호:RxD, TxD 외부 인터럽트 신호:/INT0, /INT1 타이머의 클럭 입력:T0, T1 외부 메모리 액세스 신호:/WR, /RD

포트3의 다른 기능 신호 P3 비트 기능 핀번호 P3.0 RxD 10 P3.1 TxD 11 P3.2 INT0 12 P3.3 13 P3.4 T0 14 P3.5 T1 15 P3.6 WR 16 P3.7 RD 17