Forum: Mikrocontroller und Digitale Elektronik Microcontroller 8051 Programm Problem


von J&J (Gast)


Lesenswert?

1
include reg_52.pdf
2
3
  code at 0
4
5
      sjmp  init          ;springe zu init
6
        
7
      org 03h            ;Einsprungadresse Externer Interrupt 0
8
      sjmp  ISR_EX0
9
      org 0bh            ;Einsprungadresse Timer Interrupt 0
10
      sjmp  ISR_T0
11
      org 13h            ;Einsprungadresse Externer Interrupt 1
12
      setb TR0
13
      ;sjmp  ISR_EX1
14
      org 1bh            ;Einsprungadresse Timer Interrupt 1
15
      sjmp  ISR_T1
16
17
  
18
init:    setb  EA            ;Globale Interruptfreigabe 
19
      setb  EX0          ;Freigabe Ext. Interrupt 0
20
;      setb  EX1          ;Freigabe Ext. Interrupt 1    
21
      setb  ET0          ;Freigabe Timer Interrupt 0    
22
      setb  ET1          ;Freigabe Timer Interrupt 1    
23
      mov  TMOD,#00010001b  ;T1/T0 Modus 1: 16 Bit-Timer ohne nachladen    
24
      mov   TCON,#00000101b  ;EX1/EX0 bei abfallender Flanke, Timer ausgeschalten    
25
      setb  P3.7          ;Aktiviere linke 7-Segment-Anzeige    
26
      clr  P3.6          ;Deaktiviere rechte 7-Segment-Anzeige    
27
      mov  R0,#255        ;setze Register R0 auf 255;    
28
      mov   P2,#0          ;lösche 7-Segment-Anzeige
29
      mov  R1,#40d        ;setze Register R1 auf 40(dezimal)    
30
      mov  TH1,#11111111b    ;setze TH1 auf 11111111(binär)    
31
      mov  TL1,#11111111b    ;setze TL1 auf 11111111(binär)
32
haupt:   sjmp haupt          ;Programm wiederholt endlos "nichts"
33
34
ISR_EX0:
35
;      clr  EX0          ;deaktiviere Schalter für Ext. Interrupt 0
36
;      clr  EX1          ;deaktiviere Schalter für Ext. Interrupt 1
37
      cjne  R0,#15,hoch      ;obere Grenze der möglichen Töne
38
      reti              ;return
39
hoch:    inc  R0            ;Erhöhe R0 um 1
40
      acall AusEX01        ;springe zu Unterprogramm AusEX01
41
      reti
42
43
ISR_EX1:
44
;      clr  EX0          ;deaktiviere Schalter für Ext. Interrupt 0
45
;      clr  EX1          ;deaktiviere Schalter für Ext. Interrupt 1
46
      cjne  R0,#1,runter    ;untere Grenze der möglichen Töne
47
      reti              ;return
48
runter:  mov  A,R0          ;Erniedrige R0 um 3
49
      subb  A,#3          ;"
50
      mov  R0,A          ;"
51
      acall AusEX01        ;springe zu Unterprogramm AusEX01
52
      reti
53
54
AusEX01:
55
;      mov  DPTR,#seg7code    ;setze Datenpointer an symbolische Adresse seg7code
56
;      mov  A,R0          ;Kopiere R0 in Akkumulator
57
;      movc  A,@A+DPTR      ;lade seg7code in den Akku
58
;      mov  P2,A          ;Ausgabe Tonkennung
59
  mov P2,R0
60
      mov  DPTR,#tcode      ;setze Datenpointer an symbolische Adresse tcode
61
      mov  A,R0          ;Kopiere R0 in Akkumulator
62
      movc  A,@A+DPTR      ;lade tcode in den Akku
63
      mov  TH0,A          ;lade Reloadwert in TH0
64
      inc  R0            ;erhöhe R0 um 1
65
      mov  A,R0          ;Kopiere R0 in Akkumulator
66
      movc  A,@A+DPTR      ;lade tcode in den Akku
67
      mov  TL0,A          ;lade Reloadwert in TL0
68
      setb  TR0          ;starte Timer 0(Tonausgabe)
69
      setb  TR1          ;starte Timer 1
70
      ret              ;return
71
  
72
73
ISR_T0:
74
  clr TR0
75
  mov  DPTR,#tcode
76
      mov  A,R0          ;Kopiere R0 in Akkumulator
77
      movc  A,@A+DPTR      ;lade tcode in den Akku
78
      mov  TL0,A          ;lade Reloadwert in TL0
79
      dec  R0            ;erniedrige R0 um 1
80
      mov  A,R0          ;Kopiere R0 in Akkumulator
81
      movc  A,@A+DPTR      ;lade tcode in den Akku
82
      mov  TH0,A          ;lade Reloadwert in TH0
83
      inc  R0            ;erhöhe R0 um 1
84
  setb TR0
85
      cpl  P2.0          ;Invertiere P2.0(Tonerzeugung)
86
      reti              ;return
87
  
88
89
ISR_T1:
90
      mov  TL1,#11111111b    ;setze TH1 auf 11111111(binär)
91
      mov  TH1,#11111111b    ;setze TL1 auf 11111111(binär)
92
      djnz  R1,loop0        ;Erniedrige R1 um 1; wenn nicht 0, springe zu Marke "loop0"
93
      clr  TR0          ;stoppe Timer 0(Tonausgabe)
94
      clr  TR1          ;stoppe Timer 1
95
;      setb  EX0          ;aktiviere Schalter für Ext. Interrupt 0
96
      setb  EX1          ;aktiviere Schalter für Ext. Interrupt 1
