Da li je ovaj kod tacan

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

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
Student
Posts: 11
Joined: 22-08-2011, 13:16

Da li je ovaj kod tacan

Post by Student »

Zanima me da li je kod koji sam napisao tacan.Bafer veličine 5 bajtova napuniti sa 0xFF. U prvu lokaciju posle kraja bafera upisati 0x00. Upisati u bafer 3,6,12,24. Izaći iz programske petlje kada se dođe do podatka 0x00 upisanog u bafer. U pitanju je PIC 18F4520

Main
lfsr FSR0,buffer
movlw c_buffer_length
movwf loop_counter
clrf WREG
Main_loop0
movlw 0xFF
movwf POSTINC0
decfsz loop_counter
bra Main_loop0
movlw 0x00
movff WREG,buffer_end
Main_loop1
movlw 3
rlncf WREG
rlncf WREG
rlncf WREG
movwf POSTINC0
bra Main_loop1
Main_loop2
movlw high buffer_end
cpfeq FSR0H
bra Main_loop2
movlw low buffer_end
cpfeq FSR0L
bra Main_loop2
buco-1
Napredujem
Napredujem
Posts: 105
Joined: 24-10-2010, 21:22

Re: Da li je ovaj kod tacan

Post by buco-1 »

Iako nisam dugo radio s PIC MCU-ima pokušat ću tii pomoć.
Student wrote: ..
Main_loop1
movlw 3
rlncf WREG
rlncf WREG
rlncf WREG
movwf POSTINC0
bra Main_loop1
Main_loop2
movlw high buffer_end
cpfeq FSR0H
bra Main_loop2
movlw low buffer_end
Iako nam nisi stavio na uvid deklaracije varijabli opisao si što želiš pa ću se snać.
Uvod je izgleda dobro, postavljen je indeksni registra, definirana njegova početna adresa variablom "buffer"
određena je dubina buffera varijablom koja je dodijeljena registru nazvanom loop_counter.
Sve u svemu dio programa koji ispunjava buffer s 0xFF je uredu kao i upis 0x00 u end buffer.

No središnji dio programa "Main_loop1" nije dobar, imaš jedno bezuvjetno vraćanje na početak petlje bez da je igdje u petlji postavljen uvjet izlazka iz iste.
Znači početak je zanimljiv starta s tri ali onda ide direktno na rotaciju u lijevo bez da pohranjuje sadržaj accumulatora u buffer (vrijednost 3), pošto je rotacija u lijevo isto što i množenje sa 2 imaš 6 kojeg opet ne pohranjuješ u buffer već ga množiš sa 2 ponovo pa opet i dobivaš 24. Rezultat 24 smiještaš u buffer određen indeksnim registrom (movwf POSTINC0).
E sad indeksni brojač, bar ja nevidim, nije prethodno resetiran na staru početnu adresu već dobivene rezultate smješta na nove lokacije. Naravno, i ovo, nesjećam se točne fukcije ove naredbe "rlncf" osim što je očito da rotira u lijevo accumulator (registr W).
Today's scientists have substituted mathematics for experiments, and they wander off through equation after equation, and eventually build a structure which has no relation to reality.
- Nikola Tesla
Student
Posts: 11
Joined: 22-08-2011, 13:16

Re: Da li je ovaj kod tacan

Post by Student »

Upisati u bafer 3,6,12,24. To se radi ja mislim ovako:

movf 3
rlncf
rlncf
rlncf
movf IND0,W

Problem je sto ne znam kako da rotiram sadrzaj f registra. Gledao sam u data Sheet na strani 300.
Post Reply