MCS-51 마이크로컨트롤러: 소프트웨어 모델, 구조, 명령. 마이크로컨트롤러 MCS-51

OMEVM 명령 시스템은 뛰어난 데이터 처리 기능을 제공하고 논리, 산술 연산 및 실시간 제어를 구현합니다. 구현된 비트, 4비트(4비트), 바이트(8비트) 및 16비트 데이터 처리.

LSI 제품군 MCS-51 - 8비트 OMEVM: ROM, RAM, 특수 목적 레지스터, ALU 및 외부 버스에는 바이트 구성이 있습니다. 2바이트 데이터는 포인터 레지스터(DPTR)와 프로그램 카운터(PC)에서만 사용됩니다. 데이터 포인터 레지스터는 2바이트 레지스터 DPTR 또는 2개의 1바이트 특수 목적 레지스터 DPH 및 DPL로 사용할 수 있습니다. 프로그램 카운터는 항상 2바이트 레지스터로 사용됩니다.

OMEVM 명령 집합에는 이 시스템의 33개 기능을 지정하기 위한 42개의 명령 니모닉이 있습니다.

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

명령 시스템은 조건부로 다섯 그룹으로 나눌 수 있습니다.

다음 유형의 소스 피연산자 주소 지정이 있습니다.

  • 기본 레지스터와 인덱스 레지스터의 합에 의한 간접 레지스터 주소 지정

명령 시스템에서 사용되는 지정 및 기호 표

지정, 기호 목적
배터리
Rn 현재 선택된 레지스터 뱅크의 레지스터
아르 자형 명령에 지정된 로드된 레지스터의 번호
직접 내부 데이터 RAM 위치(0-127) 또는 SFR(128-255)일 수 있는 직접 주소 지정 가능한 8비트 내부 데이터 위치 주소
@rr 간접적으로 주소 지정 가능한 8비트 내부 데이터 RAM 위치
데이터8 CPC에 포함된 8비트 즉시 데이터
데이터H 즉각적인 16비트 데이터의 MSB(15-8)
데이터L 즉각적인 16비트 데이터의 하위 비트(7-0)
주소11 11비트 목적지 주소
주소 목적지 주소의 최하위 비트
disp8 8비트 부호 있는 오프셋 바이트
조금 내부 데이터 RAM 또는 SFR에 위치한 CPC를 주소에 포함하는 직접 주소 지정 가능 비트
a15, a14...a0 대상 주소 비트
(엑스) X 요소의 내용
((엑스)) 요소 X에 저장된 주소의 콘텐츠
(엑스)[엠] 방전 M 요소 X

+
-
*
그리고
또는
XOR
/엑스
작업:
추가
빼기
곱셈
분할
논리 곱셈(AND 연산)
논리 덧셈(OR 연산)
덧셈 모듈로 2(XOR)
요소 X 반전

기능 니모닉은 주소 지정 방법 및 데이터 유형의 특정 조합과 고유하게 연결됩니다. 총 111개의 이러한 조합이 명령 시스템에서 가능합니다. 표는 알파벳순으로 정렬된 명령 목록을 보여줍니다.

기억술 기능 플래그
ACALL 팀 절대 서브루틴 호출
덧셈 교류, C, OV
캐리와 함께 추가 교류, C, OV
AJMP 팀 절대 전환
논리 "AND"
가변 비트에 대한 논리 "AND"
비교하고 같지 않으면 점프
팀 CLR A 배터리 리셋
CLR팀 리셋 비트 씨, 비트
CPL 팀 A 배터리 반전
CPL팀 비트 반전 씨, 비트
DA A팀 덧셈을 위한 누산기 소수점 보정 교류, C
DEC 팀<байт> 감소
팀 DIV AB 분할 C, OV
팀 DJNZ<байт>, <смещение> 0이 아닌 경우 감소 및 점프
팀 I.N.C.<байт> 증가
팀 INC DPTR 데이터 포인터 증분
팀 J.B. , 비트가 설정되면 점프
팀 JBC , 비트가 설정되면 분기하고 이 비트를 재설정합니다.
팀 J.C. 캐리가 설정되어 있으면 점프
JMP @A+DPTR 명령 간접 전환
JNB 팀 , 비트가 설정되지 않은 경우 점프
팀 JNC 전송이 설정되지 않은 경우 점프
팀 JNZ 누산기 내용이 0이 아닌 경우 점프
팀 JZ 누산기 내용이 0이면 점프
LCALL 팀 긴 전화
팀 LJMP 긴 전환
앞으로 가변 바이트
데이터 비트 보내기
명령 MOV DPTR,#data16 16비트 상수로 데이터 포인터 로드
MOVC 명령어 A,@A+( ) 프로그램 메모리에서 바이트 이동
외부 메모리로(외부 메모리에서) 데이터 보내기

