회원가입 ID/PW 찾기

하드웨어 설계에 관련한 공개 강좌를 게재하는 공간입니다.
운영진에 의해 강좌글은 편집되며, 공익을 위한 게시글은 '하드웨어 강좌'란으로 이동될 수 있습니다.

콘텐츠 수 7

제2장. 하드웨어(Hardware)

8051 어셈블리 강좌(by 허인교수님) 구매수 0 조회 수 4396 2012.04.07 18:53:28
판매자 아크마 판매 납포인트 무료 평점 0점 / 총 0명 참여

2. 하드웨어(Hardware)

 

1. MCS-51 Family

 

MCS-51 Family 특징(8051이 기본)

  8bit Microcontroller optimized for control applications

  4Kbyte On-chip ROM/EPROM(Flash)

  128/256byte RAM

  2/3 16bit Timer/Counters

  32 Programmable I/O lines

  Programmable Serial Port

  64Kbyte External Program Memory Space

  64Kbyte External Data Memory Space

  Boolean Processor

  Extended Automotive Temperature Range(-40 +125)

  5 Interrupt Sources

  TTL and CMOS Compatible Logic Levels

  Available in PLCC and DIP package

  On-Chip clock oscillator

 

  * 교재 24page 그림2-1. 8051 블록도 27page 그림2-2. 8051 핀 출력 참조

 

  MCS-51 Family

     칩 번호            내장 ROM         내장 RAM        타이머

      8051            4Kbyte ROM          128byte           2

      8031                 -                128byte           2

      8751            4Kbyte EPROM       128byte           2

      8052            8Kbyte ROM          256byte           3

      8032                 -                256byte           3

      8752            8Kbyte EPROM       256byte           3

 

      8951            4Kbyte Flash          128byte           2

 

 

2.

2.1 Port 0 (P0.0P0.7 , pin 3239)

ㅇ 외부 메모리를 연결하지 않았을 때에는 입출력 port로 사용

   (bit별 사용시 각 핀은 독립적으로 입력 또는 출력으로 사용)

ㅇ 외부 메모리(ROM, RAM) 연결시 주소 및 데이터 신호가 함께 나오는 AD0AD7  line으로 사용

2.2 Port 1 (P1.0P1.7 , pin 18)

ㅇ 법용 입출력 port로 사용

   (bit별 사용시 각 핀은 독립적으로 입력 또는 출력으로 사용)

 

2.3 Port 2 (P2.0P2.7 , pin 2128)

ㅇ 외부 메모리를 연결하지 않았을 때에는 입출력 port로 사용

   (bit별 사용시 각 핀은 독립적으로 입력 또는 출력으로 사용)

ㅇ 외부 메모리(ROM, RAM) 확장시 주소(A8A15) 신호 line으로 사용

 

2.4 Port 3 (P3.0P3.7 , pin 1017)

ㅇ 외부 메모리를 연결하지 않았을 때에는 입출력 port로 사용

   (bit별 사용시 각 핀은 독립적으로 입력 또는 출력으로 사용)

ㅇ 다른 기능 보유

비트       이름                    다른 기능

P3.0       RXD       시리얼 입력 포트

P3.1       TXD       시리얼 출력 포트

P3.2       /INT0      외부 인터럽트 0

P3.3       /INT1      외부 인터럽트 1

P3.4       T0         외부 타이머/카운터 0

P3.5       T1         외부 타이머/카운터 1

P3.6       /WR       외부 데이터 메모리(RAM) 쓰기 신호

P3.7       /RD        외부 데이터 메모리(RAM) 읽기 신호 

 

2.5 /PSEN(Program Store ENable) (pin 29)

ㅇ 외부 프로그램(코드) 메모리(ROM)를 읽어 들일 때 active LOW 신호

   (외부 ROM의 출력 인에이블(/OE) 핀과 연결)

ㅇ 내부 ROM의 프로그램 실행시는 HIGH 신호

* 교재 46page 그림2-8. 외부 코드 메모리 접근 참조

 

2.6 ALE(Address Latch Enable)

ALE는 어드레스와 데이터가 같이 나오는 P0포트의 신호선들을 어드레스와 데이터로 구분

* 교재 46page 그림2-8. 외부 코드 메모리 접근 참조

 

2.7 /EA(External Access) (pin 31)

ㅇ 내부 ROM을 사용할 것인지, 외부 ROM을 사용할 것인지를 결정

   (내부 ROM 사용시는 /EA=1(high), 외부 ROM 사용시는 /EA=0(low))

* 교재 46page 그림2-8. 외부 코드 메모리 접근 참조

 

 

2.8 RST(Reset) (pin 9)

master Reset, Reset=1(High)

Reset 되면 Program Counter 00H 셋팅(그 외 레지스터 초기화) - 2-6 참조

   (전원 공급시 Reset 신호가 없으면 프로그램이 어느 번지부터 시작할 지 모름)

* 교재 53page 그림2-15. 시스템 리셋을 위한 두 회로 참조

 

