Forum: Mikrocontroller und Digitale Elektronik Frage zu einem Programm


von Acker (Gast)


Lesenswert?

Hi,

Kann mir mal jemand sagen was dieses Programm macht ^^

Also ich habe es geschrieben für einen Hausaufgabe bin mir aber nicht 
sicher ob es korekt läuft weil ich die Simulation von MPLAB nicht 
richtig rafe,,,

hier mal das Programm:

;project1
;----------------------------------------------------------------------- 
-----
list        p=16f84a             ; processor pic16f84a
#include    <p16f84a.inc>         ; verwendet definition
;----------------------------------------------------------------------- 
-----
__CONFIG  _CP_OFF&_PWRTE_ON&_WDT_OFF&_RC_OSC ; voreinstellungen
;----------------------------------------------------------------------- 
-----
      org      0x00             ; reset adresse 00(hex)
      goto    main             ; sprung zu main
;----------------------------------------------------------------------- 
-----
main                         ; main Programm
      bsf      STATUS,RP0           ; schaltet auf bank1
      bcf      TRISB,0            ; setzt RB0 auf out
      bcf      TRISB,1            ; setzt RB1 auf out
      bcf      TRISB,2            ; setzt RB2 auf out
      bcf      TRISB,3            ; setzt RB3 auf out
      bcf      TRISB,4            ; setzt RB4 auf out
      bcf      TRISB,5            ; setzt RB5 auf out
      bcf      TRISB,6            ; setzt RB6 auf out
      bcf      TRISB,7            ; setzt RB7 auf out
      bcf      STATUS,RP0           ; schaltet zurück auf bank0
loop

      bcf      PORTB,1             ; RB1 = 0 (0V), led aus
      bsf      PORTB,0            ; RB0 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten

      bcf      PORTB,0            ; RB0 = 0 (0V), led aus

      bsf      PORTB,1             ; RB1 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten


      bcf      PORTB,1            ; RB1 = 0 (0V), led aus

      bsf      PORTB,2             ; RB2 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten

      bcf      PORTB,2            ; RB2 = 0 (0V), led aus

      bsf      PORTB,3             ; RB3 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten

      bcf      PORTB,3            ; RB3 = 0 (0V), led aus

      bsf      PORTB,4             ; RB4 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten


      bcf      PORTB,4            ; RB4 = 0 (0V), led aus

      bsf      PORTB,5             ; RB5 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten


      bcf      PORTB,5            ; RB5 = 0 (0V), led aus

      bsf      PORTB,6             ; RB6 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten


      bcf      PORTB,6            ; RB6 = 0 (0V), led aus

      bsf      PORTB,7             ; RB7 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten

      bcf      PORTB,7             ; RB7 = 0 (0V), led aus

      bsf      PORTB,6             ; RB6 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten

      bcf      PORTB,6             ; RB6 = 0 (0V), led aus

      bsf      PORTB,5             ; RB5 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten

      bcf      PORTB,5             ; RB5 = 0 (0V), led aus

      bsf      PORTB,4             ; RB4 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten

      bcf      PORTB,4             ; RB4 = 0 (0V), led aus

      bsf      PORTB,3             ; RB3 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten

      bcf      PORTB,3             ; RB3 = 0 (0V), led aus

      bsf      PORTB,2             ; RB2 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten

      bcf      PORTB,2             ; RB2 = 0 (0V), led aus

      bsf      PORTB,1             ; RB1 = 1 (5V), led ein

      nop                     ;warten
      nop                     ;warten
      nop                     ;warten

      goto    loop             ; springt zur loop zurück
;----------------------------------------------------------------------- 
-----
      end                     ; ende der datei.

von Karl H. (kbuchegg)


Lesenswert?

Das Programm zeigt ein paar LED mehr oder weniger hell gedimmt.
Mehr tut es nicht.

Für die ursprüngliche Intention, ein Knight-Rider Lauflicht zu 
programmieren, sind die Wartezeiten viel zu kurz. Die 3 nop arbeitet der 
Prozessor in (geschätzten) weniger als 100µs ab. Das Lauflicht wird also 
in einer Sekunde sicherlich ein paar Hundert mal hin und her fetzen. Zu 
schnell, als das dein Auge das auflösen kann. Du siehst nur noch einen 
Lichtstreifen und keinen hin und her wandernden Punkt.