강의 계획

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바이트를 차지합니다.

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 참조)의 기본은 8비트 산술 논리 장치(ALU)입니다. MK의 메모리에는 Harvard 아키텍처가 있습니다. 논리적으로 분할: 프로그램 메모리 - PP(내부 또는 외부), 16비트 명령 카운터(SC) 및 데이터 메모리 - 내부(상주 데이터 메모리 - RPD) 128(또는 256) 바이트 및 외부(외부) 데이터 메모리 – VPD) 최대 64KB. 물리적으로 프로그램 메모리는 ROM(읽기 전용)에 구현되고 데이터 메모리는 RAM에 구현됩니다(데이터 쓰기 및 읽기 가능).

외부 신호의 수신 및 전달은 4개의 8비트 포트 Р0..Р3을 통해 수행됩니다. 외부 프로그램 메모리(EPM) 또는 데이터 메모리(VPD)에 액세스할 때 포트 P0 및 P2는 다중화된 외부 주소/데이터 버스로 사용됩니다. P3 포트 라인은 대체 기능도 수행할 수 있습니다(표 1 참조).

16비트 DPTR 레지스터는 누산기 변환 명령에서 VPD 주소 또는 프로그램 메모리 기본 주소를 형성합니다. DPTR 레지스터는 피연산자를 저장하기 위한 두 개의 독립적인 8비트 레지스터(DPL 및 DPH)로도 사용할 수 있습니다.

8비트 내부 명령 레지스터(RK)는 실행 중인 명령의 코드를 수신합니다. 이 코드는 제어 신호를 생성하는 제어 회로에 의해 디코딩됩니다(그림 1 참조).

특수 기능 레지스터에 대한 액세스 - RSF(SFR - 그림 1에서 점선으로 표시됨)는 128(80h) 이상의 주소 범위에서 직접 바이트 주소 지정을 사용하는 경우에만 가능합니다.


MCS-51 제품군의 첫 번째 마이크로 컨트롤러 모델의 상주 데이터 메모리(RDD)의 용량은 128바이트였습니다. RPD의 하위 32바이트도 범용 레지스터인 RON(각각 8개의 RON으로 구성된 4개의 뱅크)입니다. 이 프로그램은 활성 은행의 8개의 RON 중 하나에 적용될 수 있습니다. RON의 활성 뱅크 선택은 프로세서 상태 레지스터(PSW)의 두 비트를 프로그래밍하여 수행됩니다.


표 1 - MCS-51 핀 할당

핀 번호 지정 목적
1..8 P1 8비트 준양방향 I/O 포트
9 RST

리셋 신호(활성 레벨 - 높음);

RST 신호 재설정: PC 및 대부분의 특수 기능 레지스터(SFR), 모든 인터럽트 및 타이머 비활성화; RON 뱅크 0을 선택합니다. 포트 P0_P3에 "all one"을 쓰고 입력을 준비합니다. 스택 포인터(SP)에 코드 07H를 씁니다.

10..17

8비트 준양방향 I/O 포트 해당 비트 "1"에 쓴 후 - 추가(대체) 기능을 수행합니다.

직렬 포트 입력 - RxD;

직렬 포트 출력 - TxD;

외부 인터럽트 입력 0 - ~INT0;

외부 인터럽트 입력 1 - ~INT1;

타이머/카운터 입력 0 - T0;

타이머/카운터 입력 1 - T1;

스트로브 출력. VPD에 쓸 때 신호 - ~ WR;

스트로브 출력. VPD에서 읽을 때 신호 - ~ RD;

18, 19 X1, X2 석영 공진기 또는 LC 회로 연결에 대한 결론;
20 GND 일반적인 결론;
21..28 P2 8비트 준양방향 I/O 포트 또는 외부 메모리 모드(VPP 또는 VPD)에서 출력 주소 A;
29 PME 외부 프로그램 메모리 읽기 스트로브, 외부 ROM에 액세스할 때만 발행됩니다.
30 에일 외부 메모리 주소 스트로브(VPP 또는 VPD),
31 EA RPP를 비활성화하면 이 입력의 레벨 "0"이 MK를 명령 선택으로 전환합니다. 런웨이에서만 ;
39..32 P0 8비트 양방향 I/O 포트 외부 메모리에 액세스할 때 주소 A(ALE 신호에 의해 외부 레지스터에 기록됨)를 발행한 다음 ~PME(명령의 경우) 또는 ~WR,~RD(VPD의 데이터의 경우) 신호와 동시에 바이트를 교환합니다. , 외부 메모리에 액세스할 때 모든 장치가 포트 레지스터 P0에 기록되어 거기에 저장된 정보가 파괴됩니다.
40 Ucc 공급 전압 출력

RON의 뱅크를 전환하면 서브루틴 실행과 인터럽트 처리가 간소화됩니다. 서브루틴을 호출할 때 메인 프로그램의 RON 내용을 스택으로 전송할 필요가 없습니다(서브루틴의 다른 활성 RON 뱅크로 이동하는 것으로 충분함).

RPD에 대한 액세스는 간접 또는 직접 바이트 주소 지정을 사용하여 가능합니다(직접 바이트 주소 지정은 RPD의 처음 128바이트에만 액세스할 수 있음).

