mcs 51을 수신하는 포트를 만드는 방법. MCS-51 마이크로컨트롤러

UDC 681.5, 681.325.5 (075.8)

BBK 32.973.202-018.2 i 73

Shcherbina A.N.컴퓨팅 기계, 시스템 및 네트워크. 제어 시스템의 마이크로컨트롤러 및 마이크로프로세서: Cheb. 수당 / A.N. Shcherbina, P.A. Nechaev-SPb.: 폴리테크닉에서. 운타, 2012.-226p.

기술 시스템, 전력 및 전기 공학 관리 분야의 훈련 및 전문 분야에 대한 주 교육 표준의 내용과 "컴퓨터, 시스템 및 네트워크" 분야의 모범 커리큘럼 내용에 해당합니다.

인텔의 MCS-51 마이크로컨트롤러 제품군의 기본 아키텍처의 예에서 마이크로프로세서 시스템의 논리적 구성에 대한 근본적인 질문이 고려됩니다. 어셈블러 및 SI 언어로 마이크로 컨트롤러를 프로그래밍하는 기술에 대해 설명합니다.

고등 기술 기관의 학생과 교사, 기술 프로세스 및 생산 장비 자동화 전문가, 마이크로프로세서 시스템 설계 엔지니어에게 유용할 수 있습니다.

또한 140400 "전력 및 전기 공학" 방향의 학사, 공학 및 석사 교육의 "제어 시스템의 마이크로컨트롤러 및 마이크로프로세서" 및 "자동화 전자 장치" 분야의 주 교육 표준 내용에 해당합니다.

편집 및 출판위원회의 결정에 의해 출판

상트페테르부르크 주립 폴리테크닉 대학교.

© Shcherbina A.N., Nechaev P.A., 2012

© 상트페테르부르크 주

폴리텍 대학교, 2012

ISBN 978-5-7422-3553-8


소개.. 7

1장. MCS51 제품군의 아키텍처. 10

1.1 일반 특성 10

1.2 블록 다이어그램 11



1.3 8051 마이크로컨트롤러 핀 할당 15

1.4 기억 조직 17

1.4.1 프로그램 메모리(ROM) 18

1.4.2 데이터 메모리(RAM) 19

1.4.3 특수 기능의 레지스터. 20

1.4.4 플래그 레지스터(PSW) 23

1.5 제어 및 동기화 장치 26

1.6 I/O 포트 구성 27

1.6.1 일반 정보. 27

1.6.2 대체 기능. 27

1.7. 8051 제품군의 마이크로컨트롤러 타이머/카운터 28

1.7.1. 타이머 카운터의 구조. 28

1.7.2 타이머 카운터의 작동 모드. 서른

1.8. 직렬 포트 32

1.8.1. 직렬 포트의 구조. 32

1.8.2. 트랜시버 제어/상태 레지스터 SCON.. 34

1.8.3. 전력 제어 레지스터 PCON.. 36

1.9. 인터럽트 시스템 37

1.9.1. 인터럽트 시스템의 구조. 37

1.9.2 인터럽트 루틴 실행. 40

2장 80C51GB.. 마이크로컨트롤러의 기능 42

2.1 특징 42

2.2 I/O 포트 P0-P5 43

2.2.1 I/O 포트의 작동. 43

2.2.2 포트에 쓰기.. 46

2.3 8XC51GB.. 인터럽트 시스템의 특징 49

인터럽트를 활성화/비활성화합니다. 50

인터럽트 우선 순위 관리. 51

외부 인터럽트. 54

2.3. ADC 노드 56

2.4. 하드웨어 워치독 61

2.5. 클록 오류 감지 63

2.6. 프로그래밍 가능한 카운터 RSA 64 매트릭스

2.6.1. 구조 PCA..64

2.6.2. PCA 카운터 모드 레지스터(CMOD) 66

2.6.3. PCA 카운터 제어 레지스터(CON) 67

2.6.4. 모듈 비교/수정. 68

2.7. 향상된 직렬 포트 76

2.8. 타이머/카운터 79

8XC51GB.. 그룹 마이크로컨트롤러의 핀 할당 86

3장 프로그래밍 MK 8051GB.. 89

3.1. 소프트웨어 모델 89

3.2 데이터 유형 93

3.3 데이터 주소 지정 방법 93

3.4 명령 시스템 95

3.4.1 일반 특성. 95

3.4.2 명령 유형. 96

3.4.3 피연산자의 유형. 97

3.4.4 마이크로컨트롤러 데이터 전송 명령. 98

3.4.5 산술 명령어 8051.101

3.4.6 8051 MCU 논리 명령 104

3.4.7 8051 비트 연산 명령 106

3.5 디버깅 프로그램 111

4장. ASM-51 프로그래밍 언어. 112

4.2 프로그램 텍스트 작성 113

4.3 언어 알파벳. 114

4.4 식별자. 115

4.5 숫자 117

4.6 지시문 118

4.7 ASM51의 서브루틴 구현 122

4.7.1 ASM51 언어의 서브루틴 절차 구조. 122

4.7.2 파라미터 변수를 서브루틴에 전달. 123

4.7.3 ASM51 언어로 서브프로그램 기능 구현. 123

4.7.4 ASM51 언어로 인터럽트 처리 루틴 구현. 124

4.8 어셈블리 언어의 구조적 프로그래밍. 125

4.9 다중 모듈 프로그램 번역의 특징.. 126

4.10 세그먼트 사용 128

4.10.1 MK 메모리를 세그먼트로 분할 .. 128

4.10.2 절대 메모리 세그먼트. 129

4.10.2 재배치 가능한 메모리 세그먼트. 131

5장. C-51 프로그래밍 언어. 134

5.1 언어의 일반적인 특징 134

5.3 C-51 프로그램의 구조 136

5.3. C-51 프로그래밍 언어의 요소 138

5.3.1. 기호.. 138

5.3.2. 어휘 단위, 구분 기호 및 공백 사용. 141

5.3.3 식별자.. 142

5.3.4 키워드. 143

5.3.5 상수..143

5.4. 언어 진술의 표현 146

프로그래밍 C-51 146

5.5. 작업 우선 순위 148

5.6. C-51 프로그래밍 언어 문장 149

5.6.1. 선언 연산자. 150

5.6.2 실행문.. 150

5.6.3 할당 연산자. 151

5.6.4 조건문. 151

5.6.5 구조 연산자(). 152

5.6.6 for 루프 문. 152

5.6.7 while 루프 본문까지 조건 검사가 포함된 루프 문. 153

5.6.8 루프 본문 do while 후 조건 검사가 포함된 루프 문. 154

5.6.9 break 문. 155

5.6.10 계속 문. 155

5.6.11 스위치 선택 문. 155

5.6.12 goto 연산자. 157

5.6.13 연산자 표현. 158

5.6.14 서브루틴 리턴의 리턴문. 158

5.6.15 빈 문. 158

5.7. C-51 프로그래밍 언어로 변수 선언하기. 159

5.7.1. 변수 선언. 159

5.7.3 정수 데이터 유형. 161

5.7.4 부동 소수점 숫자. 162

5.7.5 열거형 변수. 162

5.7.6. C-51 프로그래밍 언어로 배열을 선언합니다. 164

5.7.7. 구조.. 165

5.7.8. 협회(혼합물) 166

5.8. C-51에서 포인터 사용 167

5.8.1. 포인터 선언. 167

5.8.2. 유형이 지정되지 않은 포인터. 168

5.8.3. 메모리 종속 포인터. 169

5.9. 새로운 유형의 변수 선언 169

5.10. 데이터 초기화 170

5.11. C-51 프로그래밍 언어에서 서브루틴 사용. 170

5.11.1. 서브루틴의 정의.. 171

5.11.2. 서브프로그램 매개변수 .. 173

5.11.3. 서브루틴 사전 선언.. 174

5.11.4 서브루틴 호출.. 176

5.11.5 재귀 서브프로그램 호출.. 176

5.11.6 인터럽트 루틴. 177

5.11.7 변수 및 서브루틴의 범위 178

5.12. 다중 모듈 프로그램 179

6장. Keil μVision2 통합 개발 환경에서 프로그램 준비. 182

6.1 ASM-51 프로젝트 생성 182

6.2 Keil μVision2 IDE 188에서 교육 컨트롤러용 C 프로젝트 생성 예

제7장 학습 컨트롤러 설명 ..199

7.1. 컨트롤러 구조 199

7.2. 주소 공간 200

7.2.1. 메모리 할당. 200

7.2.2 외부 메모리. 201

7.2.3. 내부 데이터 메모리. 202

7.3. I/O 포트 할당 202

7.4. 직렬 포트 ..................................................203

7.5. LCD 작업 205

7.6. 컨트롤러 패널 ..................................................................213

부록 P2실험실 작업에 관한 보고서의 구조...........217

부록 P3 기계 명령 코드. 217

참고문헌...224


소개

기술 프로세스 및 생산 자동화와 관련된 전문 분야 개발에서 마이크로 컨트롤러 연구는 중요한 섹션 중 하나입니다.

세계에서 점점 더 많은 16비트 및 32비트 마이크로 컨트롤러와 마이크로 프로세서가 지속적으로 개발 및 출현하고 있지만 세계 마이크로 프로세서 시장의 가장 큰 점유율은 여전히 ​​8비트 장치에 속합니다. 가까운 장래에 분석 회사의 모든 예측에 따르면 세계 시장에서 8비트 마이크로컨트롤러의 선두 위치는 계속될 것입니다.

현재 모든 8비트 마이크로컨트롤러 중에서 MCS-51 제품군은 다양한 변형 제품을 생산하는 회사의 수에서 확실한 선두주자입니다. 이 제품군의 첫 번째 대표인 마이크로컨트롤러 8051에서 이름을 따왔습니다. 성공적인 주변 장치 세트, 외부 또는 내부 프로그램 메모리의 유연한 선택 및 합리적인 가격으로 이 마이크로컨트롤러가 시장에서 성공할 수 있었습니다.

MCS-51 제품군의 장점:

사실상의 표준인 아키텍처;

가족의 폭과 기회의 다양성;

고성능 및 확장 버전의 프로세서 가용성

상당수의 무료 소프트웨어 및 하드웨어 개발;

회로 내 프로그래밍을 포함한 하드웨어 프로그래밍의 용이성;

기본 칩의 저렴한 비용 및 가용성;

특수한 사용 조건을 위한 특수 버전의 컨트롤러 가용성

전자기 간섭 수준이 감소된 컨트롤러 버전의 가용성

· 전 세계와 CIS 국가 모두에서 이전 세대 개발자들 사이에서 널리 보급되었습니다.

세계 유수 교육 기관의 건축 지원.

그리고 마지막으로 주요 이점은 제품군의 기본 칩을 마스터했기 때문에 Cygnal, Dallas Semiconductor, Analog Devices, Texas Instruments 마이크로 컨트롤러와 같은 컴퓨팅 "괴물"로 작업을 시작하기가 쉽다는 것입니다.

MCS-51 제품군에는 가장 단순한 마이크로컨트롤러에서 상당히 복잡한 마이크로컨트롤러에 이르기까지 모든 범위의 마이크로회로가 포함됩니다. 현재까지 거의 20개 회사에서 생산한 8051 제품군의 마이크로 컨트롤러에 대해 200개 이상의 수정 사항이 있습니다. 매년이 가족 대표의 변형이 점점 더 많아지고 있습니다.

주요 개발 영역은 다음과 같습니다.

속도 증가(클록 주파수 증가 및 아키텍처 재설계)

공급 전압 및 전력 소비 감소;

· 인-서킷 프로그래밍의 가능성과 함께 칩의 RAM 및 FLASH 메모리 양의 증가;

· 구동 제어 시스템, CAN 및 USB 인터페이스 등과 같은 복잡한 장치를 마이크로컨트롤러 주변에 도입.

MCS-51 제품군의 마이크로 컨트롤러를 사용하면 다양한 장치를 제어하고 아날로그 회로의 개별 노드를 구현하는 작업을 모두 수행할 수 있습니다. 이 제품군의 모든 미세 회로는 동일한 명령 시스템으로 작동합니다. 대부분은 동일한 핀아웃 (케이스의 다리 번호 매기기)으로 동일한 경우에 수행됩니다. 이를 통해 장치 및 프로그램의 회로도를 변경하지 않고 개발된 장치에 대해 다른 제조업체의 미세 회로를 사용할 수 있습니다.

세계 51번째 제품군의 주요 제조업체는 Philips, Siemens, Intel, Atmel, Dallas, Temic, Oki, AMD, MHS, Gold Star, Winbond, Silicon Systems 등입니다.

고급 기능을 갖춘 MCS-51 제품군(Intel 8XC51FA, 8XC51GB, 80C152)의 마이크로 컨트롤러 아날로그 특성이 표에 나와 있습니다. 안으로 1.

표 B.1

ROM SAR ADC WDT T/C 후산. 채널 특이점
아트멜: AT89C2051
- - - - UART 플래시 2kb
AT89C4051 - - - - UART 플래시 4kb
AT89S4D12 128K - - - UART, SPI 플래시 4kb
달라스 반도체: DS5000FP
- - - + UART 부트스트랩 로더
DS5001FP - - - + UART 부트스트랩 로더
DS8xC520 16K - - + 2xUART 2DPTR
시멘스: C505C
16K - + + UART, CAN 8DPTR
C515C 64K - + + UART+SSC+CAN PWM 4개, DPTR 8개
필립스: *89C51RA+
- + - + UART 2 DPTR, 레벨 4 인터럽트, 클럭 아웃, 플래시 8K
P51XAG1x 8K - - + UART 2개
인텔: 8xC51RA
8K - + + UART 4단계 IRQ, 클럭아웃
8XC196KC 64K 16K - + - UART 3PWM
80C196KB 64K 8K - + - UART PWM

1장 MCS51 제품군 아키텍처

MCS-51 제품군의 8비트 단일 칩 마이크로컨트롤러는 잘 설계된 아키텍처로 인해 마이크로프로세서 제어 시스템 개발자들 사이에서 큰 인기를 얻었습니다. 마이크로컨트롤러 아키텍처는 소프트웨어로 액세스할 수 있는 내부 및 외부 하드웨어 리소스 집합과 명령 시스템입니다. MCS-51 제품군의 아키텍처는 소형 및 저비용 디지털 장치의 구성이라는 목적에 따라 크게 결정됩니다. 단일 마이크로 회로를 사용하여 마이크로 컴퓨터의 모든 기능을 수행하는 마이크로 컨트롤러를 단일 칩 컴퓨터(OEVM)라고 합니다.

Intel은 Intel 8051 마이크로컨트롤러의 운영 코어를 기반으로 약 50개 모델을 출시했으며 동시에 Atmel, Philips와 같은 다른 많은 회사에서 MCS-51 표준으로 개발된 마이크로컨트롤러 생산을 시작했습니다.

일반적 특성

가족의 주요 특징:

· 실행 장치 제어에 중점을 둔 8비트 중앙 처리 장치(CPU);

· CPU에는 8비트 하드웨어 곱셈 및 나눗셈 회로가 내장되어 있습니다.

직접 주소 지정 가능한 비트로 작업하기 위한 많은 수의 작업이 명령어 세트에 존재하므로 비트 데이터로 작업하기 위한 프로세서(부울 프로세서)에 대해 이야기할 수 있습니다.

다양한 수정에 대해 4 ~ 32Kb의 볼륨을 갖는 마스크 또는 재 프로그래밍 가능 유형의 내부 (온칩) 프로그램 메모리, 일부 버전에는 없습니다.

· 조직, 레지스터 뱅크, 스택 및 사용자 데이터 저장에 사용되는 최소 128바이트의 데이터 상주 RAM

· 정보 입력 또는 출력을 위해 개별적으로 구성된 최소 32개의 양방향 인터페이스 라인(포트)

· 외부 이벤트를 계산하고, 시간 지연을 구성하고, 통신 포트를 기록하는 데 사용되는 2개의 16비트 다중 모드 카운터/타이머;

· 광범위한 정보 전송 속도로 마이크로컨트롤러와 외부 장치 간의 통신 채널을 구성하도록 설계된 양방향 이중 비동기 송수신기(UART). 마이크로컨트롤러를 연결된 시스템으로 하드웨어-소프트웨어 통합하기 위한 수단이 있습니다.

· 4개의 내부 및 2개의 외부 이벤트 소스로부터 최소 5개의 인터럽트 벡터를 지원하는 2단계 우선순위 인터럽트 시스템;

내장 클럭 생성기.

구조도

컨트롤러의 블록 다이어그램은 그림 1.1에 나와 있으며 제어 장치, 산술 논리 장치, 타이머/카운터 장치, 직렬 인터페이스 및 인터럽트 장치, 프로그램 카운터, 데이터 메모리 및 프로그램 메모리. 상호 교환은 내부 8비트 데이터 고속도로를 사용하여 수행됩니다. MCS-51 제품군의 거의 모든 대표자는 이 구성표에 따라 구축됩니다. 이 제품군의 다양한 미세 회로는 특수 목적 레지스터(포트 수 포함)에서만 다릅니다.

제어 및 동기화 장치(타이밍 및 제어)- 허용되는 모든 작동 모드에서 OEVM 장치의 공동 작동 조정을 보장하는 동기화 및 제어 신호를 생성하도록 설계되었습니다. 제어 장치에는 다음이 포함됩니다.

시간 간격을 형성하는 장치;

입출력 논리;

명령어 레지스터;

전력사용량관리대장;

명령 디코더, 컴퓨터 제어 로직.

쌀. 1.1. I8051 컨트롤러의 구조도.

타임 슬롯 장치위상, 주기 및 주기의 내부 동기화 신호 생성 및 출력을 위한 것입니다. 머신 사이클의 수는 명령어 실행 기간을 결정합니다. 거의 모든 OEVM 명령은 곱셈 및 나눗셈 명령을 제외하고 1~2개의 기계 주기에서 실행되며 그 기간은 4개의 기계 주기입니다. Fg를 통해 마스터 오실레이터의 주파수를 나타내면 기계 주기의 지속 시간은 12/Fg 또는 마스터 오실레이터 신호의 12주기입니다. 입출력 로직은 입출력 포트 P0-P3을 통해 외부 장치와의 정보 교환을 보장하는 신호를 수신하고 발행하도록 설계되었습니다.

명령 레지스터실행 중인 명령의 8비트 연산 코드를 기록하고 저장하도록 설계되었습니다. 명령 디코더와 컴퓨터 제어 논리의 도움을 받는 작업 코드는 명령 실행을 위한 마이크로 프로그램으로 변환됩니다.