von Acker (Gast)


Lesenswert?

nehmen wir mal an die nop reichen für 1sec würde es dann ein lauflicht 
ergeben das nach hinten und dann wieder zurück läuft ?

wenn ja dann passt es schon unser lehrer hat gesagt 3 nop reichen um 
eine LED blinken zu lassen auf unserem Board.

von Acker (Gast)


Lesenswert?

also RB0->RB7->RB0 und dann die Loop so sollte es laufen....

von Karl H. (kbuchegg)


Lesenswert?

Acker schrieb:
> nehmen wir mal an die nop reichen für 1sec würde es dann ein lauflicht
> ergeben das nach hinten und dann wieder zurück läuft ?

So sieht es wohl aus.
Ich denke du hast das Programm geschrieben?

Ob sich bei dir ein heller Lichtpunkt bewegt oder eine dunkle 
Lichtlücke, hängt davon ab, wie die LED angesteuert werden. Das kann ich 
von hier nicht beurteilen.

> wenn ja dann passt es schon unser lehrer hat gesagt 3 nop reichen um
> eine LED blinken zu lassen auf unserem Board.

Autsch!

von Acker (Gast)


Lesenswert?

Ich verstehe nun deine antwort nicht xD

Funktioniert das lauflicht oder nicht ? die Zeit der nop´s lassen wir 
mal aus es geht mir grade um das prinzip das ist unser erstes programm 
wir haben noch nie was mit Microcontrollern gemacht des sollte ein crash 
kurs seien um einen einstieg zu finden und ich denke mal mein Lehrer 
weiss wie das Board von uns funktioniert der ist Dipe Ing und hat auch 
bevor er lehrer wurde genug mit MC´s gemacht also denke ich das mit den 
3 nops wird schon stimmen wie ers gesagt hat.

ich will nur wissen ob das lauflicht so funktioniert das ich mir sicher 
seien kann das ich denn anfang vom progen in asm richtig verstanden 
habe.


MFG
Dennis Acker

von Karl H. (kbuchegg)


Lesenswert?

Acker schrieb:
> Ich verstehe nun deine antwort nicht xD
>
> Funktioniert das lauflicht oder nicht ? die Zeit der nop´s lassen wir
> mal aus es geht mir grade um das prinzip das ist unser erstes programm
> wir haben noch nie was mit Microcontrollern gemacht

brenn es in den Prozessor und probiere es aus!
Du bringst dich doch um den halben Spass an der ganzen Sache!

> kurs seien um einen einstieg zu finden und ich denke mal mein Lehrer
> weiss wie das Board von uns funktioniert der ist Dipe Ing und hat auch
> bevor er lehrer wurde genug mit MC´s gemacht also denke ich das mit den
> 3 nops wird schon stimmen wie ers gesagt hat.

Das denke ich nicht, aber das ist ein anderes Kapitel.

> ich will nur wissen ob das lauflicht so funktioniert das ich mir sicher
> seien kann das ich denn anfang vom progen in asm richtig verstanden
> habe.

Kannst du es assemblieren?
Wenn ja, dann hast du schon mal wenigstens Befehle benutzt, die es 
tatsächlich gibt und auch sonst keine Tippfehler gemacht.

Brenn es in den µC und teste es. Testen macht mehr als 60% der 
Softwareentwicklung aus.

Und wenn du es im Moment nur simulieren kannst, dann musst du dich mit 
deiner Simulationsumgebung vertraut machen. Du wirst noch viele, viele 
Stunden mit ihr verbringen. Je besser du sie jetzt beherrschen lernst, 
desto einfacher hast du es in der Zukunft.


(Was soll den sonst rauskommen, wenn 7 Leute in einer Reihe sitzen und 
nacheinander jeder eine Tafel hochhält, ein wenig wartet und dann die 
Tafel wieder senkt während der nächste seine Tafel hochhält)

von Tip (Gast)


Lesenswert?