주소 128(80h)에서 255(FFh)까지 확장된 RPD 영역(MCS-52 제품군 및 후속 제품군의 마이크로 컨트롤러용)은 간접 주소 지정 방법을 통해서만 주소를 지정할 수 있습니다.

표 2 - 특수 기능의 블록 레지스터(s f r)

니모 코드 이름
0E0h *ACC 배터리
0F0h *비 배터리 확장기 등록
0D0h *PSW 프로세서 상태 워드
0B0h * P3 포트 3
0A0h * P2 포트 2
90시간 * P1 포트 1
80시간 *P0 포트 0
0B8h * IP 인터럽트 우선 순위 레지스터
0A8h *즉 인터럽트 마스크 레지스터
99시간 SBUF 직렬 트랜시버 버퍼
98시간 * 스콘 직렬 포트 제어/상태 레지스터
89시 TMOD 타이머/카운터 모드 레지스터
88시간 * 티콘 타이머/카운터 제어/상태 레지스터
8Dh TH1 타이머 1(높은 바이트)
8bh TL1 타이머 1(낮은 바이트)
8채널 TH0 타이머 0(높은 바이트)
8아 TL0 타이머 0(낮은 바이트)
83시간 DPH DPTR(데이터 포인터 레지스터)(높은 바이트)
82시간 DPL DPTR(데이터 포인터 레지스터)(낮은 바이트)
81시 SP 스택 포인터 레지스터
87시간 PCON 수요 전력 제어 레지스터

2. 소프트웨어 모델 MCS–51


명령 유형 MCS–51

명령의 거의 절반이 1 기계 주기(MC)에서 실행됩니다. 12MHz의 수정 발진기 주파수에서 이러한 명령의 실행 시간은 1μs입니다. 나머지 명령은 2개의 머신 사이클에서 실행됩니다. 2ms 동안. 곱셈(MUL) 및 나눗셈(DIV) 명령어만 4개의 ​​머신 사이클에서 실행됩니다.

한 기계 주기 동안 2바이트의 명령을 읽기 위해 프로그램 메모리(내부 또는 외부)에 두 번 액세스하거나 외부 데이터 메모리(EDM)에 한 번 액세스합니다.

3. MCS–51을 처리하는 방법(방법)

1. 레지스터 어드레싱 - 8비트 피연산자는 선택한(활성) 레지스터 뱅크의 RON에 있습니다.

