ahoj lidi snažím se naprogramovat příjem dat přes uart na pic16f1936 a vubec se mi to nedaří.mohl by mi někdo napsat nastavení uart pro tento procesor v asm.předem díky
administrator: přejmenováno z "uart"
ahoj lidi snažím se naprogramovat příjem dat přes uart na pic16f1936 a vubec se mi to nedaří.mohl by mi někdo napsat nastavení uart pro tento procesor v asm.předem díky
administrator: přejmenováno z "uart"
Nejsem si jisty zda to nekdo udela za tebe … myslim ,ze je tu spousta lidi co by ti moc rada pomohla ale urcite se asi nikomu nebude chtit delat neco za tebe. Stejne budes muset premyslet.
P.S: zkus treba C… tohle si myslim, ze je jeden z PICu co by C snesl (a ted jsem si znepratelil honzu a ostatni “asm” mágy) C proto, ze je tam vetsi mnozstvi bank (i kdyz jsou temer shodne).
nectel jsem nikoho urazit
já už na tom přemýšlím dlouho a i hledám na netu ale pořád se mi nedaří a C neumím
Tohle byl můj nejoblíbenější pic, před přechodem na řadu 18F
;------------------------------------------------------------------------------
; zapnutí UARTU
;
; RYCHLOST 10417 Baud
UART_ON BANKA3
MOVLW .29 ;29 - 10417
MOVWF SPBRGL
CLRF SPBRGH
MOVLW B'01000000' ;B'01000000' - 10417
MOVWF BAUDCON
MOVLW B'00000010' ;B'00100010' - transmitt disabled
MOVWF TXSTA
MOVLW B'10010000' ;B'10010000' - 10417
MOVWF RCSTA
BANKA0
RETURN
;-----------------------------------------------------------------------------
UART_TX BANKA3
MOVWF TXREG
BANKA0
RETURN
;-----------------------------------------------------------------------------
UART_RX BANKA3
MOVF RCREG,W
BANKA0
RETURN
Lada: zavoláš UART_ON a zapneš uart, rychlost 10417 baud, asynchronní přenos jen 8b.
Odesílaný znak nahoddíš do W a zavoláš UART-TX
Příjmutí znaku, UART_RX a ve W máš znak.
PIC provozuju na 20MHz, takže si budeš muset rychlost nastavit podle svých hodin.
Pechyx: Co si Cčkem pomůže když tuhle triviální věc neudělá ani v assembleru? Nepojede mu to úplně stejně.
" zkus treba C… tohle si myslim, ze je jeden z…" -> ZKUS = vyzkouset
myslim, ze by to bylo prehlednejsi a pro nej pochopitelnejsi. Otazka byla “zacatecnicka” ,proto si myslim, ze “Lada” neni clovek, ktery se pohybuje okolo programovani kazdy den. Proto me napadlo C, coz je pro cloveka pochopitelnejsi a prehlednejsi… Programovani MCU je takova kapitola sama pro sebe a je tam spousta HW vazeb… Sam jsem zacinal na PIC a ASM pote jsem plynule presel na C, ARM a nyni ARM+linux -> C,C++,Java. Ale opravdu zridka potkam ASM a kdyz ano da to spoustu praci porozumet. Nechci byt nejak hruby a nikoho urazit ale podle mne patri ASM jen do navadecich systemu, bezpecnostnich systemu, systemu zalohy “first data” - UPS systemy nebo jinych SLS (short latenci systems).
Nevim kdo to opravdu je zda ma asm jako povinny jazyk nebo je to 50 muz co se vraci do mladi z Comodora . Ale jen jsem myslel, ze by tohle prehlednejsi:. i pro “laika” :
[code]
unsigned char TXdata(unsigned char data);
unsigned char RXdata();
unsigned char PICinit();
unsigned int main ()
{
PICinit();
while(1)
{
TXdata('A');
}
return(0);
}
unsigned char PICinit()
{
/*
.
.
.
*/
SPBRGH = 29;
TXSTAbits.TXEN = 1;
RCSTA = 0x90;
BAUDCONbits.RCIDL = 1;
return(0);
}
unsigned char RXdata()
{
return (RCREG);
}
unsigned char TXdata(unsigned char data)
{
TXREG = data;
while(!TXSTAbits.TRMT)
continue;
return(/treba/ 1);
}[/code]
tak nevím kde mám chybu snažím se poslat z jedné pic do druhé nějaká data a když v mplab simuluju vysílač tak ten jde ale přímač s tou 16f1936 mi nejde ani v simulátoru ani v reálu.dám sem testovací kod
testuart36.asm (1.54 KB)
asm není muj povinný jazyk ale už v něm nějakou dobu dělám ale zatím nikdy ne komunikaci.zvládám toho už docela dost ale tady jsem se pěkně zasekl a nevím co s tím.jo a na commodore 64 jsem programy dělal a dokonce v turbopascalu.
Mě se nikdy nepovedlo v MPLABU nasimulovat příjem přes UART.
Tady máš moje nastavení UART, PIC na 64Mhz, rychlost 57600. Snad to pomuže. Je to pro 18F46K22,ale REGy jsou stejný,až na PORTy (aspoň doufám ).
[code]
…
;portc
clrf LATC
clrf PORTC
movlw b’11011000’ ;0-OUT,1-IN
movwf TRISC
…
INIT_UART
; make sure pins are setup before calling this routine
; TRISC:6 and TRISC:7 must be set ( as for output, but operates as input/output )
; furthermore its advised that interrupts are disabled during this routine
; setup baudrate
lfsr 0,SPBRG ; setup fsr
MOVLW 0x15
MOVWF INDF0 ; and store it
lfsr 0,SPBRGH ; setup fsr
MOVLW 0x01
MOVWF INDF0 ; and store it
; enable transmitter
lfsr 0,TXSTA ; setup fsr
MOVLW (1<<TXEN) |(1<<BRGH); preset enable transmitter and low speed mode
MOVWF INDF0 ; and set it
; enable recevier
MOVLW (1<<SPEN)|(1<<CREN)|(0<<SYNC) ; preset serial port enable and continous recevie
MOVWF RCSTA ; set it
; enable reciever interrupt
lfsr 0,PIE1 ; setup fsr
BsF INDF0,RCIE ; enable reciever irq
bsf BAUDCON,BRG16
bcf BAUDCON,0 ;auto off
RETURN[/code]
tak už mi ta komunikace běží.pomohly mi ty vaše příklady tak vám všem moc díky