Bank-problem. PIC12F675. ASM.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Bank-problem. PIC12F675. ASM.

Inlägg av JimmyAndersson »

Börjar med *meddelandet*:

Message[302] fil.ASM 44 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] Message[302] fil.ASM 45 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] Message[302] fil.ASM 46 : Register in operand not in bank 0. Ensure that bank bits are correct.


Sedan koden:

Kod: Markera allt

Main	CODE

Start         ; <---- **Detta är rad 42**
	bsf		STATUS, RP0			;Bank 1 <-- * Rad 43*
	bsf		OPTION_REG, NOT_GPPU	;GPIO pullup's disabled  <---- *Rad 44*
	bsf		OPTION_REG, INTEDG	;Interrupt on rising edge of GP2/INT <--- *Rad 45*
	bcf		OPTION_REG, T0CS	;TMR0 Internal instruction cycle clock <--- *Rad 46*

Som jag förstår felmeddelandena så betyder det att registren inte ligger i Bank 0, men jag har ju satt Bank 1. Så varför blir det såhär? Har även provat att välja Bank 0 istället, men det bli likadant. Samma sak om jag plockar bort STATUS-raden.

edit: Ändrade "felmeddelandet" till "meddelandet" eftersom jag hade så fel.
Senast redigerad av JimmyAndersson 15 maj 2007, 17:03:01, redigerad totalt 2 gånger.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Message[302] är INTE ett felmeddelande, det är ett påpekande! Du får alltså INGEN felmeddelanden....

Om du inte vill se dom kan du lägga in
' errorlevel -302 ; suppress message 302 from list file'
i ASM-programmet innan själva programmet börjar.
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Aha, då förstår jag. Det är alltså ett påpekande om att man ska se till så att man väljer rätt bank.

Tack. Då slipper jag fundera mer över det. :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

302 står inte under "Errors", varken i MPASM manueln eller i online hjälpen i MPLAB.

302 står under "Messages".

Och där står samma text både i PDF manualen och i online hjälpen i MPLAB :
302 Register in operand not in bank 0. Ensure that bank bits are correct.

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. Review the section on banksel
(Section 4.7 “banksel – Generate Bank Selecting Code”) and bankisel
(Section 4.6 “bankisel – Generate Indirect Bank Selecting Code (PIC12/16
MCUs)”) and ensure that your code uses bank bits whenever changing from ANY bank
to ANY other bank (including bank 0).

Since the assembler or linker can't tell which path your code will take, you will always
get this message for any variable not in bank 0. You can use the errorlevel
command to turn this and other messages on and off, but be careful as you may not
spot a banking problem with this message turned off. For more about errorlevel,
see Section 4.29 “errorlevel – Set Message Level”.

A similar message is 306 for paging.
Notera "reminder", alltså bara en påminnelse.

Där framgår också hur man döljer detta meddelande om man inte vill ha det.
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Icecap skrev:
Message[302] är INTE ett felmeddelande, det är ett påpekande! Du får alltså INGEN felmeddelanden....


Sodjan skrev:
302 står inte under "Errors" /Klipp/ 302 står under "Messages".


Ok, nu vet jag att det inte heter "felmeddelande".
Den här forumdelen borde byta namn till "Hur man lär sig att utrycka sig perfekt". :wink:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Inte alls.
Snarare till "Varför man bör kolla dokumentationen först...". :-) :-)
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Jag är rädd för att du har helt rätt i det. :) :)


edit: Kan passa på att fråga en sak:

I figur 2-2 (sidan 8 ) i databladet för PIC12F675 så ser jag att INTCON finns i både Bank0 och Bank1. Så vilken bank ska jag använda när jag vill läsa från eller skriva till INTCON ?
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

JimmyAndersson skrev:I figur 2-2 (sidan 8 ) i databladet för PIC12F675 så ser jag att INTCON finns i både Bank0 och Bank1. Så vilken bank ska jag använda när jag vill läsa från eller skriva till INTCON ?
Du behöver inte bry dig om det, det är bara tuta och köra.

Varför just INTCON ligger i alla banker är nog för att GIE (Global interrupt enable) ligger i det registret. Funktionen "retfie" (som returnerar från en ISR) sätter automatiskt GIE, och jag antar att eftersom INTCON är bankfri så strular aldrig retfie. Men det är bara en gissning.
AndersL
EF Sponsor
Inlägg: 148
Blev medlem: 17 september 2004, 21:39:22
Ort: Ängelholm

Inlägg av AndersL »

Jag tror finessen är att man inte ska behöva byta bank för att komma åt INTCON. Använd den bank du är i skulle jag säga.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Helt rätt.

Det är bara en "finess" för att spara kod och cyckler när man ska hantera
INTCON. Dt är fler register som ligger över alla banken, som t.ex
STATUS (ganska självklart, eftersom man annars inte skulle komma åt
bank-bitarna om man ligger i "fel" bank... :-) ).

RETFIE har nog inte mycket med det att göra, den skulle mycket väl kunna
hantera GIE internt i processorn helt oavsett bankbitarna...

Jag kollade just, och BANKSEL är inte så pass "smart" så att den ser att
ett register ligger över alla banker och struntar att generera kod. Det
hade ju annars varit helt OK. Man om man kommer ihåg det själv, så kan
man annars bara låta bli att göra BANKSEL för STATUS, FSR, PCL, PCLATH
och INTCON, d.v.s de register som ligger över alla banker i en 16F877A.
På en annan modell kan det vara andra register...

Själv tycker jag dock att MPASM själv skulle kunna strunta i en BANKSEL
på dessa register...
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Aha, då förstår jag. Tack. :)

"Dt är fler register som ligger över alla banken, som t.ex
STATUS (ganska självklart, eftersom man annars inte skulle komma åt
bank-bitarna om man ligger i "fel" bank... )."


:lol:


Jag har kommit på att det är lite för kul med asssembler. Jag satt uppe till 6-tiden på morgonen... :D
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

Annat än BASIC det :wink: Går nästan lika snabbt att koda och mycket snabbare i PICen!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Helt rätt, kör Basic så kan du sitta uppe till 6 på morgonen *utan* att ha kul... :-)
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Koda tar aldrig lång tid, det svåra är att definiera problemet och dela upp det på ett vettigt sätt och sedan hitta en effektiv lösning.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jupp.
Och när det gäller programmering i assembler så har jag uppfattningen
att det är något som ganska snabbt går fortare och fortare ju mer
kod man har skrivit tidigare. Det som tar tid är *det första* programmet... :-)
Efter ett tag har man sina macro's och andra kodsnuttar som underlättar
arbetet markant.
Skriv svar