2 DIRECT ADDRESSING(기호 - #로 표시) - 피연산자는 명령의 두 번째(16비트 피연산자의 경우 세 번째) 바이트에 있습니다.

3 간접 주소 지정(- @ 기호로 표시) - 피연산자는 데이터 메모리(RPD 또는 VPD)에 있으며 메모리 셀의 주소는 간접 주소 지정(R0 또는 R1)의 RON 중 하나에 포함됩니다. PUSH 및 POP 명령에서 주소는 스택 포인터 SP에 포함됩니다. DPTR 레지스터는 최대 64K의 VPD 주소를 포함할 수 있습니다.

4 DIRECT BYTE ADDRESSING – (dir) – RPD 셀(주소 00h…7Fh) 및 특수 기능 레지스터 SFR(주소 80h…0FFh)에 액세스하는 데 사용됩니다.

5 DIRECT BIT ADDRESSING - (비트) - 주소 20H ... 2FH에서 RPD 셀에 위치한 개별적으로 주소 지정 가능한 128비트에 액세스하고 특수 기능 레지스터의 개별적으로 주소 지정 가능한 비트에 액세스하는 데 사용됩니다(표 3 및 프로그램 모델 참조).

6 간접 인덱스 주소 지정(@ 기호로 표시됨) - 프로그램 메모리의 테이블 보기를 단순화합니다. PP 주소는 기본 레지스터(PC 또는 DPTR)와 인덱스 레지스터(배터리)의 합으로 결정됩니다.

7 IMPLICIT (BUILT-IN) ADDRESSING - 명령 코드에는 피연산자 중 하나(가장 자주 누산기)에 대한 암시적(기본값) 참조가 포함되어 있습니다.

4. 프로세서 상태 워드(PSW) 형식

C - 캐리(CARY) 또는 차용 플래그는 비트 연산 명령어에서 "부울 누산기" 역할도 합니다.

AC – 보조(추가) 캐리 플래그 – 추가 명령(ADD, ADDC)에 낮은 차수 테트라드에서 높은 차수로(즉, 3번째 비트에서 4번째 비트로) 캐리가 있는 경우 "1"로 설정됩니다.

F0 - 사용자 플래그 - 소프트웨어로 설정, 재설정 및 확인;

RS1 RS0 은행 주소(디렉터리)
0 0 0 00시..07시
0 1 1 08시..0시
1 0 2 10시..17시
1 1 3 18시..1시

RS1,RS0 – 레지스터 뱅크 선택:

OV - 산술 오버플로우 플래그; 그 값은 ALU의 최상위 비트의 입출력 캐리 신호의 XOR 연산에 의해 결정됩니다. 이 플래그의 단일 값은 2의 보수 코드에서 산술 연산의 결과가 범위를 벗어남을 나타냅니다: –128…+127; 나누기 연산을 수행할 때 OV 플래그는 재설정되고 0으로 나누기의 경우에는 설정됩니다. 곱할 때 결과가 255(0FFH)보다 크면 OV 플래그가 설정됩니다.

비트 PSW - 예약됨, 쓰기 또는 읽기에 사용할 수 있는 트리거를 포함합니다.

P - 패리티 플래그 - 누산기의 단일 비트 수를 짝수로 더한 것입니다. 조합 회로로 구성됩니다(프로그래밍 방식으로 읽기만 가능).

MCS-51 마이크로컨트롤러에는 "Z" 플래그가 없습니다. 그러나 조건부 점프 명령(JZ, JNZ)에서 조합 회로는 누산기의 현재(0 또는 0이 아닌) 내용을 확인합니다.

피연산자의 전송 및 교환에 대한 모든 명령은 Accumulator를 통해 수행할 수 있습니다(그림 3 참조). 또한 외부 메모리(프로그램 메모리 또는 데이터 메모리)와의 전송은 배터리를 통해서만 수행할 수 있습니다.

대부분의 전송은 정방향 바이트(dir)를 통해서도 이루어질 수 있습니다. dir-to-dir 전송도 있습니다(그림 3 참조).

RON에서 RON으로의 누락된 전송은 RON에서 정방향 바이트 dir로의 전송으로 구현될 수 있습니다(RON이 상주 데이터 메모리의 초기 영역에 있으며 셀은 dir로 주소 지정될 수 있음).

XCH 교환 명령을 사용하면 두 피연산자를 파괴하지 않고 바이트를 보낼 수 있습니다.

산술 명령은 Accumulator에서만 실행됩니다. 따라서 첫 번째 피연산자는 먼저 Accumulator에 배치한 다음 두 번째 피연산자를 더하거나 빼야 합니다. 결과는 Accumulator에 저장됩니다.


SUBB 빼기 명령은 빌림으로만 실행됩니다(즉, 결과에서 Cary 플래그도 빼기). 따라서 빌려오지 않고 빼기 명령을 실행하려면 CLRC(Clear Flag C) 명령을 먼저 실행해야 합니다.

1바이트 피연산자를 곱하는 명령인 MULAB는 2바이트(16비트) 결과를 배치합니다. 하위 바이트는 누산기에 있고 상위 바이트는 레지스터 B에 있습니다.

1바이트 피연산자 나누기 명령 실행 결과 - DIVAB - 몫 - 누산기, 나머지 - 레지스터 B에 배치됩니다.

INC 산술 명령어는 선택한 피연산자에 1을 더합니다. DEC 산술 명령어는 선택한 피연산자에서 1을 뺍니다. Accumulator Decimal Correction(DAA) 명령어는 BCD(Binary Coded Decimal) 숫자를 16진수(hex) 형식으로 변환하지 않고 추가하는 데 도움이 됩니다. 소스 피연산자는 BCD 형식이어야 합니다. 1바이트의 각 테트라드에는 0에서 9까지의 숫자만 있습니다(A, B, C, D, E, F와 같은 16진수는 있을 수 없습니다). 따라서 1바이트는 압축된 BCD 번호의 경우 00에서 99까지, 압축 해제된 BCD 번호의 경우 0에서 9까지의 숫자를 포함할 수 있습니다.

DA A - 십진법 수정 명령은 다음과 같이 프로세서에 BCD 번호를 추가한 후 Accumulator의 내용에 대한 작업을 수행합니다(숫자는 16진수 산술 법칙에 따라 추가됨)(예제 참조).

· Accumulator의 하위 tetrad의 내용이 9보다 크거나 보조 캐리 플래그가 설정되어 있으면(AC = 1) Accumulator의 내용에 6이 추가됩니다(즉, 16진수에서 누락된 6자리 숫자). 체재);

· 그 후 누산기의 상위 내용이 9보다 크거나 플래그 C가 설정되면 숫자 6이 누산기의 상위 순위에 추가됩니다.

증가 명령이 C 및 AC 플래그에 영향(변경)을 주지 않기 때문에 소수점 수정 명령 DA A는 증가 명령(INC) 다음에 사용되지 않습니다.

논리 명령:

논리적 "AND" - ANL,

논리적 "OR" - ORL,

XOR 논리 명령(XRL)은 Accumulator(및 산술)에서 실행되지만 직접 주소 바이트(dir)에서도 논리 명령을 실행할 수 있습니다. 이 경우 두 번째 피연산자는 다음과 같습니다.

배터리 또는

명령의 직접 피연산자입니다.

회전 명령(RR A, RL A) 및 CARY 플래그(RRC A, RLC A)를 통한 회전 명령은 Accumulator의 내용을 1비트씩 회전시키며 비트 피연산자는 C 플래그를 통해서만 전송됩니다.

인터럽트 시스템의 상태는 RETI 명령과 IE 및 IP 레지스터에 액세스하는 모든 명령을 제외하고 단계 S5P2의 각 기계 주기가 끝날 때 폴링됩니다. 인터럽트 요청이 커밋된 순간부터 인터럽트 서비스를 제공하기 위해 요청 단계와 요청이 수신된 명령의 머신 사이클 수에 따라 주파수 fOSC의 38~86주기가 걸립니다.

인터럽트가 하드웨어에서 구현되면 LCALL addr16 명령이 실행되어 프로그램 카운터의 현재 상태가 스택에 저장되고(반환 주소 기억) 해당 서비스 프로시저의 시작 주소 addr16으로 점프합니다. 각 인터럽트 요청 소스는 고유한 관련이 있습니다.

시작 주소(인터럽트 벡터):

외부 인터럽트 INT0.

타이머/카운터 인터럽트 TC0.

외부 인터럽트 INT1.

타이머/카운터 인터럽트 TC1.

직렬 포트 인터럽트.

2.7. MCS-51 제품군의 주소 지정 방법 및 명령 시스템

MCS-51 제품군의 명령 시스템은 범용 포트 P0...P3 및 기본 정보 처리를 통해 유연한 데이터 입/출력 구성에 중점을 둡니다. 비트를 사용한 연산과 해당 값에 의한 제어 전송에 특별한 주의를 기울입니다. 이러한 작업을 수행하는 명령어는 대규모 그룹을 형성하고 해당 하드웨어와 함께 MCS-51 아키텍처의 일부로 소위 "부울 프로세서"를 형성합니다.

명령 시스템은 프로그래머에게 전체 주소 지정 방법 및 소프트웨어에서 액세스할 수 있는 하드웨어 리소스 세트와 함께 대부분의 작업을 사용할 수 있는 기능을 제공합니다.

2.7.1. 주소 지정 방법

각 명령어는 수행할 작업과 피연산자에 액세스하는 방법을 프로세서에 알려줍니다. 명령 코드에는 특정 기능 목적을 가진 여러 필드가 있습니다. 명령의 가장 중요한 필드는 명령의 동작을 결정하는 작업 코드(COP)와 주소 부분입니다. 주소 부분의 필드에는 피연산자의 주소 및 연산 결과에 대한 정보와 경우에 따라 다음 명령어의 주소에 대한 정보가 포함됩니다.

주소가 피연산자가 위치한 또는 입력된 메모리 셀의 번호를 가리키는 경우 직접 주소라고 합니다.

주소 지정 방법은 피연산자에 액세스하기 위한 일련의 메커니즘입니다. 그 중 일부는 간단하여 명령 형식이 간결하고 피연산자에 빠르게 액세스할 수 있지만 사용 가능한 리소스의 양이 제한되어 있습니다. 다른 것들은 시스템에서 사용 가능한 모든 리소스로 작업할 수 있도록 허용하지만 명령이 길어지는 것으로 밝혀졌습니다.

입력 및 실행에 많은 시간이 소요됩니다. 각 명령어 세트의 주소 지정 방법 세트는 해결해야 할 작업 세트를 기반으로 아키텍처 설계자가 선택한 알려진 주소 지정 메커니즘의 타협 조합입니다.

다음은 MCS-51 Family Command System에서 사용되는 주요 주소 지정 방법입니다.

암시적 주소 지정. 명령에는 연산에 참여하는 피연산자의 주소 또는 연산 결과가 있는 주소에 대한 명시적 표시가 포함되어 있지 않지만 이 주소는 암시되어 있습니다. 명령에서 누산기는 연산 결과의 대상으로 암시적으로 지정되는 경우가 가장 많습니다. 예를 들어, ADD A,R1 명령어에 의해 누산기(A)의 내용과 현재 데이터뱅크의 R1 레지스터를 더한 결과는 암묵적으로 주소가 지정된 누산기에 기록됩니다. 지정된 명령어 전체가 메모리에서 1바이트를 차지하는 반면 누산기(SFR 영역의 8Eh)의 주소만 1바이트를 포함합니다.

직접 주소 지정. 명령의 주소 필드에 포함

살아있는 피연산자의 주소가 아니라 피연산자 자체입니다. 직접 주소 지정은 숫자 앞에 특수 문자 #로 표시됩니다. 예를 들어 MOV A,#15h 명령은 16진수 15(명령의 두 번째 바이트)를 누산기로 로드합니다. 명령 시스템에서 직접 주소 지정은 #data로 표시되며 여기서 data는 숫자입니다.

(데이터 = 00h...FFh).

직접 주소 지정. 명령 주소 필드는 피연산자가 있거나 쓰여지는 데이터 메모리 위치의 직접 주소를 지정합니다. 예를 들어 MOVA A,15h 명령어는 주소 15h에 있는 DSEG 셀의 내용을 누산기로 로드합니다. 메모리 셀은 직접 주소 지정이 가능한 반면 누산기는 암묵적으로 주소 지정됩니다. 주소가 지정된 피연산자의 위치에 따라 직접 주소 지정은 레지스터 직접 주소 지정과 절대 주소 지정으로 세분됩니다.