수요 제어 레지스터(PCON)마이크로컨트롤러의 작동을 중지하여 전력 소비를 줄이고 마이크로컨트롤러의 간섭 수준을 줄일 수 있습니다. 마이크로컨트롤러의 마스터 오실레이터를 중지하면 전력 소비와 노이즈 감소를 훨씬 더 크게 줄일 수 있습니다. 이는 PCON 요구 제어 레지스터의 비트를 전환하여 달성할 수 있습니다. nMOS 제조 옵션(이름 중간에 문자 "c"가 없는 1816 시리즈 또는 외부 칩)의 경우 전력 제어 레지스터 PCON에는 SMOD 직렬 포트의 전송 속도를 제어하는 ​​1비트만 포함되며, 전력 소비 제어 비트가 없습니다.

산술 논리 장치(ALU)산술 및 논리 연산을 제공하는 병렬 8비트 장치입니다. ALU는 다음으로 구성됩니다.

누산기 레지스터, 보유 레지스터 TMP1 및 TMP2;

ROM 상수;

가산기;

추가 레지스터(레지스터 B);

배터리(ACC);

프로그램 상태 레지스터(PSW).

등록하다 누산기 및 홀딩 레지스터- 연산 기간 동안 피연산자를 수신하고 저장하도록 설계된 8비트 레지스터. 이러한 레지스터는 프로그래밍 방식으로 액세스할 수 없습니다.

ROM 상수 2진수 데이터 표현을 위한 수정 코드, 비트 연산을 위한 마스크 코드 및 상수 코드의 개발을 보장합니다.

병렬 8비트 가산기덧셈, 뺄셈의 산술 연산과 덧셈, 곱셈, 부등식 및 항등의 논리 연산을 수행하도록 설계된 순차 전송이 가능한 조합형 회로입니다.

레지스터 B- 곱셈 및 나눗셈 연산 중에 사용되는 8비트 레지스터. 다른 명령어의 경우 추가 스크래치패드 레지스터로 간주할 수 있습니다.

배터리- 산술-논리 연산 또는 시프트 연산을 수행할 때 얻은 결과를 수신하고 저장하도록 설계된 8비트 레지스터

직렬 인터페이스 및 인터럽트 블록(SIP)순차적 정보 흐름의 입력-출력 및 프로그램 인터럽트 시스템의 구성을 구성하도록 설계되었습니다. 블록에는 다음이 포함됩니다.

버퍼 PIP;

제어 로직;

제어 레지스터;

송신기 버퍼;

수신기 버퍼;

직렬 포트 트랜시버;

인터럽트 우선 순위 레지스터;

인터럽트 인에이블 레지스터;

인터럽트 플래그 처리 논리 및 벡터 생성 체계.

프로그램 카운터내부 프로그램 메모리의 현재 16비트 주소와 외부 프로그램 메모리의 8/16비트 주소를 형성하도록 설계되었습니다. 프로그램 카운터는 16비트 PC 버퍼, PC 레지스터 및 증가 회로(내용을 1씩 증가)로 구성됩니다.

데이터 메모리(RAM)프로그램 실행 중에 사용되는 정보를 임시로 저장하기 위한 것입니다.

포트 P0, P1, P2, P3준 양방향 입출력 포트이며 OEVM과 외부 장치 간의 정보 교환을 보장하도록 설계되어 32개의 입출력 라인을 형성합니다.

프로그램 상태 레지스터(PSW)프로그램 실행 중 ALU 상태에 대한 정보를 저장하도록 설계되었습니다.

프로그램 메모리(EPROM)프로그램을 저장하도록 설계되었으며 읽기 전용 메모리(ROM)입니다. 다양한 미세 회로는 마스킹된 UV 삭제 가능 또는 FLASH ROM을 사용합니다.

데이터 포인터 레지스터(DPTR)외부 데이터 메모리의 16비트 주소를 저장하도록 설계되었습니다.

스택 포인터(SP)메모리 셀을 임시로 저장할 수 있는 특수 데이터 메모리 영역(스택)을 구성하도록 설계된 8비트 레지스터입니다.

1.3 8051 마이크로컨트롤러 핀 할당(그림 1.2)

· U ss - 공통 전선("접지")의 전위;

U cc - 주 공급 전압 +5V;

· X1,X2 - 석영 공진기 연결에 대한 결론;

· RST - 마이크로컨트롤러의 일반 리셋 입력;

PSEN - 외부 프로그램 메모리 권한, 외부 ROM에 액세스할 때만 발행됩니다.

· ALE - 외부 메모리 주소 스트로브;

· EA - 내부 프로그램 메모리를 비활성화합니다. 이 입력에서 레벨 0은 마이크로컨트롤러가 외부 ROM에서만 프로그램을 실행하도록 합니다. 내부 무시 (후자가 존재하는 경우);

쌀. 1.2. 핀 할당 8051.

P1 - 8비트 준 양방향 입력/출력 포트, 포트의 각 비트는 다른 비트의 상태에 관계없이 정보의 입력 및 출력 모두에 대해 프로그래밍할 수 있습니다.

· P2 - P1과 유사한 8비트 준양방향 포트로, 이 포트의 핀은 외부 프로그램이나 데이터 메모리에 액세스할 때 주소 정보를 발행하는 데 사용됩니다(후자의 16비트 주소 지정이 사용되는 경우). 또한 포트 핀은 주소의 상위 비트를 마이크로컨트롤러에 입력하도록 프로그래밍할 때 사용됩니다.

· РЗ - Р1과 유사한 8비트 준양방향 포트로, 이 포트의 핀은 타이머, 직렬 I/O 포트, 인터럽트 컨트롤러 및 외부 작동에 사용되는 여러 대체 기능을 수행할 수 있습니다. 프로그램 및 데이터 메모리;

· P0 - 정보 입출력의 다중화된 8비트 양방향 포트. 이 포트를 통해 서로 다른 시점에서 주소 및 데이터의 하위 바이트가 출력됩니다.

메모리 구성

전체 MCS-51 시리즈에는 Harvard 아키텍처, 즉 별도의 프로그램 및 데이터 메모리 주소 공간이 있습니다. 메모리 구조는 그림에 나와 있습니다. 1.3.

마이크로 회로 유형에 따라 칩에 있는 내부(상주) 프로그램 메모리(ROM, EPROM 또는 OTP ROM)의 양은 0(ROM 없음), 4K(기본 칩), 8K, 16K 또는 32K가 될 수 있습니다. 필요한 경우 사용자는 외장 ROM을 설치하여 프로그램 메모리를 확장할 수 있습니다. 내부 또는 외부 ROM에 대한 액세스는 EA(외부 액세스) 핀의 신호 값에 따라 결정됩니다.

EA=V cc(공급 전압) - 내부 ROM에 대한 액세스;

EA=Vss(접지 전위) - 외부 ROM에 대한 액세스.

ROM이 없는 칩의 경우 EA 핀은 Vss에 영구적으로 연결되어야 합니다.

쌀. 1.3. MCS-51 제품군의 메모리 구성

외부 ROM 읽기 스트로브 - (프로그램 저장 활성화)는 외부 프로그램 메모리에 액세스할 때 생성되며 칩에 있는 ROM에 액세스하는 동안 비활성화됩니다. 하위 프로그램 메모리 주소 영역은 인터럽트 시스템에서 사용됩니다. 8051 기본 칩 아키텍처는 5가지 인터럽트 소스를 지원합니다.

두 개의 외부 인터럽트;

타이머에서 두 개의 인터럽트;

직렬 포트에서 인터럽트.

무화과. 1.4는 프로그램 메모리의 하위 영역 맵을 보여줍니다.

쌀. 1.4. 프로그램 메모리의 하위 영역 맵

프로그램 메모리(ROM)

8051 제품군의 마이크로컨트롤러의 경우 프로그램 메모리와 데이터 메모리는 다양한 명령과 제어 신호로 처리되는 독립적이고 독립적인 장치입니다.

8051 마이크로컨트롤러 칩에 있는 내장 프로그램 메모리의 양은 4KB입니다(패밀리에서 최대 32개). 외부 프로그램 메모리에 액세스할 때 모든 8051 마이크로컨트롤러는 항상 16비트 주소를 사용하므로 64KB ROM에 액세스할 수 있습니다. 마이크로컨트롤러는 opcode와 피연산자를 읽을 때(PC 프로그램 카운터 사용), 프로그램 메모리에서 어큐뮬레이터로 바이트를 복사하는 명령을 실행할 때 프로그램 메모리에 액세스합니다. 데이터 복사 명령을 실행할 때 데이터를 읽을 프로그램 메모리 셀의 주소 지정은 PC 카운터와 특수 2바이트 데이터 포인터 레지스터 DPTR을 모두 사용하여 수행할 수 있습니다.

데이터 메모리(RAM)

온칩 데이터 메모리의 양은 128바이트입니다. 외부 데이터 메모리는 최대 64KB입니다. 처음 32바이트는 각각 뱅크 0 - 뱅크 3으로 지정되는 범용 레지스터의 4개 뱅크로 구성됩니다. 각 뱅크는 8개의 레지스터 R0-R7로 구성됩니다. 언제든지 프로그램은 레지스터 주소 지정과 함께 하나의 레지스터 뱅크만 사용할 수 있으며 그 수는 PSW 프로그램 상태 단어의 세 번째 및 네 번째 비트에 포함됩니다.