Acker schrieb:
> Kann mir mal jemand sagen was dieses Programm macht ^^
>
> Also ich habe es geschrieben für einen Hausaufgabe bin mir aber nicht
> sicher ob es korekt läuft weil ich die Simulation von MPLAB nicht
> richtig rafe,,,

Dann ist dir jetzt wahrscheinlich auch klargeworden, warum man im 
Kommentar ein bisschen mehr als "LED ein", "LED aus" und "warten" 
schreiben soll.

;-)

von Acker (Gast)


Lesenswert?

Tip schrieb:
> Acker schrieb:
>> Kann mir mal jemand sagen was dieses Programm macht ^^
>>
>> Also ich habe es geschrieben für einen Hausaufgabe bin mir aber nicht
>> sicher ob es korekt läuft weil ich die Simulation von MPLAB nicht
>> richtig rafe,,,
>
> Dann ist dir jetzt wahrscheinlich auch klargeworden, warum man im
> Kommentar ein bisschen mehr als "LED ein", "LED aus" und "warten"
> schreiben soll.
>
> ;-)

ich weiss ja was es machen soll ich habe es erst gestern geschrieben es 
ist aber der einstieg in die Mikrocontroler Technick deswegen will ich 
lernen dabei und wissen ob mein erstes programm funktioniert damit ich 
daraus lerne ^^

von Karl H. (kbuchegg)


Lesenswert?

Acker schrieb:

> ist aber der einstieg in die Mikrocontroler Technick deswegen will ich
> lernen dabei und wissen ob mein erstes programm funktioniert damit ich
> daraus lerne ^^


OK.
Wir helfen hier oft Leuten. Allerdings sind die dann schon auf einem 
etwas höherem Niveau.
Nichts desto trotz ist dein bester Lehrmeister immer noch dein µC. Denn 
der verzeiht nichts, der beschönigt nichts, der übersieht nichts. Der 
führt nur das aus, was du ihm aufträgst. Und wenn der µC nicht das 
macht, was du willst, dann war dein Programm falsch. So einfach ist das.
Allerdings gilt der Umkehrschluss nicht: Wenn es so aussieht, als ob der 
µC genau das macht was du willst, heißt das nicht unbedingt, das nicht 
doch noch ein Fehler enthalten ist (ist aber bei deinem Mini-Programm 
unwahrscheinlich. Kommen ja nur 3 verschiedene Befehle vor und das dann 
auch noch in einem sehr übersichtlichen Ablauf).


Was willst du jetzt hier hören?
Das dein Programm ein Lauflicht macht? Das wird dir hier so keiner 
direkt sagen, denn das kannst du auch mit deinem µC leicht feststellen. 
Brenn das Programm rein und sieh nach, ob die LED in der richtigen 
Reihenfolge aufleuchten und verlöschen. Dabei lernst du viel mehr, als 
wenn dir hier wer ein "Thumbs Up" gibt (was er sowieso nicht tun kann, 
denn dazu müsste er deine komplette Umgebung kennen)

von John (Gast)


Lesenswert?

Acker schrieb:
> nehmen wir mal an die nop reichen für 1sec würde es dann ein lauflicht
> ergeben das nach hinten und dann wieder zurück läuft ?
>
> wenn ja dann passt es schon unser lehrer hat gesagt 3 nop reichen um
> eine LED blinken zu lassen auf unserem Board.

Man könnte den PIC mit einem externen Takt von z.B.: 10 Hz betreiben.

Aus Datenblatt:
• Operating speed: DC - 20 MHz clock input

Gruß
John

von John (Gast)


Lesenswert?

Ich sehe gerade, dass in der CONFIG _RC_OSC eingestellt wird. Es ist 
damit bestimmt möglich sehr niedrige Taktfrequenzen einzustellen.

Gruß
John

von Karl H. (kbuchegg)


Lesenswert?

John schrieb:
> Ich sehe gerade, dass in der CONFIG _RC_OSC eingestellt wird. Es ist
> damit bestimmt möglich sehr niedrige Taktfrequenzen einzustellen.

Glaub ich unbesehen.
Für das erste Programm mag das auch reichen und ich bin sicher sein 
Lehrer wird das ganz schnell ändern und den µC wieder auf normale 
Taktfrequenz zurückstellen.

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.