Forum: Mikrocontroller und Digitale Elektronik Problem mit MOV A,SBUF


von Werner L. (welu)


Angehängte Dateien:

Lesenswert?

Hallo,

Bin gerade dabei mich auf den AT89C4051 einzuarbeiten.
Habe ein Programm mit der seriellen Schnittstelle geschriben welches
beim Empfang eines Wertes diesen um 10 erhöht und anschließend wieder
zurücksendet.
Doch irgendwie will der Inhalt von SBUF nicht in den Akku übertragen
werden - siehe Sourcecode->

isr_ser:        PUSH  PSW
    JBC  TI,end_isr_ser  ;wenn TI gesetzt -lösche und          springe 
zum
Label
    MOV  A,SBUF    ;wenn RI: SBUF in den Akku
    MOV  st_received,A  ;Empfangenes Byte abspeichern
    SETB  received  ;signalisieren Byte empfangen
    CLR  RI    ;Empfangsbit löschen
end_isr_ser:  POP  PSW
    RETI


Danke

Werner

Verwende Keil µVision2

von Peter D. (peda)


Lesenswert?

Schmeiß mal das PUSH PSW und POP PSW aus dem Unterprogramm raus, sowas
macht man nicht.

Aber im Interrupthandler kannst Du es zur Vorsorge drin lassen, auch
wenn bisher keine Instruktion das PSW ändert, vielleicht erweiterst Du
das Programm noch.

Was aber reingehört, ist das Sichern der verwendeten Register, in
Deinem Fall des ACC.


Was auf keinen Fall geht, ist fürs Empfangen ein Interrupt und Senden
im Polling, da beides den gleichen Interruptvektor hat.

Du mußt Dich also entscheiden, entweder Interrupt odr Polling für
beides.


Peter

von Werner L. (welu)


Lesenswert?

Danke Peter für die Hinweise.

Werner

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.