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

Проблем с PIC16F84
Иди на страница 1, 2  Следваща
 
Създайте нова тема   Напишете отговор    Форум за електроника Форуми -> Обща електроника - General Electronics



Предишната тема :: Следващата тема  
Автор Съобщение
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 Twisted Evil
Върнете се в началото
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.
Ако след
Код:
 bsf STATUS,PR0
се опитам да пиша в друг рег (не TRISA) като OPTION_REG пак не става Register in operand not in bank 0. Ensure that bank bits are correct.
Rolling Eyes Rolling Eyes Rolling Eyes Rolling Eyes Rolling Eyes Rolling Eyes
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
harleybg
Опитен потребител
Опитен потребител


Регистриран на: 23 Апр 2004
Мнения: 381
Местожителство: София

МнениеПуснато на: Съб Юли 09, 2005 18:34    Заглавие: Отговорете с цитат

Kато му дам Simulator trace ми показва, бит No 5 на рег 0003 (status) правилно се е установил в 1 (по този начин се избира банка1, нали). Тогава защо ми изписва тези съобщения след транслирането?????????????
Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
KokoBoko
Гост





МнениеПуснато на: Съб Юли 09, 2005 19:50    Заглавие: Hm Отговорете с цитат

harleybg написа:
Kато му дам Simulator trace ми показва, бит No 5 на рег 0003 (status) правилно се е установил в 1 (по този начин се избира банка1, нали). Тогава защо ми изписва тези съобщения след транслирането?????????????
Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad

С 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 .... Нека ти обясня за кво се получава това съобщение Very Happy Значи тоя ред
Код:
#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, ти обаче пишеш
Код:
movwf TRISA

което е равносилно на
Код:
movwf 0x85
. Това не е грешка в програмата ти Smile Просто адресираш число над 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
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Yahoo Messenger MSN Messenger
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

------------------------------------------------------------------------
Върнете се в началото
Покажи мнения от преди:   
Създайте нова тема   Напишете отговор    Форум за електроника Форуми -> Обща електроника - General Electronics Часовете са според зоната GMT + 2 Часа
Иди на страница 1, 2  Следваща
Страница 1 от 2

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


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