PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit 8051 Timer



Finwe09
26.10.2005, 10:36
Hallo zusammen,

ich hab ein kleines Problem bei der Erstellung eines HIGH to LOW Levels mit meinem µC Timer. Ich arbeite mit einem µPSD33XX der auf einem 8051 aufbaut.

Für eine bestimmte Anwendung brauche ich eine Periodendauer von ca.5s, ist es überhaupt mögliche eine solche zu generieren?

Wenn ja, weiss vielleicht einer welche Einstellung oder Rückkopplungen ich tätigen muss???

Gruss Finwe

Sandro
26.10.2005, 13:29
Möglich ist das schon.
Du musst aber einen weiteren Zähler in dem Timerinterupt mitlaufen lassen.

Ohne deine Tacktfrequenz zu kennen kann ich dir natürlch nicht die richtigen
Einstellungen nennen.

Am einfachsten wird es sein wenn du sie dir von diesem Codegenerator (http://wwwiti.cs.uni-magdeburg.de/~buchmann/privat/generator.htm) berechnen lässt.

Finwe09
27.10.2005, 11:15
Also das mit dem Timer High und Low Byte rechnet der Generator aus...
aber ich weiss leider nicht welche zusätzlichen Einstellungen ich tätigen muss, z.B. Zähler mitlaufen lassen. Vielleicht kannst du mir das anhand eines Beispiels zeigen.

Bsp.: Duty Cycle 50%, und Periodendauer 6 sec

Sandro
27.10.2005, 17:21
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:


; 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