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


Регистриран на: 23 Апр 2004 Мнения: 381 Местожителство: София
|
Пуснато на: Съб Юли 09, 2005 12:13 Заглавие: Проблем с PIC16F84 |
|
|
В момента се уча да програмирам на асемблер. Написах (преписах) една малка програма, но се получава така, че не може да се инициализира банка 1 от паметта. Целият проект е в прикачения файл.
| Цитат: | Make: The target "D:\projects\opit\opit.o" is out of date.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F84 "opit.asm" /l"opit.lst" /e"opit.err"
Message[302] D:\PROJECTS\OPIT\OPIT.ASM 14 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] D:\PROJECTS\OPIT\OPIT.ASM 16 : Register in operand not in bank 0. Ensure that bank bits are correct.
Loaded D:\projects\opit\opit.COD.
BUILD SUCCEEDED: Sat Jul 09 13:12:39 2005 |
| Код: |
list p=16F84, st=off
#include <p16F84.inc>
__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC
Counter EQU H'0C'
ORG H'0000'
GOTO Start
Start CLRF PORTA
CLRF PORTB
BSF STATUS,RP0 ;izbor na banka 1
MOVLW B'00011111' ;zarejda W s constanta
MOVWF TRISA ;izwodi 4-0 vhodove
MOVLW B'00000001'
MOVWF TRISB
MOVLW D'255'
MOVWF Counter
Again DECFSZ Counter,1
GOTO Again
GOTO Loop
Loop NOP
GOTO Loop
END
|
Надявам се темата да не е в грешен раздел. |
|
| Върнете се в началото |
|
 |
KokoBoko Гост
|
Пуснато на: Съб Юли 09, 2005 12:55 Заглавие: Re: Проблем с PIC16F84 |
|
|
Ако е само за да настроиш портовете няма нужда се сменя банката Само за F84 може да се настроива OPTIONS и TRIS по следния начин:
MOVLW B'00011111'
TRIS PORTA
MOVLW B'00000001'
TRIS PORTB
Ako ползваш прекъсване от PORTB, 0 и искаш TIMER да е с коефициент на деление от вътрешен такт/2 се зарежда по следния начин:
MOVLW B'11000000'
OPTION
Това са кратките инструкции на F84
Може и по твоя начин но си забравил да се върнеш в банка 0  |
|
| Върнете се в началото |
|
 |
harleybg Опитен потребител


Регистриран на: 23 Апр 2004 Мнения: 381 Местожителство: София
|
Пуснато на: Съб Юли 09, 2005 13:32 Заглавие: |
|
|
Да става по твоя начин.
А за моя: не мога да разбера защо след като съм избрал банка 1(където са TRISA u TRISB) ми изписва, че е посочена банка 0(където естествено не са TRISA u TRISB) |
|
| Върнете се в началото |
|
 |
harleybg Опитен потребител


Регистриран на: 23 Апр 2004 Мнения: 381 Местожителство: София
|
Пуснато на: Съб Юли 09, 2005 16:38 Заглавие: |
|
|
Проблема е в това, че НЕ МОГА ДА ИЗБЕРА банка 1.
Ако след се опитам да пиша в друг рег (не TRISA) като OPTION_REG пак не става Register in operand not in bank 0. Ensure that bank bits are correct.
 |
|
| Върнете се в началото |
|
 |
harleybg Опитен потребител


Регистриран на: 23 Апр 2004 Мнения: 381 Местожителство: София
|
Пуснато на: Съб Юли 09, 2005 18:34 Заглавие: |
|
|
Kато му дам Simulator trace ми показва, бит No 5 на рег 0003 (status) правилно се е установил в 1 (по този начин се избира банка1, нали). Тогава защо ми изписва тези съобщения след транслирането?????????????
 |
|
| Върнете се в началото |
|
 |
KokoBoko Гост
|
Пуснато на: Съб Юли 09, 2005 19:50 Заглавие: Hm |
|
|
| harleybg написа: | Kато му дам Simulator trace ми показва, бит No 5 на рег 0003 (status) правилно се е установил в 1 (по този начин се избира банка1, нали). Тогава защо ми изписва тези съобщения след транслирането?????????????
 |
