Hallo zusammen,
irgendwie will meine EUSART- Schnittstelle nicht so, wie ich es will.
Das Ziel ist momentan eigentlich nur, eine LED zum Tooglen zu bringen.
Egal, welche Taste gedrückt wurde.
Hier ist der Codeausschnitt:
1
CALL init_usart
2
GOTO loop
3
4
loop
5
CALL get_usart
6
GOTO loop
7
8
init_usart
9
10
MOVLW 0x20
11
MOVWF TXSTA1
12
MOVLW 0x90
13
MOVWF RCSTA1
14
15
; Sende- und Empfangsinterrupt ausschalten
16
MOVLW 0
17
MOVWF RC1IE
18
19
MOVLW 0
20
MOVWF TX1IE
21
22
; Baudrate einstellen
23
MOVLW 0x00
24
MOVWF BAUDCON1
25
26
MOVLW D'25'
27
MOVWF SPBRG
28
29
; Schreibe- und Leseregister löschen
30
MOVLW 0
31
MOVWF TX1REG
32
33
MOVLW RC1REG
34
MOVWF TEMP
35
36
BSF TRISC, RC7 ; RX- Modul
37
BCF TRISC, RC6 ; TX- Modul
38
39
BSF LATC, RC1
40
41
RETURN
42
43
get_usart
44
BSF LATC, RC0
45
46
BTFSC RCSTA1, FERR
47
RETURN
48
49
BTFSC RCSTA1, OERR
50
GOTO rc_cren
51
52
BTFSS PIR1, RC1IF
53
GOTO get_usart
54
55
BTFSS LATA, RA0
56
BSF LATA, RA0
57
58
BTFSC LATA, RA0
59
BCF LATA, RA0
60
61
BCF PIR1, RC1IF
62
63
RETLW RC1REG
64
65
rc_cren
66
BCF RCSTA1, CREN
67
BSF RCSTA1, CREN
68
GOTO loop
69
70
end
Das Programm Funktioniert bis jetzt wie folgt. Wenn ich eine Taste auf
der Tastatur drücke, dann geht die LED an. Drücke ich nochmal drauf
passiert nichts. Die LED bleibt jetzt immer an. Hat jemand eine Idee,
was da mit dem QT nicht stimmt?
Mit freundlichen Grüßen
David
David M. schrieb:> irgendwie will meine EUSART- Schnittstelle nicht so, wie ich es will.> Das Ziel ist momentan eigentlich nur, eine LED zum Tooglen zu bringen.> Egal, welche Taste gedrückt wurde.
Bisschen wirr, oder? Kommentiere doch erstmal die einzelnen Schritte, wo
deine Led dranhängt, isoliere die Ledsoftware und teste Sie ohne den
Uart.
Das Zauberwort heißt eingrenzen.
Hallo. Also ich habe den Fehler jetzt ein bisschen eingegrenzt. Und zwar
lasse ich mir den eingelesenen Wert ausgeben. Was ich da beobachte ist
folgendes: Starte ich den PIC, dann ist noch alles wunderbar. Drücke ich
jetzt jedoch eine Taste, dann gibt er mir ständig einen Wert raus. Also
wird anscheinend der Interruptflag nicht gelöscht. Hat jemand eine Idee,
warum das so ist?
QT update: