Unterschiedliche Programme mit einem Schalter "wählen" (PIC 16F630)

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 26 11 2025  10:46:59      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Oszilloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( Vorherige Seite 1 | 2 )      


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


Vorherige Seite      
Gehe zu Seite ( Vorherige Seite 1 | 2 )
Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


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