메뉴 English Ukrainian 러시아인 홈

애호가 및 전문가를 위한 무료 기술 라이브러리 무료 기술 라이브러리


라디오 전자 및 전기 공학의 백과사전
무료 도서관 / 무선 전자 및 전기 장치의 계획

PIC란 무엇입니까? 무선전자공학 및 전기공학 백과사전. 무선전자공학 및 전기공학 백과사전

무료 기술 라이브러리

무선 전자 및 전기 공학 백과사전 / 마이크로 컨트롤러

기사에 대한 의견기사에 대한 의견

소개. PIC16CXX는 Microchip Technology에서 제조한 RISC 아키텍처를 갖춘 8비트 마이크로컨트롤러입니다. 이 마이크로컨트롤러 제품군은 저렴한 가격, 낮은 전력 소비 및 빠른 속도가 특징입니다.

마이크로컨트롤러에는 EEPROM 프로그램과 데이터 RAM이 내장되어 있으며 18핀 및 28핀 패키지로 제공됩니다.

PIC OTP는 추가 코드 변경을 거치지 않는 완벽하게 테스트되고 완전한 제품을 위해 설계된 일회성 사용자 프로그래밍 가능 컨트롤러입니다. 이 컨트롤러는 사전 설정된 유형의 외부 발진기(석영 또는 RC)가 포함된 저렴한 플라스틱 케이스로 제공됩니다.

프로그램 디버깅 및 프로토타이핑을 위해 자외선 제거 기능이 있는 컨트롤러 버전을 사용할 수 있습니다. 이러한 컨트롤러는 많은 수의 쓰기/삭제 주기를 허용하며 매우 짧은 삭제 시간(보통 1~2분)을 갖습니다.

그러나 이러한 컨트롤러의 가격은 한 번 프로그래밍할 수 있는 컨트롤러보다 훨씬 높기 때문에 직렬 제품에 설치하는 것은 수익성이 없습니다.

프로그램이 가변 부품, 테이블, 교정 매개변수, 키 등을 변경하거나 포함할 수 있는 제품의 경우 전기적으로 삭제 및 재프로그래밍이 가능한 PIC16C84 컨트롤러를 사용할 수 있습니다. 또한 전기적으로 프로그래밍 가능한 데이터 ROM도 포함되어 있습니다. 이것이 바로 우리가 실험에 사용할 컨트롤러입니다.

이 기사를 최대한 활용하려면 IBM PC 호환 개인용 컴퓨터, 컴퓨터의 병렬 포트에 연결된 프로그래머, PIC16C84 칩, 개발 보드, 저항기가 있는 LED 8개, +5V 전원 공급 장치 및 칩용 소켓.

우리는 PIC를 위한 작은 프로그램 조각을 입력하고, 이를 조립하고, 칩에 기록한 다음 LED에서 결과를 관찰할 것입니다. 이 기사에서는 기본 MICROCHIP 니모닉을 사용하여 임베디드 제어 핸드북에 포함된 다른 애플리케이션 예제와 목록을 더 쉽게 사용할 수 있습니다.

PIC16CXX 제품군 우리는 이러한 마이크로 컨트롤러를 다른 마이크로 컨트롤러와 구별하는 기능과 장점을 갖춘 PIC 마이크로 회로 제품군에 대한 자세한 설명을 시작하겠습니다. 정보 보안 애플리케이션의 경우 각 PIC에는 프로그램 코드 및 데이터 ROM 읽기를 방지하도록 프로그래밍할 수 있는 보안 비트가 있습니다. 프로그래밍을 할 때 프로그램 코드를 먼저 작성하고, 기록이 올바른지 확인한 후 프라이버시 비트를 설정합니다. 프라이버시 비트가 설정된 마이크로 회로를 읽으려고 하면 PIC16C5X의 경우 코드의 상위 8비트가 0으로 읽히고 하위 4비트는 명령의 스크램블된 12비트가 됩니다. PIC16C84의 경우 마찬가지로 최상위 7비트는 7으로 읽히고 최하위 14비트는 스크램블된 16개 명령 비트를 나타냅니다. PIC84C1 전기적으로 프로그래밍 가능한 데이터 ROM은 보안 비트가 설정되어 있으면 읽을 수 없습니다. 그림 2은 현재 생산되는 모든 마이크로 컨트롤러를 보여주고 간략한 특성을 제공합니다. (1-35페이지 그림) PIC 제품군의 마이크로컨트롤러는 단 2개의 명령으로 구성된 매우 효율적인 명령 시스템을 갖추고 있습니다. 4주기에 실행되는 조건 분기 및 프로그램 카운터를 변경하는 명령을 제외하고 모든 명령은 4주기에 실행됩니다. 하나의 명령어 실행 주기는 1개의 클럭 주기로 구성됩니다. 따라서 14MHz 주파수에서 명령 실행 시간은 16μsec입니다. 각 명령어는 연산 코드와 피연산자로 구분된 2비트로 구성됩니다(레지스터, 메모리 셀 및 직접 데이터를 사용한 조작이 가능함). PIC7.2CXX 마이크로컨트롤러의 명령 시스템은 그림 2에 나와 있습니다. (569-XNUMX페이지의 표 XNUMX) PIC의 명령 실행 속도는 기존 단일 버스 Von Neumann 대신 듀얼 버스 Harvard 아키텍처를 사용하여 달성됩니다. 건축학. Harvard 아키텍처는 명령어와 데이터를 위한 별도의 버스와 주소 공간을 갖춘 레지스터 세트를 기반으로 합니다. 레지스터 세트는 I/O 포트, 메모리 위치 및 타이머와 같은 모든 소프트웨어 개체가 물리적으로 구현된 하드웨어 레지스터임을 의미합니다.

PIC16CXX의 데이터 메모리(RAM)는 8비트 너비를 가지며, 프로그램 메모리(PROM)는 PIC12C16X의 경우 5비트, PIC14CXX의 경우 16비트 너비를 갖습니다. Harvard 아키텍처를 사용하면 비트, 바이트 및 레지스터 작업의 고속 성능을 얻을 수 있습니다. 또한 Harvard 아키텍처에서는 현재 명령어가 동시에 실행되고 다음 명령어를 읽을 때 명령어의 파이프라인 실행이 가능합니다. 전통적인 Von Neumann 아키텍처에서는 명령과 데이터가 하나의 공유 또는 다중화 버스를 통해 전송되므로 파이프라이닝 가능성이 제한됩니다. 그림 3은 PIC16CXX의 듀얼 버스 구조의 블록 다이어그램을 보여줍니다. (2-536페이지의 그림 B) 보시다시피 PIC16CXX를 구성하는 내부 물리적 및 논리적 구성 요소는 지금까지 작업했던 다른 마이크로 컨트롤러와 유사합니다. 따라서 PIC용 프로그램 작성은 다른 프로세서보다 어렵지 않습니다. 논리, 그리고 논리만...

물론 Harvard 아키텍처와 넓은 명령 폭 덕분에 PIC용 코드를 다른 마이크로 컨트롤러보다 훨씬 더 컴팩트하게 만들고 프로그램 실행 속도를 크게 높일 수 있습니다.

PIC REGISTER SET PIC가 작업할 수 있는 모든 소프트웨어 개체는 물리적 레지스터입니다. PIC의 작동 방식을 이해하려면 PIC에 어떤 레지스터가 있고 각 레지스터를 어떻게 사용하는지 이해해야 합니다. 그림 4는 PIC16C84의 모든 레지스터를 보여줍니다. (페이지의 그림 3.7.1.

2-541) 일련의 작동 레지스터부터 시작하겠습니다. 이 세트는 간접 주소 지정 레지스터(f0), 타이머/카운터 레지스터(f1), 프로그램 카운터(f2), 상태 워드 레지스터(f3), 선택 레지스터(f4) 및 I/O 레지스터(f5)로 구성됩니다. , f6).

이러한 레지스터는 마이크로컨트롤러의 프로그래밍 가능 개체 중 대부분을 나타내기 때문에 이러한 레지스터를 사용하는 방법을 이해하는 것이 절대적으로 필요합니다. "내부적으로 수행되는 방법"보다는 "제어 방법"을 대부분 이해해야 하므로 각 레지스터의 가능한 용도를 보여주는 매우 간단한 예를 포함했습니다.