직접 레지스터 주소 지정. 명령 주소 필드에는 현재 레지스터 뱅크의 직접 레지스터 주소가 포함됩니다. 각 뱅크에는 8개의 레지스터가 있으며 이들을 주소 지정하려면 3비트 직접 주소가 필요합니다. 명령 니모닉에서 주소 지정 가능 레지스터는 Rn으로 표시되며 여기서 n=0...7입니다. 명령의 모든 필드는 1바이트에 맞습니다. 이러한 주소 지정을 short라고 합니다. 예를 들어, MOV R4,R1.

직접 절대 주소 지정모든 DSEG 셀 및 SFR 영역에 액세스할 수 있습니다. 이 경우 직접 주소는 1바이트를 사용하고 명령은 2바이트를 사용합니다. 명령 시스템에서 직접 주소 바이트는 direct(direct)라는 단어로 표시됩니다(direct = 00h ... FFh). 예를 들어, 명령 MOV 80h,R2(또는 MOV P0,R2)는 현재 데이터뱅크의 레지스터 R2의 내용을 포트 P0(SFR의 위치 80h)에 로드합니다. 두 피연산자가 직접 절대 주소 지정이 가능한 경우 명령어는 3바이트 명령어(예: MOV 80h,15h)가 됩니다.

간접 주소 지정. 주소 필드에는 피연산자의 직접 주소가 있는 메모리 위치의 주소가 포함됩니다. 명령 시스템에서 간접 주소 지정은 @ 특수 문자로 표시됩니다. 재산

각 레지스터 뱅크의 레지스터 R0 및 R1(@Ri, i = 0.1)은 직접 주소를 저장해야 합니다. 예를 들어 현재 레지스터 뱅크의 R1 레지스터 내용이 15h인 경우 MOVA A,@R1 명령어는 위의 MOVA A,15h 명령어와 동일한 작업을 수행합니다. 즉, DSEG 메모리 위치의 내용을 로드합니다. 어큐뮬레이터에 주소 15h를 입력합니다. 그러나 MOVA A, @ R1 명령은 1바이트이지만 가장 중요한 것은 R1 레지스터의 내용을 변경하여 프로그래밍 방식으로 주소를 변경할 수 있다는 것입니다.

상대 주소 지정. 상대 주소 지정을 사용하면 기본 주소를 명령의 주소 필드에 추가하여 직접 주소를 구성합니다. 프로그램 카운터의 내용은 기본 주소로 사용되며 명령의 주소 필드는 8비트 상대(상대) 오프셋입니다. rel 번호는 명령에 의해 2의 보수로 표시되는 부호 있는 정수로 해석됩니다. 표시 범위는 (-128...+127)입니다. rel 번호를 결정할 때 프로그램 카운터가 실행할 다음 명령어를 가리킨다는 점을 염두에 두십시오. 상대 주소 지정은 재배치 가능한 프로그램 모듈을 생성할 수 있는 제어 전송 명령에 널리 사용됩니다. 상대 주소 지정이 있는 제어 전송 명령은 (-128...+127) 바이트에 의해 양방향으로 PC 프로그램 카운터의 현재 위치에 상대적인 분기를 허용합니다.

어셈블리 언어 프로그램에서 오프셋 필드를 사용하여 이동할 레이블을 지정할 수 있습니다. 변환 결과 어셈블러는 오프셋 값이 (-128…+127)을 초과하지 않는 경우 오프셋 값을 계산합니다. 그렇지 않으면 오류 메시지가 발행됩니다.

기본 주소 지정일종의 상대 주소 지정을 나타냅니다. 이 경우 직접 주소는 기본 주소를 저장하는 기본 레지스터의 내용에 명령에 지정된 주소를 추가하여 구성됩니다. MCS-51 제품군의 기본 레지스터 기능은 DPTR 데이터 포인터 레지스터 또는 PC 프로그램 카운터에 의해 수행됩니다. 이러한 유형의 주소 지정은 테이블 및 데이터 배열을 처리할 때 특히 유용합니다. MOVC A,@A+DPTR 및 MOVC A,@A+PC 명령어에서 16비트 직접 주소는 DPTR 및 A 또는 PC 및 A 레지스터의 내용 합계로 구성됩니다.

페이지 주소 지정. 페이지 주소 지정을 사용할 때 메모리는 동일한 길이의 여러 페이지로 나뉩니다. 페이지 주소 지정은 별도의 페이지 레지스터에 의해 수행되며 페이지 내의 메모리 셀은 명령어에 포함된 주소로 지정됩니다. 직접 주소는 페이지의 주소와 페이지 내 메모리 셀의 주소를 연결(부착)하여 구성됩니다. MOVX A,@Ri 명령어에서 포트 P2(주소의 상위 바이트)는 페이지 레지스터의 기능을 수행하고 레지스터 Ri(주소의 하위 바이트)의 내용은 페이지 내의 주소를 지정합니다. 이 경우 메모리는 각 페이지에 256개의 셀이 있는 256개의 페이지로 나뉩니다.