8051 마이크로컨트롤러 비트 영역 주소

표 1.1

바이트 주소(16진수) 비트별 비트 주소
D7 D6 D5 D4 D3 D2 D1 D0
2F 7F 7E 7D 7C 7비 7A
2E
2D 6F 6E 6D 6C 6비 6A
2C
2B 5F 5E 5D 5C 5비 5A
2A
4F 4E 4D 4C 4비 4A
3F 3E 3D 3C 3비 3A
2F 2E 2D 2C 2B 2A
1F 1E 1D 1C 1B 1A
0F 0E 0D 0C 0B 0A
20시

나머지 주소 공간은 개발자가 자신의 재량에 따라 구성할 수 있습니다. 스택, 시스템 및 사용자 데이터 영역을 수용할 수 있습니다. 데이터 메모리 셀은 두 가지 방법으로 액세스할 수 있습니다. 첫 번째 방법은 메모리 셀의 직접 주소 지정입니다. 이 경우 셀 주소는 해당 명령어의 피연산자입니다. 두 번째 방법은 포인터 레지스터 R0 또는 R1을 사용한 간접 주소 지정입니다. 해당 명령을 실행하기 전에 이들 중 하나는 액세스해야 하는 셀의 주소를 포함해야 합니다.

외부 데이터 메모리에 액세스하려면 레지스터 R0 및 R1을 사용하거나 16비트 포인터 레지스터 DPTR을 사용하여 간접 주소 지정만 사용됩니다.

데이터 메모리의 일부는 비트 영역이며 메모리 셀의 각 숫자를 지정하기 위해 특수 비트 명령을 사용할 수 있습니다. 직접 주소 지정이 가능한 비트의 주소는 (ByteAddress).(Bit) 형식으로도 쓸 수 있습니다. 이 두 가지 주소 지정 방법 간의 대응 관계는 표에서 확인할 수 있습니다. 1.1.

Intel은 n-MOS 기술을 기반으로 1980년에 출시된 8051 마이크로컨트롤러인 이 제품군의 첫 번째 대표 제품에서 이름을 따온 MCS-51 제품군 아키텍처의 창시자입니다. 우수한 주변 장치 세트, 외부 또는 내부 프로그램 메모리의 유연한 선택 및 저렴한 가격으로 이 마이크로 컨트롤러가 시장에서 성공할 수 있었습니다. 기술적인 관점에서 볼 때 8051 마이크로컨트롤러는 당시로서는 매우 복잡한 제품이었습니다. 크리스탈에는 128,000개의 트랜지스터가 사용되었으며 이는 16비트 8086 마이크로프로세서의 트랜지스터 수의 4배였습니다. 이 마이크로컨트롤러는 여전히 핵심입니다. 오늘날까지 MCS-51 제품군의

제품군의 기본 아키텍처(8051 마이크로컨트롤러 아키텍처)의 주요 요소는 다음과 같습니다.

8비트 ALU;

4개의 레지스터 뱅크, 각각 8개;

내부(상주) 프로그램 메모리 4KB, 유형 ROM 또는 EPROM(8751);

내부(상주) 데이터 메모리 128바이트;

21개의 특수 기능 레지스터;

부울 프로세서;

2개의 16비트 타이머/카운터

직렬 포트 컨트롤러(UART)

두 가지 우선 순위 수준을 가진 인터럽트 컨트롤러;

4개의 8비트 I/O 포트(이 중 2개는 외부 프로그램 및 데이터 메모리에 액세스하기 위한 주소/데이터 버스로 사용됨)

내장 클럭 생성기.

그런 다음 8052 마이크로컨트롤러가 출시되었습니다. 이 마이크로컨트롤러는 세 번째 타이머와 그에 따라 확장된 인터럽트 컨트롤러에 의해 도입된 상주 프로그램 및 데이터 메모리의 양이 증가했습니다.

MCS-51 개발의 다음 기본 단계는 제조 기술을 CMOS로 이전하는 것입니다(수정 8xC51). 이를 통해 Idl(유휴) 및 Power Down(낮은 소비) 모드를 구현하여 크리스탈의 전력 소비를 크게 줄이고 휘발성 애플리케이션에서 마이크로 컨트롤러를 사용할 수 있는 길을 열었습니다. 자율 배터리 구동 장치.

그리고 Intel의 MK 8051 개발에서 마지막으로 중요한 단계는 마이크로 컨트롤러 8xC51FA / FB / FC 및 8xC51RA / RB / RC의 출시였습니다. 이 크리스탈 그룹의 주요 특징은 특수 타이머/카운터(PCA)가 있다는 것입니다. 또한 8xC51Rx 마이크로컨트롤러에는 감시 타이머(WDT)가 추가로 포함되어 있습니다. PCA의 아키텍처와 기능을 더 자세히 고려하십시오.

RSA에는 다음이 포함됩니다.

16비트 타이머/카운터;

각각 다른 마이크로컨트롤러 I/O 포트 라인에 연결된 5개의 16비트 샘플 및 비교 모듈.

타이머/카운터는 다음 기능 중 하나를 수행하도록 프로그래밍할 수 있는 5개의 모든 샘플 및 비교 모듈을 제공합니다.

외부 신호의 포지티브 에지에서 타이머 값의 16비트 샘플링.

외부 신호의 네거티브 에지에서 타이머 값의 16비트 샘플링.

외부 신호의 모든 에지에서 타이머 값의 16비트 샘플링.

16비트 프로그래머블 타이머;

16비트 고속 출력 장치;

8비트 PWM.

나열된 모든 기능의 구현은 하드웨어 수준의 PCA에서 이루어지며 중앙 프로세서를 로드하지 않습니다. 이를 통해 전체 처리량을 늘리고 측정 및 신호 처리의 정확도를 개선하며 실시간 시스템에 특히 중요한 외부 이벤트에 대한 마이크로 컨트롤러의 응답 시간을 줄일 수 있습니다. 8xC51Fx(8xC51Rx)에서 구현된 PCA는

지정

최대 주파수(MHz)

ROM/EPROM(바이트)

카운터

이러한 마이크로컨트롤러의 아키텍처가 산업 표준이 되었고 PCA 자체가 MK 8051의 다양한 수정에서 반복적으로 재생산된 것은 다행스러운 일입니다.

Intel에서 제조한 여러 MCS-51 마이크로컨트롤러의 일부 특성이 표 1.1에 나와 있습니다.

처음에 MCS-51 아키텍처의 병목 현상은 8비트 배터리 기반 ALU와 상대적으로 느린 명령 실행이었습니다(가장 빠른 명령을 실행하려면 12개의 루프가 필요함).

표 1.1

I/O

ADC 입력 x 자릿수

주위,

특이점

유 펫. (안에)

저전압 옵션

4단계 IRQ, 클럭아웃

4단계 IRQ, 클럭아웃

저전압 버전 8xC51Fx

4단계 IRQ, 클럭아웃

4단계 IRQ, 클럭아웃

4단계 IRQ, 클럭아웃

클록 주파수 폭동(MC 동기화 주파수)). 이로 인해 향상된 성능과 복잡한 계산(16비트 및 32비트)이 필요한 애플리케이션에서 제품군 마이크로컨트롤러의 사용이 제한되었습니다. MCS-51 아키텍처의 근본적인 현대화 문제가 시급해졌습니다. 현대화 문제는 90년대 초에 MCS-51 제품군의 소프트웨어 및 하드웨어 분야에서 이미 많은 개발이 이루어졌기 때문에 복잡해졌습니다. 새로운 아키텍처는 MCS -51을 기반으로 개발된 하드웨어 및 소프트웨어 호환성을 구현하는 것이었습니다.

이 문제를 해결하기 위해 인텔과 필립스의 공동 전문가 그룹이 만들어졌지만 나중에 이 두 회사의 경로가 갈라졌습니다. 그 결과 1995년에 Intel의 MCS-251/151과 Philips의 MCS-51XA(하위 섹션 1.2 참조)라는 두 가지 상당히 다른 제품군이 등장했습니다.

MCS-251 아키텍처의 주요 기능:

24비트 선형 주소 공간, 최대 16MB의 메모리 주소 지정

레지스터를 바이트, 워드 및 더블 워드로 참조할 수 있는 레지스터 아키텍처

외부 프로그램 메모리에서 명령을 더 빠르게 가져오기 위한 페이지 주소 지정 모드

명령어 큐;

16비트 산술 및 논리 연산을 포함한 확장 명령어 세트

확장된 스택 주소 공간(최대 64KB),

2주기에 가장 빠른 명령 실행.

MCS-251 명령어 세트에는 두 개의 명령어 세트가 포함되어 있습니다. 첫 번째 세트는 MCS-51 명령어 세트의 복사본이고 두 번째 세트는 MCS-251 아키텍처를 활용하는 확장된 명령어로 구성됩니다. 마이크로컨트롤러를 사용하기 전에 구성해야 합니다. 프로그래머를 사용하여 전원이 켜진 후 활성화될 명령 세트를 결정하는 구성 비트를 "굽습니다". 첫 번째 지침 세트를 설치하면 이 경우 MCS-251 제품군의 MK가 이진 코드 수준에서 MCS-51과 호환됩니다. 이 모드를 바이너리 모드라고 합니다. 처음에 확장 지침 세트(소스 모드)를 설치하는 경우 MCS-51용으로 작성된 프로그램은 MCS-251용 교차 도구에서 다시 컴파일해야 합니다. 소스 모드를 사용하면 MCS-251 아키텍처를 최대 효율로 사용하고 최고의 성능을 얻을 수 있습니다.

