Stránka 1 z 1
PIC16F873A a USART
Napsal: 26 lis 2007, 15:48
od Petr.
Ahoj, nezkoušel někdo rozchodit asynchronní seriovou komunikaci na PIC16F873A? Mám oscilátor 20Mhz. Všechno by mělo být nastaveno dobře, ale když PIC propojím s pc a zapnu konzoli, tak to sice vypisuje, ale blbosti. Za každou radu budu vděčný. Kdyžtak jsem někdo nepište i jak by měli být nastaveny registry. Netvrdím, že tam chyba nebude

Předem děkuji za odpovědi.
Napsal: 26 lis 2007, 16:24
od mikollar
takto to mam nastavene ja pri 16f877A , pre 20MHz treba zmenit hodnotu SPBRG
Kód: Vybrat vše
INIT
BANKSEL TRISC ; bank 1
MOVLW B'10111111'
MOVWF TRISC
;--------------------------------------------------------------------------
bsf STATUS,RP0 ; nastavení BANKY 1
; movlw .12 ; rychlost 19600b pro krystal 4,00MHz
movlw .25 ; rychlost 9600b pro krystal 4,00MHz
movwf SPBRG
; ------------------------
movlw b'00100110' ; 8bit, vysílání povoleno, asynchroní mod, vysoká rychlost
movwf TXSTA ; !!! nastavení vysílání !!!
; bsf TXSTA,BRGH ; 1=vysoká rychlost, 0=nízká rychlost
; bsf TXSTA,TXEN ; 1=povoleno vysílání, 0=zakázáno
; ------------------------
bsf PIE1,RCIE ; 1=povoleno přerušení z Rx (příjem)
; bsf PIE1,TXIE ; 1=povoleno přerušení z Tx (vysílání)
;-------------------------------
bcf STATUS,RP0 ; nastavení BANKY 0
movlw b'10010000' ; povolen sériový port, 8bit, asynchroní mod
movwf RCSTA ; !!! nastavení příjmu !!!
bsf RCSTA,CREN ; 1=povolen pokračující příjem-----------------------------------------
bsf RCSTA,SPEN ; 1=povolen sériový port RS232 (Rx/Tx)-------------------------------------
bsf INTCON,PEIE ; 1=povolena vsechna periferni preruseni
GOTO main
;----------------------------------------------------------------------------------------------------------
SER_TX btfss PIR1,TXIF ; !!! vysilani !!!
goto $-1 ; =0, 0=buffer je plny, 1=buffer je prazdny
; ------------------------
movwf TXREG ; W -> do TX registru
return
;**************************************************************************
SER_RX btfss PIR1,RCIF ; !!! prijmani !!!
goto $-1 ; =0, 0=buffer je prazdny, 1=buffer je plny
; ------------------------
movf RCREG,W ; prijmuta data -> do W
BCF PIR1,RCIF
returN
SER_TX podprogram pre odoslanie na RS232
SER_RX podprogram pre prijatie z RS232
P.S. tie bodkociarky su tam pre rozne nastavenia co sa vynechava a co nie