 |
Форум за електроника Български форум за електроника, ремонти, схеми, документация
|
| Предишната тема :: Следващата тема |
| Автор |
Съобщение |
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 ще изчезне. Успех |
|
| Върнете се в началото |
|
 |
|
|
Не Можете да пускате нови теми Не Можете да отговаряте на темите Не Можете да променяте съобщенията си Не Можете да изтривате съобщенията си Не Можете да гласувате в анкети
|
|