MCS-51의 기계적 대체품으로 MCS-251 마이크로컨트롤러를 사용하는 데 중점을 둔 사용자를 위해 Intel은 이미 바이너리 모드 상태로 프로그래밍된 MCS-151 마이크로컨트롤러를 출시합니다.

많은 MCS-251/151 마이크로컨트롤러의 일부 특성이 표 1.1에 나와 있습니다.

현재 펜티엄 프로세서 시장을 겨냥한 인텔은 MCS-51 크리스탈 생산을 줄이고 있다. 일반적으로 특정 개발자의 경우 다른 회사의 제품과 정확히 일치하지 않는 8xC51GB 및 80C152Jx 마이크로 컨트롤러를 사용하지 않는 한 눈에 띄지 않을 수 있습니다. MCS-51 제품군의 다른 모든 마이크로 컨트롤러는 모두 다른 회사에서 여러 번 복제됩니다.

강의 계획

1. 소개

2. 산술 및 논리 명령

3. 데이터 전송 명령

4. 부울 연산

5. 점프 지침

1. 소개

명령 시스템 MCS-51액추에이터 제어를 위한 8비트 알고리즘을 실행하도록 설계된 단일 명령어 집합을 지원합니다. 작은 데이터 구조에서 비트 연산을 수행하여 내부 RAM 주소를 지정하는 빠른 방법을 사용할 수 있습니다. 부울 대수의 논리 및 제어 명령에서 개별 비트를 사용할 수 있는 독립 데이터 유형으로 단일 비트 변수를 지정하는 광범위한 시스템이 있습니다.

주소 지정 모드 : 명령어 세트 MCS-51다음 주소 지정 모드를 지원합니다. 직접 주소 지정: 피연산자는 명령어에서 8비트 주소로 지정됩니다. 직접 주소 지정은 내부 데이터 메모리 및 레지스터의 하위 절반에만 사용됩니다. SFR. 간접 주소 지정: 명령어는 피연산자의 주소를 포함하는 레지스터의 주소를 지정합니다. 이러한 유형의 주소 지정은 외부 및 내부 RAM에 사용됩니다. 레지스터를 사용하여 8비트 주소 지정 가능 R0그리고 R1선택된 레지스터 뱅크 또는 스택 포인터 SP. 16비트 주소 지정의 경우 데이터 포인터 레지스터만 사용됩니다. DPTR.

등록 지침 : 레지스터 R0–R7현재 레지스터 뱅크는 명령어 자체의 레지스터 번호를 나타내는 3비트 필드를 포함하는 특정 명령어를 통해 주소를 지정할 수 있습니다. 이 경우 명령에 해당 주소 필드가 없습니다. 특수 레지스터를 사용한 연산: 일부 명령어는 개별 레지스터를 사용합니다(예: 누산기 연산, DPTR, 등.). 이 경우 피연산자의 주소는 명령어에 전혀 지정되지 않습니다. opcode에 의해 미리 결정됩니다.

즉시 상수 : 상수는 opcode 뒤에 있는 명령에 직접 있을 수 있습니다.

인덱스 어드레싱 : 인덱싱된 주소 지정은 프로그램 메모리에 액세스하는 데만 사용할 수 있으며 읽기 모드에서만 사용할 수 있습니다. 이 모드에서는 프로그램 메모리의 테이블이 표시됩니다. 16비트 레지스터( DPTR또는 프로그램 카운터)는 원하는 테이블의 기본 주소를 나타내고 누산기는 진입점을 나타냅니다.

명령 집합이 시스템의 33개 기능을 지정하는 42개의 명령 니모닉이 있습니다. 대부분의 어셈블리 언어 명령어의 구문은 주소 지정 방법 및 데이터 유형을 지정하는 피연산자가 뒤따르는 함수 니모닉으로 구성됩니다. 다른 데이터 유형 또는 주소 지정 모드는 니모닉 표기법의 변경이 아니라 집합 피연산자에 의해 결정됩니다.

명령 시스템은 조건부로 5개의 그룹으로 나눌 수 있습니다: 산술 명령; 논리적 명령; 데이터 전송 명령; 비트 프로세서 명령어; 분기 및 전송 명령. 명령 시스템에 사용되는 지정 및 기호는 다음과 같습니다.

테이블. 명령 시스템에서 사용되는 표기법 및 기호

지정, 기호

목적

배터리

현재 선택된 레지스터 뱅크의 레지스터

명령에 지정된 로드된 레지스터의 번호

직접

내부 데이터 RAM 위치(0-127) 또는 특수 기능 레지스터 SFR(128-255)일 수 있는 직접 주소 지정 가능한 8비트 내부 데이터 위치 주소

간접적으로 주소 지정 가능한 8비트 내부 데이터 RAM 위치

8비트 직접연산 코드(COP)에 포함된 데이터

데이터H

즉각적인 16비트 데이터의 MSB(15-8)

데이터L

즉각적인 16비트 데이터의 하위 비트(7-0)

11비트 목적지 주소

주소

목적지 주소의 최하위 비트

8비트 부호 있는 오프셋 바이트

내부 데이터 RAM 또는 특수 기능 레지스터 SFR에 위치한 CPC를 주소에 포함하는 직접 주소 지정 가능 비트

a15, a14...a0

대상 주소 비트

X 요소의 내용

요소 X에 저장된 주소의 콘텐츠

방전 M 요소 X


+

*
그리고
또는
XOR
/엑스

작업:
추가
빼기
곱셈
분할
논리 곱셈(AND 연산)
논리 덧셈(OR 연산)
덧셈 모듈로 2(XOR)
요소 X 반전

기능 니모닉은 주소 지정 방법 및 데이터 유형의 특정 조합과 고유하게 연결됩니다. 총 111개의 이러한 조합이 명령 시스템에서 가능합니다.

2. 산술 및 논리 명령어

어떻게 산술 명령, 추가 작업은 다음 명령 중 하나로 수행할 수 있습니다.

추가하다,7 에프 16 - 레지스터 A의 내용에 숫자 7을 추가합니다.에프 16 결과를 레지스터 A에 저장합니다.

추가하다,@ 아르 자형0 - 주소가 A인 숫자를 레지스터 A의 내용에 추가 (@ – 광고 ~에 ) 레지스터에 저장아르 자형 0(간접 주소 지정), 결과를 레지스터 A에 저장합니다.

A, R7 추가- 레지스터 A의 내용에 레지스터의 내용 추가아르 자형 7 결과를 레지스터 A에 저장합니다.

A 추가,#127- 레지스터 A의 내용에 저장 셀 주소가 127( # - 숫자 기호), 결과를 레지스터에 저장 - 다시 A.

모든 산술 명령어는 명령어를 제외하고 하나의 머신 사이클에서 실행됩니다. INC DPTR(데이터 포인터 오프셋 DPTR다음 바이트로), 2개의 머신 사이클과 4개의 머신 사이클에서 수행되는 곱셈 및 나눗셈 연산이 필요합니다. 내부 데이터 메모리의 모든 바이트는 어큐뮬레이터를 사용하지 않고 증가 및 감소할 수 있습니다.

지침 MUL AB누산기의 데이터와 레지스터 B의 데이터의 곱셈(곱셈)을 수행하여 곱을 레지스터 A(하반부)와 B(상반부)에 배치합니다.

지침 DIV AB누산기의 내용을 레지스터 B의 값으로 나누고(나누고) 나머지는 B에, 몫은 누산기에 남습니다.

지침 DA A 2진수 산술 연산(2진수 코드로 표현된 숫자에 대한 산술 연산)용으로 설계되었습니다. 바이너리를 다음으로 변환하지 않습니다. 이진 십진수, 그러나 두 개의 BCD 번호를 추가할 때만 올바른 결과를 제공합니다.

논리적 명령: 논리적 AND 연산은 다음 명령 중 하나로 수행할 수 있습니다.

ANL,7 에프 16 - 레지스터 A의 내용을 숫자 7로 논리적 곱하기에프 16 결과는 레지스터 A에 저장됩니다.

ANL,@ 아르 자형1 - 레지스터에 저장된 주소의 숫자로 레지스터 A의 내용을 논리적으로 곱하기아르 자형 1(간접 주소 지정), 결과를 레지스터 A에 저장합니다.

ANL A,R6- 레지스터 A의 내용과 레지스터의 내용을 논리적으로 곱하기아르 자형 6, 결과를 레지스터 A에 저장합니다.

ANL A,#53 - 저장 셀 주소가 53 16인 숫자로 레지스터 A의 내용을 논리적으로 곱하고 그 결과를 레지스터 A에 저장합니다.

어큐뮬레이터의 내용에 대한 모든 논리 연산은 하나의 머신 사이클에서 수행되고 나머지는 2에서 수행됩니다. 부울 연산은 내부 데이터 메모리의 하위 128바이트 또는 모든 레지스터에서 수행할 수 있습니다. SFR (특수 기능 레지스터) 배터리를 사용하지 않고 직접 주소 지정 모드에서.