f0...간접 주소 지정 레지스터 IND0 간접 주소 지정 레지스터 f0은 물리적으로 존재하지 않습니다. 선택 레지스터 f4를 사용하여 64개의 가능한 레지스터 중 하나를 간접적으로 선택합니다.

f0을 사용하는 모든 명령은 실제로 f4가 가리키는 데이터 레지스터에 액세스합니다.

f1...TIMER/COUNTER REGISTER TMR0 타이머/카운터 레지스터 TMR0은 다른 레지스터처럼 쓰고 읽을 수 있습니다. TMR0은 RTCC 핀에 적용된 외부 신호에 의해 증가되거나 명령 주파수에 해당하는 내부 주파수에 의해 증가될 수 있습니다.

타이머/카운터의 주요 용도는 외부 이벤트 수를 계산하고 시간을 측정하는 것입니다. 외부 또는 내부 소스의 신호는 PIC에 내장된 프로그래밍 가능 분배기를 사용하여 사전 분할될 수도 있습니다.

f2...PROGRAM COUNTER PCL 프로그램 카운터(PC)는 14비트 명령어를 포함하는 프로그램 ROM 셀의 일련의 주소를 생성하는 데 사용됩니다. PC에는 13비트 용량이 있어 8Kx14 ROM 셀의 주소를 직접 지정할 수 있습니다. 그러나 PIC16C84의 경우 물리적으로 1K 셀만 사용할 수 있습니다. PC의 하위 8비트는 f2 레지스터를 통해 쓰고 읽을 수 있으며, 상위 5비트는 주소 0Ah를 갖는 PCLATCH 레지스터에서 로드됩니다.

f3...상태 워드 레지스터 상태 워드 레지스터는 대부분의 마이크로프로세서에 있는 PSW 레지스터와 유사합니다. 여기에는 캐리, XNUMX진수 및 XNUMX 비트뿐만 아니라 활성화 모드 비트 및 페이징 비트도 포함됩니다.

f4...FSR 선택 레지스터 이미 언급한 바와 같이 FSR 선택 레지스터는 간접 주소 지정 레지스터 f0과 함께 사용되어 64개의 가능한 레지스터 중 하나를 간접적으로 선택합니다. 물리적으로 36Ch~0Fh 주소에 위치한 2개의 사용자 RAM 레지스터와 다양한 주소에 위치한 15개의 서비스 레지스터가 사용됩니다.

f5, f6... I/O 레지스터 PORTA, PORTB 레지스터 f5 및 f6은 PIC16C84에서 사용할 수 있는 두 개의 I/O 포트에 해당합니다. 포트 A에는 5비트 PA4-PA0이 있으며, 이는 주소 85h를 갖는 TRISA 레지스터를 사용하여 입력 또는 출력으로 개별적으로 프로그래밍할 수 있습니다. 포트 B에는 8비트 PB7-PB0이 있으며 주소 86h의 TRISB 레지스터를 사용하여 프로그래밍됩니다. TRIS 레지스터 비트의 작업 1은 해당 포트 비트를 입력으로 프로그래밍합니다. 포트를 읽을 때 출력의 즉각적인 상태를 읽고, 포트에 쓸 때 버퍼 레지스터에 쓰기가 발생합니다.

f8, f9... EPROM은 EEDATA, EEADR을 등록합니다. PIC16C84에는 EEDATA 데이터 레지스터와 EEADR 주소 레지스터를 사용하여 읽고 쓸 수 있는 64바이트 크기의 전기적으로 재프로그램 가능한 ROM이 내장되어 있습니다. 새 바이트 쓰기는 약 10ms 동안 지속되며 내장 타이머에 의해 제어됩니다. 쓰기 및 읽기 제어는 주소 1h를 갖는 EECON88 레지스터를 통해 수행됩니다. 기록에 대한 추가적인 제어를 위해서는 주소가 2h인 EECON89 레지스터를 사용하십시오.

범용 레지스터 범용 레지스터는 주소 0Ch-2Fh에 위치한 정적 RAM입니다. PIC16C84에서는 총 36개의 RAM 셀을 사용할 수 있습니다.

특수 레지스터 W, INTCON, OPTION 마지막으로 특수 PIC 레지스터를 살펴보겠습니다. 여기에는 대부분의 명령에서 누산기 레지스터로 사용되는 작업 레지스터 W와 INTCON 및 OPTION 레지스터가 포함됩니다. INTCON 인터럽트 레지스터(주소 0Bh)는 인터럽트 모드를 제어하는 ​​데 사용되며 다양한 소스 및 인터럽트 플래그의 인터럽트 활성화 비트를 포함합니다. OPTION 모드 레지스터(주소 81h)는 프리스케일러 및 타이머/카운터의 신호 소스를 설정하고 프리스케일러 분할 비율, RTCC 신호의 활성 에지 및 인터럽트 입력을 설정하는 데 사용됩니다. 또한 OPTION 레지스터를 사용하면 입력으로 프로그래밍된 포트 B 비트에 대한 부하 저항을 활성화할 수 있습니다.

감시 타이머 WDT 감시 타이머 WDT는 무작위 프로그램 오류로 인한 치명적인 결과를 방지하도록 설계되었습니다. 또한 누락된 펄스 감지기와 같은 타이밍과 관련된 애플리케이션에도 사용할 수 있습니다. 워치독 타이머를 사용한다는 개념은 타임아웃이 만료되고 프로세서가 재설정되기 전에 프로그램의 제어나 외부 영향을 받아 정기적으로 타이머를 재설정하는 것입니다. 프로그램이 정상적으로 실행 중인 경우 프로세서가 재설정되는 것을 방지하려면 CLRWDT watchdog 재설정 명령을 정기적으로 실행해야 합니다. 마이크로프로세서가 실수로 프로그램 범위를 벗어나거나(예: 전원 공급 회로의 강한 간섭으로 인해) 프로그램의 일부에 멈춘 경우 워치독 타이머 재설정 명령이 충분한 시간 내에 실행되지 않을 가능성이 높습니다. 전체 프로세서 재설정이 발생하여 모든 기능, 레지스터가 초기화되고 시스템이 작동 상태가 됩니다.

PIC16C84의 워치독 타이머는 외부 부품이 필요하지 않으며 내장된 RC 발진기에서 실행되며 프로세서 클럭 속도가 없어도 생성이 멈추지 않습니다. 일반적인 감시 타이머 기간은 18ms입니다. 프리스케일러를 워치독 타이머에 연결하고 기간을 최대 2초까지 늘릴 수 있습니다.

감시 타이머의 또 다른 기능은 프로세서를 저전력 모드에서 켜는 것입니다. 이 모드에서는 프로세서가 SLEEP 명령으로 전환됩니다. 이 모드에서 PIC16C84는 약 1μA의 매우 적은 전류를 소비합니다. 버튼을 누르는 외부 이벤트, 센서 트리거 또는 감시 타이머를 통해 이 모드에서 작동 모드로 전환할 수 있습니다.

CLOCK GENERATOR PIC 제품군의 마이크로 컨트롤러의 경우 XNUMX가지 유형의 클럭 생성기를 사용할 수 있습니다. XT 석영 공진기 HS 고주파 석영 공진기 LP 미세 소비 석영 공진기 RC RC 체인 사용되는 클록 생성기 유형은 프로그래밍 응용 프로세스에서 지정됩니다. 마이크로 회로. XT, HS 및 LP 옵션이 지정된 경우 석영 또는 세라믹 공진기 또는 외부 클럭 소스가 미세 회로에 연결되고 RC 옵션이 지정된 경우 저항과 커패시터가 연결됩니다. 물론 세라믹, 특히 석영 공진기는 훨씬 더 정확하고 안정적이지만 높은 타이밍 정확도가 필요하지 않은 경우 RC 생성기를 사용하면 장치의 비용과 크기를 줄일 수 있습니다.

RESET CIRCUIT PIC 제품군의 마이크로컨트롤러는 발전기 시작 타이머와 함께 내부 전원 공급 재설정 회로를 사용하므로 대부분의 상황에서 기존 저항기 및 커패시터 없이 작동할 수 있습니다.

MCLR 입력을 전원에 연결하기만 하면 됩니다. 전원을 켤 때 임펄스 노이즈나 서지가 발생할 수 있는 경우 100-300Ω 직렬 저항을 사용하는 것이 좋습니다. 전력이 매우 느리게 상승하거나(70ms보다 느림) 매우 낮은 클럭 속도로 실행 중인 경우 기존 저항 및 커패시터 재설정 회로를 사용해야 합니다.

이론부터 실천까지…

우리는 PIC 마이크로컨트롤러 제품군을 구성하는 주요 요소에 대해 간략하게 알아봤습니다. 이제 실제 연습으로 넘어 갑시다.

우리는 짧은 프로그램을 작성하고, 조립하고, 마이크로회로에 작성하고 무슨 일이 일어나는지 지켜볼 것입니다.

이를 위해서는 다음이 필요합니다: - PIC16C84 칩; - MPALC 어셈블러; - PROPIC 프로그래머; - 전원 공급 장치 DC 또는 AC 18-36V; - 디스플레이 장치가 있는 브레드보드.

주요 PIC16C84 명령의 작동을 시연하는 데 사용할 표시 장치의 개략도는 그림 5에 나와 있습니다. (그림을 그려야 합니다.) 보시다시피 장치는 전류 제한 기능이 있는 8개의 LED로 구성됩니다. 저항 및 주파수 설정 요소. PIC 마이크로컨트롤러 제품군의 각 핀은 추가 증폭기 없이 LED를 직접 제어할 수 있습니다.

PIC는 무엇입니까?

