Ovako, prvo evo rešenje za ovog tvog kolegu Sašu koji je pokrenuo ovu temu.
Iako sam rekao da neću ipak sam rešio tvoj zadatak nisam ja kriv što sam meka srca !
Zadatak je glasio :
Realizovati sistem za uključenje i vremenski ograničen rad neke mašine. Mašina po ukljucenju radi 10 sec a zatim se isključuje. Pritiskom na taster stop ciklus se u svakom trenutku može prekinuti.
PORTB.0 Pogon mašine
PORTA.0 Start mašine
PORTA.1 Stop mašine
Rješenje ovog zadatka je :
list p=16F84
#include <p16F84.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
cblock 0x0C ; Definisanje bloka konstanti
BROJAC1 ; Brojač za prvu petlju
BROJAC2 ; Brojač za drugu petlju
BROJAC3 ; Brojač za treću petlju
endc ; Kraj bloka za definisanje konstanti
bsf STATUS,RP0
movlw b'00000011'
movwf TRISA ; Pinovi RA0 i RA1 ulazi za tastere a ostalo izlazni pinovi
clrf TRISB ; Svi pinovi PORTB izlazni
bcf STATUS,RP0
movlw 0x00 ; U momentu uključenja mikrokontrolera svi pinovi
movwf PORTB ; na PORTB su u stanju log. nule da se onemogući slučajno
; uključenje mašine a pre pritiska tastera Start
Start
btfsc PORTA,0 ; Testira START taster, ako je pritisnut nastavlja se program
goto Start ; ako nije onda ide na labelu Start za ponovno testiranje tastera START
bsf PORTB,0 ; Nakon pritiska tastera START setuje se pin RB0 i uključuje mašinu
movwf .51 ; Ubacuje vrednost 51 u BROJAČ3 koliko
movwf BROJAC3 ; je otprilike potrebno da bi se imala pauza od 10 sec.
Petlja
btfss PORTA,1 ; Da li je pritisnut taster STOP ?
goto Stop ; Jeste, idi na labelu Stop isključi mašinu pa onda idi na početak programa
decfsz BROJAC1,0
goto Petlja
decfsz BROJAC2,0
goto Petlja
decfsz BROJAC3,0
goto Petlja
Stop bcf PORTB,0 ; Posle pauze od 10 sec. mašina se sama isključuje osim ako prije toga nije
; pritisnut taster STOP u petlji što će izvršenje programa direktno usmeriti
; na ovu labelu Stop i zaustaviti njen rad tj. isključiti je !
goto Start ; Ide na početak i ponovo čeka tenutak kada će se pritisnuti taster za START
end ; kraj programa
Napomena za Sašu vezana za ovaj zadatak : za treću petlju je upisana vrednost 51 u BROJAČ3 dok ostali BROJAČI imaju podrazumijevanu vrijednost od 255 ( ako nije naglašeno posebno kao u tećoj petlji onda se podrazumeva 255 ).
Izvršavanje petlje je takvo da će samo izvršavanje najčećše prolaziti kroz prvu petlju pa je zato i testiranje tastera STOP stavljeno baš u prvoj petlji odnostno neposredno prije nje što će omogućiti uslov zadatka da mašina može da se isključi u svakom trenutku kako je i zahtevano u zadatku ali ... uvek postoji ali a ovde se odnosi na sledeće :
Petlja bi po mom računu trebala trajati cca 10 sec da u njoj nema testiranja prekidača STOP a pošto je to testiranje ubačeno onda će i sama petlja trajati malo duže od potrebnih 10 sec. Tebi ostaje da smanjiš malo onu vrednost za BROJAČ3 od 51 i prilagodiš je činjenici da pauza treba da bude 10 sec. Znači nema šta da mi zameriš što nisam ja to uradio a razlog je da neću da se mučim zbog tvog zadatka a i ti ćeš nešto naučiti usput. Ali čisto napomene radi mislim da bi ta vrednost trebala biti oko 49 ( ako se ne varam po mom brzom računu ali prekontroliši ) !
Stojane vidi ( ako imaš mogućnosti i vremena ) u tvom programu za izračunavanje pauza petlji koliko će trajati izvršenje ove petlje koju sam ja napisao , naravno bez testiranja tastera STOP čisto me zanima podatak . Nadam se da nema greške jer sam zadatak pisao na brzaka - neće studenti da plate



Naravno kristal koji se koristi je podrazumevani od 4 MHz.
Toliko za ovaj zadatak !
Sada sa stefic_kg :
Ono što si napisao za tvoj zadatak nema smisla jer imaš reč gde piše PORTAB pa onda sve dalje gubi smisao. Lepo otiđi do asistenta i pitaj ga da ti precizira zadatak pa se javi. Nadam se da ću imati vremena i za tvoj zadatak ( moram ga naći jer si imam utisak dobar čovek ) !
Eto toliko , pozdrav !
[Ovu poruku je menjao Slavenko dana 16.06.2008. u 20:52 GMT+1]