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
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
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.