2%EC%9E%A5+8051%EC%9D%98+%EA%B5%AC%EC%A1

Download Report

Transcript 2%EC%9E%A5+8051%EC%9D%98+%EA%B5%AC%EC%A1

2장 8051의 구조

2.1 8051 Family의 개요 2.1 8051의 외부 Pin 기능과 내부 기능 2.3 8051 Memory 구조 2.4 8051 Timing

1

2.1 8051 Family의 개요

1. 8051의 주요 특징  8051 Family의 Hardware 구조 • 4K 바이트의 내부 프로그램 메모리(ROM) • 128 바이트의 내부 데이터 메모리(RAM) • 8비트 단위의 4개의 입출력 포트 • 4개의 동작모드로 사용 가능한 2개의 16비트 타이머/ 카운터 • 전 이중(full duplex) UART(Universal Asynchronous Receiver & Transmitter) • 5개의 인터럽트 중 2개의 인터럽트 우선 순위 레벨 제어 • Clock Oscillator 내장 • 64KB의 프로그램 영역 • 64KB의 데이터 메모리 영역 • 제어응용에 적합한 8비트 원칩 마이크로프로세서 • 광범위한 비트 로직 부울 프로세스 능력 (강력한 비트 제어) 2

8051의 특징

Function

Data Bits Width 8 Bits Computation Memory Size I/O Port Etc.

Arithmetic Operation Logical Operation Bit Operation Data : External Memory 64KB , Internal Memory 128B Program : External Memory 64KB , Internal Memory 4KB Parallel I/O port : 32 (4×8bits) Serial I/O port : Full Duplex UART 2×16 Bits Timer Clock Generator 5 Interrupt s 3

2. 8051 Family 8051을 Core로 하는 Micro Controller 들을 일컫는다.

이름 8051 8051AH 8052AH ROM없음 8031 8031AH 8032AH EPROM 8751 8751H 8752BH FLASH 89C51 89C52 ROM Size 4KB 4KB 8KB RAM Size 128B 128B 256B 16 bit Timer 2 2 3 비고 CHMOS형의 8051 에는 POWER Down Mode가 있 음.

• 8051 : 내부에 Masking Type의 ROM을 내장한 프로세서.

Mask ROM type, OTP(One-Time Programming) type이 현재 출시되고 있음.

• 8031 : Chip 내부에 ROM을 내장하고 있지 않다.

• 8751 : EPROM type의 ROM을 내장 • 89C51 : Flash Memory type ROM 내장, 전기적으로 Erase, Write (Atmel사 제품) 4

표 2.2 Philips사에서 출시되는 8051 Family 이름 83C451 83C528 83C550 83C552 Pin 68 40, 44 68 68, 80 ROM 4K 32K 4K 8K RAM 128 512 128 256 기타 기능 52 I/O, 2timer, 1UART 32 I/O,WDOG,3-timer, UART,I2C bus 8-8bitA/D,WDOG,2-timer,1UART 48I/O,10bit A/d,WDOG,3-timer, 1UART, 2PWM,I2C bus 89C51Rx2 40, 44 16, 32, 64KF 128 ISP, IAP, more Interrupt, 32I/O, 1UART Low EMI, 2 nd DPTR, PCA 5

표 2.3 Atmel사에서 출시되는 8051 Family 이름 89C51 89C52 89C55 89C1051 89C2051 89C4051 89S52 Pin 40, 44 40, 44 40, 44 20 20 20 40, 44 ROM 4KF 8KF 20KF 1KF 2KF 4KF 8KF RAM 128 256 256 64 128 128 256 기타 기능 32 I/0, 2-timer, 1UART 32 I/0, 2-timer, 1UART 32 I/0, 2-timer, 1UART 15 Programmable I/O, 2-timer 1UART, Analog Comparator Same above 32I/0, 3-timer, 1UART,WDOG, 2DPTR 6

그림 2.1 8051 핀 배치도 7

2.2 8051의 외부 핀 기능과 내부 기능 8

1. 8051 외부 핀 기능  포트(Port) 0 (P0.0 - P0.7) : 중복된 기능을 가지는 포트  외부 ROM 혹은 RAM과 데이터 전송 시 하위 어드레스와 데이터 버스로 사용  외부에 메모리를 Interface 하지 않을 때에는 범용 I/O포트로 사용  EPROM write시에는 데이터 버스로 사용된다 .

 포트(Port) 1 (P1.0 - P1.7) :  내부 Pull-up이 되어 있는 8 비트 양방향 입출력 단자  사용자가 기능을 지정하여 사용 가능한 범용 포트(Port)이다.

 EPROM 에 프로그램을 쓸 경우에는 어드레스 버스 A0 -A7으로 사용된다 .

 포트(Port) 2 (P2.0 - P2.7) : 중복된 기능을 가지는 포트  외부 ROM과 데이터를 전송할 때에는 상위 어드레스(A8 -A15 ) Port로 사용  외부에 메모리를 Interface하지 않았을 때에는 범용 I/O포트로써 제공 9

 포트(Port) 3 (P3.0 - P3.7) : 중복된 기능을 갖는 포트  내부 풀 업(Pull-up)을 갖는 8비트 양방향 입출력 단자(범용 I/O)  다른 목적을 가지는 다중기능 표 2.4 포트 3의 다중 기능 포트 핀 P3.0

P3.1

P3.2

P3.3

P3.4

P3.5

P3.6

P3.7

다른 기능 RxD (serial input port ) TxD (serial output port ) /INT 0 (external interrupt 0) /INT 1 (external interrupt 1) T 0 (T imer 0 external input ) T 1 (T imer 1 external input ) /WR (external data memory write strobe) /RD (external data memory read strobe) 10

 RESET : Master Reset 입력으로 Active HIGH 신호 최소 두 개의 Machine Cycle 동안 High 상태가 유지될 때 유효.

 ALE / PROG ( Address Latch Enable output/ PROGram pulse input ) 외부 Memory와 Interface할 때 하위 어드레스를 Latch하는데 사용되는 신호 EPROM을 프로그램 하는 동안에 프로그램 펄스( /PROG )가 입력된다.

 / PSEN (Program Strobe ENable) 외부 ROM에서 Data를 읽을 때 출력되는 Active LOW의 Strobe 신호 외부 ROM의 OE(Output Enable) Pin에 연결된다. 11

 /EA/Vpp (External Access enable /Vpeak- peak) • /EA : 외부 프로그램 메모리 선택 신호 / EA=0 :000H~0FFFH(4KB) 영역을 외부 ROM에서 사용( 외부 ROM만 사용 ) / EA=1 : 000H~0FFFH 영역을 내부 ROM 영역에서 사용 • Vpp : EPROM에 프로그램을 하는 동안 프로그램 전압을 입력하는 전원 입력 단자  XTAL1, XTAL2 : 클럭 입력 단자  Vcc, GND : 전원입력 및 전원 ground 단자 12

2. 8051 내부 기능 13

⑴ 프로그램 카운터 (PC) • ROM에 저장되어 있는 명령어의 실행 순서를 정해주는 16bit Register • 실행하고자 하는 명령이 들어있는 메모리의 번지를 가리킨다. • PC는 Reset 된 후의 값은 0000h 가 된다. • 점프/ 콜 등의 명령으로 그 값이 변화될 수 있다. 그 이외에는 명령어의 수행 크기만큼 자동으로 증가한다 .

⑵ ALU (Arithmetic and Logic Unit ) 8비트 산술 및 논리 연산을 하는 곳이다.

- Carry 없는 덧셈, Carry 있는 덧셈/ 뺄셈 처리 연산 - +1증가, - 1감소 연산 - 곱셈/ 나눗셈 연산 - AND, OR, XOR, Rotate 연산 - 보수화 연산 Nibble 단위의 Data 교환 연산 - 조건 Branch 처리 14

⑶ 어큐뮬레이터(ACC : Accumulator ) - 산술논리 연산에서 연산자로 사용된다.

- 테이블 참조 명령에서 테이블 번지의 옵셋으로 사용.

- 외부 데이터 메모리와 데이터 전송에 사용.

- 프로그램 메모리에서 데이터를 읽을 때 사용 - A로도 표기한다. 가장 많이 사용되는 레지스터이다.

15

그림 2.3 8051의 내부 블록도 16

2.3 8051 Memory 구조 1. Program과 Data Memory의 구조 /PSEN : ROM Access /RD, /WR : RAM Access 17

2. Program Memory (ROM) • 전체 64KByte까지 사용이 가능하다.

• 외부, 내부 ROM의 선택은 /EA(External Access) Pin으로 한다.

• 외부 프로그램 메모리를 Access 하는 명령어는 MOVC /EA=0 :000H~0FFFH(4KB) 영역을 외부 ROM에서 사용 (외부 ROM만 사용) /EA=1 : 000H~0FFFH 영역을 내부 ROM 영역에서 사용 18

3. Data Memory (RAM) (1) 8051의 외부 데이터 메모리 • 64[Kbyte]의 공간을 Access 가능 • 외부 데이터 메모리를 Access하기 위해 사용되는 명령어 : MOVX • 외부 데이터 메모리를 Access하면 H/W적으로 /RD, /WR 신호가 발생 19

(2) 8051의 내부 데이터 메모리 • 데이터 RAM 영역 : 128 Byte(00H~7FH) • SFR (Special Function Register)영역 : 128 Byte (80H~0FFH) • MOV 명령에 의해서 Access가 가능하다.

20

내부 메모리의 하위 128 Byte(00H~0FH)의 구조 Register Bank 4개 21

Register Bank - REG. Bank : R0-R7 - REG. Bank 의 선택 : PSW(상태레지스터) 의 뱅크선택 비트를 변경에 의 해 선택 가능.

- REG. Bank 의 Access : 직접 에드레싱 모드와 레지스터 어드레싱 모드 22

비트 지정 가능(Bit-addressable) 영역 비트 지정 방법 : 00H - 7FH 또는 20.1H - 2F.7H로 비트 주소 지정 23

범용의 기억 장소 - 30H- 7FH까지는 범용의 RAM으로 사용 - 직접, 간접 Addressing Mode로 Access 가능 MOV A, 5FH ; 직접 어드레싱 모드 MOV R0, # 5FH ;  MOV A, @ R0 ; 간접 어드레싱 모드 24

< 참고 > 8051 명령의 주소 지정 방식 (Addressing Mode) 8051의 데이터 이동 법칙 MOV <목적지>, <소스> 니모닉 오퍼랜드 ① 직접 주소 지정 방식(Addressing Mode) 8비트로 오퍼랜드의 번지(address)를 직접 지정하는 방식 내부 데이터 메모리의 하위 128바이트나 SFR을 Access하는데 사용된다.

MOV A, direct ; (Acc) ← (address) MOV direct, A ; (address) ← (Acc) 25

② 간접 주소 지정 방식(Addressing Mode) Operand의 주소를 저장하고 있는 Reg.를 이용하여 Operand를 간접적으로 지정 내부 또는 외부 데이터 메모리를 액세스하는데 사용된다.

간접 주소 지정방식에는 Register는 R0 또는 R1만을 사용 가능하다.

기호 @를 R0, R1앞에 나타내어 간접 주소 지정임을 표시 MOV @Rn, #data ; ((Rn)) ← data ( n = 0 or 1) MOV @Rn, direct ; ((Rn)) ← (direct address) 예) MOV R0, #5FH MOV A, @R0 26

③ 레지스터 주소 지정 방식(Addressing Mode) R0-R7을 포함하는 레지스터 Bank를 액세스하는 방식 오퍼랜드를 표시하는 추가적인 Byte를 사용하지 않으므로 기계어 코드가 짧아 진다는 장점 MOV A, Rn ; (Acc)←(Rn), (n=0 ~ 7) MOV Rn, A ; (Rn)←(Acc) ④ 즉치(Immediate) 주소 지정 방식(Addressing Mode) 오퍼랜드가 명령어 코드 중에 상수 값으로 표시되는 방식 오퍼랜드는DPTR을 제외하고는 항상 8비트이다.

명령에 사용되는 즉치 데이터의 앞에는 반드시 #기호를 사용한다.

MOV A, #data ; (ACC) ← data 27

특수기능 레지스터(

S

pecial

F

unction

R

egister)

8051의 내부 RAM 80H~F로(128바이트) 까지에 위치하고 있는 21개의 Register.

- 이 위치를 직접번지 지정으로 액세스 하면 데이터 메모리 대신 SFR 이 액세스 됨  구성 • Port Latch 및 주변기기의 상태 및 제어를 담당하는 Register P0,P1,P2,P3, PCON,TCON

..

• 소프트웨어 제어연산용 Register ACC, B, DPTR, PSW, SP 28

 특수기능 레지스터( S pecial F unction R egister) 29

① B Register - 8 bit의 범용 레지스터 ACC와 조합해서 곱셈과 나눗셈 연산에 사용.

② Stack Pointer(SP) - 8 bit 레지스터 현재 스택(Stack)의 가장 윗 부분 데이터의 주소를 가리킨다.

Stack의 동작 푸싱(pushing ) : 데이터를 넣는 동작 데이터를 쓰기 전에 스택 포인터(SP)를 증가시킴. 팝핑(popping ) : Stack 에서 데이터를 제거 데이터를 읽고 SP를 감소시킨다.

스택은 내부 데이터 메모리(내부 RAM)의 어디나 존재할 수 있음.

Reset 후에 07H로 초기화되어 08H번지에서 시작 Stack의 번지 초기화 명령 MOV SP, # 5FH (60H 번지로 스택 포인터 위치 설정하기) 30

③ PSW(Program Status Word) CPU의 연산 처리결과를 나타내는 레지스터로 주소는 D0H이다.

31

④ DPTR(Data Pointer Register) • 16Bit의 Register이다.

• DPH, DPL로 나누어서 8Bit로도 사용이 가능하다.

• 외부 데이터 메모리(RAM) 와 데이터를 주고 받을 때 Address Pointer로 사용  내부 기능 제어용 레지스터 • Timer/Counter TH1, TL1, TH0, TL0, TMOD, TCON • Serial Port SBUF, SCON, PCON • Interrupt Control • IE, IP I/O Port Control P0, P1, P2, P3 32

2.4 8051 타이밍 33

Machine Cycle

:

CPU

가 한 개의 명령어를 처리하는데 소요되는 주기  1 machine cycle :

6

상태

, 12 Clock

으로 구성  12[MHz] X-tal 을 사용할 경우 1Machine Cycle 은 1[usec.] 소요 . 34

 1Byte 1Cycle 명령인 경우(예, INC A) S1에서 명령을 Fetch S4에서 다음 명령의 OP Code를 읽지만, 무시 다음 Cycle의 S1에서 똑같은 OP Code를 읽기 때문. 35

 2Byte 1Cycle 명령인 경우 (예, ADD A, #data) S1에서 OP Code Fetch, S4에서 Operand를 읽어서 명령을 처리한다.

36

 1Byte 2Cycle 명령인 경우 ( 예, INC DPTR ) S1에서 OP Code를 Fetch, S4와 다음 Cycle의 S1,S4에서 Dummy Read.

37

 1Byte 2Cycle 명령인 경우에서 MOVX 명령의 경우 외부 데이터 메모리만 Access하는 명령이다.

다음의 OP Code의 읽기가 가능하다.

38

2. 외부 메모리 액세스 타이밍  외부 프로그램 메모리( ROM )와의 인터페이스  ROM의 Hardware적 Access 신호 : /PSEN 39

40

 외부 데이터 메모리( RAM )와의 인터페이스 RAM의 Hardware적 Access 신호 : /RD, /WR 41

 외부 RAM의 읽기 타이밍도 42

 외부 RAM의 쓰기 타이밍도 43

산술 연산 명령어 44

논리 연산 명령어

45

데이터 이동 명령어

46

부울대수 처리 명령어

47

서브루틴 / 분기 명령어(1)

48

서브루틴 / 분기 명령어(2)

49

; ; ; ; ; ; ARITH1.ASM(덧셈) ORG MOV MOV MOV MOV ADD MOV MOV ADDC MOV MOV JMP END 4000H PSW, #08H R0, #20H R1, #30H A, R0 A, R1 R3, A A, #0H A, #0H R2, A PSW, #0H 0057H ; BANK 1 선택 ; R0 값 설정 ; R1 값 설정 ; A <- R0 ; A <- A + R1 ; R3 <- A ; A <- 0 ; A <- A + 0 + CY ; R2 <- A ; BANK 0 선택 ; 모니터 프로그램으로 50

• • • • • • • • • • • • • • • • • • • • • ; ; ; ; ; ARITH2.ASM(뺄셈) ORG MOV MOV MOV MOV MOV CLR MOV SUBB MOV MOV SUBB MOV MOV JMP END 4000H PSW, #08H R2, #34H R3, #56H R4, #12H R5, #34H C A, R3 A, R5 R7, A A, R2 A, R4 R6, A PSW, #0H 0057H ; BANK 1 선택 ; R2 값 설정 ; R3 값 설정 ; R4 값 설정 ; R5 값 설정 ; CY <- 0 ; A <- R3 ; A <- A - R3 - CY ; R7 <- A ; A <- R2 ; A <- A - R4 - CY ; R6 <- A ; BANK 0 선택 ; 모니터 프로그램으로 51

• • • • • • • • • • • ; ARITH3.ASM

ORG MOV • ; MOV MOV • • ; MOV ADD DA MOV • ; MOV JMP 로 END 4000H PSW, #08H R0, #13H R1, #19H A, R0 A, R1 A R2, A PSW, #0H 0057H ; BANK 1 선택 ; R0 값 설정 ; R1 값 설정 ; A <- R0 ; A <- A + R1 ; 10진 보정 ; R2 <- A(덧셈결과) ; BANK 0 선택 ; 모니터 프로그램으 52

• • • • • • ; ARITH4.ASM(곱셈) ORG MOV • • • ; • • ; MOV MOV MOV MOV MUL • • ; MOV MOV • • • • ; 로 MOV JMP END 4000H PSW, #08H R0, #9 R1, #11 B, R0 A, R1 AB R3, A R2, B PSW, #0H 0057H ; BANK 1 선택 ; BANK 0 선택 ; 모니터 프로그램으 53

• • • • • ; • • • ; • • ; ARITH5.ASM

ORG • ; MOV • • • • • ; CLR MOV 4000H DPTR, #1000H C A, DPL SUBB A, #1 MOV DPL, A MOV MOV JMP END A, DPH SUBB A, #0 DPH, A 0057H ; DPTR <- 1000H ; DPL <- DPL - 1 ; DPH <- DPH - 0 - CY; ; 모니터 프로그램으로 54

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • ; ; ; ; ;BIT1.ASM

; MOV RLC MOV RLC MOV RLC MOV RLC MOV RLC MOV RLC MOV RLC MOV RLC ORG MOV MOV MOV MOV MOV MOV MOV MOV CLR MOV JMP END 4000H 20H, #34H 21H, #65H 22H, #0A5H 23H, #0B5H 24H, #38H 25H, #91H 26H, #55H 27H, #88H A C, 27H.0

A C, 26H.0

A C, 25H.0

A C, 24H.0

A C, 18H A C, 10H A C, 08H A C, 0H A 30H, A 0057H ; A <- 0 ; 23H,0 ; 22H.0

; 21H.0

; 20H.0

; 모니터 프로그램으로 55