rutina za UART asm

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
buco

rutina za UART asm

Post by buco »

Evo vam ako nemate jedna rutina za UART komunikaciju 8,N,1 moda
i nacin izracuna delay-a za odredjenu brzinu komunikacije baziran na osnovi od 1 mikrosekunde.

UART com !

SendByte: sbi DDRx, y ; x==port y pin porta // DDRB, 0
sbi PORTx, y
ldi r16, 10
com byte ; byte registar [ bilo koji // r18]
sec
lx3: brsh lx1
cbi PORTx, y
rjmp lxo
lx1: sbi PORTx, y
nop ; moze i nemora bit
lxo: ldi r17, DEL ; u DEL je izracunata vrijednost
rcall DELAY ; zove rutinu za kasnjenje
lsr byte
dec r16
brne lx3
ret
DELAY: dec r17 ; tri cyklusa
brne delay
ret
Izracun je temeljen na 1 mikro sekundi kao sto smo i rekli. Pa slijedi
1000000[1s] / transfer rate bpS == f0 [ konstana za bilo koju freqi ukazuje na broj mikrosekundi potrebnih za kasnjenje].
f0 * [ 1/ cykle time]== CYKLn [brioj ciklusa potrebnih za kasnjenje ]
CYKLn- CYKP[ broj cyklusa u petlji radi korekcije ] == REAZULTAT !!!!
E sad ako imate visoku radnu freq i mali bitrate cesto vam treba DELAY petlja pa se mora ovako REZULTAT / DELAY[ broj cyklusa u petlji] da bi dobili broj manji od 0100 tj do FFh max.
Ovaj je primjer naveden za Atmelove AVR jezgre, ali je princip izracuna univerzalan i moze se koristit za PIC serije . To je dato za sve one koji vole rad u asembleru pa posto znam da je to znao bit problem ljudima koji emuliraju UART a ne koriste HW mod stavio sam to na board.
DELAY vam kod niskih radnih freq i visokih transfer ratea na UARTU ne treba i tada imate manji broj CYKLPa.
Pozdrav
Ako vam treba i readbyte rutina recite.
Post Reply