Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem u asembler programu za PIC 16F84

[es] :: Asembler :: Problem u asembler programu za PIC 16F84

[ Pregleda: 4197 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Neofit77
Cacak

Član broj: 300773
Poruke: 2
*.dynamic.isp.telekom.rs.



Profil

icon Problem u asembler programu za PIC 16F8414.03.2012. u 16:21 - pre 146 meseci

ORG 4 ;adresa vektora interapta
ORG 5 ;pocetak programske memorije

clrf 6 ;postavlja sve pinove porta B na logicku 0
bsf 3,5 ;daje programu instrukciju da je sledeca komanda strana 1
clrf 6 ;postavlja sve pinove porta B kao izlazne
bcf 3,5 ;daje instrukciju programu da je sledeca komanda strana 0
Ap decfsz 0C,1 ;brojac od 255 do 0
goto Ap ;preskace se ovaj korak kada brojac dodje do nule
bsf 6,4 ;postavlja pin 4 porta B na logicku 1
Bp decfsz 0C,1 ;brojac od 255 do 0
goto Bp ;preskace se ovaj korak kada brojac dodje do nule

END


Prema mom shvatanju asemblera za PIC 16F84, ovaj program bi trebao da obezbedi da dioda koja je povezana za pin 4 porta B zasvetli sa kasnjenjem (zbog brojaca), ali kada sam ovaj program simulirao u proteusu, dioda se naizmenicno palila i gasila. Zbog cega? Nigde se ne vracam na neku labelu, osim na labele u brojacima, po meni bi trebala dioda samo jednom da zasvetli i onda ide kraj programa. Simulirao sam ovo u proteusu 7.5 i 7.7. i rezultat simulacije je isti. Ima li neko objasnjenje, da li je u pitanju bag programa ili ja ne shvatam pravilno koncept programa?
 
Odgovor na temu

jozimir
Sustar Jozef
Zajecar

Član broj: 19546
Poruke: 64
*.dynamic.isp.telekom.rs.



+7 Profil

icon Re: Problem u asembler programu za PIC 16F8416.03.2012. u 20:36 - pre 146 meseci
Prvo ono END je oznaka kopajleru da je kraj izvornog koda, a ne naredba mikrokontroleru da stane.

PIC, tačnije izvršenje tvog programa, možeš da zaustaviš naredbom SLEEP.

evo šta se dešava...
Tvoj program je smešten u memoriju od lokacije 5 (koju si zadao naredbom ORG 5) pa recimo do 25 (ne znam tačnu dužinu tvog koda)

Kada resetuješ odnosno uključiš PIC on PC (program counter) upisuje 5 (adresu starta programa) i kreće izvršenje tvog programa.
Nakon svake izvršene instrukcije PC se uvećava i pokazuje adresu sledeće instrukcije koja se izvršava.

Instrukcija GOTO direktno menja sadržaj PC registra pa se program izvršava od adrese koju je upisala instrukcija GOTO. Na taj način se ostvaruju skoskovi, granjanja i petlje.


Na kraju tvog programa stoji
...
Bp decfsz 0C,1 ;brojac od 255 do 0
goto Bp ;preskace se ovaj korak kada brojac dodje do nule
...

kada tvoj tvoj brojač dostgne nulu preskače se instrukcija GOTO koja je menjala sadržaj PC registra i PC se normalno uvećava. Drugi rečima nastavlja se izvrsavanje programa na dalje.

Preostale memorijske lokacije nisu ispunjene tvojim kodom i one kod praznog PIC-a imaju neku podrazumevanu vrednost a to je 00 odnosno instrukcija NOP, koja ne radi ništa (kod PIC-a je druga podrazumevana vrednost ali zbog lakšeg razumevanja trenutno smatramo da je 00 odnono NOP)

I tako PC nastavlja da se uvećava idući na sledeću instrukciju koj je NOP..... sve dok ne stigne do kraja i ne prekorači opseg.
Kada prekorači maksimalnu vrednost PC postane 0, odnosno pokazuje na početak programske memorijske, gde se na prve 4 lokacije isto nalaze NOP instrukcije i dolazi do početka tvog programa.

Da bi dobio ono što si zamislio na kraju programa, ispred naredbe END, dodaj instrukciju SLEEP koja će uspavati i zaustaviti PIC.

Inače programi za mikrokontrele se uglavnom ne pišu u tom maniru da se izvrše samo jednom. Obično stalno nešto rade i nadgledaju..

I na kraju o podrazumevanoj vrednosti u memoriji kod praznog PIC-a - ona je 3FFF, mislim da je to ADDLW, što je za priču nebitno.
 
Odgovor na temu

Neofit77
Cacak

Član broj: 300773
Poruke: 2
*.dynamic.isp.telekom.rs.



Profil

icon Re: Problem u asembler programu za PIC 16F8417.03.2012. u 00:15 - pre 146 meseci
Hvala na iscrpnom odgovoru
 
Odgovor na temu

[es] :: Asembler :: Problem u asembler programu za PIC 16F84

[ Pregleda: 4197 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.