PIC16F877A a PIC16F627A zlobí UART
Moderátor: Moderátoři
PIC16F877A a PIC16F627A zlobí UART
- Přílohy
-
MCU.zip- (2.32 KiB) Staženo 159 x
TXREG sa automaticky prepisuje do vysielacieho po odvysielaní celého rámca t.j aj stopbitov.
Test na TMRT bit by bol dobrý iba ak pri ukončovaní (zákaz prenosu TXEN=0), aby sa neodstrihli posledné bity.
Je logické, že na riadenie prenosov postačujú RCIF, a TXIF.
Potom nasleduje povel a odpoveď. Príjem musí mať kontrolu FERR a OVERR pre prípad poruchy, a obnoviť prijímač na oboch stranách
Vyzývateľ (627) po pretečení nejakého času bez odozvy by mal zopakovať prenos-povel (kanál), alebo zahájiť opäť proces synchronizácie.
V tomto tvojom systéme, ak nastane na ktorejkoľvek strane k chybe, tak sa to zatne.
Cize si pozru ako mas nasatvene porty..aby nedochadzalo k nejakemu kvazi startu i ked pri hardw implementacii to asi nehrozi...
Až potom sa sleduje RCIF.
Pred vyslaním prvého povelu je dobré len tak bez ukladania prečítať 2x RCREG, lebo do registru sa pri zapínaní a inicializácii druhej strany môžu dostať nejaké falošné data. Tým sa vynuluje FIFO. Inak sa stane to, že vyčítané údaje budú posunuté o jeden alebo aj dva byty.
- Přílohy
-
- 16f877.asm
- (5.54 KiB) Staženo 196 x
Kód: Vybrat vše
MENU
MOVLW 0X55
SUBWF VYBER,0 ;porovnaj ak W==VYBER>je zero v STATUS
BTFSC STATUS,Z ; Zero indikator
GOTO SYNCHRO ; nie call treba odpovedat 0xAA a ide START
MOVLW B'00000001'
SUBWF VYBER,0
BTFSS STATUS,Z
GOTO PRENOSK0
MOVLW B'00000010'
SUBWF VYBER,0
BTFSS STATUS,Z
GOTO PRENOSK1
GOTO START
Kedykoľvej sa prijme "synchro" znak odošle sa odpoveď a bude sa čakať nový povel.
Kód: Vybrat vše
SYNCHRO ;SYNCHRONIZACE (POSLI ZPET 0xAA) (POKUD 0x55 PRIJATO A BEZ CHYB)
BTFSS PIR1,TXIF ;TESTOVANI ABYCHOM SI TXREG NEPREPSALI
GOTO $-1 ;
MOVLW 0xAA
MOVWF TXREG
GOTO START ; bude sa cakat odznova povel alebo synchro
Pri vysielaní sa počká na prázdny TXREG
Kód: Vybrat vše
VYSILEJL
BSF STATUS,RP0 ;BANKA1 (ADRESL JE V BANCE 1 !!! )
MOVF ADRESL,W ;do W je ulozena informace a MCU ji nasledne odesila pres UART ven
BCF STATUS,RP0 ;BANKA0
BTFSS PIR1,TXIF ;TESTOVANI ABYCHOM SI TXREG NEPREPSALI
GOTO $-1 ;
MOVWF TXREG ;presunout 8-bit hodnotu do
registru TXREG (Bank0) => nacteni dat zacina vysilani
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
VYSILEJH
MOVF ADRESH,W ;do W je ulozena informace a MCU ji nasledne odesila pres UART ven
BTFSS PIR1,TXIF ;TESTOVANI ABYCHOM SI TXREG NEPREPSALI vždy pred zápisom !
GOTO $-1 ;
MOVWF TXREG ;presunout 8-bit hodnotu do registru TXREG (Bank0) => nacteni dat zacina vysilani
RETURN