Добрый день! Помогите разобраться: Собрал простую схему на 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'
|