하드웨어 설계에 관련한 공개 강좌를 게재하는 공간입니다.
운영진에 의해 강좌글은 편집되며, 공익을 위한 게시글은 '하드웨어 강좌'란으로 이동될 수 있습니다.
판매자 | 아크마 | 판매 납포인트 | 무료 | 평점 | 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.0~P0.7 , pin 32~39)
ㅇ 외부 메모리를 연결하지 않았을 때에는 입출력 port로 사용
(bit별 사용시 각 핀은 독립적으로 입력 또는 출력으로 사용)
ㅇ 외부 메모리(ROM, RAM) 연결시 주소 및 데이터 신호가 함께 나오는 AD0~AD7 line으로 사용
2.2 Port 1 (P1.0~P1.7 , pin 1~8)
ㅇ 법용 입출력 port로 사용
(bit별 사용시 각 핀은 독립적으로 입력 또는 출력으로 사용)
2.3 Port 2 (P2.0~P2.7 , pin 21~28)
ㅇ 외부 메모리를 연결하지 않았을 때에는 입출력 port로 사용
(bit별 사용시 각 핀은 독립적으로 입력 또는 출력으로 사용)
ㅇ 외부 메모리(ROM, RAM) 확장시 주소(A8~A15) 신호 line으로 사용
2.4 Port 3 (P3.0~P3.7 , pin 10~17)
ㅇ 외부 메모리를 연결하지 않았을 때에는 입출력 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. 기억 장치 구조
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 = RS1←1, RS0←0
* 교재 37page 표2-3. 8051 칩 데이터 메모리 참조
ㅇ 비트 주소 가능한 RAM(Bit Addressable RAM)
- 20H~2FH까지의 16byte는 외형상 바이트이고 실제로도 바이트 단위로도 사용 가 능하지만, 특별히 비트 단위로 사용
- 16byte = 128bit (비트별 개별적으로 00H~7FH 번지 갖음)
ㅇ 범용 RAM
- 30H~7FH, 80byte, 일반 램 영역
3.2 특수 기능 레지스터(Special Function Register)
* 교재 33page 그림2-6. 8051 칩 데이터 메모리 참조
ㅇ 80H~FFH 중 21개 정의(8051는 26개),
BIT별 제어(11개 : B, Acc, PSW, IP, IE, P0~P3, 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)로 사용
ㅇ 포트 레지스터(P0~P3)
- 이곳에 값을 쓰면 그 값이 각 포트의 출력 핀으로 값이 나가고, 이곳을 읽으면 핀 으로 입력을 읽는 것이 됨
- 비트별 액세스 가능
* 타이머/카운터, 직렬 포트, 인터럽트 제어용 레지스터는 4~6장에서 설명
ㅇ 전원 제어 레지스터(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 : A0~A7, D0~D7(ALE)
- P2 : A8~A15
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을 다수 사용한 경우는 주소 디코딩이 필요