회전 연산 RL A, RLC A 등은 누산기의 내용을 오른쪽 또는 왼쪽으로 1비트 이동합니다. 왼쪽 순환 시프트의 경우 최하위 비트를 최상위 위치로 이동합니다. 오른쪽 순환 시프트의 경우에는 그 반대가 발생합니다.

작업 스왑 A어큐뮬레이터에서 주니어 및 시니어 테트라드의 교환을 수행합니다.

3. 데이터 전송 명령

MOV 목적지, 소스내부 RAM 셀 또는 특수 기능 레지스터 영역 간에 데이터를 전송할 수 있습니다. SFR배터리를 사용하지 않고. 이 경우 내부 RAM의 상위 절반에 대한 작업은 간접 주소 지정 모드에서만 수행할 수 있으며 레지스터에 대한 액세스는 SFR– 직접 주소 지정 모드에서만.

모든 미세 회로에서 MCS-51스택은 데이터 상주 메모리에 직접 배치되고 위로 커집니다. 지침 푸시먼저 스택 포인터 레지스터의 값을 증가시킵니다. SP, 그런 다음 데이터 바이트를 스택에 푸시합니다. 팀 푸시그리고 직접 주소 지정 모드(바이트를 쓰거나 복원할 때)에서만 사용되지만 스택은 레지스터를 통해 간접적으로 주소 지정할 때 항상 사용 가능합니다. SP. 따라서 스택은 데이터 메모리의 상위 128바이트도 사용할 수 있습니다. 동일한 고려 사항은 레지스터 주소 지정을 위한 스택 명령어 사용을 배제합니다. SFR.

데이터 전송 명령에는 16비트 전송 작업이 포함됩니다. MOV DPTR,#data16, 데이터 포인터 레지스터를 초기화하는 데 사용됩니다. DPTR프로그램 메모리의 테이블을 보거나 외부 데이터 메모리에 액세스할 때.

작업 XCH A,바이트어큐뮬레이터와 주소 지정된 바이트 간에 데이터를 교환하는 데 사용됩니다. 팀 XCHD A,@리이전 것과 유사하지만 피연산자 교환과 관련된 하위 테트라드에만 해당됩니다.

외부 데이터 메모리에 액세스하는 데는 간접 주소 지정만 사용됩니다. 단일 바이트 주소의 경우 레지스터가 사용됩니다. R0또는 R1현재 레지스터 뱅크 및 16비트 레지스터의 경우 데이터 포인터 레지스터 DPTR. 외부 데이터 메모리에 액세스하는 모든 방법에서 배터리는 정보의 소스 또는 수신자 역할을 합니다.

프로그램 메모리에 있는 테이블에 액세스하려면 다음 명령이 사용됩니다.

MOVC A,@A+ DPTR ;

MOVC A,@A+ PC .

해당 데이터 포인터 레지스터의 내용은 테이블의 기본 주소로 사용됩니다. DPTR또는 PC(소프트웨어 카운터)에서 오프셋을 가져옵니다. . 이 명령어는 프로그램 메모리에 데이터를 쓰는 것이 아니라 프로그램 메모리에서 데이터를 읽는 데만 사용됩니다.

4. 부울 연산

미세 회로 MCS-51부울 프로세서를 포함합니다. 내부 RAM에는 128개의 직접 주소 지정이 가능한 비트가 있습니다. 특수 기능 레지스터 공간 SFR최대 128비트 필드도 지원할 수 있습니다. 비트 명령은 조건부 점프, 전송, 재설정, 반전, AND 및 OR 연산을 수행합니다.지정된 모든 비트는 직접 주소 지정 모드에서 사용할 수 있습니다.

캐리 비트 CF특수 기능 레지스터 "프로그램 상태 워드 PSW'는 1비트 부울 프로세서 누산기로 사용됩니다.

5. 점프 지침

점프 작업 주소는 프로그램 메모리 공간의 레이블 또는 실제 값으로 어셈블리 언어로 표시됩니다. 조건부 분기 주소는 상대 오프셋(프로그램 카운터에 추가된 부호 바이트)으로 어셈블됩니다. PC전환 조건이 충족되면. 이러한 점프의 경계는 명령 다음의 첫 번째 바이트를 기준으로 마이너스 128과 127 사이에 있습니다. 특수 기능 레지스터 "프로그램 상태 워드 PSW» 제로 플래그가 없으므로 지침 JZ그리고 JNZ누산기의 데이터를 테스트하면서 "0과 같음" 조건을 확인하십시오.

무조건 분기 명령에는 세 가지 유형이 있습니다. SJMP, LJMP그리고 AJMP– 형식이 다른 목적지 주소. 지침 SJMP주소를 상대 오프셋으로 인코딩하고 2바이트를 차지합니다. 점프 거리는 다음 명령어와 관련하여 마이너스 128~127바이트 범위로 제한됩니다. SJMP.

지침에서 LJMP목적지 주소는 16비트 상수로 사용됩니다. 명령의 길이는 3바이트입니다. 대상 주소는 프로그램 메모리의 어느 위치에나 있을 수 있습니다.

AJMP 11비트 주소 상수를 사용합니다. 명령은 2바이트로 구성됩니다. 이 명령어가 실행되면 주소 카운터의 하위 11비트가 명령어의 11비트 주소로 대체됩니다. 프로그램 카운터의 최상위 5개 비트 PC바뀌지 않은 채로. 따라서 명령어 뒤에 오는 명령어를 포함하는 2K 바이트 블록 내에서 점프가 가능합니다. AJMP.

두 가지 유형의 서브프로그램 호출 명령어가 있습니다. LCALL그리고 전화. 지침 LCALL호출된 서브루틴의 16비트 주소를 사용합니다. 이 경우 서브루틴은 프로그램 메모리의 아무 곳에나 위치할 수 있습니다. 지침 전화 11비트 서브루틴 주소를 사용합니다. 이 경우 호출된 서브루틴은 다음 명령과 함께 동일한 2K 바이트 블록에 위치해야 합니다. 전화. 명령어의 두 버전 모두 다음 명령어의 주소를 스택에 푸시하고 프로그램 카운터에 로드합니다. PC 해당 새 값.

서브루틴은 명령으로 끝납니다. RET, 명령 다음의 명령으로 돌아갈 수 있습니다. 부르다. 이 명령어는 스택에서 반환 주소를 팝하고 프로그램 카운터에 로드합니다. PC . 지침 레티인터럽트 루틴에서 복귀하는 데 사용됩니다. 유일한 차이점 레티~에서 RET그게 레티인터럽트 처리가 완료되었음을 시스템에 알립니다. 집행 당시라면 레티다른 인터럽트가 없으며 동일합니다. RET.

지침 DJNZ주기 제어용으로 설계되었습니다. 루프를 실행하려면 N 값을 사용하여 카운터 바이트에 로드해야 하는 경우 N 명령으로 루프 본문을 닫습니다. DJNZ, 주기의 시작을 나타냅니다.

CJNE두 피연산자를 부호 없는 정수로 비교하고 비교된 피연산자가 같지 않으면 지정된 주소로 점프합니다. 첫 번째 피연산자가 두 번째 피연산자보다 작으면 캐리 비트 CF "1"로 설정합니다.

어셈블된 형태의 모든 명령어는 1, 2 또는 3바이트를 차지합니다.

기본 버전 MCS-51 간략한 정보. 최신 8비트 마이크로컨트롤러(MC)에는 이전에 별도의 마이크로컴퓨터 보드 형태의 고가의 다중 칩 레이아웃이 사용되었던 실시간 제어 리소스가 있습니다.

● 충분한 메모리 용량, 프로그램 메모리와 데이터 메모리(Harvard 아키텍처)로의 물리적 및 논리적 분할 및 제어 알고리즘의 실행을 지향하는 명령 시스템이 있어야 합니다.

● 최소한의 구성으로 마이크로프로세서 제어 시스템을 구현하는 데 필요한 모든 장치(프로세서, ROM, RAM, 입출력 포트, 인터럽트 시스템, 비트 정보 처리 도구 등)를 포함합니다. 1970년대에 회사에서 인텔여러 공통 기능(숫자 용량, 명령 시스템, 기본 기능 블록 세트 등)으로 통합된 8비트 MCS-48 마이크로컨트롤러 제품군의 상용 생산을 개발 및 마스터했습니다. 이 제품군의 기본 버전에는 다음이 포함됩니다.

● 8비트 프로세서;

● 내부 프로그램 메모리(1/2/4K 바이트);

● 내부 데이터 메모리(64/128/256바이트);

● 최대 27개의 내부 및 16개의 외부 I/O 라인;

● 하나의 8비트 타이머 카운터;

● 두 개의 요청 소스가 있는 단일 레벨 인터럽트 시스템. 1980년에 같은 회사에서 MCS-48 제품군의 아키텍처와 호환되지만 더 넓은 기능을 제공하는 새로운 8비트 MCS-51 마이크로컨트롤러 제품군을 개발했습니다.

MCS-51 제품군의 아키텍처는 매우 성공적인 것으로 판명되어 오늘날까지 여전히 8비트 MK의 표준 중 하나입니다. 따라서 비교적 간단한 제어 시스템에서 널리 사용되는 이 계열의 MC를 연구 대상으로 선정하였다.

