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 :)
Hi Johann bei den wenigen Infos werden Dir die Jungs nichts sagen können.... und uns Mädels fragst Du ja nicht. Gruß Petra
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
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 |
> 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
> 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
Problem gelöst der watchdog war noch an ;) trotzdem danke an alle programm läuft so!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.