2.9 칩 발진기(XTAL) 입력 (pin 18,19)

On-Chip oscillator : * 교재 27page 그림2-2. 8051 핀 출력 참조

External Clock : * 교재 30page 그림2-3. TTL 발진기로부터 8051 구동 참조

 

2.10 전원 (pin 20,40)

Vcc(+5V) : 40번 핀, Vss(Ground) : 20번 핀

 

 

3. 기억 장치 구조

clip_image001[4].jpg   

 

3.1 내부 RAM(On-Chip RAM)

* 교재 33page 그림2-6. 8051 칩 데이터 메모리 참조

 

ㅇ 내부 RAM은 레지스터 뱅크, 비트 주소 가능한 RAM, 범용 RAM 및 특수             기능 레지스터(SFR)로 구분

 

ㅇ 레지스터 뱅크(Register Bank)

  - 4개의 뱅크(Bank0, Bank1, Bank2, Bank3)

  - 1개의 뱅크에 8개의 레지스터(R0 R7)

    Bank0 : 00H 07H, R0 R7

    Bank1 : 08H 0FH, R0 R7

    Bank2 : 10H 17H, R0 R7

    Bank3 : 18H 1FH, R0 R7

  - Reset후에는 레지스터 Bank0 enable,

    다른 Bank enable하려면 SFR PSW(Program Status Word)에 있는 RS1,  RS0에 선택 값을 입력

    : Bank1 = RS11, RS00

     * 교재 37page 2-3. 8051 칩 데이터 메모리 참조

 

ㅇ 비트 주소 가능한 RAM(Bit Addressable RAM)

  - 20H2FH까지의 16byte는 외형상 바이트이고 실제로도 바이트 단위로도 사용 가 능하지만, 특별히 비트 단위로 사용

  - 16byte = 128bit (비트별 개별적으로 00H7FH 번지 갖음)

 

ㅇ 범용 RAM

  - 30H7FH, 80byte, 일반 램 영역

    

3.2 특수 기능 레지스터(Special Function Register)

* 교재 33page 그림2-6. 8051 칩 데이터 메모리 참조

80HFFH 21개 정의(8051 26),

   BIT별 제어(11 : B, Acc, PSW, IP, IE, P0P3, SCON, TCON)

Acc, B register, PSW, SP, DPH, DPL

   포트 레지스터 : P0, P1, P2, P3 

   타이머/카운터 레지스터 : TH0, TL0, TL1, TH1, TMOD, TCON

   직렬 포트 레지스터 : SBUF, SCON

   인터럽트 제어용 : IP, IE

   전원 제어 레지스터 : PCON   

  

Acc(또는 A, Accumulator)  

  - 많은 연산 및 판단의 기준이 되는 가장 핵심적인 레지스터

  - 비트별 액세스 가능

 

B(B register)

  - 일반적인 레지스터 기능 외에 곱셈과 나눗셈 명령에 연관되어 사용

    (MUL AB (341페이지 참조), DIV AB (325페이지 참조))

  - 비트별 액세스 가능    

 

PSW(Program Status Word)

CY

AC

F0

RS1

RS0

OV

-

P

  - 비트별 제어 가능

 

  - CY(CarrY flag) - PSW.7

    덧셈을 하는 동안 비트7 carry가 발생하면 Set("1")

    뺄셈을 하는 동안 비트7 borrow가 발생하면 Set("1")

 

  - AC(Auxiliary Carry flag) - PSW.6

    BCD 값을 더할 때 캐리가 비트3에서 비트4로 발생하거나, 낮은 니블(nibble)        서의 결과가 0AH 0FH사이에 있을 때 AC Set("1")

 

  - F0(Flag 0) : 사용자용 비트

  - RS0, RS1 : 레지스터 뱅크 선택 비트

  - OV(OVer flag) - PSW.2

    부호를 가지는 수로 덧셈과 뺄셈을 할 때, 소프트웨어는 그 결과가 유효한

      범위 내에 있는지를 결정하기 위해 이 비트를 사용

    결과가 +127보다 크고, -128보다 작다면 OV Set("1")

 

  - P(Parity bit) - PSW.0

    연산 후 생성된 결과를 비트별로 볼 때 1의 개수가 짝수개이면 0이 되고,

      홀수개이면 1  

   

SP(Stack Pointer)

  - 스택을 가리키는 포인트 레지스터

  - SP & Stack

    CALL 또는 PUSH 명령 수행시 PC(Program Counter)의 값을 Stack에 저장,          CALL문 수행 후 또는 POP 명령 수행시 stack에 저장시킨 값을 PC로 보냄

    SP SFR 1 byte, 스택은 내부RAM에 위치

    스택은 SP가 관리, SP는 현재 스택이 들어있는 내용의 위치 즉 번지를 가리킴,        스택에 값을 저장(PUSH)하면 자동으로 SP+1, 스택으로부터 저장된 값을 찾아        오면(POP) 자동으로 SP-1

   