MCS-51 제품군을 위해 다양한 프로그램 준비 도구(컴파일러, 하드웨어-소프트웨어 에뮬레이터 등)가 개발되었으며 표준 서브루틴 라이브러리가 많이 있습니다. 이 제품군에는 마이크로 컨트롤러의 마이크로 회로(칩 버전)의 다양한 수정이 포함됩니다. 이 섹션의 기사에서는 구조적 및 기능적 측면과 이해 측면에서 가장 간단한 MCS-51 제품군 마이크로 컨트롤러의 기본 버전 (8051 마이크로 회로는 국내 아날로그 KP1816BE51에 해당)을 충분히 자세히 고려합니다.

후속 마이크로 회로 시리즈는 기본 버전과의 호환성을 유지하면서 향상된 제조 기술, 전기적 매개 변수, 추가 하드웨어 및 기능이 다릅니다. 다음 기사는 MCS-51 제품군 마이크로 회로의 후속 수정의 구조적 및 기능적 특징에 대해 설명합니다.
MCS–51의 일반화된 블록 다이어그램. 일반화 된 블록 다이어그램이 그림에 표시된 MC의 구성. 7.1.1에는 다음이 포함됩니다.

● 8비트 중앙처리장치 CPU로 구성 ALU, 제어 장치 으으및 주소 생성기 에프;

● 프로그램 저장을 위한 4K 바이트 용량의 마스킹된 ROM;

● 데이터 저장용 128바이트 RAM;

● 정보 입력-출력을 위한 4개의 프로그래밍 가능한 포트 Р0–Р3;

● 2선 라인을 통한 외부 장치와의 정보 교환을 위한 BPI 직렬 인터페이스 블록;

● 실시간 모드를 유지하기 위한 타이머/카운터 BT/C 블록;

● 실행 가능한 프로그램의 인터럽트 구성을 위한 BP 인터럽트 블록. 이 자금은 거주자칩에 직접 위치한 마이크로 컨트롤러의 일부. MC에는 별도의 기능 블록에 할당되고 다이어그램에 표시되지 않은 많은 수의 레지스터가 포함되어 있습니다.

다이어그램에는 제어 회로도 표시되어 있지 않습니다. 블록 간 양방향 정보 교환은 내부 8비트를 통해 수행됩니다. 데이터 버스 SD-8.

내부 16비트 주소 버스 SHA-16, CPU에서 형성된 주소는 ROM(주소의 12비트)과 RAM(하위 8비트)에 표시됩니다.

외부 메모리를 사용할 때 주소의 하위 8비트는 포트 P0으로 출력되고 상위 3비트 또는 8비트는 포트 P2로 출력됩니다.

인터페이스의 논리적 확장을 위해 포트 라인의 기능 조합이 사용됩니다. 예를 들어 그림에서. 7.1.1 점선은 포트 P3의 라인을 보여줍니다. 대안제어 신호 전송 기능, 그 목적은 아래에서 설명합니다. 내부 클록 생성기를 생성하기 위해 석영 공진기와 두 개의 커패시터가 마이크로 회로 MK의 출력에 연결됩니다(그림 7.1.1). 내부 클록 생성기 대신 외부 오실레이터를 동기화에 사용할 수 있습니다. 마이크로 회로 MK의 기존 그래픽 지정은 그림 1에 나와 있습니다. 7.1.2, 결론의 지정 및 목적 - 표에서. 7.1.1. MK의 기능 블록과 작동 원리를 고려하십시오. 산술 논리 장치. 산술 논리 장치는 8비트 피연산자에 대한 산술(곱셈 및 나눗셈 포함) 및 논리 연산과 논리 시프트, 제로화, 설정 등의 연산을 수행하도록 설계되었습니다. ALU의 블록 다이어그램은 그림 1에 나와 있습니다. 7.1.3.

ALU에는 다음이 포함됩니다.

● 병렬 8비트 가산기산술(더하기 및 빼기) 및 논리(더하기, 곱하기, 불일치 및 항등) 작업을 수행하는 순차 전송이 있는 SM 조합 유형;

배터리 A,주 산술 레지스터의 기능을 제공합니다.

등록하다 B, 곱셈 및 나눗셈의 연산을 구현하는 데 사용되거나 추가 수퍼 연산 레지스터로 사용되며 그 기능은 사용자가 정의합니다.

레지스터(프로그래밍 방식으로 사용할 수 없음) 임시 저장РВХ1, РВХ2는 작업 기간 동안 피연산자를 수신하고 저장하기 위한 것입니다.

● 롬 상수 2진수 데이터 표현을 위한 수정 코드, 비트 연산을 위한 마스크 코드 및 상수 코드를 저장하는 ROM;

프로그램 상태 워드 레지스터 PSW, 작업이 수행된 후 ALU의 상태를 수정합니다. 테이블에서. 7.1.2는 PSW 레지스터의 개별 숫자에 대한 비트 할당에 대한 정보를 제공합니다. 제어 장치. CPU 제어 장치(CU) 예정된생성된 클록 및 제어 신호를 사용하여 모든 MK 노드의 공동 작업을 조정합니다. 여기에는 다음이 포함됩니다(그림 7.1.4).

동기화 및 제어 장치기계 사이클과 개별 상태(S) 및 위상(P)을 설정하고 MK의 작동 모드에 따라 클록 펄스를 생성하는 USU는 필요한 제어 신호 세트를 생성합니다. 명령을 실행하기 위해 1개, 2개 또는 4개의 머신 사이클이 할당됩니다.

각 머신 사이클에는 6개 주 S1–S6, 각 상태에는 다음이 포함됩니다. 두 단계 P1, P2, 지속 시간은 클록 생성기 T 0SC 의 발진 주기입니다.

기계 주기의 기간은 12T 0SC입니다. S1P1 단계에서 시작하여 S6P2 단계로 끝나는 모든 기계 주기는 동일합니다.

클록 펄스 외에도 각 머신 사이클의 클록 장치는 S1P2-S2P1 및 S4P2-S5P1 단계에서 양의 펄스 형태로 ALE 주소의 하위 바이트에 대한 2개(때로는 1개) 스트로브 신호를 생성합니다. 그림의 타이밍 다이어그램. 7.1.5 기계 사이클의 구성을 설명합니다.

● RK 명령 레지스터, 명령 디코더 DC 및 PLA는 실행 중인 명령의 마이크로 프로그램에 따라 각 기계 주기에서 일련의 마이크로 작업을 형성할 수 있도록 합니다.

● 포트 Р0–Р3를 통해 MC와 외부 장치 간의 정보 교환을 제공하는 신호를 수신 및 발행하기 위한 LVV의 입출력 논리;

● 직렬 포트의 데이터 속도를 두 배로 늘리기 위해 위치 PCON.7에 활성화된 단일 SMOD 비트가 있는 PCON 레지스터. 나머지 비트는 나중에 사용하기 위해 예약되어 있습니다.
주소 생성기. 주소 셰이퍼(FA) 또는 PC 명령 카운터, 예정된현재 16비트 프로그램 메모리 주소와 8/16비트 외부 데이터 메모리 주소를 형성합니다. 여기에는 다음이 포함됩니다(그림 7.1.6).

● 16비트 완충기 B는 SD의 8비트 데이터 버스와 주소 생성기의 16비트 내부 버스(IS) 사이에서 통신합니다.

● 현재 프로그램 메모리 주소 값을 1씩 증가시키는 SI 증분 방식;

● SI에서 오는 PTA 명령의 현재 주소를 저장하기 위한 레지스터;

● 데이터 포인터 레지스터 DPTR , 2개의 8비트 레지스터 DPH 및 DPL로 구성됩니다. 외부 데이터 메모리의 16비트 주소를 저장하는 역할을 하며 두 개의 독립적인 소프트웨어 액세스 가능 RON으로 사용할 수 있습니다.

● 실행 16비트 프로그램 메모리 주소 또는 8/16비트 외부 데이터 메모리 주소를 저장하기 위한 RFA 주소 생성기 레지스터. 이 레지스터는 MOVX @Rm, A 및 MOVX @DPRT, A 명령을 실행할 때 포트 P0을 통해 외부 장치로 데이터를 전송하는 데에도 사용됩니다.

데이터 메모리. 데이터 메모리 예정된프로그램 실행 과정에서 사용되는 정보를 수신, 저장 및 발행합니다. 데이터의 내부(상주) 메모리(그림 7.1.7)는 128바이트 용량의 RAM으로 구성되며, 스택 포인터 SP, 주소 등록 RAM RA 및 디코더 Dsh. SP 스택 포인터는 마지막으로 액세스한 스택 위치의 주소를 수신하고 저장하는 8비트 레지스터입니다. 재설정 후 스택 포인터는 주소 07H로 설정되며 이는 주소 08H가 있는 스택의 시작 부분에 해당합니다. 주소 레지스터 RA는 디코더 Dsh와 함께 정보의 바이트 또는 비트를 포함하는 필수 메모리 셀에 대한 액세스를 허용합니다.

MK는 연결하여 최대 64KB의 데이터 메모리 양을 늘릴 수 있는 기능을 제공합니다. 외부 저장 장치.예를 들어 그림에서. 7.1.8은 MOVX와 같은 명령어를 사용하여 2K 바이트 용량의 외부 데이터 메모리 VPD의 페이징을 보여줍니다. @ Rm(m = 0; 1). 이 경우 포트 P0은 다중화된 주소/데이터 버스로 작동하고 포트 P2의 3개 라인은 외부 RAM 페이지를 주소 지정하는 데 사용되며 나머지 5개 라인은 I/O 라인으로 사용할 수 있습니다.
무화과. 7.1.9는 MK가 외부 RAM과 함께 작동할 때 읽기 및 쓰기 주기의 타이밍 다이어그램을 보여줍니다. 다이어그램은 다음을 나타냅니다.

