Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Rasenmaehroboter fuer schwierige und grosse Gaerten im Test

(Interrupt: Int0)
Zeile 45: Zeile 45:
 
Sonst kann es sein, dass man den Prozessor damit blockiert.
 
Sonst kann es sein, dass man den Prozessor damit blockiert.
  
=== Timer: ===
+
=== Timer Beispiel: ===
 
<pre>
 
<pre>
  Config Int0 = Low Level ‘Configuriere Int0  auf Low Level
+
  Config Timer0 = Timer, Prescale= 8    ‘Konfiguriere Timer0
  Enable Interrupts ‘einschalten der Interrupts
+
  Enable Timer0                    ‘schalte den Timer0 ein
Enable Int0 ‘einschalten von Interrupt Int0
+
  On Timer0  Isr_von_Timer0         ‘verzweige bei Timer0 überlauf zu Isr_von_Timer0
  On Int0 Isr_von_Int0 ‘springe zu Isr_von _Int0    
+
Enable Interrupts    
 
   
 
   
 
  Do
 
  Do
Zeile 57: Zeile 57:
 
  End
 
  End
 
   
 
   
  Isr_von_Int0: ‘ISR von Int0
+
  Isr_von_Timer0: ‘ISR von Timer0
 
  .....Programm-Code
 
  .....Programm-Code
 
  Return
 
  Return

Version vom 16. Januar 2006, 09:21 Uhr

Bascom Timer (Mega8 und andere)

Zweck

Timer sind selbständige Zähler im Prozessor. Man braucht sie dort, wo zeitkritische und genaue Aufgaben gefordert sind.

Struktur:

 Config TimerXXX = Timer, Prescale= XX    ‘Konfiguriere TimerXXX
 Enable TimerXXX		          ‘schalte den TimerXXX ein
 On  TimerXXX   SprungXXX	          ‘verzweige bei TimerXXX überlauf zu SprungXXX
 Enable Interrupts		          ‘generell Interrupts zulassen
 
 Do
 ....Hauptprogramm		‘Hauptprogramm
 Loop
 End
 
 SprungXXX:			‘Unterprogramm von TimerXXX
 ....Ausführung			‘arbeitet hier etwas ab und springt mit Return 
 Return				‚ wieder zurück, zum Hauptprogramm


Zuerst muss man den zu verwendeten Timer mit „Config“, konfigurieren. Dazu definiert man ihn als Timer (mann könnte auch einen Counter daraus machen). Dazu muss man noch den Prescaler definieren. Prescaler ist der Teiler, der die Quarzfequenz reduziert und diese dann zum Timer schickt. (Sonst würde der Timer immer mit der voller Frequenz vom Quarz zählen und das würde manchmal dann zu schnell sein.)

Dann mit „Enable“ den bestimmten Timer einschalten. Mit „On“ das Unterprogramm (ISR) definieren, an die der Timer springen soll, wenn dieser überläuft. (ISR= Interrupt Service Routine) Dann das generelle Einschalten von Interrupts.

Jeder Zähler hat eine bestimmte, maximale Zählweite. Zählt er über diese, fängt er wieder bei Null an zu zählen (Überlauf). Wie weit ein Zähler zählen kann, ergibt sich aus seiner Struktur. Es gibt da 8-Bit Timer (Timer0 und Timer2, beim Mega8)und 16-Bit Timer (Timer1 beim Mega8). 8-Bit Timer zählen bis 256, 16-Bit Timer bis 65536.

Bei einem Überlauf, unterbricht der Timer das Hauptprogramm und springt in die ISR. Die ISR wird abgearbeitet und mit Return wird wieder an die Stelle zurückgesprungen, wo vorher das Hauptprogramm unterbrochen wurde.

Man soll darauf achten, dass in der ISR immer nur kurze Anweisungen abgearbeitet werden und der Hauptteil dann im Hauptprogramm bearbeitet wird. Sonst kann es sein, dass man den Prozessor damit blockiert.

Timer Beispiel:

 Config Timer0 = Timer, Prescale= 8     ‘Konfiguriere Timer0
 Enable Timer0            	        ‘schalte den Timer0 ein
 On  Timer0  Isr_von_Timer0	        ‘verzweige bei Timer0 überlauf zu Isr_von_Timer0
 Enable Interrupts	  
 
 Do
 ....Hauptprogramm
 Loop
 End
 
 Isr_von_Timer0:			‘ISR von Timer0
 .....Programm-Code
 Return

Int0 ist ein Interrupt, der ausgelöst wird, wenn am INT0 (Pin.d2 beim Mega8), eine Veränderung auftritt. (Int1 bei Pin.d3)

Es gibt für diesen Interrupt drei Einstellmöglichkeiten auf die er reagieren kann:

Low Level: reagiert solange der Pin auf Masse gesetzt wird.
Falling: reagiert nur auf eine fallende Flanke
Rising: reagiert nur auf eine steigende Flanke

Autor

Siehe auch


Baustelle.gif An diesem Artikel arbeitet gerade Mitglied Roberto.

Am besten momentan noch keine gravierenden Ergänzungen / Änderungen vornehmen.

Dieser Hinweis verschwindet wenn der Autor soweit ist. Sollte dieser Hinweis länger als drei Tage auf einer Seite sein, bitte beim Autor Roberto per PM / Mail oder Forum nachfragen ob er vergessen wurde.


LiFePO4 Speicher Test