8051 Timer0 initialisieren

Gast #5151209
Lesenswert?
• ▲
▼
Hallo, ich habe eine Frage zum Timer0 des Prozessors 8051 (24MHz).
Ich möchte diesen im Modus 2 (8 Bit- Auto Reload) mit t=1s betreiben.
Port 1.0 soll an und ausgeschaltet werden.
Dazu hatte ich folgenden Ansatz:

Timerfrequenz: 1/12 * 24MHz = 2000000
Timerperiode: 1/Timerfrequenz = 50ys
1s / 50ys = 20000 Befehlszyklen
ein 8 Bit Timer kann höchstens 2^8 =256 Zyklen machen, was zu klein ist, 
deshalb benutze ich eine Schleife und lade den Timer mit 56 vor, sodass 
ich eine Schleife mit 20.000 / 200 = 100 Durchläufen benötige. soweit 
die Theorie.

nun zu den Special-Function-Registern:
1
TCON: setb TR0  // TRO = 1
2
TMOD: setb M1
3
IEN0: setb EAL
4
      setb ET0
5

6
variablen im CODE-Segment:
7
mov a, #56
8
mov TH0, a
9
mov TH1, a  // Timer vorladen, sodass noch 200 Schritte benötigt werden
10

11
mov a, #100
12
mov count, a  // 100 Durchläufe
13
CLR P1.0
14

15

16
nun zur isr:
17

18
isr_timer0:
19
push psw
20
push acc
21
djnz count ,m1  ; Prüfen ob count_L nicht null ist, springe zu m1 wenn 0
22
mov count, #100  // count wieder mit 100 laden
23

24
jb P1.0, m2
25
setb P1.0
26
jmp m1
27

28
m2: clr P1.0  // einfach Port 1.0 ausschalten, hier nicht relevant
29
     
30
m1: 
31

32
pop    acc       ; Rückspeichern
33
pop    psw       ; Rückspeichern
34
reti


Ist das in der Theorie so richtig? Wird P1.0 so jede 1,6ms an und 
ausgeschaltet?

MfG Sven
#5151231
Lesenswert?
• ▲
▼
Sven schrieb:
> TMOD: setb M1

Das Bit M1 gibt es zwei mal im TMOD-Register

> mov TH0, a
> mov TH1, a  // Timer vorladen, sodass noch 200 Schritte benötigt werden

Was nun, Timer0 oder Timer1?
Du solltest TL0 auch laden, sonst stimmt der erste Durchlauf nicht. (ist 
aber meist unwichtig)

Sven schrieb:
> Ist das in der Theorie so richtig? Wird P1.0 so jede 1,6ms an und
> ausgeschaltet?

wolltest du nicht etwas im Sekundenbereich???
Gast #5151237
Lesenswert?
• ▲
▼
Route 6. schrieb:
> Das Bit M1 gibt es zwei mal im TMOD-Register
>
>> mov TH0, a
>> mov TH1, a  // Timer vorladen, sodass noch 200 Schritte benötigt werden
>
> Was nun, Timer0 oder Timer1?
> Du solltest TL0 auch laden, sonst stimmt der erste Durchlauf nicht. (ist
> aber meist unwichtig)

sorry, sollte heißen:

 mov TH0, a
 mov TL0, a

Route 6. schrieb:
> wolltest du nicht etwas im Sekundenbereich???

genau, wollte ich. Habe ich einen Fehler in der Berechnung?
Gast #5151266
Lesenswert?
• ▲
▼
Dein Code zum Initialisieren der SFR wird so nicht funktionieren. Z.B.

Sven schrieb:
> TMOD: setb M1

TMOD ist nicht Bit-adressierbar, M1 ist nicht eindeutig (mehrfach 
vorhanden für die verschiedenen Zähler).


Dein Konstrukt zum Toggeln von P1.0 dürfte zwar funktionieren, aber du 
könntest du einfacher haben:

Sven schrieb:
> jb P1.0, m2
> setb P1.0
> jmp m1
>
> m2: clr P1.0  // einfach Port 1.0 ausschalten, hier nicht relevant

macht das selbe wie
CPL P1.0
Gast #5151279
Lesenswert?
• ▲
▼
Sven schrieb:
> Könnte ich schreiben:
>
> mov a,b'00000010'
> ORL a,TMOD

schon besser, aber noch falsch ;-)

mov a,b'00000010'  ist die falsche Adressierung. Damit bekommst du den 
Inhalt von Adresse 2, nicht den Wert 2

 ORL a,TMOD damit wäre der Wert erst in a, noch nicht in tmod

funktionieren sollte

ORL TMOD,#2

Die 2 darfst du gern auch in hex oder binär schreiben, da kommt das 
Format evtl. auf den eigesetzten Assembler an.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.