● PCN - PC 명령 카운터의 상위 바이트.

● DPL, DPH - MOVX @DPTR,A 및 MOVX A,@DPTR 명령에서 간접 주소 지정 레지스터로 사용되는 DPTR 데이터 포인터 레지스터의 하위 및 상위 바이트.

● P2 SFR - P2 포트 래치;

● Rm(m = 0, 1) - MOVX @Rm, A 및 MOVX A, @Rm 명령에서 간접 주소 레지스터로 사용되는 레지스터.

● Z - 높은 저항 상태;

● D - 포트 P0의 데이터가 마이크로컨트롤러에 입력되는 기간. 프로그램 메모리. 프로그램 메모리는 프로그램을 저장하도록 설계되었으며 자체(데이터 메모리와 별도) 주소 공간이 있으며 읽기 전용입니다. 여기에는 디코더 Dsh 및 ROM이 포함됩니다(그림 7.1.10). 프로그램 메모리는 16비트 PC 카운터를 사용하여 지정되므로 최대 용량은 64K 바이트입니다. 내부 프로그램 메모리는 4K 바이트 용량의 ROM과 12비트 디코더로 구성됩니다. 외부 메모리는 그림의 다이어그램에 따라 연결됩니다. 7.1.11. MCU의 EA 핀에 0V를 인가하면(그림 7.1.11 참조) 내부 프로그램 메모리는 비활성화된다. 모든 메모리 액세스는 주소 0000h에서 시작합니다. EA 핀이 전원 공급 장치에 연결되면 주소 0000h–FFFFh에서 내부 프로그램 메모리에 대한 액세스와 주소 0FFFh–FFFFh에서 외부 프로그램 메모리에 대한 액세스가 자동으로 발생합니다.

MK의 외부 프로그램 메모리를 읽기 위해 PSEN 신호가 생성됩니다. 내부 메모리로 작업할 때 읽기 신호는 사용되지 않습니다. 외부 프로그램 메모리에 액세스할 때 항상 16비트 주소가 형성됩니다. 주소의 하위 바이트는 머신 사이클의 전반부에서 포트 P0을 통해 전송되고 레지스터의 ALE 스트로브 컷에 의해 고정됩니다. 사이클의 후반부에서 포트 P0은 데이터 바이트를 입력하는 데 사용됩니다. 외부 메모리에서 MCU로.

주소의 상위 바이트는 메모리가 액세스되는 전체 시간 동안 P2 포트를 통해 전송됩니다.

외부 RAM이있는 MK 작동 중 읽기 및 쓰기주기의 타이밍 다이어그램이 그림에 나와 있습니다. 7.1.12.
다이어그램은 다음을 나타냅니다.

● PCL OUT - PC 명령 카운터의 낮은 바이트 출력;

● PCN OUT - PC 명령 카운터의 상위 바이트 발행;

● DPH는 MOVX @DPTR,A 및 MOVX A,@DPTR 명령어에서 간접 주소 지정 레지스터로 사용되는 DPTR 데이터 포인터 레지스터의 상위 바이트입니다.

● P2 SFR - P2 포트 래치;

● INS IN - 프로그램 메모리에서 명령(명령) 바이트 입력;

● ADDR OUT - Rm 레지스터(m = 0, 1) 또는 DPL 레지스터(하위 레지스터 DPTR)에서 외부 데이터 메모리 주소의 하위 바이트 발행. I/O 포트. 포트 할당.포트 P0, P1, P2, P3 예정된 MK와 외부 장치 간에 정보를 교환하고 다음 기능을 수행합니다.

● 주소 А7…A0의 하위 바이트는 포트 Р0을 통해 출력됩니다. 외부 프로그램 메모리 및 외부 데이터 메모리(시분할 포함)로 작업할 때 데이터 바이트가 MK에서 출력되고 MK에 입력됩니다.

● 외부 프로그램 메모리 및 외부 데이터 메모리로 작업할 때 주소 A15…A8의 상위 바이트는 포트 P2를 통해 출력됩니다(MOVX A,@DPTR 및 MOVX @DPTR,A 명령을 사용하는 경우에만).

● P3 포트 라인은 이 라인의 래치-래치에 1을 입력하면 대체 기능을 수행할 수 있으며, 그렇지 않으면 라인 출력에 0이 고정됩니다.P3 포트 출력의 대체 기능은 표와 같습니다. 7.1.3.

포트의 도식적 특징

무화과. 7.1.13은 다음을 포함하여 각 MK 포트의 한 채널에 대한 다이어그램을 보여줍니다.

● 수신된 데이터 비트를 고정하기 위한 래치;

● 출력 증폭 종속(운전사);

● 노드 와 연결출력단(P2 제외);

● 버퍼 B2 및 B3(포트 P4용)으로 구성된 포트의 출력측에서 데이터 비트를 전송하는 회로. 래치는 내부 신호 "래치에 쓰기"에 의해 클럭되는 D-플립플롭입니다. D-플립플롭의 직접 출력에서 ​​나오는 데이터 비트는 MK의 내부 데이터 버스(SD) 라인에 대한 "Read latch" 신호에 의해 버퍼 B1을 통해 소프트웨어에서 읽을 수 있습니다.

출력 단계포트 P0은 인버터이며, 부하 트랜지스터 VT2는 외부 메모리에 액세스할 때만(포트를 통해 주소와 데이터를 전송할 때) 열린다는 사실에서 그 기능이 나타납니다. 다른 모든 모드에서는 부하 트랜지스터가 닫힙니다. 따라서 P0(그림 7.1.13,a)을 범용 출력 포트로 사용하려면 출력에 외부 부하 저항을 연결해야 합니다. 포트 래치에 1을 쓰면 인버터 트랜지스터 VT1이 꺼지고 포트 P0.X의 외부 핀이 고 저항 상태로 전환됩니다. 이 모드에서 포트 핀 P0.X는 입력으로 사용할 수 있습니다. 포트 P0이 범용 I/O 포트로 사용되는 경우 각 P0.X 핀은 입력 또는 출력으로 독립적으로 작동할 수 있습니다. 출력 단계포트 P1, P2, P3(그림 7.1.13, b, c, d)트랜지스터 VT2로 사용되는 내부 부하 저항이있는 인버터 회로에 따라 만들어졌습니다.

포트 출력이 상태 0에서 상태 1로 전환되는 동안 스위칭 시간을 줄이기 위해 추가 트랜지스터 VT3이 부하 트랜지스터 VT2와 병렬로 도입됩니다. 게이트 회로의 요소를 사용하는 트랜지스터 VT3는 마스터 수정 발진기의 두 발진 주기와 동일한 시간 동안 잠금 해제됩니다(기계 주기의 단계 S1P1, S2P2 동안). 출력 단계 MX 멀티플렉서를 사용하는 포트 P0, P2(그림 7.1.13, A, c)는 래치 또는 내부 버스 "주소/데이터" 및 "주소"에 연결할 수 있습니다. 포트 P1의 출력 단계(그림 7.1.13, 6)는 래치에 영구적으로 연결됩니다.

P3 포트 핀이 출력이고 래치가 1을 포함하는 경우 해당 출력 단계는 해당 대체 기능을 제공하는 하드웨어 내부 신호 "대체 출력 기능"에 의해 제어됩니다. 신호 ?WR, ?RD 또는 RxD 중 하나가 외부 핀에 형성됩니다. 포트 핀을 입력으로 사용하면 거기에 도착한 대체 신호(TxD, ¯INT0, INT1, T0, T1)가 "대체 입력 기능" 내부 라인으로 전송됩니다.

포트 쓰기 모드.

포트에 쓰기 명령이 발행되면 새 값은 S6P2 단계에서 래치에 쓰여지고 다음 머신 사이클의 단계 S1P1에서 포트 출력 핀으로 직접 출력됩니다.

포트 읽기 모드

포트 읽기 명령은 포트 핀의 외부 핀 또는 래치 출력에서 ​​직접 정보를 읽습니다. 첫 번째 경우 포트 출력의 데이터 비트는 MK의 내부 데이터 버스(SD) 라인에 대한 "출력 읽기" 신호에 의해 버퍼 B2를 통해 프로그래밍 방식으로 읽혀집니다. "래치에 쓰기", "래치 읽기", "핀 읽기" 신호는 해당 명령이 실행될 때 하드웨어에 의해 생성됩니다.

두 번째 경우에는 명령이 래치 상태 신호를 읽고 필요한 경우 수정한 다음 래치에 다시 쓰는 소위 "읽기-수정-쓰기" 모드가 구현됩니다. 읽기-수정-쓰기 모드는 ANL, ORL, XRL, JBC 명령이 실행될 때 구현됩니다. CPL; INC; 12월; DJNC; MOV PX,Y; CLR PX.Y; SETB PX,Y.

래치 출력에서 ​​정보를 읽으면 포트 핀의 로직 레벨을 해석할 때 오류가 제거됩니다. 기사의 계속을 읽으십시오.



관련 기사: