Family 의 개요 의 외부 Pin 기능과 내부 기능 Memory 구조 Timing 2 장 8051 의 구조
2 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 비트 원칩 마이크로프로세서 광범위한 비트 로직 부울 프로세스 능력 ( 강력한 비트 제어 ) Family 의 개요 의 주요 특징
3 Function Data Bits-Width8 Bits Computation Arithmetic Operation Logical Operation Bit Operation Memory Size Data : External Memory 64KB, Internal Memory 128B Program : External Memory 64KB, Internal Memory 4KB I/O Port Parallel I/O port : 32 (4×8bits) Serial I/O port : Full Duplex UART Etc. 2×16 Bits Timer Clock Generator 5 Interrupt s 8051 의 특징
Family 8051 을 Core 로 하는 Micro Controller 들을 일컫는다. CHMOS 형의 8051 에는 POWER Down Mode 가 있 음 B 256B 4KB 8KB - 89C51 89C H 8752BH AH 8032AH AH 8052AH 비고 16 bit Timer RAM Size ROM Size FLASHEPROM ROM 없음이름 8051 : 내부에 Masking Type 의 ROM 을 내장한 프로세서. Mask ROM type, OTP(One-Time Programming) type 이 현재 출시되고 있음 : Chip 내부에 ROM 을 내장하고 있지 않다 : EPROM type 의 ROM 을 내장 89C51 : Flash Memory type ROM 내장, 전기적으로 Erase, Write (Atmel 사 제품 )
5 표 2.2 Philips 사에서 출시되는 8051 Family 이름 PinROMRAM 기타 기능 83C451684K12852 I/O, 2timer, 1UART 83C52840, 4432K51232 I/O,WDOG,3-timer, UART,I2C bus 83C550684K1288-8bitA/D,WDOG,2-timer,1UART 83C55268, 808K25648I/O,10bit A/d,WDOG,3-timer, 1UART, 2PWM,I2C bus 89C51Rx240, 4416, 32, 64KF 128ISP, IAP, more Interrupt, 32I/O, 1UART Low EMI, 2 nd DPTR, PCA ….….
6 표 2.3 Atmel 사에서 출시되는 8051 Family 이름 PinROMRAM 기타 기능 89C5140, 444KF12832 I/0, 2-timer, 1UART 89C5240, 448KF25632 I/0, 2-timer, 1UART 89C5540, 4420KF25632 I/0, 2-timer, 1UART 89C KF6415 Programmable I/O, 2-timer 89C KF1281UART, Analog Comparator 89C KF128Same above 89S5240, 448KF25632I/0, 3-timer, 1UART,WDOG, 2DPTR
7 그림 핀 배치도
의 외부 핀 기능과 내부 기능
9 포트 (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 포트로써 제공 외부 핀 기능
10 포트 (Port) 3 (P3.0 - P3.7) : 중복된 기능을 갖는 포트 내부 풀 업 (Pull-up) 을 갖는 8 비트 양방향 입출력 단자 ( 범용 I/O) 다른 목적을 가지는 다중기능 포트 핀다른 기능 P3.0RxD (serial input port ) P3.1TxD (serial output port ) P3.2/INT 0 (external interrupt 0) P3.3/INT 1 (external interrupt 1) P3.4T 0 (T imer 0 external input ) P3.5T 1 (T imer 1 external input ) P3.6/WR (external data memory write strobe) P3.7/RD (external data memory read strobe) 표 2.4 포트 3 의 다중 기능
11 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 에 연결된다.
12 /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 단자
내부 기능
14 ⑴ 프로그램 카운터 (PC) ROM 에 저장되어 있는 명령어의 실행 순서를 정해주는 16bit Register 실행하고자 하는 명령이 들어있는 메모리의 번지를 가리킨다. PC 는 Reset 된 후의 값은 0000h 가 된다. 점프 / 콜 등의 명령으로 그 값이 변화될 수 있다. 그 이외에는 명령어의 수행 크기만큼 자동으로 증가한다. ⑵ ALU (Arithmetic and Logic Unit ) 8 비트 산술 및 논리 연산을 하는 곳이다. - Carry 없는 덧셈, Carry 있는 덧셈 / 뺄셈 처리 연산 - +1 증가, - 1 감소 연산 - 곱셈 / 나눗셈 연산 - AND, OR, XOR, Rotate 연산 - 보수화 연산 - Nibble 단위의 Data 교환 연산 - 조건 Branch 처리
15 ⑶ 어큐뮬레이터 (ACC : Accumulator ) - 산술논리 연산에서 연산자로 사용된다. - 테이블 참조 명령에서 테이블 번지의 옵셋으로 사용. - 외부 데이터 메모리와 데이터 전송에 사용. - 프로그램 메모리에서 데이터를 읽을 때 사용 - A 로도 표기한다. 가장 많이 사용되는 레지스터이다.
16 그림 의 내부 블록도
Memory 구조 1. Program 과 Data Memory 의 구조 /PSEN : ROM Access /RD, /WR : RAM Access
18 2. Program Memory (ROM) 전체 64KByte 까지 사용이 가능하다. 외부, 내부 ROM 의 선택은 /EA(External Access) Pin 으로 한다. 외부 프로그램 메모리를 Access 하는 명령어는 MOVC /EA=0 :000H~0FFFH(4KB) 영역을 외부 ROM 에서 사용 ( 외부 ROM 만 사용 ) /EA=1 : 000H~0FFFH 영역을 내부 ROM 영역에서 사용
19 3. Data Memory (RAM) (1) 8051 의 외부 데이터 메모리 64[Kbyte] 의 공간을 Access 가능 외부 데이터 메모리를 Access 하기 위해 사용되는 명령어 : MOVX 외부 데이터 메모리를 Access 하면 H/W 적으로 /RD, /WR 신호가 발생
20 (2) 8051 의 내부 데이터 메모리 데이터 RAM 영역 : 128 Byte(00H~7FH) SFR (Special Function Register) 영역 : 128 Byte (80H~0FFH) MOV 명령에 의해서 Access 가 가능하다.
21 내부 메모리의 하위 128 Byte(00H~0FH) 의 구조 Register Bank 4 개
22 Register Bank - REG. Bank : R0-R7 - REG. Bank 의 선택 : PSW( 상태레지스터 ) 의 뱅크선택 비트를 변경에 의해 선택 가능. - REG. Bank 의 Access : 직접 에드레싱 모드와 레지스터 어드레싱 모드
23 비트 지정 방법 : 00H - 7FH 또는 20.1H - 2F.7H 로 비트 주소 지정 비트 지정 가능 (Bit-addressable) 영역
H- 7FH 까지는 범용의 RAM 으로 사용 - 직접, 간접 Addressing Mode 로 Access 가능 MOV A, 5FH ; 직접 어드레싱 모드 MOV R0, #5FH ; MOV ; 간접 어드레싱 모드 범용의 기억 장소
25 ① 직접 주소 지정 방식 (Addressing Mode) 8 비트로 오퍼랜드의 번지 (address) 를 직접 지정하는 방식 내부 데이터 메모리의 하위 128 바이트나 SFR 을 Access 하는데 사용된다. MOV A, direct ; (Acc) ← (address) MOV direct, A ; (address) ← (Acc) 8051 명령의 주소 지정 방식 (Addressing Mode) 8051 의 데이터 이동 법칙 MOV, 니모닉 오퍼랜드
26 ② 간접 주소 지정 방식 (Addressing Mode) Operand 의 주소를 저장하고 있는 Reg. 를 이용하여 Operand 를 간접적으로 지정 내부 또는 외부 데이터 메모리를 액세스하는데 사용된다. 간접 주소 지정방식에는 Register 는 R0 또는 R1 만을 사용 가능하다. 를 R0, R1 앞에 나타내어 간접 주소 지정임을 표시 #data ; ((Rn)) ← data ( n = 0 or 1) direct ; ((Rn)) ← (direct address) 예 ) MOV R0, #5FH MOV
27 ③ 레지스터 주소 지정 방식 (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
28 특수기능 레지스터 (Special Function Register) 8051 의 내부 RAM 80H~F 로 (128 바이트 ) 까지에 위치하고 있는 21 개의 Register. - 이 위치를 직접번지 지정으로 액세스 하면 데이터 메모리 대신 SFR 이 액세스 됨 구성 Port Latch 및 주변기기의 상태 및 제어를 담당하는 Register P0,P1,P2,P3, PCON,TCON….. 소프트웨어 제어연산용 Register ACC, B, DPTR, PSW, SP
29 특수기능 레지스터 (Special Function Register)
30 ① B Register - 8 bit 의 범용 레지스터 ACC 와 조합해서 곱셈과 나눗셈 연산에 사용. ② Stack Pointer(SP) - 8 bit 레지스터 현재 스택 (Stack) 의 가장 윗 부분 데이터의 주소를 가리킨다. Stack 의 동작 푸싱 (pushing ) : 데이터를 넣는 동작 데이터를 쓰기 전에 스택 포인터 (SP) 를 증가시킴. 팝핑 (popping ) : Stack 에서 데이터를 제거 데이터를 읽고 SP 를 감소시킨다. 스택은 내부 데이터 메모리 ( 내부 RAM) 의 어디나 존재할 수 있음. Reset 후에 07H 로 초기화되어 08H 번지에서 시작 Stack 의 번지 초기화 명령 (60H 번지로 스택 포인터 위치 설정하기 ) MOV SP, #5FH
31 ③ PSW(Program Status Word) CPU 의 연산 처리결과를 나타내는 레지스터로 주소는 D0H 이다.
32 ④ 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
타이밍
34 Machine Cycle : CPU 가 한 개의 명령어를 처리하는데 소요되는 주기 1 machine cycle : 6 상태, 12 Clock 으로 구성 12[MHz] X-tal 을 사용할 경우 1Machine Cycle 은 1[usec.] 소요.
35 1Byte 1Cycle 명령인 경우 ( 예, INC A) S1 에서 명령을 Fetch S4 에서 다음 명령의 OP Code 를 읽지만, 무시 다음 Cycle 의 S1 에서 똑같은 OP Code 를 읽기 때문.
36 2Byte 1Cycle 명령인 경우 ( 예, ADD A, #data) S1 에서 OP Code Fetch, S4 에서 Operand 를 읽어서 명령을 처리한다.
37 1Byte 2Cycle 명령인 경우 ( 예, INC DPTR ) S1 에서 OP Code 를 Fetch, S4 와 다음 Cycle 의 S1,S4 에서 Dummy Read.
38 1Byte 2Cycle 명령인 경우에서 MOVX 명령의 경우 외부 데이터 메모리만 Access 하는 명령이다. 다음의 OP Code 의 읽기가 가능하다.
39 2. 외부 메모리 액세스 타이밍 외부 프로그램 메모리 (ROM) 와의 인터페이스 ROM 의 Hardware 적 Access 신호 : /PSEN
40
41 외부 데이터 메모리 (RAM) 와의 인터페이스 RAM 의 Hardware 적 Access 신호 : /RD, /WR
42 외부 RAM 의 읽기 타이밍도
43 외부 RAM 의 쓰기 타이밍도
44 산술 연산 명령어
45 논리 연산 명령어
46 데이터 이동 명령어
47 부울대수 처리 명령어
48 서브루틴 / 분기 명령어 (1)
49 서브루틴 / 분기 명령어 (2)
50 ; ARITH1.ASM( 덧셈 ) ORG 4000H MOV PSW, #08H; BANK 1 선택 ; MOV R0, #20H; R0 값 설정 MOV R1, #30H; R1 값 설정 ; MOV A, R0; A <- R0 ADD A, R1; A <- A + R1 MOV R3, A; R3 <- A ; MOV A, #0H ; A <- 0 ADDC A, #0H ; A <- A CY MOV R2, A; R2 <- A ; MOV PSW, #0H; BANK 0 선택 JMP 0057H; 모니터 프로그램으로 ; END
51 ; ARITH2.ASM( 뺄셈 ) ORG 4000H MOV PSW, #08H; BANK 1 선택 ; MOV R2, #34H; R2 값 설정 MOV R3, #56H; R3 값 설정 MOV R4, #12H; R4 값 설정 MOV R5, #34H; R5 값 설정 ; CLR C; CY <- 0 MOV A, R3; A <- R3 SUBB A, R5; A <- A - R3 - CY MOV R7, A; R7 <- A ; MOV A, R2; A <- R2 SUBB A, R4; A <- A - R4 - CY MOV R6, A; R6 <- A ; MOV PSW, #0H; BANK 0 선택 JMP 0057H; 모니터 프로그램으로 END
52 ; ARITH3.ASM ORG 4000H MOV PSW, #08H; BANK 1 선택 ; MOV R0, #13H; R0 값 설정 MOV R1, #19H; R1 값 설정 ; MOV A, R0; A <- R0 ADD A, R1; A <- A + R1 DA A; 10 진 보정 MOV R2, A; R2 <- A( 덧셈결과 ) ; MOV PSW, #0H; BANK 0 선택 JMP 0057H; 모니터 프로그램으로 END
53 ; ARITH4.ASM( 곱셈 ) ORG 4000H MOV PSW, #08H; BANK 1 선택 ; MOV R0, #9 MOV R1, #11 ; MOV B, R0 MOV A, R1 MUL AB ; MOV R3, A MOV R2, B ; MOV PSW, #0H; BANK 0 선택 JMP 0057H; 모니터 프로그램으로 END
54 ; ARITH5.ASM ORG4000H ; MOVDPTR, #1000H; DPTR <- 1000H ; CLRC MOVA, DPL SUBBA, #1 MOVDPL, A; DPL <- DPL - 1 ; MOVA, DPH SUBBA, #0 MOVDPH, A; DPH <- DPH CY; ; JMP0057H; 모니터 프로그램으로 END
55 ;BIT1.ASM ORG 4000H ; MOV 20H, #34H MOV 21H, #65H MOV 22H, #0A5H MOV 23H, #0B5H MOV 24H, #38H MOV 25H, #91H MOV 26H, #55H MOV 27H, #88H ; CLR A; A <- 0 ; MOV C, 27H.0 RLC A MOV C, 26H.0 RLC A MOV C, 25H.0 RLC A MOV C, 24H.0 RLC A MOV C, 18H; 23H,0 RLC A MOV C, 10H; 22H.0 RLC A MOV C, 08H; 21H.0 RLC A MOV C, 0H; 20H.0 RLC A ; MOV 30H, A ; JMP 0057H; 모니터 프로그램으로 END