Steficu iako zadatak radi ( tako si rekao ) on nije dovoljno dobro napisan a evo i zašto. Kada se piše kod u bilo kom programu teži se tome da taj kod bude napisan u što manje linija jer će ostati više mesta za ostatak koda ako ga ima a i sam program će se brže izvršavati. U kompleksnim programima to jeste problem ako se programira u asembleru i verovatno uvek postoji nešto kraće mada sve zavisi i od logike kojim si krenuo u pisanje koda. Konkretno u tvom zadatku je evidentno napisano previše koda pa mi malo čudno da to asistent toleriše a evo o čemu se radi :
Napisao si :
Code:
;************************ Podešavanje Portova *********************************************
movlw 0x00 ; U momentu ukljucenja mikrokontrolera svi pinovi
movwf PORTA ; na PORTA i PORTB su u stanju log. nule da se onemoguci slucajno
movlw 0x00 ; ukljucenje mašine a pre pritiska tastera Start
movwf PORTB
Komentar na prethodni kod : Kada imaš ovakvu situaciju da na oba porta treba da postaviš stanja koja odgovaraju logičkoj nuli onda nema svrhe pisati 4 linije koda. Kada si na početku ovog koda napisao da je :
movlw 0x00 a to znači da u W - Working ili radni registar ubacuješ sve nule. Kada si to jednom uradio onda nema potrebe da pišeš i drugi put istu naredbu jer je u W registru još uvek stanje koje si "stavio" na početku. Poenta, je da će sadržaj W registra biti promenjen tek ako je u njega upisano nešto drugo a sve dotle zadržava stanje koje si postavio.
Kraći kod bi mogao da bude kao :
Code:
movlw 0x00
movwf PORTA
movwf PORTB
A još kraći kod koji bi obavljao istu funkciju bio bi ispisan u samo dve linije a to je :
Code:
clrf PORTA
clrf PORTB
Postoji još kraći kod s obzirom na uslove zadatka. Rečeno je da je na PORTB.0 vezan motor a na PORTA su tasteri a pošto je to tako onda nema svrhe postavljati PORTA na nulu jer je motor vezan na PORTB pa samo njega i treba uzeti u obzir pa onda deo koda od 4 linije može da se zameni sa :
Code:
clrf PORTB
ili ako baš ciljaš na PORTB.0 jer je konkretno na taj izlaz vezan motor može da se napiše :
Code:
bcf PORTB,0
Takođe deo koda koji si napisao :
Code:
;************************ Ukljuci masinu ********************************
movlw b'00000001'
movwf PORTB ; ukljucuje mašinu
goto Start
može kraće da se napiše kao :
Code:
;************************ Ukljuci masinu ********************************
bsf PORTB,0 ; uključuje mašinu
goto Start
i naravno deo koda na kraju koji si napisao kao :
Code:
;************************* iskljuci masinu *************************
Iskljucenje
movlw b'00000000' ;iskljuci masinu stavljajuci 0 u registar W.
movwf PORTB
goto Start
može kraće da se napiše kao za jednu programsku liniju kao :
Code:
;************************* iskljuci masinu *************************
Iskljucenje
bcf PORTB,0 ;isključi mašinu stavljajući 0 na bit0, PORTB
goto Start
Nadam se da mi ne zameriš ovim konstatacijama, ali vas moraju učiti da napišete funkcionalan i što kraći kod. Opet ponavljam ovde se to jako dobro vidi ali u komplikovanijim zadacima može da se nađe koja linija više nego što bi trebalo a da to možda ostane neprimećeno.
Pitao si :
Citat:
Meni nije jasno sta je: D'173', D'237', D'51'.
Jel to decimalan broj?
Odgovor je : Da to je decimalan broj odsnosno decimalni brojevi !
Da li ti je algoritam dobar ?
Pa nisam baš siguran na čemu se kod vas insistira, tako da ja algoritam ne bih komentarisao ako mi ne zameraš !
[Ovu poruku je menjao Slavenko dana 03.07.2008. u 12:48 GMT+1]