ㅇ 데이터 포인터(DPTR : Data PoinTer Register)

   DPH(Data Pointer High-byte), DPL(Data Pointer Low-byte)

  - 이 레지스터는 외부 데이터 메모리와 데이터 전송시 어드레스 포인터로 사용

  - 프로그램 메모리(ROM)에서 정수 연산 혹은 조합해서 테이블 분기(jump)로 사용

 

ㅇ 포트 레지스터(P0P3)

  - 이곳에 값을 쓰면 그 값이 각 포트의 출력 핀으로 값이 나가고, 이곳을 읽으면 핀      으로 입력을 읽는 것이 됨

  - 비트별 액세스 가능

 

* 타이머/카운터, 직렬 포트, 인터럽트 제어용 레지스터는 46장에서 설명

 

ㅇ 전원 제어 레지스터(PCON : Power CONtrol register)

  - 비트별 액세스 못함

SMOD

-

-

-

GF1

GF0

PD

IDL

   

  - SMOD : 직렬 포트용(5장에서 설명)

  - GF0, GF1 : 비트별 제어가 불가능하므로 사용 안함

  - PD(Power Down)

    파워다운 모드를 활성화시키기 위해 1로 설정(해제는 reset)

    Set하면 칩 발진기가 멈추고, 모든 기능들이 멈추고, 모든 칩 RAM 내용이 유지        되고, 포트 핀들이 그들의 논리 레벨을 유지하고, ALE /PSEN Low

 

  - IDL(IDLe mode)

    "1"일 때 동작(해제는 Reset이나 인터럽트)

    Set하면 CPU는 인터럽트, 직렬 포트, 타이머/카운터를 제외한 나머지 블록에 클        록의 공급을 차단하여 CPU의 소비 전류를 줄임, ALE /PSEN High

 

4. 외부 메모리

8051 메모리 구조는 ROM, RAM 위치 공간이 서로 분리

  - ROM 공간은 Program(Code) memory space

  - RAM I/O 디바이스 위치 공간은 Data memory space

ㅇ 외부 메모리 사용시

  - P0 : A0A7, D0D7(ALE)

  - P2 : A8A15

  

4.1 외부 코드 메모리의 접근

ㅇ 외부 코드 메모리는 최대 64Kbyte

 

* 교재 46page 그림2-8. 외부 코드 메모리의 접근

       47page 그림2-9. 외부 코드 메모리에 대한 읽기 타이밍 참조

 

ㅇ 머신 사이클 주기는 12개의 발진 펄스

   (칩 발진기 12MHz crystal, One machine cycle 1)

ㅇ 한 머신 사이클 동안 ALE 두 번 펄스 발생하여 외부 프로그램 메모리로 보냄,

   명령어 2byte를 읽음(명령어가 1byte면 두 번째 byte는 무시)

MOVC(MOVe Code memory) 명령어 사용

  - MOVC A, @A+DPTR

  - MOVC A, @A+PC

 

4.2 외부 데이터 메모리의 접근

ㅇ 외부 데이터 메모리는 최대 64Kbyte

  - 8051의 내부 RAM 128바이트 RAM, 128바이트 SFR

 

* 교재 48page 그림2-10. MOVX 명령에 대한 타이밍

       49page 그림2-11. 1K RAM의 인터페이스 참조

 

/RD, /WR에 의해 enable되는 읽고, 쓰기 메모리

   ( /RD, /WR 이 두 핀에서 나오는 신호는 결코 동시에 enable 되지 않으므로 공유      가능)

ㅇ 외부 데이터 메모리 공간은 시스템 설계시 반드시 필요한 것은 아님

DPTR 또는 R0, R1을 사용한 MOVX 명령어 사용

  - 8비트 어드레스 사용한 외부 데이터 메모리 액세스

    MOVX A, @Ri : 읽기 (Ri = R0 또는 R1)

    MOVX @Ri, A : 쓰기 (Ri = R0 또는 R1)

  - 16비트 어드레스 사용한 외부 데이터 메모리 액세스

    MOVX A, @DPTR : 읽기

    MOVX @DPTR, A : 쓰기

 

4.3 주소 디코딩

ㅇ 외부 ROM 및 외부 RAM을 다수 사용한 경우는 주소 디코딩이 필요

 


위 내용은 청강대학교 허인 교수님의 고마운 공유정신 발휘로 마이컴박스에 게시 및 수정 업데이트됩니다.
허인 교수님 및 마이컴박스(개정부분)의 동의 없이 무단 복재 및 전재, 재배포 금지합니다.

모르는 것이 무엇인지 스스로 정리하고 질문하는 습관을 가집시다.
무성의/광범위하거나 직접 해보지 않고 올리는 질문은 서로를 피곤하게 합니다.
질문쪽지는 사절이오니 게시판에 글을 남겨주세요. 그래야 다같이 공유할 수 있으니까요.

첨부

search

8051 어셈블리 강좌(by 허인교수님) : (7)
■ 제3장. 명령어 2019-04-17 14:58
ETC
  • 산에는 우정이 있다.
    - 텐진
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.