스택 주소 지정주소 없는 명령에 사용되며 자동 증가 및 자동 감소 주소 지정 방법의 조합으로 LIFO(Last I nput - First O utput) - "후입선출"의 원칙에 따라 작동합니다. 스택은 DSEG에 위치하며 주소가 증가하는 방향으로 증가합니다. 스택의 맨 위 주소는 스택 포인터 SP에 포함됩니다. 바이트가 스택에 푸시되면 SP의 내용이 먼저 증가한 다음 주소가 기록됩니다. 스택에서 바이트를 읽을 때 먼저 SP가 가리키는 주소에서 읽은 다음 SP를 감소시킵니다. 스택을 사용할 때 스택 깊이(스택이 차지하는 최대 메모리 셀 수)는 하드웨어에 의해 제어되지 않는다는 점에 유의하십시오. 스택이 과도하게 증가하면 의도하지 않은 메모리 셀이 정보 손실로 점유될 수 있습니다. 하드웨어 스택은 인터럽트 서비스를 제공할 때 반환 주소를 저장하는 데 사용됩니다.

2.7.2. MCS-51 패밀리 커맨드 시스템

명령 시스템은 부록 2의 표 A2.1...A2.6에 제시되어 있습니다. 표는 명령의 이름, 니모닉, 이진 연산 코드, 플래그 C, OV, AC에 대한 실행된 명령의 효과를 보여줍니다. 및 P, 명령 길이(B) 및 실행 시간(C), 명령에 의해 수행된 변환 내용. 쉼표는 명령에서 주소 필드의 구분 기호로 사용됩니다. 가독성을 높이기 위해 사용 중인 어셈블러에서 지원하는 경우 쉼표 뒤에 공백을 추가할 수 있습니다.

전체 명령 세트는 데이터 전송 연산, 산술 연산, 논리 연산, 비트 연산 및 제어 전송 연산의 5개 그룹으로 나눌 수 있습니다.

데이터 전송 작업 명령 그룹(표 A2.1) 공동-

MOV(DSEG와 RSEG 간 데이터 전송), MOVC(CSEG와 A 간), MOVX(XSEG와 A 간), PUSH 및 POP 스택 액세스 명령, 두 개의 XCH 및 XCHD 교환 명령을 보유합니다. 대상이 누산기인 모든 데이터 전송 명령은 누산기 내용의 패리티 플래그 P를 설정하고 대상이 PSW 레지스터인 직접 주소 지정 명령은 모든 플래그를 변경합니다. 가장 용량이 큰 MOV 명령은 직접 레지스터(A, Rn, DPTR), 직접(직접), 간접(@Ri), 직접(#data, #data16)의 네 가지 주소 지정 방법을 사용합니다. 명령의 두 번째 피연산자는 소스이고 첫 번째 피연산자는 대상입니다. 목적지 지정을 위한 세 가지 주소 지정 방법(직접 제외)과 소스 지정을 위한 네 가지 모두가 있습니다. 3바이트 MOV 직접, 직접 명령은 RSEG를 포함하여 임의의 두 메모리 셀(DSEG 및 SFR) 간에 전송을 제공합니다. RSEG와의 교환을 위해 특별한 2바이트 및 1바이트 형식이 제공됩니다.

특수 명령어 MOV DPTR,#data16은 값 data16이 있는 16비트 DPTR 포인터를 로드합니다.

MOVC 명령을 사용하면 CSEG 프로그램 메모리에서 제어 장치의 명령 레지스터가 아니라 작동 장치의 누산기로 정보를 읽을 수 있습니다. 이 명령은 DPTR 기반 및 PC 기준의 두 가지 주소 지정 방법을 사용합니다. 두 경우 모두 부호 없는 정수 오프셋(인덱스)이 누산기에 저장됩니다. 누산기는 결과의 수신자 역할도 합니다. 이 명령을 사용하면 테이블별로 빠른 기록을 수행할 수 있습니다.

MOVX 명령을 사용하여 외부 메모리에 액세스합니다. 교환은 누산기와 외부 XSEG 간의 바이트 단위로 수행됩니다. XSEG 셀은 16비트 포인터 DPTR을 통한 간접적인 방식과 8비트 포인터 Ri를 통한 페이지 방식의 간접적인 두 가지 방식으로 주소 지정될 수 있습니다(i=0,1). 후자의 경우 페이지 레지스터는 P2입니다.

주소 지정되지 않은 PUSH 및 POP 명령은 데이터 전송을 제공합니다.

DSEG, RSEG 및 SFR 사이.

XCH 교환 명령은 양방향 바이트 교환을 제공하고 XCHD 명령은 바이트 피연산자의 하위 테트라드를 제공합니다.

산술 연산을 위한 명령어 그룹(표 A2.2) 공동-

추가 추가, 캐리 추가 ADDC, 차용 빼기 SUBB, 1 INC 및 DEC에 의한 증가 및 감소, 압축 형식 BCD(Binary Coded Decimal) 추가의 소수 정정, MUL 곱하기 및 DIV 나누기에 대한 명령을 보유합니다. 연산은 부호 없는 정수에서 수행됩니다. 더하기 및 빼기 연산에서 누산기는 첫 번째 피연산자이자 결과의 대상입니다. 직접 레지스터, 직접 절대, 직접 및 간접 주소 지정은 두 번째 피연산자를 정의하는 데 사용됩니다. INC 및 DEC 연산은 누산기, 직접 주소 지정 가능한 레지스터, 직간접적으로 주소 지정 가능한 메모리 위치에 적용됩니다. 또한 INC 연산은 16비트 DPTR 포인터 레지스터의 내용에 적용됩니다.

정수 곱셈 및 무부호 나눗셈 연산에는 누산기와 레지스터 B가 관련됩니다. 곱셈에서는 A의 8비트 값에 B의 8비트 값을 곱하고 16비트 결과를 쌍 BA에 기록합니다. 이 경우 레지스터 B는 제품의 가장 높은 부분을 저장합니다. 곱이 255보다 크면 OV 플래그가 설정됩니다. 8비트 값 A를 8비트 값 B로 나누면 몫은 A에, 나머지는 B에 기록됩니다. 0으로 나누려는 시도는 OV 오버플로우 플래그.

누산기 소수점 보정 명령 DA는 가산 명령 뒤에 위치합니다. 조건은 BCD 코드로 표현되어야 합니다. 보정은 표준 방식으로 수행됩니다.

논리 명령어 그룹(표 A2.3 )에는 ANL - 논리적 AND, ORL - 논리적 OR, XRL - 논리적 배타적 OR의 세 가지 일반적인 작업이 포함됩니다. 첫 번째 피연산자의 소스

누산기 A 또는 직접 주소 지정이 가능한 메모리 셀입니다. 두 번째 피연산자는 네 가지 기본 주소 지정 방법 중 하나로 지정됩니다. 그룹에는 다음도 포함됩니다. 단일 작업누산기의 내용 위 : CLR - 지우기, CPL - 반전, RL, RLC, RR 및 RRC - 오른쪽과 왼쪽으로 순환 및 확장 시프트 작업. 여기에는 SWAP 누산기에서 테트라드를 교환하는 작업도 포함되며, 이는 한 바이트의 4비트 순환 이동으로 해석될 수 있습니다.

비트 연산 명령 그룹(표 A2.6) 공동 포함

명령 SETB - 비트를 1로 설정, CLR - 비트를 0으로 재설정, CPL - 비트 반전, ANL 및 ORL - 플래그 C 내용의 논리 AND 및 논리 OR 및 직접 주소 지정된 비트, MOV - 비트 전달.

안에 비트 연산에서 C 플래그는 부울 누산기 역할을 합니다. C 플래그의 내용 또는 BSEG 영역의 직접 주소 지정 가능한 비트가 피연산자로 사용됩니다. ANL 및 ORL 작업에서 직접 주소가 지정된 비트(bit)의 내용 또는 내용의 역(/bit)을 사용할 수 있습니다.

안에 이 그룹에는 상대적인 조건부 점프 명령도 포함됩니다. 8비트 오프셋 상대 조건 분기는 비트가 설정되거나(JB 명령) 지워질 때(JNB 명령) 실행될 수 있습니다. 특히 JBC 명령어는 비트가 설정되면 분기를 구현하고 동시에 비트를 0으로 재설정합니다.

제어 전송 명령 그룹(표 A2.4 및 A2.5)

점프 무조건 명령어 AJMP, LJMP, SJMP, JMP, 점프 조건부 JZ, JNZ, CJNE, 호출 ACALL, LCALL, 반환 RET, RETI 및 조건부 점프 DJNZ로 업데이트를 보유합니다. 빈 NOP 명령도 여기에 포함됩니다.

안에 상대 주소 지정은 재배치 가능한 프로그램 모듈을 생성할 수 있도록 제어 전송 명령에 널리 사용됩니다. 상대 주소는 8비트 오프셋 rel은 PC의 현재 위치를 기준으로 (-128… +127)바이트로의 전환을 제공하는 부호 있는 바이트입니다. 직접 addr16 또는 간접 @A+DPTR 주소를 사용하여 64KB 주소 공간의 다른 지점으로 이동할 수 있습니다. 후자의 경우 A의 내용은 부호 없는 정수로 해석됩니다. MCS-48 제품군과의 호환성을 위해 2K 현재 페이지 내의 짧은 직접 주소 지정 addr11 변형이 도입되었습니다.

이러한 모든 유형의 주소 지정은 점프 명령에 사용됩니다. 호출 명령은 직접 addr16 및 인페이지 addr11 주소 지정 방법만 사용합니다. 모든 조건부 명령은 상대 주소 지정만 사용합니다.

마이크로컨트롤러가 인터럽트 요청을 인식하면 자동으로 반환 주소를 스택에 저장하는 LCALL addr16 명령을 실행합니다. 프로그램 상태 정보(PSW 레지스터의 내용)는 자동으로 저장되지 않습니다. 여기서



관련 기사: