EUSART plus MPLAB - komunikace s DS18B20

Panove prosim o pomoc. Kto mi strucne vysvetli funkciu tohto useku programu: Jedna sa o emulaciu USARTU na PIC (12F626; 16F676) .
Mne to akosi nedava zmysel. Alebo je v tom nejaka finta??

#define UART PORTA,0 ; UART pin

USEND MOVWF UARTREG ; odeslani bytu po UARTU
BSF STATUS,RP0
BCF UART
BCF STATUS,RP0
BSF UART

Mne sa pri prechadani tymto usekom v MPLABE totiz bit 0 portuA vobec nemeni… Preco??
Moc dakujem za vysvetlenie…
Vladimir.

:arrow_right: administrator: přejmenováno z "EUSART plus MPLAB"

lebo portA jev banke 0 res pristup nanho, kdes to v banke jedna je TRISA ktorym sa nastavuju brany na porte A bud ako vystupne 0 alebo vstupne 1

TAk ako to mas ty zapisane tazko povdedat co to bude robit… mozno to bude ovplyvnovat TRISA mozno to nebude robit nic.

no prave, to som ja vobec nepisal, vsetko je to z internetu a je to ve spojenim s DS18B20, no to ja viem ze portA je v banke 0 a trisA je v banke 1, ale co to ma za mysel, kedze sa tam v tom useku pracuje len s portomA??

Cau, jestli je to “ve spojenim s DS18B20” tak je to dobre, DS18B20 komunikuje po 1 vodici , vastavis UART jako vystup , posila uC do DS18… , vastavis UART jako vstup posila DS18… do uC, pokud si projedes tu komunikaci s DS tak je to tam vydet, jak to komunikuje,

pokud se tu porozhlidnes najdes tu “Český překlad Datasheetu čidla DS18B20”

To MiloPS3: ten usek programu sa tyka komunikacie s PC a nie s cidlom DS18B20…asi si ma nerozumel, ja nerozumiem tomu, ze pocas toho useku programu sa pracuje len s portomA , tak naco sa tam prepinaju banky??
Vladimir…

Tak jak je to napsané to nebude dělat nic, protože je definován registr PORTA a ten je v bance 0. Odstraň ze zápisu přepínání bank, vypni comparátor CMCON = 7, nastav TRISA,0 na log0 a mělo by to přepínat.
Platí pouze pro 16F676.
PIC12F626 neexistuje…

to Petr: Ahoj Peter, ale ten usek programu je “original” z tejto web stranky:
pandatron.cz/?530&uart_na_pic_-_ … covy_rs232 , prosim ta pozri sa na to… je to aj s PIC12F629 a aj s PIC16F676.
dakujem…
Vladimir…

Ach sorry Peter, je to na tejto stranke : pandatron.cz/?530&uart_na_pic_-_ … covy_rs232

Nevidím jedinej důvod, proč by toto nemělo fungovat.

#define UART PORTA,0 ; UART pin USEND MOVWF UARTREG ; odeslani bytu po UARTU BSF STATUS,RP0 BCF UART BCF STATUS,RP0 BSF UART

PORTA je v BANK0 0x05, TRISA je v BANK1 0x85, tím že se přepneš do BANK1, bude pracovat s 0x05, ale v BANK1, takže s TRISA.

To Honza3: Honzo, to co si odpvoedal je presne pravda a aj som od teba taku odpoved cakal. ja le n nechapem ako sa moze prepinat (nastavovat) bit v PorteA, ked som prepnuty v banke1 , teda na TrisA??..A naco a preco sa tam prepina TrisA??. ked je UART definovany na pin 0 portuA?? Toto keby mi niekto vysvetli ako to funguje a preco to tak je??
Dakujem vsetkym, Vladimir…

To Vladimir : my to jaksi nedocvaklo ze pin “UART” neni na komunikaci s DS18… ale funguje to podobne

jinak k problemu,
pokud mas UART nastavenej jako vystup tak prikazem BSF UART ho nastavis na log1, prikazem BCF UART na log 0,za predpokladu ze ses v Bance 0 neboli BCF STATUS,RP0 ,kdyz ho chces nastavit jako vstup tak to muzes napsat takle , prepnes Banku0 na 1 prikazem BSF STATUS,RP0 a prikazem BSF UART nastavis na vstup, ten UART mas nedefinovanej jako 0x05,0 (nebo PortA,0)pokud ses v bance 0 a 0x85,0 (nebo TrisA,0)pokud ses v bance 1, snad to pochopis

To jsem tak průhlednej ??? :blush: :blush: :smiley: :smiley:

A snad to popsal MiloPS3 dost srozumitelně. I když se to takhle nepoužívá, už třeba jen kvůli přehlednosti, funguje to.

chalani Milo a Honza… to co vy mne odpovedaate to ja vsetko davno viem, ale nachapem preco je to tak zapisane a ako to funguje, lebo to nema logiku. Tam sa predsa pracuje s pinom 0 na porteA a nie s TrisA?? a ked to simulujem v MPLABE tak sa mi prepina TrisA a nie bit 0 na potrA!! Tam je nejaka finta?? A ja neviem aka?? Ja verim ze to urcite funguje na PIC12F629 a 16F676 , ale ja to chcem aplikovat na 16F690 a na 16F887, a s tym mam problemy ci tam tento zapis bude fungovat??.. Ja sa obavam ze nie. Mate nejaky navrh ako to prepisat na 16F690, alebo 16F887??
Dakujem…

a kde berus tu jistotu ze se pracuje jenom s pinom 0 na porteA ?? protoze je to napsany v definici ?? #define UART PORTA,0 ; UART pin

je to stejny jako kdyz napises #define UART 0x05,0 , pokud ses v Bance 0 tak s tim pracujes jako PortA,0 pokud ses v bance1 tak TrisA,0 , chapes ?? to ze je tam definovano jako PortA neznamena ze se stim nemuze pracovat jinak nez jako s PortemA, to ze se prepina TrisA,0 na 0 je dobre , potrebujes ho nastavit jako vystup

Milo, ale predsa port COM1 PC je spojeny s pinom 0 portuA…

Ten zapis ti bude fungovat i 16F690 i na 16F887. Stačí se kouknout do tatasheetu na SPECIAL FUNCTION REGISTERS a tam zjistíš, že to fungovat bude
reg.jpg

je no , a …

s prominutim co na tom este nechapes ? , na zacatku USEND je UART nastaven jako vystup (bude se vysilat z PICu do PC), na konci USEND se USART nastavuje jako vstup, je to mozna kvuli skratu na zbernici ci kompabilite s dalsimy priklady ( + rychlejsi prijem dat )

Prosim vas pani, ak je to tak, nech je to tak, ale preco teda potom tieto riadky :

bsf UART (portA,0)
a
bcf UART (portA,0)

v MPLABE neprepinaju nulty bit portuA?? Teda log1 a log0??

Ked to upravim takto… tak to uz funguje aj v MPLABE (pic16F690), alebo je tao uprava spatna??

       ;BSF     STATUS,RP0  ; prepnutie banka 1
       banksel PORTA
       BCF      UART
       ;BCF     STATUS,RP0  ; prepnutie bnaka 0
       NOP
       BSF       UART

Tvojí úpravou neumožníš přepnout PORTA,0 jako vstup na konci. Pokud to bude fungovat v reálu, tak proč ne.

Jestli se muzu este zeptat , k cemu todle potrebujes ? delas nakou upravu ? ten puvodni kod funguje
BSF STATUS,RP0 / nastaveni banky 1
BCF UART / ses uz v bance1 takze nastavujes TrisA,0
BCF STATUS,RP0 / nastaveni banky 0
BSF UART / ses v bance0 (PortA,0),nastaveni pinu UART na log 1
tento kod je na zacatku odeslani bitu USEND

tydle radky ti prepinaj vystupni log uroven na pinu USART za predpokladu ze mas TrisA,0 nastavenej jako vystup (TrisA,0=0)

Prosim te hot sem kus kodu kde se to nachazi at to muzem lepe vysvetlit

tato uprava neni spatna , zalezi o co ti de , jestli o nastaveni PortuA,0 nebo TrisuA,0, (v tomdle pripade nastavujes PortA,0),ale jak sem uz psal je nutny nastavit na zacatku USEND pin USART jako vystup a nakonci USEND pin USART jako vstup z duvodu jaky uz sem popsal driv