| Autor |
|
Einfaches Assemblerprogramm für PIC16F627A |
|
|
|
|
BID = 561832
Ltof Inventar
     
Beiträge: 9386 Wohnort: Hommingberg
|
|
Zitat :
loetlack hat am 6 Nov 2008 10:16 geschrieben :
|
...Bitte ein bischen mehr Code zum Benutzen...
|
Dazu habe ich weder Zeit, noch Lust. Ich glaube aber auch nicht, dass das nötig ist. Immerhin hast Du ja schon irgendwelche Codeschnipsel zum Laufen bekommen.
Die Aufgabe ist ja recht überschaubar. Deshalb kann man das Ganze, zwar unelegant, aber dafür leicht verständlich, Schritt für Schritt sequenziell abbarbeiten.
Ungefähr so:
******
Hauptprogramm:
LED1 an
Loop:
Warte auf Tastendruck
Warte 1ms (Prellzeit, kann hier wegen der folgenden Wartezeit von 20ms sogar weggelassen werden)
LED2 an
Warte 20ms (Überlappung)
LED1 aus
Warte auf Taste loslassen
Warte 1ms
Warte auf Tastendruck
LED2 an
Warte 20ms
LED1 aus
...und so weiter
Warte auf Tastendruck
LED1 an
Warte 20ms
LED3 aus
Warte auf Taste loslassen
Warte 1ms
Goto Loop
***
Irgendwelche brauchbaren Codeschnipsel für Warteschleifen findest Du z.B. bei Sprut. Die Warteschleifen am besten per Unterprogramm mittels "Call" aufrufen.
Gruß,
Ltof
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor) |
|
BID = 562078
BjörnB Stammposter
    Beiträge: 242 Wohnort: Dortmund
|
|
@ Ltof
Sicherlich kann man auch einiges ohne Interrupt machen. Da manche meiner Programme eine Uhr enthalten oder z.B. ein Zeitintervall erfassen, sind Timer und Interrupts für exakte Verhältnisse eigentlich unerlässlich. Und wenn mir ein Controller schon ca. 20 Interruptvektoren für alle möglichen Hardwarekomponenten anbietet, dann sehe ich keinen Sinn, Interrupts nicht zu verwenden, sondern sich mit irgendwelchen Schleifen und Wait-Routinen zu behelfen.
Schönen Gruß,
Björn
|
|
BID = 562088
Ltof Inventar
     
Beiträge: 9386 Wohnort: Hommingberg
|
Wie ich bereits weiter oben erwähnte, ist die Verwendung der Interrupts natürlich auch eine Frage des persönlichen Geschmacks.
Solange man sich nicht in der Verwendung der Interrupts verzettelt ist das ja auch in Ordnung.
Man sollte sich nur angewöhnen, mit Interrupts möglichst sparsam umzugehen. Mit Interrupts passieren zu leicht kaum noch nachvollziehbare Sachen im Programmablauf.
Einem Anfänger bei trivialen Problemstellungen den Interrupt zu empfehlen, finde ich jedenfalls kontraproduktiv.
Gruß,
Ltof
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 562093
BjörnB Stammposter
    Beiträge: 242 Wohnort: Dortmund
|
Du hast schon Recht, "Interrupt" und "Einfaches Assemblerprogramm" aus dem Titel des Postings widersprechen sich schon etwas. Mehr als ein Timerinterrupt wäre hier aber sowieso nicht nötig, so dass auch dann kaum Probleme zu erwarten sind. Problematisch wird es, wenn in einem Programm mehrere Interrupts gemeinsame Variablen verändern können, dann ist es wichtig, dass man das ganze geschickt synchronisiert.
Es ist sicherlich auch einfach Geschmackssache, wie man ein Problem angeht. Ich versuche beispielsweise, im Hauptprogramm nach der Initialisierung von Variablen möglichst eine leere Endlosschleife zu setzen (in der allerhöchstens zeitunkritische Sachen bei Gelegenheit abgearbeitet werden) und alles andere mit Interrupts abzuarbeiten. Damit bin ich bisher eigentlich immer recht gut gefahren. Aber das führt an dieser Stelle wohl etwas zu weit
Schönen Gruß,
Björn
|
BID = 562139
hajos118 Schreibmaschine
    
Beiträge: 2453 Wohnort: Untermaiselstein
|
Zitat :
BjörnB hat am 6 Nov 2008 23:35 geschrieben :
|
... im Hauptprogramm nach der Initialisierung von Variablen möglichst eine leere Endlosschleife zu setzen ...
|
Mach' ich ähnlich, nur dass ich dort den Prozessor in den "Schlaf-Modus" verbanne.
_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!
|
BID = 562200
loetlack Gerade angekommen
Beiträge: 4 Wohnort: Frankfurt Main
|
Hi Racingsascha,
könntest du mir deine Version des Hauptprogrammes für den PIC16F627A ins Reine bringen und mir evtl. zumailen?
Dem Himmel sei Dank dafür und dir natürlich besonders.
Gruss Lötlack
|
BID = 562305
Racingsascha Schreibmaschine
    
Beiträge: 2247 Wohnort: Gundelsheim
|
Was meinst du mit "ins Reine bringen"? In Assembler schreib ich ihn dir nicht (das musst du selber machen), wir sehen uns deinen Code aber gerne nochmal an. Den Pseudocode kann ich nochmal überarbeiten.
Pseudocode:
TRISA = 0x01 ;RA0 als Tastereingang
TRISB = 0x00 ;alles Output
PORTB = 0x01 ;erste led an
Main
Taster abfragen
wenn gedrückt, rlf PORTB
wenn RB3 = 1, Rb = 0x01
warten bis der taster losgelassen wurde
call warteschleife ;solange wie für Entprellen notwendig
goto Main
Da ist jetzt "Anti-Lauflicht" drin (es wird gewartet bis der Taster losgelassen wird), Die LEDn sind aber nicht kurz gleichzeitig an. Wenn du das haben willst, baust du Ltofs Vorschlag nach oder versuchst selbst, es in meine Variante einzubauen. Darüberhinaus kannst du mein Programm erweitern, indem du statt RB3 einen anderen Pin von PORTB abfrägst.
_________________
Fnord ist die Quelle aller Nullbits in deinem Computer.
Fnord ist die Angst, die Erleichterung, und ist die Angst.
Fnord schläft nie.
|
BID = 562343
BjörnB Stammposter
    Beiträge: 242 Wohnort: Dortmund
|
Zitat :
hajos118 hat am 7 Nov 2008 09:56 geschrieben :
|
Mach' ich ähnlich, nur dass ich dort den Prozessor in den "Schlaf-Modus" verbanne.
|
Danke für den Denkanstoß, das könnte ich in nachfolgenden Projekten auch mal in Erwägung ziehen, zumindest bei batteriegespeisten Schaltungen
Schönen Gruß,
Björn
|