예제에 사용될 기본 코드에 대한 설명부터 시작하겠습니다. 프로젝트 코드 작성을 시작할 때 헤더 섹션(ORG 0 표현식이 포함된 줄까지의 모든 코드)에서 애플리케이션의 세부 사항을 고려해야 합니다. 헤더 섹션에서는 프로젝트에 사용되는 모든 리소스(포트, 비트 및 바이트 변수, 레지스터)에 대한 논리적 이름을 정의합니다. 헤더는 또한 I/O 포트를 설정하므로 다음 명령을 실행한 후 포트 A와 B의 모든 비트가 출력으로 설정됩니다. MOVLW INITA MOVWF TRISA MOVLW INITB MOVWF TRISB 전원이 켜지면 PIC16C84는 포트 A와 B의 모든 비트를 설정합니다. 포트 A와 B를 입력하고 000h번지부터 프로그램을 실행하기 시작합니다. 기본 코드는 그림 6에 나와 있습니다. (그려야 함) 다음과 같은 것: ; 데모 프로그램의 기본 코드 예; 목록 P=16C84, E=2 ; ; 헤더 섹션 ; ; 작동 레지스터 설명 TMR0 EQU 01h PC EQU 02h STATUS EQU 03h FSR EQU 04h ; I/O 레지스터 CNTRLPORT EQU 05h DATAPORT EQU 06h ; RAM 셀 SCRATCH EQU 0Ch DIGIT EQU 0Dh ; 레지스터 비트 STATUS C EQU 0h DC EQU 1h Z EQU 2h PD EQU 3h TO EQU 4h RP EQU 5h ; 제어 레지스터 TRISA EQU 85h TRISB EQU 86h; 입/출력 포트용 초기화 워드 INITA EQU B'00000000' INITB EQU B'00000000' ; ; 작업 섹션; ; 실행 코드 시작 ORG 0 GOTO BEGIN ; ORG 100h BEGIN MOVLW INITA MOVWF TRISA MOVLW INITB MOVWF TRISB ; ; 여기에 예제 코드를 붙여넣으세요. 끝 ; 기본 코드를 논의하는 동안 필요에 따라 그림 4를 다시 참조하세요. 첫째, ";" 기호로 시작하는 모든 줄은 어셈블러에서 주석으로 인식됩니다. TMR0 표현식으로 넘어가겠습니다. 우리는 어셈블러에게 TMR0이라는 단어가 나타날 때마다 값 01h(01진수 XNUMX)를 대체해야 한다고 말했습니다. "EQU"라는 단어는 평등을 의미합니다. 따라서 우리는 TMR0에 1h 값을 할당했습니다. 그림 4에서 볼 수 있듯이 TMR0 레지스터는 실제로 주소 1h를 가지고 있습니다. TMR01 레지스터의 주소를 지정하려고 할 때마다 0h를 사용할 수 있지만 01h는 항상 RTCC를 의미한다는 점을 기억해야 하기 때문에 디버그하기가 훨씬 더 어렵습니다. 01h와 동일한 데이터가 있을 수도 있습니다. 기호 이름을 사용하면 모호함이 사라지고 소스 텍스트를 더 쉽게 읽을 수 있습니다. PC, STATUS 및 FSR 레지스터를 정의하는 표현식도 볼 수 있습니다. PC 이름은 레지스터 주소 02h에 해당하고, STATUS 이름은 레지스터 주소 03h에 해당하며, FSR 이름은 레지스터 주소 04h에 해당하는 식입니다. 또한 I/O 포트 이름인 CNTRLPORT(05h) 및 DATAPORT(06h)를 설정했습니다. RAM 셀에도 이름이 있을 수 있습니다. 주소가 0Ch인 셀에는 "SCRATCH"라는 이름을 선택하고 주소가 0Dh인 셀에는 "DIGIT"라는 이름을 선택했습니다. 이 글을 끝까지 읽어보시면, 이 이름은 정의되어 있지만 우리는 어디서든 PC를 직접적으로 사용하지 않는다는 것을 알 수 있습니다. 여기에는 실수가 없습니다. 이름을 정의한 다음 사용하지 않을 수 있습니다. 물론 이전에 정의되지 않은 이름은 사용할 수 없습니다. 이에 대해 너무 걱정하지 마십시오. 어셈블러의 임무는 텍스트를 확인하여 모든 규칙이 충족되는지 확인하는 것이며, 일치하지 않는 것이 있으면 오류 메시지를 받게 됩니다. 레지스터 이름을 지정할 수 있을 뿐만 아니라 레지스터 내의 개별 비트에도 이름을 지정할 수 있습니다. STATUS 레지스터를 설정하는 섹션에 주목하십시오. 그림 7은 STATUS 레지스터의 구성을 보여줍니다. (3.9.1-2페이지의 그림 544) C 또는 CARRY가 STATUS 상태 워드의 0 비트이기 때문에 기호 C에는 XNUMXh 값이 할당됩니다. CARRY 비트(비트 0)를 확인해야 할 때마다 미리 정의된 문자 "C"를 사용합니다. 비트 2 또는 ZERO 비트에 액세스할 때마다 02h 대신 문자 "Z"를 사용합니다. 레지스터 비트를 모두 사용하지 않더라도 레지스터 비트의 전체 구조를 정의할 수 있습니다. 이제 레지스터가 어떻게 설명되는지 명확해졌으며 실행 가능한 코드로 넘어갈 수 있습니다. 코드 실행을 시작하기 전에 표현식 ORG 0을 설정해야 합니다. 이는 이 표현식 다음의 코드가 EEPROM 주소 XNUMX에서 시작한다는 것을 어셈블러에 표시합니다. "ORG" 표현은 EEPROM 크기 내의 다른 주소에 코드 세그먼트를 배치하는 데 사용됩니다. 또 다른 ORG 표현식은 ORG 100h 표현식에 지정된 대로 주소 100h를 갖는 BEGIN 레이블 앞에 배치됩니다. 실행 가능한 코드는 END 지시문으로 끝나야 합니다. 즉, 이 지시문 뒤에는 실행 가능한 명령이 없습니다. 전원을 켜면 PIC16C84는 000h 주소로 이동합니다. 프로세서에 의해 실행될 첫 번째 명령은 GOTO BEGIN 명령으로, 제어를 주소 100h로 전송하고 추가 작업은 이 주소에서 계속됩니다. BEGIN은 어셈블러가 주소 참조로 사용하는 사용자 선택 가능한 레이블 이름(레이블은 항상 첫 번째 줄 위치에서 시작해야 함)입니다. 작업 중에 어셈블러는 BEGIN 레이블의 위치를 ​​결정하고 이 이름이 다시 나타나면 레이블 주소가 대체된다는 것을 기억합니다. CALL 및 GOTO 명령은 소스 텍스트의 참조에 레이블을 사용합니다. 이제 프로세서에서 실행되는 다음 명령을 살펴보겠습니다. MOVLW INITA 명령은 INITA라는 이름에 할당된 값을 사용하여 작업 레지스터 W를 로드합니다. 이 값은 헤더에 명시되어 있으며 B'00000000', 즉 00h와 같다. 문자 B'는 데이터가 이진 형식으로 제공됨을 의미합니다. 같은 자리에 0(0진수)이나 XNUMXh(XNUMX진수)를 쓰면 같은 결과를 얻을 수 있습니다. 레지스터의 비트를 사용한 작업이 예상되는 경우 이진 표현을 사용하는 것이 더 편리합니다. 다음 MOVWF TRISA 명령은 W 작업 레지스터의 값을 TRISA 포트 A 구성 제어 레지스터로 로드합니다. 이 레지스터의 비트를 0으로 설정하면 포트 A의 해당 비트가 출력임을 지정합니다. 우리의 경우 포트 A의 모든 비트는 출력에 의해 설정됩니다. 포트 A에는 5비트만 있고 TRISA 레지스터에 기록된 값 중 역시 3비트인 상위 5비트는 사용되지 않습니다. 예를 들어 포트 A의 최하위 비트를 입력으로 설정하려면 레지스터 설명 섹션의 INITA 값을 B'00000001'로 설정합니다. 프로그램이 실행되면서 예를 들어 양방향 전송 중에 개별 포트 비트의 할당을 다시 정의해야 하는 경우 INITA 및 INITB에서 했던 것처럼 설명 섹션에서 필요한 모든 구성 단어를 설정하는 것이 가장 편리합니다. 다음 두 명령 MOVLW INITB 및 MOVWF TRISB는 포트 B 구성을 정의합니다. 우리의 경우 INITB도 0h이므로 MOVLW INITB 명령을 작성하지 않음으로써 비용을 절약할 수 있습니다. 그러나 나중에 한 비트의 할당을 변경해야 하는 경우 감지하기 어려운 오류가 발생할 수 있기 때문에 이렇게 하지 않았습니다. 한 포트에서 XNUMX비트만 변경하는 대신 두 포트에서 동일한 번호의 두 비트가 변경됩니다. 따라서 프로그램이 완료될 때까지 이러한 절약을 수행하는 것은 바람직하지 않습니다. 하지만 마지막에는 코드 최적화 단계에서 이러한 반복을 제거할 수 있습니다. 우리는 이미 무엇을 했습니까? 1. EQU 라인을 사용하여 우리는 어떤 기호 이름을 사용할 것인지 어셈블러에 알렸습니다. 2. 재설정 벡터를 주소 000h로 설정했습니다. 3. 주소 100h의 BEGIN 레이블에서 프로그램 실행 시작 주소를 설정합니다. 4. 포트 A와 B의 모든 비트를 출력으로 구성했습니다. 이제 주석 처리된 "여기에 예제 코드 삽입" 줄 대신 기본 코드의 머리 부분과 끝 부분 사이에 예제 코드를 삽입할 수 있습니다. 이 줄을 실제 명령으로 바꾸고, 결과 프로그램을 조립하고, 마이크로 회로에 쓰고, 마이크로 회로를 표시 장치가 있는 브레드보드로 옮기고 무슨 일이 일어나는지 살펴보겠습니다. 첫 번째 프로그램 첫 번째 프로그램에는 세 가지 명령만 필요합니다. MOVLW k MOVWF f GOTO k 우리는 이미 기본 코드의 헤더에 이러한 명령을 사용했습니다. MOVLW 명령어는 바이트 리터럴 또는 상수를 W 작업 레지스터에 로드합니다. 다음 MOVWF 명령은 작업 레지스터 W에서 지정된 레지스터 f로 바이트를 전송합니다. GOTO 명령은 주소 k로 제어를 전송합니다. 다음 프로그램은 작업 레지스터 W에 값 01010101을 쓴 다음 해당 내용을 포트 B에 출력합니다. 이 프로그램을 시작하면 XNUMX개의 LED가 빛나는 것을 볼 수 있습니다. MOVLW B'01010101' ;레지스터 W에 01010101 로드 MOVWF DATAPORT ;포트 B(DATAPORT)에 W 쓰기 GOTO $ ;영원히 루프 어셈블러 지시어 "$"는 프로그램 카운터(PC)의 현재 값을 의미합니다. 따라서 GOTO $ 명령은 현재 위치한 곳으로 이동한다는 의미입니다. 이 순환은 종료할 수 있는 방법(중단 외에는)이 없기 때문에 끝이 없습니다. GOTO $ 명령은 디버깅할 때 코드를 중지하는 데 자주 사용됩니다. 조립 MICROCHIP에서 무료로 배포하고 필요한 모든 기능을 포함하고 있는 MPALC 매크로 어셈블러를 사용하겠습니다. 다른 어셈블러를 사용하려면 해당 설명을 사용하여 프로그램을 어셈블하세요. MPALC 매크로 어셈블러를 실행하기 위한 명령줄은 매우 간단합니다. MPALC <source_text> [options] 여기서 <source_text>는 어셈블해야 하는 소스 텍스트가 포함된 파일 이름이며 상당히 많은 옵션이 있을 수 있습니다. 옵션에 대한 전체 설명은 /? 옵션을 사용하여 어셈블러에서 제공됩니다. 처음에는 단일 옵션을 지정할 필요가 없습니다. 우리가 해야 할 유일한 일은 프로그램이 작성된 프로세서 유형과 어셈블러가 생성해야 하는 오류 유형을 나타내는 것입니다. 이는 LIST 어셈블러 지시문을 사용하여 수행됩니다(그림 XNUMX). 6). 기본 소스 파일 확장자는 .ASM입니다. 다른 확장자를 명시적으로 지정해야 합니다. 따라서 그림 6에 표시된 텍스트가 포함된 EXAMPLE.ASM 파일을 가져와 어셈블러를 실행합니다. MPALC EXAMPLE 어셈블러의 결과로 파일은 다음 확장자를 사용하여 생성됩니다. * OBJ 개체 파일 * LST 목록 파일 * ERL 오류 및 경고 파일 * SYM 기호 파일 개체 파일은 16진수 형식으로 생성되며 칩에 작성해야 하는 코드가 포함되어 있습니다. 목록 파일에는 부팅 코드와 함께 프로그램의 전체 목록이 포함되어 있습니다. 오류 및 경고 파일은 조립 프로세스 중에 발생하는 모든 오류 및 경고를 기록합니다. 목록 파일에도 있습니다. 기호 파일에 기록된 기호 레이블 테이블은 디버거를 사용한 추가 작업을 위한 것입니다. 프로그램을 처리한 후 어셈블러는 "어셈블러에서 오류가 발견되지 않았습니다"라는 메시지를 생성해야 합니다. 이는 오류가 발견되지 않았음을 의미합니다. 오류 파일이 생성되지 않아야 합니다. 어셈블러에서 오류 메시지가 생성되거나 EXAMPLE.OBJ, EXAMPLE.LST 및 EXAMPLE.SYM 파일이 생성되지 않은 경우 모든 작업을 올바르게 수행했는지 다시 확인하세요. 프로그래밍 이제 칩에 기록해야 하는 개체 파일 EXAMPLE.OBJ가 생겼습니다. 녹음은 프로그래머와 PROPIC 프로그램을 사용하여 수행됩니다. PROPIC 프로그램을 시작하기 위한 명령줄은 어셈블러를 시작하기 위한 줄과 유사합니다: PROPIC <object_file> [options] 여기서 <object_file>은 어셈블러에서 생성된 개체 파일의 이름이고 옵션은 기록 모드를 결정합니다. 칩. 옵션 목록은 /?를 사용하여 표시됩니다. 어셈블러의 경우처럼 처음에는 단일 옵션을 지정할 필요가 없습니다. 프로그래머를 가져와 해당 케이블을 프린터 포트 커넥터(기기에 2개 또는 3개의 프린터 포트가 설치된 경우 첫 번째 프린터 포트)에 연결합니다.