97
      mov  R1,#40d        ;setze Register R1 auf 40(dezimal)
98
loop0:  reti
99
100
101
102
seg7code:
103
  DB 01101100b
104
  DB 01111110b
105
  DB 11101100b
106
  DB 11101000b
107
  DB 11101110b
108
  DB 11111010b
109
  DB 11011010b
110
  DB 01101100b 
111
112
tcode:
113
DB 00000000b, 11111111b;  DB 00001110b, 11101000b ;c3
114
  DB 00001101b, 01001001b ;d3
115
  DB 00001011b, 11010110b ;e3
116
  DB 00010110b, 01010010b ;f3
117
  DB 00001001b, 11110111b ;g3
118
  DB 00001000b, 11100000b ;a3
119
  DB 00000111b, 11101000b ;h3
120
  DB 00000111b, 01110100b ;c4

Vermutlicher Fehler beim nachladen der Timer kann uns jemand 
weiterhelfen ?

: Bearbeitet durch Moderator
von J&J (Gast)


Angehängte Dateien:

Lesenswert?

Vermutlicher Fehler beim nachladen der Timer kann uns jemand 
weiterhelfen ?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du hättest die Fehlerbeschreibung weglassen können, oder einfach nur 
schreiben "geht nicht".

So aber können wir gar nicht genug raten, was Dein Problem nun sein mag 
... Spielverderber!

--

Mit anderen Worten: Ein wenig mehr Mühe solltest Du Dir bei Deiner 
Fehlerbeschreibung schon machen. Du könntest beispielsweise beschreiben, 
was Du meinst, was Dein Programm machen sollte und warum, und was Du 
stattdessen wahrnimmst, und wie Du das diagnostiziert hast.

Hier über 3 kByte Assemblerquelltext hinzurotzen mit einer sechs Wörter 
langen "Fehlerbeschreibung" ... nee, das kommt nicht gut an.

von Hans (Gast)


Lesenswert?

J&J schrieb:
> include reg_52.pdf

Eine PDF in das Programm einzubinden gefällt den Assembler bestimmt 
nicht.

von Kaj (Gast)


Lesenswert?


von Günther B. (binaerguenther)


Lesenswert?

Assembler hat generell keine Probleme damit PDF-Dateien einzubinden. Ich 
persönlich verwende auch die reg_52.pdf und es funktioniert ohne 
Probleme.

von Reinhard D. (decimalreinhard)


Lesenswert?

Kaj schrieb:
> doppel post
> Beitrag "Assembler 8051 Programm funktioniert nicht wie gewollt"

Du musst wohl blind auf beiden Augen sein. Es sind zwei komplett andere 
Quelltexte...

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

J&J schrieb:
> Vermutlicher Fehler beim nachladen der Timer kann uns jemand
> weiterhelfen ?

 Wenn aus #tcode ein 16bit Wert gelesen wird, aber Pointer darauf
 nur einmal erhöht wird, passiert so etwas.

von Reinhard D. (decimalreinhard)


Lesenswert?

Marc V. schrieb:
> Wenn aus #tcode ein 16bit Wert gelesen wird, aber Pointer darauf
>  nur einmal erhöht wird, passiert so etwas.

Im #tcode sind doch 8bit Werte, die gelesen werden?
wo sollte dann darin der Fehler liegen?

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Reinhard D. schrieb:
> Im #tcode sind doch 8bit Werte, die gelesen werden?
> wo sollte dann darin der Fehler liegen?

 Da wird zweimal ein 8bit Wert ausgelesen, der Pointer darauf aber
 nur einmal erhöht.
 Es wird zwar auf anderer Stelle im Programm Pointer erhöht und auch
 um 3 verkleinert, aber da wird einem schwindelig von hoch- und
 runterspringen.
 Werte für TH und TL werden aus Nirwana geholt.
 So macht man das nicht.

von Peter D. (peda)


Lesenswert?

J&J schrieb:
> acall AusEX01        ;springe zu Unterprogramm AusEX01
> mov  A,R0          ;Kopiere R0 in Akkumulator
> dec  R0            ;erniedrige R0 um 1

Solche sinnlosen Kommentare sollte man sich schenken.

Beschreibe doch erstmal den grundsätzlichen Funktionsablauf und was das 
Programm überhaupt machen soll.
Im allgemeinen fällt einem dabei oft schon der Fehler auf.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hans schrieb:
> Eine PDF in das Programm einzubinden gefällt den Assembler bestimmt nicht.
Dem Assembler ist die Datei-Extension egal. Du kannst auch eine 
EXE-Datei einbinden, wenn sie sinnvollen Assemblertext enthält. Hier 
heißt PDF vermutlich "Pre-Defined-Functions" oder sowas ähnliches.

Reinhard D. schrieb:
> Du musst wohl blind auf beiden Augen sein.
Das ist aber ein Bummerang zusammen mit der gewagten These:
> Es sind zwei komplett andere Quelltexte...
Sie sind ganz offensichtlich zu mindestens 50% so gleich, dass sie den 
selben Vater und die selbe Mutter haben. Warum setzt J&J und du euch 
nicht zusammen und diskutiert das gleich nach dem Unterricht mal durch? 
Dabei lernt man einiges...

von nemesis... (Gast)


Lesenswert?

Beitrag #4602282 wurde von einem Moderator gelöscht.

Lothar M. schrieb:

Warum hast du denn meinen Post gelöscht? War der Hinweis auf den
Debugger falsch? Beantworte doch bitte mal diese Frage ohne Umschweife.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.