Da dies mein erster Beitrag ist möchte ich mich erst ein mal vorstellen.
Ich heiße Benedikt und bin 13 Jahre alt.
Ich habe vor kurzem angefangen mich mit PIC´s zu beschäftigen.
Mein Problem ist das die schleife die ich programmiert habe nicht
funktioniert.
Eigentlich soll sie (nur zum Test) 5 mal den Programmabschnitt
wiederholen, doch er wird endlos wiederholt.
Ich hoffe ihr könnt mir helfen.
Und bitte ich weis das der Code vlt. ein bisschen unprofessionell ist.
Der Code --> https://www.dropbox.com/s/nx7tb96jyocuhts/For-Schleife.pdf
Es ist für uns alle, inklusive dir, viel einfacher, wenn du den Code
einfach hier einstellst anstatt ihn in einem PDF zu verpacken. Längeren
Code postet man als Dateianhang (und zwar nimmst du einfach dein Source
Code File, so wie es ist), kürzeren COde kann man einfach hier
einstellen
BSF CMCON, CM2 ; Alle porta-pins digitale i/o pins
27
; 16f628 ende
28
clrf PORTB
29
clrf PORTA
30
bsf STATUS, RP0 ; Bank 1
31
movlw Ini_opt ; pull-up Wiederstände ein
32
movwf OPTION_REG
33
movlw B'00000000' ; PortB output
34
movwf TRISB
35
movlw B'11110000' ;Porta A0 is A3 Output, A4, A5... Input
36
movwf TRISA
37
bcf STATUS, RP0 ; Bank 0
38
; --------------- Ende init
39
start
40
movlw .5
41
movwf Lauf
42
Licht
43
bsf PORTA,0
44
call wait500
45
bcf PORTA,0
46
bsf PORTA,1
47
call wait500
48
bcf PORTA,1
49
bsf PORTA,2
50
call wait500
51
bcf PORTA,2
52
call wait500
53
decfsz Lauf, .1
54
goto Licht
55
goto E
56
wait500
57
call wait100
58
call wait100
59
call wait100
60
call wait100
61
call wait100
62
return
63
wait100
64
call wait10
65
call wait10
66
call wait10
67
call wait10
68
call wait10
69
call wait10
70
call wait10
71
call wait10
72
call wait10
73
call wait10
74
return
75
wait10
76
call wait
77
call wait
78
call wait
79
call wait
80
call wait
81
call wait
82
call wait
83
call wait
84
call wait
85
call wait
86
return
87
; call Wait = 1 ms Pause
88
wait
89
movlw D'5' ; 1 ms Pause
90
movwf loops
91
Wai
92
movlw .124 ; 0,2 ms
93
movwf loops2
94
Wai2 nop ;
95
nop
96
nop
97
nop
98
nop
99
decfsz loops2, F
100
goto Wai2
101
decfsz loops, F
102
goto Wai
103
return
104
E
105
end
Ich hab den Code jetzt mal hier einkopiert (inklusive entsprchender
Tags, damit er als COde hervorgehoben wird), aber leider gehen bei der
Kopieraktion die Einrückungen verloren.
1) Du weißt, dass du Code (am besten als *.asm) auch hier in Forum
hochladen kannst?
2) Ich würde im "decfsz Lauf, .1" das ".1" durch ein "f" ersetzen,
ist leichter zu lesen.
3) Versuch mal das "goto E" durch ein "goto $" zu ersetzen.
Erst ein mal vielen Dank für die schnellen antworten.
Ich weis das es sehr umständlich ist ich war mir aber einfach nicht
sicher, ob ich den Code hier einfach in der länge reinstellen kann.
Und zum Thema ich habe jetzt das "goto E" durch ein "goto $" ersetzt und
dann hat es funktioniert.
LG Benedikt
Benedikt Oberste schrieb:> ich war mir aber einfach nicht> sicher, ob ich den Code hier einfach in der länge reinstellen kann>> Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
Falls du dich fragst, was es mit dem "goto $" auf sich hat:
$ wird von Assembler durch den Programmcounter ersetzt. "goto $" macht
also adas geiche wie
1
loop
2
goto loop
Es ist also eine Endlosschleife wie "while(1);" in C. Wenn diese fehlt,
führt der PIC den Code in nicht beschriebenen Flash (NOP) aus, bis der
Programzähler überläuft und das ganze Programm wieder von vorne beginnt.
Falls du diese Seite noch nicht kennst: http://www.sprut.de/
Hier gibt's viel Theorie und Beispiele zu PIC asm.
Eine eigene Frage?
Dieser Thread ist über 12 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.