Ik ben bezig met de bestuuring voor mijn zelf geboude robot nu wil ik deze aansluiten op mijn computer om hem van daaruit comandows te kunnen geven. Ik heb nu problemen met het verzenden vanuit de PIC zowel in de simulatie(MPLAB) als vanuit het apperaat.
Hier is een programmatje om het te testen ik heb aangegeven in het comentaar waar hij vast loopt.
De code voor de FIFO en het instellen van het bericht heb ik ff weg gelaten. Ik neem aan dat julie wel weten hoe een FIFO werkt.Ik hoop dat julie mij kunnen helpen

USART_Install
bsf INTCON,PEIE ;externe interupt aan
bsf STATUS,RP0 ;bank1
bsf TRISC,6 ; in datasheet staat
bsf TRISC,7 ; dat ze geset moeten worden
bsf TXSTA,BRGH

movlw d'129' ;baud rate generator ingestelt op
movwf SPBRG ;9600 (bij) 20MHz
bcf TXSTA,SYNC ;asynchroon modus
bcf STATUS,RP0 ;bank0
bsf RCSTA,SPEN ;usart aan zetten
return

Start_Verzenden
bsf STATUS,RP0 ;bank1
bsf TXSTA,TXEN ; verzender aan
bcf STATUS,RP0 ;bank0
movf Verzendbuffer_Nr,w ;ophalen te verzenden data
movwf Fifo_Nr
call Fifo_Lezen
movf FSR,f
btfsc STATUS,Z ;controleeren of fifo niet leeg is
goto Stop_Verzenden ;klaar met ophalen data
movf INDF,w
Verzenden_Wacht
btfss PIR1,TXIF ;dit bit zou gelijk met het setten
;van TXEN moeten setten maar dit
;gebeurt niet daarom loopt hij vast
goto Verzenden_Wacht
movwf TXREG
bsf STATUS,RP0
bsf PIE1,TXIE
bcf STATUS,RP0
retfie

ISR_Verzenden
movf Verzendbuffer_Nr,w
movwf Fifo_Nr
call Fifo_Lezen
movf FSR,f
btfsc STATUS,Z
goto Stop_Verzenden
movf INDF,w
movwf TXREG
return

Stop_Verzenden
bsf STATUS,RP0 ;bank1
bcf PIE1,TXIE
bcf STATUS,RP0 ;bank0
return

_main
call USART_Install
clrf Fifo_Nr
incf Fifo_Nr,f
call Fifo_Schrijven2
movlw d'72'
movwf INDF
call Fifo_Schrijven2
movlw d'65'
movwf INDF
; . . . ff wat code tussenuit gehaalt
movlw d'85'
movwf INDF
call Fifo_Schrijven2
movlw d'75'
movwf INDF
call Fifo_Schrijven2
movlw d'84'
movwf INDF ;Bericht HALLO-GELUKT
;staat nu in de fifo
clrf Verzendbuffer_Nr
incf Verzendbuffer_Nr,f

call Start_Verzenden
_m
nop
Goto _m
end

Beetje uitleg over de USART. RC6 en RC7 moeten inderdaad Tree-stated zijn, dus laat volgende regels bovenaan je code maar weg:
bsf TRISC,6 ; in datasheet staat
bsf TRISC,7 ; dat ze geset moeten worden
dit is niet nodig omdat na power-up alle trisbits automatisch geset zijn. Verder werkt de USART zo: Je laad een waarde in W, deze plaats je in TXREG, en de volgende instructie is deze waarde al uit TXREG verdwenen, en in het HW-TX shiftregister geplaatst.(Deze in niet readable of writable) Nu kan je al een nieuwe waarde in TXREG plaatsen. TXIF is dan al onmiddelijk geset omdat dit in 1 instructie gebeurd. De Usart is nu aan het verzenden en als je wil testen of het verzenden echt gedaan is, test dan bit TXSTA, TRMT, dit is de flag van het HW-shiftregister. Verder kan je "bsf TXSTA,TXEN ; verzender aan" beter in de initialisatie plaatsen. Plaats je 1 x een 'R' in TXREG, dan zal deze ook maar 1 x verzonden worden en dan stopt de usart met zenden, ongeacht de stand van bit TXSTA,TXEN. Zo werk ik ook, en al m'n projecten werken perfect dus...

Me viel ook op dat je nogal graag bit-gewijs werkt. Misschien kan je beter een heel register ineens initialiseren in 2 regels, werkt veeeeeel stabieler :)
bijv:
=> movlw B'10010000' ; Binair is veel overzichtelijker
=> movwf RCSTA
=> bsf STATUS, RP0
=> movlw B'10100110'
=> movwf TXSTA
=> etc...

Verder kan je miss. beter 'RADIX' gebruiken als je veel met decimale getallen werkt. Indien je deze regel (RADIX DEC) toevoegd bovenaan in je code, dan wordt ieder cijfer geaccepteerd als de ingestelde waarde.
bijv:
movlw 35 ; Deze '35' wordt geaccepteerd als decimaal 35 of .35
movwf SPBRG

Veel succes nog met je project!

de Wiebo

SETUP
=> movlw B'xxxxxxxx'
=> movwf INTCON
=> bsf STATUS, RP0
=> movlw B'xxxxxxxx'
=> movwf PIE1
=> movwf
=> movlw 35
=> movwf SPBRG
=> movlw B'10100110'
=> movwf TXSTA
=> bcf STATUS, RP0
=> movlw B'10010000'
=> movwf RCSTA
;
=> RS232_SEND
=> clrwdt
=> btfss PIR1, TXIF
=> goto $ - 2
=> bcf PIR1, TXIF
=> movwf TXREG
=> return
RS232_RECEIVE
=> clrwdt
=> btfss PIR1, RCIF
=> goto $ - 2
=> bcf PIR1, RCIF
=> movfw RCREG
=> return