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:
Code:
Config Int0 = Rising
On Int0 Taste
Enable Interrupts
Do 'Hauptschleife
Loop
Taste:
Incr X
If x >= 5 then Set Portc.1
Return
Natürlich ist es nicht fein in einer Interruptroutine groß herumzurechnen.
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
Code:
Config Int0 = Rising
On Int0 Taste
Enable Interrupts
Do 'Hauptschleife
If x >= 5 then Set Portc.1
Loop
Taste:
Incr X
Return
So,das reicht ja wohl erstmal zum Spielen.
Lesezeichen