Forum: Mikrocontroller und Digitale Elektronik Problem beim Konfigurieren von EUSART PIC18 Assembler


von David M. (mic_dave)


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

von SCL SDA (Gast)


Lesenswert?

>BTFSS LATA, RA0
>BSF LATA, RA0

>BTFSC LATA, RA0
>BCF LATA, RA0

Irgendwie... Hmmm. Hängt deine LED gegen Vcc?
Dann hab ich vielleicht was für dich.

von Der Rcher der Transistormorde (Gast)


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.

von David M. (mic_dave)


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

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.