Hallo, bin noch neu in der Thematik Mikrocontroller. Habe ein Programm für den ATmega8 geschrieben der sihc auf einem STk500 befindet.Das Programm soll in bestimmten Zeitzyklen eine ADWandlung durchführen.Durch ein Timer-Überlauf Interrupt wird der Zeitpunkt definiert und durch eine zweite SIR (USART_RXC) möchte ich gern einen der drei Analogeingänge durch ein gesendetes Zeichen auswählen. Ich kann zwar über das senden der Zeichens "A" den ADC0 ansprechen+LED an PortD2, durch senden des Zeichens "b" den ADC2+LED an PortD4 aber es gelingt mir nicht immer (selten) mit Zeichen "C" den ADC1 anzusprechen. Woran kann das liegen? Würde mich über Lösungsvorschläge sehr freune, kann auch sein das ich in der Programm initialisierung einen Fehler gemacht habe, wie gesagt habe noch nicht die große Erfahrung. DAnke und Gruß
USART_RXC: cli //überflüssig push r16 ; Register temp auf Stapelspeicher sichern uber1: ; überprüft ob ein a gesendet wurde in r16,udr ; Register UDR einlesen cpi r16,'A' ; überprüfen ob ein a empfangen wurde brne uber2 ; wenn kein a empfangen wurde springe zu uber2 ldi r16, 0b00100000 ; Siehe Datasheet S.202/203 out ADMUX, r16 cbi portd,3 cbi portd,4 sbi portd,2 ; Anzeige Kanal rjmp weiter ; springe zu raus2 uber2: in r16,udr ; Register UDR einlesen //hier der Hauptfehler, du hast UDR schon gelesen //nimm ein zweites Register cpi r16,'C' ; überprüfen ob ein C empfangen wurde brne uber3 ; wenn kein a empfangen wurde springe zu uber2 ldi r16, 0b00100001 ; Siehe Datasheet S.202/203 out ADMUX, r16 cbi portd,2 cbi portd,4 sbi portd,3 ; Anzeige Kanal rjmp weiter ; springe zu raus2 uber3: in r16,udr ; Register UDR einlesen cpi r16,'b' ; überprüfen ob ein b empfangen wurde brne uber3 ; wenn kein a empfangen wurde springe zu uber2 ldi r16, 0b00100010 ; Siehe Datasheet S.202/203 out ADMUX, r16 cbi portd,2 cbi portd,3 sbi portd,4 ; Anzeige Kanal weiter: ldi zh,0 ; z-pointer auf unteren speicherbereich legen 0x60 ldi zl,adresse pop r16 ; temp wieder vom Stapelspeicher holen reti ; Interruptroutine verlassen //Ansonsten solltest du auf jeden Fall das SREG sichern
Hi, ich würde UDR nur einmal lesen, d.h. "in r16,udr" direkt hinter push r16 plazieren. Bei "uber3" stimmt was nicht du schreibst wenn kein a empfangen wurde zu "uber2" verzweigt werden soll aber du verzweigt zu "uber3". Gruss, HBY
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.