Ja,woher kommen die Impulse ?
Taste oder ein sauberes Signal ?
Für ne Taste reicht dieser Codeschnipsel aus
Code:Do 'Hauptschleife Debounce Pinb.1 , 1 , Taste , Sub Loop Taste: Incr X If x >= 5 then Set Portc.1 Return
Bei einem anderen Signal würde das prinzipiell auch reichen aber wenn das sehr kurz ist dann muß das Programm schnell reagieren können und ein Poll würde evtl. nicht mehr reichen.(Mit Config Debounce ist da noch einwenig rauszuholen)
Da wäre ein Interruptbetrieb sinvoller.
Das geht natürlich nur wenn der Controller auch einen Externen Int besitzt.
Also zb. so:
Natürlich ist es nicht fein in einer Interruptroutine groß herumzurechnen.Code:Config Int0 = Rising On Int0 Taste Enable Interrupts Do 'Hauptschleife Loop Taste: Incr X If x >= 5 then Set Portc.1 Return
Der Grund ist das es Zeit kostet (LCD oder Serielle Ausgaben sind besonders Tödlich) und in dieser Zeit ein Weiteres Ereignis verloren gehen kann bzw. sich so mehrere Interrupts verschachteln können und dann der Stack überläuft usw. usw.
Deswegen gilt für Int. "Halte dich kurz"
Man kann also nur ein Flag setzen und die Abfrage dann woanders hinsetzen.
Zb. So
So,das reicht ja wohl erstmal zum Spielen.Code:Config Int0 = Rising On Int0 Taste Enable Interrupts Do 'Hauptschleife If x >= 5 then Set Portc.1 Loop Taste: Incr X Return







Zitieren

Lesezeichen