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
Da li je ovaj kod tacan
Moderators: pedja089, stojke369, [eDo], trax
Re: Da li je ovaj kod tacan
Iako nisam dugo radio s PIC MCU-ima pokušat ću tii pomoć.
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).
Iako nam nisi stavio na uvid deklaracije varijabli opisao si što želiš pa ću se snać.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
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
- Nikola Tesla
Re: Da li je ovaj kod tacan
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.
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.