С Mplab ли работиш , ако не си пробваи с него .
До сега не съм имал такива проблеми и по 2-та начина !!! |
|
| Върнете се в началото |
|
 |
harleybg Опитен потребител


Регистриран на: 23 Апр 2004 Мнения: 381 Местожителство: София
|
Пуснато на: Съб Юли 09, 2005 20:42 Заглавие: |
|
|
С MPlab го правя. Даже казах на един приятел да пробва и той...и същото
Пробвах с версия 6.2 и 7.2 |
|
| Върнете се в началото |
|
 |
Predator_MF Опитен потребител


Регистриран на: 29 Юли 2004 Мнения: 272 Местожителство: Русе
|
Пуснато на: Нед Юли 10, 2005 8:19 Заглавие: |
|
|
Аз отдавна не съм писал с MPLAB, но проблема се оправя с една директива, нещо от сорта на #Warnings .... Нека ти обясня за кво се получава това съобщение Значи тоя ред | Код: | | #include <p16F84.inc> | добавя описания на регистрите към проекта ти:
| Код: |
PORTA EQU H'0005'
PORTB EQU H'0006'
...
...
TRISA EQU H'0085'
TRISB EQU H'0086'
|
Предполагам знаеш че банките на PIC-льото са по 128 байта, значи 128 в HEX число е 0x80 (или 80h или H'0080', както ти е по удобно). Ми представи си го сега - първа и втора банка имат адресиране 128 байта, значи можеш да адресираш от 0 до 0x80, ти обаче пишеш
което е равносилно на
. Това не е грешка в програмата ти Просто адресираш число над 0х80. Ако искаш да разбереш дали съм прав, пробваш с по-малко число от 0х80 (не е задължително да правиш работеща програма). Да не те притесняват тия Warnings, аз в по-старите си програми по 2-3000 реда получавах по 1000 такива съобщения. Потърси из хелпа как става изключването им, аз лично не ги изключвам, предпочитам да ги виждам, понякога ми помагат.
Добавено: Значи ето ти го описанието в Help-a на MPASM:
| Цитат: | | This is a commonly seen reminder message to tell you that a variable that is being accessed in not in bank 0. This message was added to remind you to check your code, particularly code in banks other than 0... | . Ето как се изключва дадено съобщение от компилатора:
| Код: | errorlevel -302 ; Turn off banking message
; known tested (good) code
| , a така си го включваш:
| Код: | errorlevel +302 ; Enable banking message
; untested code
|
|
|
| Върнете се в началото |
|
 |
dreadx Опитен потребител

Регистриран на: 27 Мар 2005 Мнения: 413 Местожителство: Sofia
|
Пуснато на: Пон Юли 11, 2005 2:06 Заглавие: |
|
|
| Ама за какво му е да изключва warnings? Това не е грешка, а компилатора го предупреждава на тези ”двусмислени” места в програмата да провери че със сигурност е установил правилните битове в контролните регистри и прави това, което наистина иска да направи. |
|
| Върнете се в началото |
|
 |
KokoBoko Гост
|
Пуснато на: Пон Юли 11, 2005 8:22 Заглавие: Hm |
|
|
| dreadx написа: | | Ама за какво му е да изключва warnings? Това не е грешка, а компилатора го предупреждава на тези ”двусмислени” места в програмата да провери че със сигурност е установил правилните битове в контролните регистри и прави това, което наистина иска да направи. |
Не знам защо при теб нещо куца , но пробвах твоя код и си е висчко нормално като само ти добавих връщане в банка 0 !!!
------------------------------------------------------------------------
list p=16F84
#include <p16F84.inc>
__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC
Counter EQU H'0C'
ORG H'0000'
GOTO Start
Start CLRF PORTA
CLRF PORTB
BSF STATUS,RP0 ;izbor na banka 1
MOVLW B'00011111' ;zarejda W s constanta
MOVWF TRISA ;izwodi 4-0 vhodove
MOVLW B'00000001'
MOVWF TRISB
BCF STATUS,RP0 ;izbor na banka 1
MOVLW D'255'
MOVWF Counter
Again DECFSZ Counter,1
GOTO Again
GOTO Loop
Loop NOP
GOTO Loop
ORG 0x2000
END
------------------------------------------------------------------------ |
|
| Върнете се в началото |
|
 |
|