Форум за електроника Форуми Форум за електроника
Български форум за електроника, ремонти, схеми, документация
 
 Въпроси/ОтговориВъпроси/Отговори   ТърсенеТърсене   ПотребителиПотребители   ГрупиГрупи   Регистрирайте сеРегистрирайте се 
 ПрофилПрофил   Влезте, за да видите съобщенията сиВлезте, за да видите съобщенията си   ВходВход 

Проблем с PIC16F84A

 
Създайте нова тема   Тази тема е заключена - не можеш да отговаряте или да променяте мнения    Форум за електроника Форуми -> Обща електроника - General Electronics



Предишната тема :: Следващата тема  
Автор Съобщение
borkotiger
Нов потребител
Нов потребител


Регистриран на: 23 Мар 2009
Мнения: 37

МнениеПуснато на: Съб Дек 18, 2010 11:48    Заглавие: Проблем с PIC16F84A Отговорете с цитат

Здравейте, запалих се по PIC-овете и си взех книгата "PIC Микроконтролери". Прочетах я и преписах кода от пример 10. Мисля, че изчистих правописните грешки, но пак ми дава 2. Вече една седмица се ровя в книгата и в нета и немога да разбера, защо не се компилира програмата. В книгата е използвана средата MPLAB IDE v6.20, а аз ползвам v8.50 и v8.60 (v6.20 не мога да я намеря). Предполагам, че проблема идва от там. Моля Ви, дайте ми някакви предположения, че сам няма да се оправя. Ето и кода:

list p=16F84A
#include <p16F84A.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;****Дефиниране на константи и променливи*****
w EQU 0
f EQU 1
Begin_value EQU D'96'
;----Обявяване на използваните променливи----
CBLOCK H'0C' ; Адрес на първия регистър от GPR
Counter_1
Counter_10
Counter_100
Counter_1000
Cycle_counter
Temp_PORTA
ENDC
;---Дефиниране на битовете на регистъра Flag_register----
#define Dig_1 PORTA,0
#define Dig_10 PORTA,1
#define Dig_100 PORTA,2
#define Dig_1000 PORTA,3
;********************************************************
; Потребителска програма
;********************************************************
ORG H'0000' ;Вектор на НУ
goto start ;Преход към началото на програмата
ORG H'0004' ;Бектор на прекъсване
goto Int_Service ;Преход към ISR
;********************************************************
; Начало на програмата
;********************************************************
start
bcf STATUS,RP0 ;иЗБОР НА БАНКА 0
clrf PORTA ;00h -> PORTA
clrf PORTB ;00h -> PORTB
BSF STATUS,RP0 ;Избор на банка 1
movlw B'11110000' ;11110000b -> W
movwf TRISA
clrf TRISB
bcf STATUS,RP0
goto main
;********************************************************
; Използвани подпрограми
;********************************************************
;-------Програма за обслужване на прекъсванията----------
Int_Service
btfss INTCON,TOIF
goto end_int
TMR0_int
movlw Begin_value
movwf TMR0
call Inc_timer
call Update_disp
end_int
bcf INTCON,TOIF
retfie
;-------Програма за актуализиране на таймера-------------
Inc_timer
incf Cycle_counter,w
xorlw D'200'
btfsc STATUS,Z
goto inc_counters
incf Cycle_counter,f
return
inc_counters
clrf Cycle_counter
incf Counter_1,f
movlw D'10'
xorwf Counter_1,w
btfss STATUS,Z
return
clrf Counter_1
inc_10
incf Counter_10,f
movlw D'10'
xorwf Counter_10,w
btfss STATUS,Z
return
clrf Counter_10
inc_100
incf Counter_100,f
movlw D'10'
xorwf Counter_100,w
btfss STATUS,Z
return
clrf Counter_100
inc_1000
incf Counter_1000,f
movlw D'10'
xorwf Counter_1000,w
btfss STATUS,Z
return
clrf Counter_1000
return
;-------Програма за обновяване на индикаторите-----------
Update_disp
movf Temp_PORTA,w
movwf PORTA
btfsc Dig_1
goto update_dig1
btfsc Dig_10
goto update_dig10
btfsc Dig_100
goto update_dig100
update_dig1000
movf Counter_1000,w
call Table
movfw PORTB
goto end_update
update_dig1
movf Counter_1,w
call Table
movfw PORTB
goto end_update
update_dig10
movf Counter_10,w
call Table
movfw PORTB
goto end_update
update_dig100
movf Counter_100,w
call Table
movfw PORTB
end_update
bcf STATUS,C
rlf Temp_PORTA,f
btfss Temp_PORTA,4
return
movlw B'00000001'
movwf Temp_PORTA
return
;-------Подпрограма (таблица) за извличане на стойност за----
;----------управление сегментите на индикаторите
Table addwf PCL,f
retlw B'00111111'
retlw B'00000110'
retlw B'01011000'
retlw B'01001111'
retlw B'01100110'
retlw B'01101101'
retlw B'01111101'
retlw B'00000111'
retlw B'01111111'
retlw B'01101111'
;----Програма за конфигуриране и инициализация на таймера----
Timer_config
bsf STATUS,RP0
movlw B'10000100'
movwf OPTION_REG
bcf STATUS,RP0
clrf Counter_1
clrf Counter_10
clrf Counter_100
clrf Counter_1000
clrf Cycle_counter
movlw B'00000001'
movwf Temp_PORTA
movlw Begin_value
movwf TMR0
return
;***********************************************************
; Главна програма
;***********************************************************
main call Timer_config
movlw B'10100000'
movwf INTCON
loop nop
goto loop
END

Ето и грешките които дава:

Debug build of project `F:\MyProjects\PROJECT_12.mcp' started.
Language tool versions: MPASMWIN.exe v5.37, mplink.exe v4.37, mplib.exe v4.37
Preprocessor symbol `__DEBUG' is defined.
Sat Dec 18 11:44:43 2010
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "F:\MyProjects\PROJECT_12.mcs".
Clean: Done.
Executing: "D:\Progrm files\MPLAB\MPASM Suite\MPASMWIN.exe" /q /p16F84A "SAMPLE_12.asm" /l"SAMPLE_12.lst" /e"SAMPLE_12.err" /o"SAMPLE_12.o" /d__DEBUG=1
Message[302] F:\MYPROJECTS\SAMPLE_12.ASM 38 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] F:\MYPROJECTS\SAMPLE_12.ASM 39 : Register in operand not in bank 0. Ensure that bank bits are correct.
Error[113] F:\MYPROJECTS\SAMPLE_12.ASM 47 : Symbol not previously defined (TOIF)
Error[113] F:\MYPROJECTS\SAMPLE_12.ASM 55 : Symbol not previously defined (TOIF)
Message[302] F:\MYPROJECTS\SAMPLE_12.ASM 149 : Register in operand not in bank 0. Ensure that bank bits are correct.
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `F:\MyProjects\PROJECT_12.mcp' failed.
Language tool versions: MPASMWIN.exe v5.37, mplink.exe v4.37, mplib.exe v4.37
Preprocessor symbol `__DEBUG' is defined.
Sat Dec 18 11:44:44 2010
----------------------------------------------------------------------
BUILD FAILED

Благодаря за отделеното Ви време.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
eler
Опитен потребител
Опитен потребител


Регистриран на: 30 Яну 2005
Мнения: 2251
Местожителство: Раднево

МнениеПуснато на: Съб Дек 18, 2010 12:20    Заглавие: Отговорете с цитат

Тия грешки за банките мисля, че можеш да ги игнорираш. При компилиране на сорсове почти винаги ми ги дава, но въпреки това получените хексове работят без проблеми. За другото не знам. Някой по-компетентен да се изкаже.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
RC
Опитен потребител
Опитен потребител


Регистриран на: 22 Фев 2003
Мнения: 13214

МнениеПуснато на: Съб Дек 18, 2010 12:36    Заглавие: Отговорете с цитат

borkotiger написа:
Прочетах я и преписах кода от пример

А въобще разбираш ли какво прави и опитваш ли се да вникнеш в написаното?
В съобщението за грешка е посочен проблема в явен вид:
Цитат:
Symbol not previously defined (TOIF)

Няма дефинирана такава променлива (TOIF).
Ако разгледаш описанието на асемблера за дадения процесор и по-конкретно в случая синтаксиса на btfss, както и имената на битовете на регистъра INTCON трябва сам да достигнеш до извода, че става дума за бит T0IF, а не TOIF както си го написал.
_________________
RemoteControls
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
borkotiger
Нов потребител
Нов потребител


Регистриран на: 23 Мар 2009
Мнения: 37

МнениеПуснато на: Съб Дек 18, 2010 14:13    Заглавие: Отговорете с цитат

Леле пред очите ми е било през цялото време. Сега загрявам че първите 2 букви от TOIF идват от таймер 0. Стана, много съм ти благодарен. А иначе програмата мисля че я разбирам. Все пак съм завършил КСТ, но там учихме за микрокомпютър на Атмел. Той не беше с Харвардска архитектура и сега ми е малко странно, но ще свикна.
Още веднъж благодаря.

Да попитам само още нещо, съобщенията които ми ги дава, че операнда не е в банка 0, трябва ли да ме притесняват? Която и банка да задам преди тях, те си остават. Нещо не мога да ги схвана.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
hunata
Нов потребител
Нов потребител


Регистриран на: 15 Окт 2009
Мнения: 8
Местожителство: Бургас

МнениеПуснато на: Съб Дек 18, 2010 15:34    Заглавие: Отговорете с цитат

След __CONFG реда добави следния стринг: errorlevel -302 , и bank warning-a ще изчезне. Успех
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
Покажи мнения от преди:   
Създайте нова тема   Тази тема е заключена - не можеш да отговаряте или да променяте мнения    Форум за електроника Форуми -> Обща електроника - General Electronics Часовете са според зоната GMT + 2 Часа
Страница 1 от 1

 
Към:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети


Powered by phpBB © 2001, 2005 phpBB Group
Translation by: Boby Dimitrov
Where to Find Free Service Manuals