Forum: Mikrocontroller und Digitale Elektronik 8051 Debug Deadlock bei Run, SBS geht!


von Johann85 (Gast)


Lesenswert?

Hi Jungs,

gleich zu meinem Problem: Programm in Assembler geschrieben. Debug on 
Board funktioniert step by step aber sobald man auf "Run" klickt bleibt 
er in der Initialisierung hängen und kommt noch nicht mal mehr in den 
mainloop, ab dann läuft er freudig in der Initialisierung herum. Was 
könnte das sein? Ich hab leider nicht so die Erfahrung aber der 
Controllertyp ist richtig eingestellt

Besten Dank schonmal :)

von Petra (Gast)


Lesenswert?

Hi Johann

bei den wenigen Infos werden Dir die Jungs nichts sagen können....
und uns Mädels fragst Du ja nicht.

Gruß
Petra

von Peter D. (peda)


Lesenswert?

Johann85 schrieb:
> Ich hab leider nicht so die Erfahrung aber der
> Controllertyp ist richtig eingestellt

Ooch, es gibt ja nur etwa 1063 verschiedene Typen des 8051.


Peter

von Johann85 (Gast)


Lesenswert?

Huhu Jungs und Mädls,

ihr wollt das programm ;)?! es handelt sich um einen 8051 F340 besten 
dank schonmal ;)

1
$NOMOD51                ;der Modus fuer 8051 wird abgeschaltet
2
$debug
3
$nolist                 ;es wird kein Listing fuer reg535 erstellt
4
$include(C8051F340.inc) ;die C8051F340-spezifischen Daten
5
$list                   ;es wird ein Listing erstellt
6
$title (kolben.A51)
7
;------------------------------------------------------------------------
8
;Programmbeschreibung
9
;------------------------------------------------------------------------
10
;Programm:
11
;
12
;
13
;
14
;
15
;Erstellt am: Samstag, 29. Mai 2010 13:07:59 
16
;Programmiert: 
17
;
18
;Verwendete Einspruenge: keine
19
;
20
;Verwendete Unterprogramme: keine
21
;
22
;
23
;Verwendete Register und Variable:
24
;Registerbank(0)
25
;R0-R4
26
;
27
; System clock :
28
; 12MHZ
29
; 1MHZ der Timer Clock
30
31
;Kommentar:
32
;;Timer0 -> Bremse auslösen,  auslöser = 0.1s kein Interupt0
33
;Timer1 -> Timer0 Starten,  auslöser = Motor 20s an
34
;Zuendung -> signal vom Zuendung, Zündschloss bei an auf 0 (Eingang)
35
;Bremse ->   bremssignal (Ausgang)
36
;R0 = wiederhohungen von Timer0
37
;R1 = wiederhohungen von Timer1
38
39
40
;Aenderungen:
41
42
43
;Geaendert am: Samstag, 29. Mai 2010 13:07:59
44
;
45
;
46
;------------------------------------------------------------------------
47
;Initialisierungsteil fuer allgemeine Konstanten
48
;------------------------------------------------------------------------
49
 
50
;************************************************************************
51
;*                        Konstanten-Deklaration                        *
52
;************************************************************************
53
;Timer0 Relaod Werte   Zeit= 50ms bei 1µs clk   Gewünscht 0.1s
54
55
56
57
TL0_res equ 0Afh
58
TH0_res equ 03ch
59
;Time1 Reload Werte     Zeit= 50ms bei 1µs clk  Gewünscht 20s
60
TL1_res equ 0Afh
61
TH1_res equ 03ch
62
;Variablen
63
R0_res equ 01h      ; Anzahl Wiederhohlung timer0 = 2
64
R1_res equ 028h      ; Anzahl Wiederhohlung timer1 = 40
65
66
R4_res equ 01h;01eh      ; für die Pause nach dem Klemmen R4=30
67
68
CSEG AT 0H              ; Legt absolute Codesegmentadresse auf 0h
69
ljmp INIT
70
;
71
;------------------------------------------------------------------------
72
;Interrupt-Vektoren
73
;------------------------------------------------------------------------
74
ORG  03h          ; Interrupt0
75
   call ISR_E0         ; Sprungbefehl zur eigentlichen ISR 
76
 reti
77
ORG  0bh          ; Timer0
78
   call ISR_TO         ; Sprungbefehl zur eigentlichen ISR
79
   reti
80
ORG  01bh          ; Timer1
81
   call ISR_T1         ; Sprungbefehl zur eigentlichen ISR
82
   reti