PIC는 무엇입니까? PIC는 무엇입니까?

최대 18mA의 전류를 제공할 수 있는 36~100V DC 또는 AC의 전원을 사용하여 프로그래머에 연결합니다. PIC16C84 칩을 준비하되 아직 프로그래머 소켓에 삽입하지 마십시오. 이제 프로그래머를 시작할 수 있습니다:

PROPIC EXAMPLE { 여기에 프로그래머 프로그램의 작동 방식을 삽입해야 합니다. } 이제 프로그래밍된 마이크로회로가 생겼고 이것이 어떻게 작동하는지 볼 수 있습니다. 테스트

브레드보드를 ​​가져와 그림 5에 표시된 회로를 그 위에 조립합니다. 이 회로에는 중요한 부품이 없습니다. 모든 저항은 정격 전류가 30mA 이하인 LED의 공칭 값에서 +-10%의 편차를 가질 수 있습니다. PIC16C84 칩을 설치하려면 소켓을 사용하십시오. 회로에 전원을 공급하려면 마이크로 회로를 프로그래밍할 때 사용한 것과 동일한 전원 공급 장치를 사용할 수 있습니다. 5V 실험실 전원 공급 장치를 사용할 수도 있으며 이 경우 KR142EH5A 안정기, 다이오드 브리지 및 전해 커패시터가 필요하지 않으며 회로의 지점 5에 2V의 전압이 공급됩니다.

회로를 조립한 후 모든 것이 올바르게 조립되었는지, LED가 올바른 극성에 설치되었는지, 마이크로 회로에 대한 전원이 올바른 다리와 극성에 공급되는지 주의 깊게 확인하십시오. 프로그래밍된 칩을 가져와서 브레드보드의 소켓에 삽입하고 전원을 켜세요. 4개의 LED가 켜져야 합니다(각각). 첫 번째 프로그램이 작동합니다! 그림 명령 세트

이제 프로그램을 조립하고 마이크로 회로에 작성하고 브레드보드에서 테스트하는 방법을 배웠으므로 PIC 마이크로 컨트롤러 제품군에 대한 전체 명령 세트를 설명할 수 있습니다. 우리는 계속해서 PIC16C84에 초점을 맞출 것입니다. 그러나 우리가 이야기할 거의 모든 내용은 PIC 제품군의 다른 마이크로컨트롤러에 적용됩니다. 설명이 진행됨에 따라 특정 명령이 작동하는 방식을 더 잘 이해할 수 있도록 짧은 프로그램을 작성하겠습니다. 이러한 프로그램을 기본 코드에 삽입하고, 조합하고, 마이크로 회로에 작성한 다음, 마이크로 회로를 브레드보드에 삽입하여 작동 방식을 확인할 수 있습니다. 다음 지점에서 모든 것이 완전히 명확해지면 시도할 필요 없이 바로 다음 지점으로 이동합니다. 안돼

NOP 명령으로 설명을 시작하겠습니다. 이 명령은 아무 작업도 수행하지 않으므로 출력을 보기가 어렵습니다. 이 명령어는 일반적으로 시간 지연 루프에 사용되거나 프로그램의 특정 섹션의 실행 시간을 미세 조정하는 데 사용됩니다. CLRW

이 명령은 작업 레지스터 W를 지웁니다. 예제에 한 줄을 추가하고 모든 LED가 켜지는 것을 살펴보겠습니다.

MOVLW B'01010101' ;레지스터 W에 01010101 로드

CLRW ;레지스터 지우기 W

MOVWF DATAPORT ;포트 B(DATAPORT)에 W 쓰기

GOTO $ ;영원히 반복 CLRF f

CLRF는 CLRW가 작업 레지스터 W에 대해 수행하는 작업을 모든 레지스터에 대해 수행합니다. 다음 명령은 포트 B를 0h로 설정합니다.

CLRF DATAPORT ;포트 B 지우기 (DATAPORT) SUBWF f,d ADDWF f,d

임의의 레지스터에서 작업 레지스터 W를 뺍니다. f. 이 명령은 또한 STATUS 레지스터의 CARRY, DIGIT CARRY 및 ZERO 플래그를 설정합니다. 명령을 실행한 후 이러한 속성을 확인하고 결과가 0, 양수 또는 음수인지 확인할 수 있습니다. 쉼표 뒤의 d는 명령의 결과가 위치할 주소를 의미합니다. d=1이면 결과는 작업 레지스터 W에 저장되고, d=XNUMX이면 결과는 명령에 사용되는 레지스터 f에 기록됩니다.

이 예에서는 값 0FFh가 SCRATCH 레지스터에 로드되고 값 01h가 W 레지스터에 로드됩니다. 그런 다음 SUBWF 명령이 실행되고 결과가 LED에 표시됩니다.

MOVLW 0FFh ;레지스터 W에 0FFh 로드

MOVWF SCRATCH ; W의 내용을 SCRATCH 레지스터에 로드

MOVLW 01h ;레지스터 W에 01h 로드

SUBWF SCRATCH,0 ;뺄셈 수행 LED는 11111110을 표시해야 합니다. 여기서 1은 어두운 LED에 해당하고 0은 켜진 LED에 해당합니다.

ADDWF 명령은 정확히 동일한 방식으로 작동합니다. 작업 레지스터 W를 레지스터 f에 추가하고 동일한 특성을 설정합니다. 다음 예에서는 ADDWF 명령의 작동을 보여줍니다.

MOVLW 0h ;레지스터 W에 0 로드

MOVWF SCRATCH ; W의 내용을 SCRATCH 레지스터에 로드

MOVLW 1h ;레지스터 W에 01h 로드

ADDWF SCRATCH,0 ;추가 수행 LED에 00000001이 표시되어야 합니다.

빼기 예제에서 FFh 값 앞에는 "0"이 붙습니다. 어셈블러에서 "0" 기호는 레이블이 아니라 숫자를 의미합니다. 기호 0이 없으면 어셈블러는 이 프로그램에 존재하지 않는 FFh라는 이름의 레이블을 찾기 시작하므로 오류가 발생합니다. 값 0FF 뒤에 나오는 문자 "h"는 값이 XNUMX진수 형식으로 지정됨을 의미합니다. SUBLWk 추가Wk

이 두 명령은 작업 레지스터 W와 명령에 지정된 바이트 상수 사이에서 작업이 수행된다는 점을 제외하면 위에서 설명한 것과 정확히 동일하게 작동합니다. SUBLW 명령은 상수 k에서 작업 레지스터 W를 빼고, ADDLW 명령은 작업 레지스터 W를 상수 k에 더합니다. 이 명령은 CARRY, DIGIT CARRY 및 ZERO 플래그도 설정합니다. 명령의 결과는 작업 레지스터 W에 저장됩니다. 다음 예에서는 SCRATCH를 5만큼 감소시킵니다.

MOVLW 0FFh ;레지스터 W에 0FFh 로드

MOVWF SCRATCH ; W의 내용을 SCRATCH 레지스터에 로드

SUBLW 05h ;작업 레지스터에서 5를 뺍니다.

MOVWF SCRATCH ;새 콘텐츠 로드 SCRATCH LED에 11111010이 표시되어야 합니다. DECF f,d INCF f,d

DECF 명령어는 지정된 레지스터를 1만큼 감소시키고 INCF는 지정된 레지스터를 1만큼 증가시킵니다. 결과는 지정된 레지스터(d=1의 경우) 또는 작업 레지스터 W(d=0의 경우)에 다시 배치될 수 있습니다. 이러한 명령을 실행한 결과 STATUS 레지스터에 ZERO 속성이 설정될 수 있습니다. 다음은 이러한 명령을 사용하는 예입니다.

MOVLW 0FFh ;레지스터 W에 0FFh 로드

MOVWF SCRATCH ; W의 내용을 SCRATCH 레지스터에 로드

DECF SCRATCH,0 ;SCRATCH를 1만큼 감소

