Sida 1 av 1
Bank-problem. PIC12F675. ASM.
Postat: 15 maj 2007, 16:09:28
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.
Postat: 15 maj 2007, 16:14:09
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.
Postat: 15 maj 2007, 16:27:10
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.

Postat: 15 maj 2007, 16:30:48
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.
Postat: 15 maj 2007, 17:00:58
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".

Postat: 15 maj 2007, 17:23:11
av sodjan
Inte alls.
Snarare till "Varför man bör kolla dokumentationen först...".

Postat: 16 maj 2007, 01:05:34
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 ?
Postat: 16 maj 2007, 06:18:39
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.
Postat: 16 maj 2007, 06:19:20
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.
Postat: 16 maj 2007, 11:12:36
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...
Postat: 16 maj 2007, 13:24:59
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... )."
Jag har kommit på att det är lite för kul med asssembler. Jag satt uppe till 6-tiden på morgonen...

Postat: 16 maj 2007, 13:35:27
av v-g
Annat än BASIC det

Går nästan lika snabbt att koda och mycket snabbare i PICen!
Postat: 16 maj 2007, 14:00:35
av sodjan
Helt rätt, kör Basic så kan du sitta uppe till 6 på morgonen *utan* att ha kul...

Postat: 16 maj 2007, 14:04:03
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.
Postat: 16 maj 2007, 14:10:08
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.