Добрый день!
Помогите разобраться:
Собрал простую схему на PIC16F84A, которая должна иметь три состояния:
ожидания WITE, START и STOP.
Светодиоды подключены к вывоводам RA0 и RA1
WITE - светятся два светодиода (HL2 и HL3)
START - гаснет светодиод HL2
STOP - гаснет светодиод HL3
и до нажатия REZET схема должна находится в таком состоянии, но увы светодиоды гаснут только на время присутсвия сигнала, после снятия сигнала они вновь загораются.
Ниже исходный текст подскажите где я торможу :-)
При компиляции программы МПлаб выдает:
(причем если установить в качестве девайса PIC16F84 а не PIC16F84A, такого сообщения не появляется)
Message[302] C:\NEW_DOC\EMB\NEW\SWITCH.ASM 97 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\NEW_DOC\EMB\NEW\SWITCH.ASM 107 : Register in operand not in bank 0. Ensure that bank bits are correct.
Loaded C:\New_doc\emb\NEW\switch.COD.
BUILD SUCCEEDED: Thu Jan 12 21:44:02 2006
LIST P=PIC16F84A ; list directive to define processor
#include <p16F84A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _HS_OSC
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
TRISA EQU H'0085'
TRISB EQU H'0086'
DELAY_VAR EQU 0Eh ; переменная для хранения значения
; задержки
;**********************************************************************
ORG 0
goto start ; go to beginning of program
;------------------------------------------------------------------------------
SCAN ; подпрограмма сканирования порта
SCAN_1 BTFSC PORTB, 7 ; проверить состояние бита 0 PORTB
; пропустить если 7
GOTO SCAN_1 ; перейти на метку SCAN
BTFSC PORTB, 7 ; проверить состояние бита 7 PORTB
; пропустить если 0
GOTO SCAN_1 ; перейти на метку SCAN
BTFSC PORTB, 7 ; проверить состояние бита 7 PORTB
; пропустить если 0
GOTO SCAN_1 ; перейти на метку SCAN
RETURN
;------------------------------------------------------------------------------
DELAY ; подпрограмма задержки
MOVLW .2 ; загрузка в рабочий регистр числа 25
MOVWF DELAY_VAR ; загрузка в переменную числа 25 из регистра
DELAY_1 DECFSZ DELAY_VAR, 1 ; вычесть 1 из переменной, пропустить если 0
GOTO DELAY_1 ; перейти на метку DELAY_1
RETURN
;-----------------------------------------------------------------------------
start
CLRF PORTA ; очистить порт А
BSF STATUS, RP0 ; включаем первый банк памяти
MOVLW b'00010000' ; загрузка в рабочий регистр слова инициализации
; регистра А
MOVWF TRISA ; разряды RA0-RA3 порта А настроены на вывод,
; RA4 на вход, остальные не задействованы
; (игнорируются)
BCF STATUS,RP0 ; переходим в нулевой банк памяти
CLRF PORTB ; очистить порт B
BSF STATUS,RP0 ; включаем первый банк памяти
NOP
MOVLW b'11111111' ; загрузка в рабочий регистр слова инициализации
; регистра В
MOVWF TRISB ; разряды RB0-RB7 порта B настроены на вход,
; RB0-RB6 не задействованы (необходимо заземлить)
BCF STATUS,RP0 ; переходим в нулевой банк памяти
MOVLW b'00000000' ; загружаем в рабочий регистр слово инициализации
; состояния порта A в состояние WITE
MOVWF PORTA ; пересылка из рабочего регистра в порт А
;------------------------------------------------------------------------------
CALL SCAN ; вызов подпрограммы SCAN
MOVLW b'00000001' ; загружаем в рабочий регистр слово инициализации
MOVWF PORTA ; пересылка из рабочего регистра в порт А
;------------------------------------------------------------------------------
CALL DELAY ; вызов подпрограммы задержки
-------------------------------------------------------------------------------
CALL SCAN ; вызов подпрограммы SCAN
MOVLW b'00000011' ; загружаем в рабочий регистр слово инициализации
MOVWF PORTA ; пересылка из рабочего регистра в порт А
END ; directive 'end of program'