이 예에서는 SCRATCH를 0에서 1로 증가시킵니다.

CLRF 스크래치 ;스크래치 지우기

INCF SCRATCH,0 ;SCRATCH를 1만큼 증가 IORWF f,d ANDWF f,d XORWF f,d

이 세 가지 명령어는 논리 연산 OR, AND 및 EXCLUSIVE OR을 수행합니다. 논리 추가 연산 OR은 레지스터의 개별 비트를 설정하는 데 가장 자주 사용됩니다. 이 비트들은 논리 곱셈 AND 연산에 의해 클리어되며, 동일한 비트에 대해 EXCLUSIVE OR 연산을 수행하면 결과는 0이 됩니다. 레지스터. 다음 절차에서는 IORWF 명령을 사용하여 포트 B에서 비트 1을 설정합니다.

CLRF DATAPORT ;포트 B 지우기

MOVLW B'00000010' ;레지스터 W에 마스크 설정

IORWF DATAPORT,1 ;마스크 W를 사용하여 포트 B에 비트를 설정합니다.

GOTO $ ;영원히 루프 LED에 00000010이 표시되어야 합니다. 이제 ANDWF 명령을 사용하여 2비트를 재설정해 보겠습니다.

MOVLW B'11111111' ;레지스터 W에 0FFh 로드

MOVWF DATAPORT ;포트 B의 모든 비트를 설정합니다.

MOVLW B'00000101' ;레지스터 W에 마스크 설정

ANDWF DATAPORT,1 ;마스크 W를 사용하여 포트 B의 비트 지우기

GOTO $ ;영원히 루프 LED에 00000101이 표시되어야 합니다.

SCRATCH 레지스터를 사용했고 그것이 04h 값과 같은지 알고 싶다고 가정해 보겠습니다. 이는 XORWF 명령을 사용하는 편리한 경우입니다.

MOVLW 04h ;레지스터 W에 04h 로드

MOVWF SCRATCH ; 레지스터 W를 SCRATCH에 로드

XORWF SCRATCH,0 ;W와 SCRATCH가 같은지 확인 SCRATCH와 W가 동일하므로 XORWF 연산의 결과는 XNUMX입니다(모든 LED가 켜짐). STATUS 레지스터는 실제 프로그램이 확인하고 처리할 수 있는 ZERO 비트를 설정합니다. IORLW k ANDLW k XORLW k

이 세 가지 명령은 작업 레지스터 W와 명령에 지정된 마스크 사이에서 작업이 수행된다는 점을 제외하고 위에서 설명한 해당 명령과 동일한 작업을 수행합니다. 명령의 결과는 작업 레지스터 W에 저장됩니다. 예:

MOVLW 0FFh ;레지스터 W에 0FFh 로드

ANDLW 040h ;6번째 비트를 그대로 둡니다. LED에 01000000이 표시됩니다.

MOVLW 10h ;레지스터 W에 10h 로드

IORLW 09h ; 비트 0과 3을 설정하면 LED에 00011001이 표시됩니다.

MOVLW B'00100000' ;레지스터 W에 40h 로드

XORLW B'11111111' ;invert W LED에 11011111이 표시됩니다. MOVF f,d

이 명령은 주로 레지스터를 작업 레지스터 W(d=0)로 전송하는 데 사용됩니다. d=1로 설정하면 이 명령은 레지스터를 자체적으로 로드하지만 STATUS 레지스터의 ZERO 비트는 레지스터 내용에 따라 설정됩니다. 예를 들어 SCRATCH 레지스터 0Fh를 로드한 다음 SCRATCH 레지스터를 작업 레지스터 W에 로드하려고 합니다.

MOVLW 0Fh ;작업 레지스터 W에 0Fh 로드

MOVWF SCRATCH ; 레지스터 W를 SCRATCH에 로드

CLRW ;W 지우기

MOVF SCRATCH,0 ;SCRATCH를 W 레지스터에 로드 프로그램 실행 중에 SCRATCH 레지스터가 XNUMX인지 확인하려면 다음 명령을 실행할 수 있습니다.

MOVF SCRATCH,1 조건이 참(SCRATCH = 0h)이면 STATUS 레지스터의 ZERO 비트가 설정됩니다. COMF f,d

이 명령은 주어진 레지스터를 반전시킵니다. d=0이면 결과가 작업 레지스터 W에 입력되고, d=1이면 지정된 레지스터의 내용이 반전됩니다. 예를 들어 값 01010101을 반전해 보겠습니다.

MOVLW B'01010101' ;레지스터 W에 01010101 로드

MOVWF SCRATCH ; 레지스터 W를 SCRATCH에 로드

COMF SCRATCH,0 ;invert SCRATCH LED에 10101010이 표시됩니다. DECFSZ f,d INCFSZ f,d

PIC 어셈블러에 대한 경험이 있으면 이러한 명령을 자주 사용하게 될 것입니다. d=1일 때 DECFSZ 명령은 0씩 감소하고 INCFZ는 지정된 레지스터를 XNUMX만큼 증가시키고 레지스터가 XNUMX이 되면 다음 명령을 건너뜁니다. d=XNUMX일 때 결과는 W 레지스터에 기록되고 작업 레지스터 W가 XNUMX이 되면 다음 명령을 건너뜁니다. 이 명령은 시간 지연, 카운터, 루프 등을 생성하는 데 사용됩니다. 다음은 루프를 사용하는 일반적인 예입니다. START

MOVLW 0FFh ;레지스터 W에 FFh 로드

MOVWF SCRATCH ;W 레지스터를 SCRATCH LOOP에 로드

DECFSZ SCRATCH,1 ;SCRATCH를 1만큼 감소

GOTO LOOP; 그리고 = 0까지 되돌아갑니다.

MOVF DIGIT ; DIGIT 레지스터를 W에 로드

MOVWF DATAPORT ;LED로 출력

DECF DIGIT,1 ;레지스터 DIGIT를 1씩 감소

GOTO START ;처음으로 이동 결과적으로 LED는 서로 다른 주파수로 깜박입니다. 낮은 순서의 LED가 가장 자주 깜박이고 높은 수준의 LED가 가장 적게 깜박입니다. 4MHz의 클록 주파수에서 상위 LED의 깜박임 주파수는 약 8Hz이며, 이후의 각 LED는 두 배 더 자주 깜박입니다. 이제 우리가 어떻게했는지 알아 봅시다. 여기서 DECFSZ 명령은 DECFSZ 및 GOTO LOOP라는 두 가지 명령으로 구성된 지연 루프에서 작동합니다. 이전에 SCRATCH 레지스터를 0FFh 값으로 로드했으므로 이 루프는 SCRATCH가 255이 될 때까지 4번 실행됩니다. 1MHz의 클록 주파수에서 이는 2μsec/명령 * 255개 명령 * 510 = 1μsec의 지연을 제공합니다. 우리는 사전에 DIGIT 레지스터에 아무 것도 쓰지 않았으므로 첫 번째 패스에서 LED에 출력되는 값이 있을 수 있습니다. 그런 다음 DIGIT 레지스터가 256씩 감소하고 사이클이 처음부터 반복됩니다. 결과적으로 DIGIT 레지스터는 130주기의 모든 값을 반복합니다. 약 XNUMXms 안에.

동일한 코드를 INCFSZ 명령과 함께 사용하여 SCRATCH 레지스터에 로드된 값을 FFh에서 0h로 바꿀 수 있습니다. DECF 명령을 INCF 명령으로 바꾸면 LED가 같은 방식으로 깜박입니다. SWAPF f,d

이 명령은 모든 레지스터의 니블을 교체합니다. 다른 명령과 마찬가지로 d=0이면 결과가 작업 레지스터 W에 기록되고, d=1이면 레지스터에 남아 있습니다. 다음은 이 명령을 사용하는 간단한 예입니다.

MOVLW B'00001111' ;레지스터 W에 0Fh 로드

MOVWF SCRATCH ; 레지스터 W를 SCRATCH에 로드

SWAPF SCRATCH,0 ;니블 변경 LED에 11110000이 표시됩니다. RRF f,d RLF f,d

PIC 어셈블러에는 두 가지 시프트 명령어가 있습니다. RRF 레지스터의 CARRY 비트를 통한 오른쪽 시프트와 RRF 레지스터의 CARRY 비트를 통한 왼쪽 시프트입니다. 다른 명령과 마찬가지로 d=0이면 시프트 결과가 W 레지스터에 기록되고, d=1이면 레지스터에 남아 있습니다. 시프트 명령어는 곱셈과 나눗셈 연산을 수행하고 직렬 데이터 전송 및 기타 목적으로 사용됩니다. 모든 경우에 8비트 레지스터에서 이동된 비트는 이동 방향에 따라 STATUS 레지스터의 CARRY 비트에 기록되고 CARRY 비트는 레지스터의 다른 끝에 기록됩니다. 왼쪽으로 이동하면 레지스터의 최하위 비트에 RLF CARRY가 기록되고, 오른쪽으로 이동하면 레지스터의 최상위 비트에 RRF CARRY가 기록됩니다.

CLRF STATUS ;STATUS 레지스터 지우기

MOVLW 0FFh ;레지스터 W에 0FFh 로드

MOVWF SCRATCH ; 레지스터 W를 SCRATCH에 로드

RRF SCRATCH,0 ;오른쪽으로 이동 CARRY가 최상위 비트에 로드되므로 LED에 01111111이 표시되어야 합니다. 이제 왼쪽으로 이동해 보겠습니다.

CLRF STATUS ;STATUS 레지스터 지우기

MOVLW 0FFH ;레지스터 W에 0FFh 로드

MOVWF SCRATCH ; 레지스터 W를 SCRATCH에 로드

RLF SCRATCH,1 ;왼쪽으로 이동 LED에 11111110이 표시되어야 합니다. BCF f,b BSF f,b

BCF 비트 지우기 및 BSF 비트 설정 명령은 레지스터의 개별 비트에 대해 작업하는 데 사용됩니다. 매개 변수 b는 작업이 수행되는 비트 수를 의미하며 0에서 7까지의 값을 가질 수 있습니다. BCF 명령을 사용하여 LED를 켜 보겠습니다.

MOVLW 0FFh ;레지스터 W에 0FFh 로드

MOVWF DATAPORT ;LED 끄기

BCF DATAPORT,7 ;포트 B의 비트 7 지우기

GOTO $ ;loop 영원히 이렇게 하면 비트 7에 해당하는 LED가 켜집니다. 마스크와 ANDWF 명령을 사용하여 비슷한 작업을 수행했다는 점을 기억하세요. 차이점은 ANDWF 및 IORWF 명령은 마스크의 예비 형성과 이를 일부 레지스터에 저장해야 하지만 동시에 여러 비트를 동시에 설정하거나 지울 수 있다는 것입니다. BCF 및 BSF 명령어는 XNUMX비트로만 작동합니다. 또한 BCF 및 BSF 명령어는 STATUS 상태 레지스터를 변경하지 않으므로 이후에 상태 레지스터를 확인할 필요가 없는 경우에 자주 사용됩니다. BTFSC f,b BTFSS f,b

조건부 점프 명령어 BTFSC 및 BTFSS는 레지스터에서 주어진 비트의 상태를 확인하고 결과에 따라 다음 명령어를 건너뛸지 여부를 결정합니다. BTFSC 명령은 지정된 비트가 지워진 경우 명령을 건너뛰고, BTFSS 명령은 설정된 경우 명령을 건너뜁니다. 간단한 예는 다음과 같습니다.

MOVLW 0FFh ;레지스터 W에 0FFh 로드

MOVWF DATAPORT ;LED 끄기

MOVLW B'00000001' ;레지스터 W에 01h 로드

MOVWF SCRATCH ;W 레지스터를 SCRATCH LOOP에 로드

BTFSS CNTRLPORT,0 ;CNTRLPORT의 비트 0을 확인하세요.

GOTO LOOP ;비트 0이 설정될 때까지 대기

BCF DATAPORT,7 ;LED 켜기

GOTO $ ;loop 영원히 이 예에서는 포트 A(칩의 핀 0)의 비트 17을 확인하고 이 핀이 높게 설정되면 LED가 켜집니다. 이 예에서는 BTFSS를 BTFSC로 바꿔보세요. 포트 A의 비트 0이 낮아지면 LED가 켜집니다.

앞서 STATUS 레지스터에서 상태 비트를 확인하는 기능에 대해 언급했습니다. 이 작업은 BTFSS 및 BTFSC 명령을 사용하여 수행됩니다.

;CARRY 비트 확인 중

BTFSS STATUS,C ;C가 설정된 경우 GOTO를 건너뜁니다.

어디로든 이동하세요 ; ZERO 비트도 같은 방식으로 검사됩니다.

;ZERO 비트 확인 중

BTFSS STATUS,Z ;Z가 설정된 경우 GOTO를 건너뜁니다.

어디로든 이동하세요 ; 이러한 예를 매우 자주 사용하게 될 것이라고 말해도 무방합니다. k RETURN에 전화하세요.

이 두 명령은 서브루틴과 함께 작동하도록 설계되었습니다. CALL 명령은 명령에 지정된 주소의 하위 프로그램으로 이동하는 데 사용되고 RETURN 명령은 하위 프로그램에서 복귀하는 데 사용됩니다. 두 명령 모두 2주기로 실행됩니다. CALL 명령이 위치한 주소는 스택이라는 특별히 구성된 레지스터에 저장됩니다. 이러한 레지스터는 액세스를 위해 액세스할 수 없으며 서브루틴 호출 및 반환에만 사용됩니다. 스택 깊이, 즉 특수 레지스터의 수는 8개입니다. 따라서 주 프로그램에서는 8개 이하의 중첩 서브루틴 호출을 수행할 수 있습니다. 서브루틴에서 복귀한 후 CALL 이후의 다음 명령으로 실행이 계속됩니다. W 레지스터와 STATUS 레지스터는 서브루틴 호출 시 저장되지 않으므로 필요한 경우 별도의 메모리 위치에 저장할 수 있습니다. 다음은 서브루틴을 사용하는 간단한 예입니다. START

BSF DATAPORT,7 ;LED 끄기

CALL TURNON ;서브루틴 호출

GOTO START ;처음으로 이동 TURNON

BCF DATAPORT,7 ;LED 켜기

RETURN ;서브루틴에서 복귀 결과적으로 LED는 약 150kHz의 주파수로 깜박입니다. RETLW k RETFIE

서브루틴에서 복귀하도록 설계된 명령이 두 개 더 있습니다. RETLW 명령은 작업 레지스터 W에서 이 명령에 지정된 상수를 반환하고 RETFIE 명령은 인터럽트를 활성화합니다. RETLW 명령은 값 테이블을 생성하는 데 자주 사용됩니다. 작업 레지스터 W에 테이블 시작 부분의 오프셋이 포함되도록 합니다. 그런 다음 다음 절차를 사용하여 원하는 요소를 얻을 수 있습니다.

MOVLW 02h ;오프셋 설정

CALL SHOWSYM ;서브루틴 호출

MOVWF DATAPORT ;포트 B에 테이블 요소 출력

GOTO $ ;영원히 반복 SHOWSYM

ADDWF PC ;테이블 오프셋 계산

RETLW 0AAh ;첫 번째 테이블 요소

RETLW 0BBh ;두 번째 테이블 요소

RETLW 0CCh ;테이블의 세 번째 요소 LED에 3이 표시되어야 합니다. 특수 명령

CLRWDT와 SLEEP이라는 두 가지 특수 명령만 언급하면 ​​됩니다. CLRWDT 명령은 이미 논의한 목적인 워치독 타이머를 재설정하기 위한 것입니다. 이 명령은 인접한 두 CLRWDT 명령 사이의 프로그램 실행 시간이 감시 타이머를 초과하지 않는 프로그램 섹션에 있어야 합니다. SLEEP 명령은 프로세서를 저전력 소비 모드로 전환하기 위한 것입니다. 이 명령을 실행한 후 프로세서 클럭 생성기가 꺼지고 프로세서는 재설정 입력, 감시 타이머 작동 또는 인터럽트를 통해 작동 모드로 다시 전환될 수 있습니다. 결론

이 기사는 PIC16C84 마이크로컨트롤러의 기능에 대한 완전한 설명을 제공하지 않습니다. 이렇게 하려면 기술 설명을 읽어야 합니다. 또한 MPALC 어셈블러, 매크로 명령, 옵션 등의 모든 기능을 이해합니다. 그의 매뉴얼을 읽어보는 것이 도움이 될 것입니다. 필요한 모든 옵션을 올바르게 설정하려면 프로그래머 사용 지침을 읽어야 합니다. 마이크로컨트롤러 사용 사례는 독립적인 프로젝트를 위한 견고한 기반을 제공합니다. 질문이 있는 경우 모스크바, Rubtsovskaya 제방 주소로 MICROCHIP 제품에 대한 지역 지원 센터에 문의할 수 있습니다. 3 사무실 502호, 전화. (095)-263-9930 그들은 항상 귀하의 모든 질문에 답변할 준비가 되어 있습니다. (095)-162-8405로 전화하시면 지역별 BBS에 대한 새 버전의 소프트웨어, 애플리케이션 예제, 도움말 정보를 얻을 수도 있습니다.

AD 마이크로 BBS

간행물: N. Bolshakov, rf.atnn.ru

다른 기사 보기 섹션 마이크로 컨트롤러.

읽고 쓰기 유용한 이 기사에 대한 의견.

<< 뒤로

과학 기술의 최신 뉴스, 새로운 전자 제품:

터치 에뮬레이션을 위한 인조 가죽 15.04.2024

거리가 점점 일반화되는 현대 기술 세계에서는 연결과 친밀감을 유지하는 것이 중요합니다. 최근 독일 자를란트 대학(Saarland University) 과학자들이 인공 피부를 개발하면서 가상 상호 작용의 새로운 시대가 열렸습니다. 독일 자를란트 대학 연구진이 촉각 감각을 멀리까지 전달할 수 있는 초박형 필름을 개발했습니다. 이 최첨단 기술은 특히 사랑하는 사람과 멀리 떨어져 있는 사람들에게 가상 커뮤니케이션을 위한 새로운 기회를 제공합니다. 연구원들이 개발한 두께가 50마이크로미터에 불과한 초박형 필름은 직물에 통합되어 제XNUMX의 피부처럼 착용될 수 있습니다. 이 필름은 엄마나 아빠의 촉각 신호를 인식하는 센서이자, 이러한 움직임을 아기에게 전달하는 액추에이터 역할을 합니다. 부모가 직물을 만지면 압력에 반응하여 초박막 필름이 변형되는 센서가 활성화됩니다. 이것 ...>>

펫구구 글로벌 고양이 모래 15.04.2024

애완동물을 돌보는 것은 종종 어려운 일이 될 수 있습니다. 특히 집을 깨끗하게 유지하는 데 있어서는 더욱 그렇습니다. Petgugu Global 스타트업의 새롭고 흥미로운 솔루션이 제시되었습니다. 이 솔루션은 고양이 주인의 삶을 더 쉽게 만들고 집을 완벽하게 깨끗하고 깔끔하게 유지할 수 있도록 도와줍니다. 스타트업 펫구구글로벌(Petgugu Global)이 자동으로 배설물을 씻어내는 독특한 고양이 화장실을 공개해 집안을 깨끗하고 산뜻하게 유지해준다. 이 혁신적인 장치에는 애완동물의 배변 활동을 모니터링하고 사용 후 자동으로 청소하도록 활성화되는 다양한 스마트 센서가 장착되어 있습니다. 이 장치는 하수 시스템에 연결되어 소유자의 개입 없이 효율적인 폐기물 제거를 보장합니다. 또한 변기는 물을 내릴 수 있는 대용량 수납 공간을 갖추고 있어 다묘 가정에 이상적입니다. Petgugu 고양이 모래 그릇은 수용성 모래와 함께 사용하도록 설계되었으며 다양한 추가 기능을 제공합니다. ...>>

배려심 많은 남자의 매력 14.04.2024

여성이 '나쁜 남자'를 더 좋아한다는 고정관념은 오랫동안 널리 퍼져 있었습니다. 그러나 최근 모나쉬 대학의 영국 과학자들이 실시한 연구는 이 문제에 대한 새로운 관점을 제시합니다. 그들은 여성이 남성의 정서적 책임과 다른 사람을 도우려는 의지에 어떻게 반응하는지 살펴보았습니다. 이번 연구 결과는 무엇이 남성을 여성에게 매력적으로 만드는지에 대한 우리의 이해를 변화시킬 수 있습니다. Monash University의 과학자들이 실시한 연구는 여성에 대한 남성의 매력에 대한 새로운 발견으로 이어졌습니다. 실험에서 여성에게는 노숙자를 만났을 때의 반응을 포함하여 다양한 상황에서 자신의 행동에 대한 간략한 이야기와 함께 남성의 사진이 표시되었습니다. 일부 남성은 노숙인을 무시했지만, 다른 남성은 음식을 사주는 등 그를 도왔습니다. 한 연구에 따르면 공감과 친절을 보여주는 남성은 공감과 친절을 보여주는 남성에 비해 여성에게 더 매력적이었습니다. ...>>

아카이브의 무작위 뉴스

방습 및 방진 리더 PocketBook 640 07.03.2014

러시아에서는 전자책을 읽을 수 있는 장치인 PocketBook 640을 선보이며 제조사에 따르면 "세계 최초의 방습·방진 직렬형 리더기"라고 합니다.

참신함은 XNUMX 미터 깊이의 물에 완전히 잠길 수 있습니다. 견고한 디자인은 바닷물, 모래 및 비눗물로 인한 손상으로부터 전자 부품을 보호합니다.

리더에는 6x600 픽셀 해상도의 800인치 E Ink Pearl 디스플레이가 장착되어 있습니다. 터치 컨트롤을 지원합니다. 제조업체는 Film Touch 기술을 적용했습니다. 가장 얇은 민감한 필름이 화면 표면에 적용되어 터치 스크린이 있는 다른 유사한 장치보다 장치가 가볍고 텍스트 표시 품질이 향상됩니다. 패널은 밝은 햇빛에서 잘 읽을 수 있습니다.

리더에는 1,0GHz의 클럭 속도, 256MB RAM 및 4GB 용량의 플래시 모듈이 장착되어 있습니다. 무선 네트워크 Wi-Fi(802.11b/g/n)용 어댑터와 microUSB 포트가 있습니다. 장치의 무게는 170g이고 크기는 174,4x114,6x9mm입니다.

Linux는 소프트웨어 플랫폼으로 사용됩니다. PDF, PDF(DRM), EPUB, EPUB(DRM), DJVU, FB2, FB2.ZIP, DOC, DOCX, RTF, PRC, TCR, TXT, CHM, HTM, HTML 및 이미지 JPEG, BMP, PNG, TIFF 지원 .

전원은 최대 1300페이지를 볼 수 있는 8000mAh 충전식 배터리로 제공됩니다. PocketBook 640의 가격은 7000루블입니다.

다른 흥미로운 소식:

▪ 지능 노화의 원인은 유전이다

▪ 위에서 본 집

▪ 해적에 대한 기술

▪ 우주 투석기

▪ 종이병

과학 기술 뉴스 피드, 새로운 전자 제품

 

무료 기술 라이브러리의 흥미로운 자료:

▪ 노동 보호(TOI)에 대한 표준 지침 사이트 섹션. 기사 선택

▪ 기사 시베리아 파리채. 홈 마스터를 위한 팁

▪ 중국의 특징은 무엇입니까? 자세한 답변

▪ 기사 핵심 씨앗. 전설, 재배, 적용 방법

▪ 기사 USB 미터 LC. 무선 전자 및 전기 공학 백과사전

▪ 기사 트랜지스터 필드 외국. 무선 전자 및 전기 공학 백과사전

이 기사에 대한 의견을 남겨주세요:

이름 :


이메일(선택사항):


댓글 :





이 페이지의 모든 언어

홈페이지 | 도서관 | 조항 | 사이트 맵 | 사이트 리뷰

www.diagram.com.ua

www.diagram.com.ua
2000-2024