|
|
  |
Вопросы по PIC16, Вопросы по программированию микроконтроллеров PIC16 |
|
|
|
Jan 13 2006, 07:47
|
Частый гость
 
Группа: Validating
Сообщений: 103
Регистрация: 4-07-05
Пользователь №: 6 490

|
Добрый день! Помогите разобраться: Собрал простую схему на 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'
|
|
|
|
|
Jan 17 2006, 08:59
|
Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 9-01-06
Пользователь №: 12 984

|
Цитата Hi All!
Создаю проект в MPLAB 7.10 с помощью project wizard, как описано в help.
после команды Build All выдает такое сообщение:
MPLINK 3.92, Linker Copyright © 2005 Microchip Technology Inc. Error - section 'INT_VECTOR' can not fit the absolute section. Section 'INT_VECTOR' start=0x00000004, length=0x00000010 Errors : 1 Проблема вот в чём, Вам необходимо Цитата ;***** VARIABLE DEFINITIONS (examples)
; example of using Uninitialized Data Section INT_VAR UDATA 0x0C w_temp RES 1 ; variable used for context saving status_temp RES 1 ; variable used for context saving
; example of using Overlayed Uninitialized Data Section ; in this example both variables are assigned the same GPR location by linker G_DATA UDATA_OVR ; explicit address can be specified flag RES 2 ; temporary variable (shared locations - G_DATA)
G_DATA UDATA_OVR count RES 2 ; temporary variable (shared locations - G_DATA) в строке Цитата INT_VAR UDATA 0x0C Подставаить вместо 0х0С значение больше либо вообще убрать этот кусок кода либо переместить его сразу за меткой start. Беда в том что подпрограмма обработки прерывания накладывается на вектор адреса программ, и из за этого, на мой взгляд, и возникает ошибка
|
|
|
|
|
Jan 18 2006, 08:52
|
Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 9-01-06
Пользователь №: 12 984

|
Цитата Подскажите пожалуйста где можно почитать об организации прерываний для PIC16Fxx. На сайте microchip.ru Вы сможете найти некоторую информацию о прерываниях для PIC16Fxx. http://www.microchip.ru/lit/?mid=1x0От себя добавлю, что семейство pic16 обладает только одним Вектрором для всех прерываний (0х0004), как внутренних так и внешних. Поэтому при работе с несколькими прерываниями Вам необходимо обратить внимание как определяется их источник. Успехов.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|