Unterschiedliche Programme mit einem Schalter "wählen" (PIC 16F630) Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
| Autor |
Unterschiedliche Programme mit einem Schalter "wählen" (PIC 16F630) Suche nach: schalter (25905) pic (2059) |
|
|
|
|
BID = 374748
Peo Gesprächig
  
Beiträge: 181 Wohnort: Baden-W.
|
|
Danke für die Erklärung.
Der Vergleich mit dem Parkplatz hat mir die Augen geöffnet. Nun weiß ich, wofür das Ganze gut ist. Wenn man es verstanden hat - ich glaube, das habe ich nun - ist das eigentlich nicht so wild.
Immer wenn ich etwas in ein Register in Bank 1 schreiben oder lesen will (z. B. OSCCAL, TRISA, TRISC, ANSEL usw.), muss ich mit
bsf STATUS,RP0 dahin wechseln
will ich wieder mit den normalen PORTA/B arbeiten, gehe ich mit
bcf STATUS,RP0 zurück.
Bank 0 sind alle Register, die im Datenblatt links stehen, Bank 1 alle, die rechts stehen.
Stimmt doch so, oder?
Danke für das Lob zwecks Programmierung, aber nun weiß ich auch, warum ich mit meinem PIC12f508 Anfangs so viele Probleme hatte.
mfg
Peo
|
|
BID = 374924
stepp64 Gesprächig
  
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 162
|
|
Hallo,
das mit der Bankumschalterei ist zwar nervig, du solltest es dir aber unbedingt verinnerlichen. Am besten du druckst dir die Tabellen für die Bänke aus der Doku aus und legst sie dir mit auf den Schreibtisch. Die brauchst du wirklich ständig. Wenn du erst mal mit Interupts, Timern oder den andern Baugruppen der PICs anfängst, verlierst du ohne die Tabellen schnell den Überblick bei den ganzen Registern.
Übrigens gibt es insgesammt 4 Bänke. Die kleineren PICs belegen aber meist nur 2. Umschalten tust du sie mit den den Bits RP0 und RP1 im STATUS-Register. Für die Bänke 2+3 musst du also auch noch das BIT RP1 mit berücksichtigen. Schau dir die Registerbelegung bitte mal genau an. Es gibt einige Register, die in allen Bänken vorhanden sind (z.Bsp STATUS, PCLATH, FSR etc.).
Sofern du irgendwann mal mehr RAM benötigst wie in Bank0 vorhanden ist, bekommst du es auch bei den RAM Variablen mit der Bankumschaltung zu tun. Hier können sich die selben Fehler einschleichen wie bei den Registern. Wenn du also eine Variable Temp0 auf 0x20 legst und eine Temp1 auf 0xA0 dann musst du ebenfalls RP0 setzen, wenn du in Temp1 schreiben oder lesen willst. Machst du das nicht wird in Temp0 geschrieben oder gelesen!
Falls du also alle deine Variablen in Bank0 definiert hast musst du nach dem Zugriff auf ein Register in Bank1 (z.Bsp. TRISA oder OPTION_REG) und vor der Benutzung deiner Variablen wieder auf Bank0 schalten. Sonst greift der PIC auf die falsche RAM-Zelle zurück und es können die merkwürdigsten Dinge passieren.
So, und um dich jetzt ganz zu verwirren Es gibt auch 4 Bänke für den Flashspeicher. Falls dein Programm also mal größer wie 2kByte wird, musst du auch noch die Flashspeicherbänke umschalten. Aber ich denke, dass das noch etwas dauern wird. 2k Assembler sind ein paar tausend Programmzeilen...
Gruß Sven
[ Diese Nachricht wurde geändert von: stepp64 am 4 Okt 2006 13:14 ] |
|
BID = 375045
Ltof Inventar
     
Beiträge: 9386 Wohnort: Hommingberg
|
Zitat :
Peo hat am 3 Okt 2006 19:16 geschrieben :
|
Stimmt doch so, oder?
|
Jo, passt!
Das mit den Pages des Programmspeichers wollte ich Dir auch noch ans Herz legen. Das solltest Du zumindest im Hinterkopf behalten, falls Deine Programme mal länger werden und plötzlich nicht mehr funktionieren.
Gruß,
Ltof
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 391670
Peo Gesprächig
  
Beiträge: 181 Wohnort: Baden-W.
|
Hallo
Das Bankumschalten und Abfragen von RA3 funktioniert nunmehr Einwand frei.
Ich habe jetzt aber folgendes Problem, ich schaffe es nicht, irgend einen anderen I/O Port in PORTA auszulesen, so dass der PIC (16f630) etwas tut.
TRISA ist komplett auf "output" gesetzt, da im Datenblatt steht, dass "I/O pins configured as analog input always read
‘0’."
Das Programm soll PORTC einschalten, wenn RA1 mit Vdd verbunden ist.
Wo liegt das Problem, ich finde es einfach nciht.
mfg
Peo
call 0x3FF ; retrieve factory calibration value
bsf STATUS,RP0 ; set file register bank to 1
movwf OSCCAL ; update register with factory cal value
movlw 0x00
movwf TRISC
movlw 0x00
movwf TRISA
bcf STATUS,RP0 ; set file register bank to 0
clrf PORTA
clrf PORTC
loop
movlw .255
btfsc PORTA,1
movwf PORTC
clrf PORTC
goto loop
|
BID = 391851
Peo Gesprächig
  
Beiträge: 181 Wohnort: Baden-W.
|
Hat sich erledigt.
Ich habe den Fehler gefunden. Ich musste die Ausgänge auf digitale I/Os umschalten.
mfg
Peo
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 16 Beiträge im Durchschnitt pro Tag heute wurden bisher 3 Beiträge verfasst © x sparkkelsputz Besucher : 186817932 Heute : 15527 Gestern : 47700 Online : 176 26.11.2025 10:46 9 Besucher in den letzten 60 Sekunden alle 6.67 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0806958675385
|