Problem beim Konfigurieren von EUSART PIC18 Assembler

OP #2844197
Lesenswert?

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
Gast #2844657
Lesenswert?

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.
OP #2845394
Lesenswert?

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:
1
  GOTO Init
2
; Mainprogram
3
loop 
4
  CALL get_usart
5
  GOTO loop
6

7
; Read the RC- Port
8
get_usart
9
  BTFSS PIR1, RC1IF
10
    GOTO loop
11

12
  CALL set_usart
13
RETURN
14

15
; Send to usart
16
set_usart
17
  MOVLW RCREG1
18
  MOVWF TXREG1
19
  
20
  BCF PIR1, RC1IF
21
RETURN
22

23
; Init the µc
24
Init
25
  ; Configuration of PORTA
26
  CLRF PORTA ; Clear PORTA
27
    MOVLW 0x00
28
    MOVWF PORTA
29

30
  CLRF TRISA ; Set all pins to output
31
    MOVLW 0x00
32
    MOVWF TRISA 
33

34
  CLRF ANSELA; Set all pins to digital output
35
    MOVLW 0x00
36
    MOVWF ANSELA
37

38

39
  ; Configuration of PORTB
40
  CLRF PORTB ; Clear PORTB
41
    MOVLW 0x00
42
    MOVWF PORTB
43

44
  CLRF TRISB ; Set all pins to output
45
    MOVLW 0xFF
46
    MOVWF TRISB 
47

48
  CLRF ANSELB; Set all pins to digital output
49
    MOVLW 0x00
50
    MOVWF ANSELB
51

52

53
  ; Configuration of PORTC
54
  CLRF PORTC ; Clear PORTC
55
    MOVLW 0x00
56
    MOVWF PORTC
57

58
  CLRF TRISC ; Set all pins to output
59
    MOVLW 0xF0
60
    MOVWF TRISC 
61

62
  CLRF ANSELC; Set all pins to digital output
63
    MOVLW 0x30
64
    MOVWF ANSELC
65

66
  ; Enable EUSART Receiver and Transmitter
67
  BSF RCSTA1, CREN
68
  BCF TXSTA1, SYNC
69
  BSF TXSTA1, TXEN
70
  BSF RCSTA1, SPEN
71

72
  ; initialisation Baudrate
73
  CLRF BAUDCON1
74
    MOVLW 0x00
75
    MOVWF BAUDCON1
76
  CLRF SPBRG
77
    MOVLW D'12'
78
    MOVWF SPBRG
79

80
  BCF LATC, RC6
81
  BSF LATC, RC7
82
GOTO loop

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren