izmenjeno 1 put, poslednji put Slavenko 16.06.2008. u 20:52
Izmene poruke
- Slavenko16.06.2008. u 20:52zapis iz teksta poruke
OVAJ KOD NIJE DOBAR I IMA PAR GREŠAKA A ISPRAVKA JE URAĐENA NAKNADNO PAR JAVLJANJA NIŽE
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 :
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 !
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 :
Code:
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
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 !