Pfad:
Home =>
AVR-Übersicht =>
Tutorium => Teil 3
(This page in English:
)
; Test 3: Board kennenlernen, Timer im Polling mode
; Was hier Neues zu lernen ist:
; - Timer im Polling modus
; - MOV-Befehl
.NOLIST
.INCLUDE "8515def.inc"
.LIST
; Universalregister definieren
.DEF mp = R16
; Zähler für Anzahl Nulldurchgänge
.DEF z1 = R0
; Reset-Vektor auf Adresse 0000
RJMP main
; Hauptprogramm beginnt hier
main: LDI mp,LOW(RAMEND)
;Initiate Stackpointer (Unterprogramme!)
OUT SPL,mp
LDI mp,HIGH(RAMEND)
OUT SPH,mp
; Software-Zähler-Register auf Null setzen
LDI mp,0
; z1 kann nicht direkt gesetzt werden, da R0
MOV z1,mp
; Kopieren von mp in das Register z1
; Vorteiler des Zählers = 1024, 4 MHz/1024 = 3906,25 Hz
; entspricht einem Zählimpuls alle 256 µs.
LDI mp,0x05
;Initiate Timer/Counter 0 Vorteiler
OUT TCCR0,mp
; an Timer 0 Control Register
LDI mp,0xFF
; alle Bits als Ausgang
OUT DDRB,mp
; in Datenrichtungsregister
; Hauptprogramm-Loop fragt Zähler ab, bis dieser Null erreicht,
; dann wird der Softwarezähler um Eins erhöht und auf den LEDs
; ausgegeben. Das mit einer Frequenz von 15,25878906 Hz der Fall, entsprechend
; alle 65,536 ms.
loop:
IN mp,TCNT0
; Inhalt des 8-Bit-Zählers lesen
CPI mp,0
; auf Null testen
BRNE loop
; Wenn nicht null, dann wieder loop
RCALL IncZ1
; Unterprogramm Software-Zähler
erhöhen
RCALL Display
; Unterprogramm Zählerstand ausgeben
warte: IN mp,TCNT0
; Inhalt Zähler 0 lesen
CPI mp,0
; auf Null testen
BREQ warte
; Warte bis nicht mehr Null
RJMP loop
; Nächste Runde
IncZ1: INC z1
; Erhöhe Software-Zähler
RET ; Kehre zurück
ins Hauptprogramm
Display:
MOV mp,z1
; Zählerstand nach mp kopieren
COM mp
; Einer-Komplement XOR(FF) wg. Lampen
OUT PORTB,mp
; Software-Zählerstand an LEDs
RET ; Zurück
zum Hauptprogramm
©2002 by http://www.avr-asm-tutorial.net