> folgendes von bekannten Foren und Seiten zusammen gebastelt,
genau so siehts auch aus :-)
Im Ernst: Ich rate dir dringendst in der nächsten Buchhandlung
ein Buch über 'C' zu kaufen. Die gibts sehr oft auch mit
beigelegter CD, auf der eine Entwicklungsumgebung mit drauf
ist, die im Buch auch besprochen wird. Mach deine ersten
Gehversuche in C auf einem PC. Die Fehlersuche dort ist
wesentlich einfacher und angenehmer als mit einem µC.
Und Fehlersuchen wirst du das nächste halbe Jahr noch zur
Genüge.
Foren und Online-Tutorials sind entgegen landläufiger
Meinung kein guter Weg um programmieren an sich zu lernen.
Wenn man erst mal eine Sprache kann und die Hürden der
Programmierung genommen hat, dann ja. Dann sind sie ein relativ
guter Weg um den Umstieg von einer Sprache in eine andere zu
nehmen. Aber von der Pieke auf? Ich kenn zumindest kein
Tutorial das das könnte. Es hat schon seinen Grund warum
Online-Tutorials selten mehr als 20 Seiten umfassen, jedes
nachgeworfene Buch aber mindestens 150 Seiten hat.
Zum Programm.
Gleich vorweg: Ich kenne weder den PIC noch den konkreten
Compiler. Ich kann dir also nicht sagen ob die Register die
du benutzt korrekt sind oder nicht, oder ob es da Besonderheiten
gibt.
Aber:
Ein Vergleich wird in C mit ein == geschrieben. Ein einfaches
= hingegenist eine Zuweisung.
> if (PORTAbits.RA4 = 1)
Ist daher eine Zuweisung und nicht die Abfrage ob das Bit 4 im
Register PORAbits gesetzt ist oder nicht. Dazu müsste es heissen:
if (PORTAbits.RA4 == 1)
und damit gleich zum Stil. Am besten vergisst du gleich mal
wieder, dass du von goto und Labels je etwas gehört oder
gelesen hast. So programmiert man nicht. goto hat zwar seine
Einsatzbereiche, bis du die aber erreichst ist mindestens ein
dreiviertel Jahr vergangen.
Was willst du tun?
du möchtest, dass das Programm solange wartet, bis RA4 in
PORTAbits endlich 1 geworden ist. Mit anderen Worten:
Solange wie PORTAbits.RA4 den Wert 0 hat, soll geschehen: nichts.
'Solange, wie'. Das ist ein deutlicher Hinweis für eine Schleife.
Konkret eine while-Schleife. Den 'while' bedeutet ja (unter
anderem) im englischen: solange, wie
while( PORTAbits.RA4 == 0 )
;
while( 1 ) {
...
er Sprung aus der zweiten while Schleife heraus nach 'start'
ist ein absolutes no-no. Sowas macht man nicht. Das ist der
erste Schritt zur zu Recht verpönten Sphagetti-Programmierung.
Im Endeffekt steht man dann mit einem Programm da, dass nur noch
wie wild hin und herspringt und keiner kann nachvollziehen
(auch du nicht mehr), wann, warum und weshalb jetzt zu diesem
oder jenem Label gesprungen wird.
So wie oben: Formuliere erst mal deinen Loesungsansatz
vernünftig aus. Ohne dabei das Wort: 'gehe zu' zu benutzen.
Mit while-Schleifen, for-Schleifen ist das alles kein Problem.
Und besorg dir ein Buch.