PIC: Falsche Bank ausgewählt - Anfängerproblem

Gast #1281123
Lesenswert?

Hallo, ich versuche gerade den Einstieg in die PIC Programmierung mit 
Assembler und habe mir das PICKit 2 mit Testplatine gekauft. Nun wollte 
ich mein erstes Program ausprobieren und erhalte einen Fehler, für den 
ich keinen Grund finden kann. Ich möchte eine Leuchtdiode am Pin RC1 zum 
Leuchten bringen.

--
1
  LIST P=16F690
2
  __config 0x3B04
3
w   EQU 0
4
f   EQU 1
5
STATUS  EQU 0x003
6
RP0  EQU 5
7
PORTC  EQU 0x007
8
TRISC  EQU 0x087
9
;
10
  ORG 0
11
  goto start
12
start  bsf STATUS, RP0    ; Bank 1 auswählen
13
  movlw 0xFD    ; Kopiere b11111101 nach W (0 = Ausgang)
14
  movwf TRISC    ; Kopiere Inhalt von W nach TRISC <- Hier enteht der Fehler
15
  bcf STATUS, RP0    ; Setze Bit 0 in RP0 um Bank 0 auszuwählen
16
;
17
  bsf PORTC, 1    ; Setze Bit 1 in PORT C auf 1
18
  END
--

Wenn ich das Programm nun in HexCode umwandeln lassen will, erhalte ich 
für die Zeile mit dem Befehl "movwf TRISC" die

Message[302]: Register in operand not in bank 0.  Ensure that bank bits 
are correct.

Ich habe doch aber zwei Zeilen zuvor die Bank 1 ausgewählt, da TRISC ja 
in Bank 1 liegt und dürfte doch gar nicht in Bank 0 sein. Könnte mir 
bitte jemand erklären, was ich falsch gemacht habe?

Vielen Dank
Sven
#1281158
Lesenswert?

RAM-Banking und Code-Paging ist aber ne Spezialität der PICs, um den 
Programmierern das Leben schwer zu machen.

Benutzer anderer MCs kennen ne Bank nur zum Sitzen oder Geld abheben. 
Sie sind es gewohnt, mindestens 64kB Code oder Daten am Stück 
adressieren zu können. Macht einfach mehr Spaß und man kann sich aufs 
eigentliche Programmieren konzentrieren.
Das erklärt wohl auch, warum die AVRs so schnell Fuß gefaßt haben, 
obwohl sie ja wesentlich jünger (1997) als die PICs sind.


Peter
Persönliche Seite #1281354
Lesenswert?

Ist bei den 16F wirklich recht umständlich gelöst und ist immer wieder 
die Quelle von Fehlern im Programm und stundenlanger Suche danach.

Bei den 18F ist das um einiges besser gelöst, wobei man auch dort nicht 
völlig frei vom Banking ist. Allerdings sind dort die RAM-Bänke 256 
Bytes groß und alle Specialregister liegen zusammen mit 128-Byte 
User-RAM im ACCESS-RAM, sodass man nicht umschalten muss, solange man 
mit diesen 128 Bytes auskommt. Codepaging gibt es bei den 18F aber nicht 
mehr. Ist schon mal ein Fortschritt.

Du solltest aber deinem Programm eine Hauptroutine gönnen (in deinem 
Fall eine Endlosschleife vor dem END), da dein PIC sonst mit dem Befehl 
weiter macht, der im Flash nach deinem letzten Befehl steht. 
Wahrscheinlich wird dein PIC ständig reseten, was du natürlich nicht 
siehst, da es viel zu schnell geht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren