Der Generator erstellt eientlich schon ein Program das die nötigen Funktionen enhält.
Mit dem Zähler war einfach ein Byte im RAM gemeint.
Dieses decrementierst du in jedem Timerinterupt. Ist es 0 kannst du deine
Funktion ausführen.
Sieht dann etwa so aus:
Code:
; Autor : unknown
; Projekt : Test
; Datum : Thu Oct 27 2005 18:17:29 GMT+0200 (CEST)
; Quarz : 40.000 MHz
; Assembler: ASEM-51
; Generator: CodeGen Stable Version 1.1, Erik Buchmann '04
;---------------------------------------------------------------
$NOLIST
$NOMOD51
$INCLUDE (89c1051.mcu)
USING 0
$LIST
; Konstanten-, Speicher- und Portbelegung
;---------------------------------------------------------------
timer0_ext24 DATA 08h
TL0PRE EQU 219
TH0PRE EQU 11
TX0PRE EQU 16
; Programmbeginn
;---------------------------------------------------------------
ORG 0h
jmp start
; Interruptroutinen
;---------------------------------------------------------------
ORG 0Bh
jmp timer0_int
; Funktionen
;---------------------------------------------------------------
; Interruptbehandlungsroutine Timer 0
timer0_int:
mov TL0, #TL0PRE
mov TH0, #TH0PRE
djnz timer0_ext24,timer0_int_label
mov timer0_ext24,#TX0PRE
acall timer0_int_label
;wird alle 3s ausgeführt
cpl ausgansbit
ret
timer0_int_label:
reti
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Initialisierung
;---------------------------------------------------------------
start:
; Timer 0 aktivieren
; Intervall: 300.0 ms
; Software-Kontrolle
mov TL0, #TL0PRE
mov TH0, #TH0PRE
mov timer0_ext24,#TX0PRE
; die SFR's initialisieren
mov SP, #20h
mov TMOD,#1
mov TCON,#16
mov IE, #130
; Hauptprogramm
;---------------------------------------------------------------
main:
; [...]
; Programmende
;---------------------------------------------------------------
ende:
jmp ende
END
Enstellung des Codegenerators:
Frequenz 40MHz
Timer0 aktiviert
Intervalldauer: 300.0 ms
Lesezeichen