83
;------------------------------------------------------------------------
84
;Initialisierungsteil fuer On-Chip Peripherie
85
;------------------------------------------------------------------------
86
ORG 100H                ; Programmstart bei 100H
87
INIT:
88
89
call Init_Device    ; Aufruf zur Initialisierung der Controller Funktionen
90
91
; eigene Interrupt INIT
92
clr EA        ; Interrupt aus
93
  ;timer 0
94
  setb ET0        ; Timer 0 freischalten
95
  mov TH0,#TH0_res    ; Timer weite setzen (Zeit)
96
  mov TL0,#TL0_res
97
  ;Timer1
98
  setb ET1        ; Timer 1 freischalten
99
  mov TH1,#TH1_res    ; Timer weite setzen (Zeit)
100
  mov TL1,#TL1_res
101
102
  mov TMOD,#00010001b ; Modus auswählen Timer1/2 Modus1    = 16 bit timer
103
  ;Interrupt 0 (p3.2)
104
  setb  EX0      ; Interrupt0 freischalten
105
  setb IT0      ; If IT0 = 0, low level triggered external interrupt 0 is selected.
106
            ; If IT0 = 1, falling edge triggered external interrupt 0 is selected.
107
                               
108
  setb EA        ; Interrupt ein , Ende Interrupt/timer setting
109
  
110
  ;SONSTIGES
111
  
112
  mov R0,#R0_res
113
  mov R1,#R1_res
114
  mov R2,#01h
115
  mov R3,#02h
116
  mov R4,#R4_res
117
  setb P2.0      ; Bremslicht aus
118
  
119
;************************************************************************
120
;*                           Programmschleife                           *
121
;************************************************************************
122
MAINLOOP:
123
   
124
  jnb P1.0,Timer1   ; Zuendung an?
125
  jb P1.0,Timer1_aus  ; Zuendung aus?
126
    jmp MAINLOOP
127
  
128
Timer1:              
129
  setb TR1      ; Starten des timer1 
130
  jmp MAINLOOP
131
132
Timer1_aus:
133
  clr TR1        ; timer stoppen
134
  clr TR0
135
  mov TH1,#TH1_res    ; Timer zurücksetzen (Zeit)
136
  mov TL1,#TL1_res
137
  mov R0,#R0_res      ; Zähler zurücksetzen (Zeit)  
138
  mov R1,#R1_res
139
  ;setb P2.0      ; Bremslicht aus
140
  jmp MAINLOOP
141
;************************************************************************
142
;*                          Interrupts/Timer                           *
143
;************************************************************************
144
;-------------------------Auslösen der Bremse nach 100ms
145
ISR_TO:
146
  mov TH0,#TH0_res    ; Zählerweite reset (Zeit)
147
  mov TL0,#TL0_res
148
  djnz R0,T0_exit     ; Gesammte Wartezeit abgelaufen?
149
  mov R0,#R0_res      ; Schleife restart
150
  clr P2.0      ; Bremslicht Auslösen
151
  call klemmer      ; Bremslicht bleibt 6 Sekunden lang an
152
  setb P2.0      ; Bremslicht aus
153
154
T0_exit:
155
  ret
156
                        
157
;-------------------------starten des Timer0 nach 20s   
158
ISR_T1:          ; Timer1
159
  mov TH1,#TH1_res    ; Timerweite rücksetzen (Zeit)
160
  mov TL1,#TL1_res
161
  djnz R1,T1_exit    ; Gesammte Wartezeit abgelaufen?
162
  mov R1,#R1_res    ; schleife Restart
163
  setb TR0      ; Timer0 Starten
164
T1_exit:
165
  ret
166
;-------------------------Rücksetzen des Timer0 (Bremse)
167
ISR_E0:            ; Zündsignal
168
  mov TL0,#TL0_res
169
  mov TH0,#TH0_res    ; Zählerweite reset (Zeit)
170
  mov R0,#R0_res      ; Schleife Restart
171
  ret
172
;-------------------------andere Unterprogramme
173
klemmer:
174
clr EA           ; Interupts sperren
175
clr TR0
176
clr TR1
177
; interne pause
178
break:
179
djnz R2,break
180
djnz R3,break
181
djnz R4,break
182
mov R4,#R4_res
183
184
setb EA         ; Interrupts wieder freigeben
185
setb TR0
186
setb TR1
187
ret
188
189
190
; Peripheral specific initialization functions,
191
; Called from the Init_Device label
192
Timer_Init:
193
    mov  TCON,      #005h
194
    mov  TMOD,      #011h
195
  mov ckcon, #04h
196
    ret
197
198
Port_IO_Init:
199
    ; P0.0  -  Skipped,     Push-Pull,  Digital
200
    ; P0.1  -  SYSCLK,      Open-Drain, Digital
201
    ; P0.2  -  T0  (Timr0), Open-Drain, Digital
202
    ; P0.3  -  T1  (Timr1), Open-Drain, Digital
203
    ; P0.4  -  Unassigned,  Open-Drain, Digital
204
    ; P0.5  -  Unassigned,  Open-Drain, Digital
205
    ; P0.6  -  Unassigned,  Open-Drain, Digital
206
    ; P0.7  -  Unassigned,  Open-Drain, Digital
207
208
    ; P1.0  -  Skipped,     Push-Pull,  Digital
209
    ; P1.1  -  Unassigned,  Open-Drain, Digital
210
    ; P1.2  -  Unassigned,  Open-Drain, Digital
211
    ; P1.3  -  Unassigned,  Open-Drain, Digital
212
    ; P1.4  -  Unassigned,  Open-Drain, Digital
213
    ; P1.5  -  Unassigned,  Open-Drain, Digital
214
    ; P1.6  -  Unassigned,  Open-Drain, Digital
215
    ; P1.7  -  Unassigned,  Open-Drain, Digital
216
217
    ; P2.0  -  Skipped,     Open-Drain, Digital
218
    ; P2.1  -  Unassigned,  Open-Drain, Digital
219
    ; P2.2  -  Unassigned,  Open-Drain, Digital
220
    ; P2.3  -  Unassigned,  Open-Drain, Digital
221
    ; P2.4  -  Unassigned,  Open-Drain, Digital
222
    ; P2.5  -  Unassigned,  Open-Drain, Digital
223
    ; P2.6  -  Unassigned,  Open-Drain, Digital
224
    ; P2.7  -  Unassigned,  Open-Drain, Digital
225
226
    ; P3.0  -  Unassigned,  Open-Drain, Digital
227
    ; P3.1  -  Unassigned,  Open-Drain, Digital
228
    ; P3.2  -  Unassigned,  Open-Drain, Digital
229
    ; P3.3  -  Unassigned,  Open-Drain, Digital
230
    ; P3.4  -  Unassigned,  Open-Drain, Digital
231
    ; P3.5  -  Unassigned,  Open-Drain, Digital
232
    ; P3.6  -  Unassigned,  Open-Drain, Digital
233
    ; P3.7  -  Unassigned,  Open-Drain, Digital
234
235
    mov  P0MDOUT,   #001h
236
    mov  P1MDOUT,   #001h
237
    mov  P0SKIP,    #001h
238
    mov  P1SKIP,    #001h
239
    mov  P2SKIP,    #001h
240
    mov  XBR0,      #008h
241
    mov  XBR1,      #070h
242
    ret
243
244
Oscillator_Init:
245
    mov  OSCICN,    #083h
246
    ret
247
248
Interrupts_Init:
249
    mov  IT01CF,    #00h
250
    mov  IE,        #08Bh
251
    ret
252
253
; Initialization function for device,
254
; Call Init_Device from your main program
255
Init_Device:
256
    lcall Timer_Init
257
    lcall Port_IO_Init
258
    lcall Oscillator_Init
259
    lcall Interrupts_Init
260
    ret
261
262
end

von Ralf (Gast)


Lesenswert?

> bleibt er in der Initialisierung hängen und kommt noch nicht mal mehr in
> den mainloop, ab dann läuft er freudig in der Initialisierung herum.
Abgesehen von der etwas unverständlichen Formulierung...

< Debug on Board funktioniert step by step
... bedeutet das eigentlich, dass deine IDE in der Lage sein sollte, 
nach einem RUN und einem darauffolgenden STOP auf den ungefähren 
Programmteil zu zeigen, der da "loopt".

Also, was ich damit sagen will, du musst ja ungefähr vermitteln können, 
wo es hängen bleibt, und selbst wenn du dazu einzelne Initialisierungen 
z.B. in rauswirfst...

Prinzipiell behaupte ich mal, dass das:
1
djnz R4,break
2
mov R4,#R4_res
... murks ist...
Erklärt aber nicht, warum's angeblich in Single-Step läuft...

Ralf

von Ralf (Gast)


Lesenswert?

> Prinzipiell behaupte ich mal...
argl das ist ja Ende der Schleife, sorry. Verwirrender 
Programmierstil...

Mach mal den RUN/STOP-Check und poste dann, wo er stehen geblieben 
ist...

Ralf

von Johann85 (Gast)


Lesenswert?

Problem gelöst der watchdog war noch an ;) trotzdem danke an alle 
programm läuft so!

von Ralf (Gast)


Lesenswert?

argl Stimmt, das war noch was, auf was ich hinweisen wollte, passiert 
bei SiLabs-"Neulingen" gern... :) Sorry, dass ich nicht gleich dran 
gedacht hab.

Ralf

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.