Evo ja sam uz svakojako istrazivanje dosao do ovog koda:
; Program za realizaciju zvuka iste frekvencije a razlicite duzine
;
; Pritiskom na taster 1 PORTB0 proizvodi se zvuk duzine 1/32 s
; Pritiskom na taster 2 PORTB1 proizvodi se zvuk duzine 1/16 s
; Pritiskom na taster 3 PORTB2 proizvodi se zvuk duzine 1/8 s
; Pritiskom na taster 4 PORTB3 proizvodi se zvuk duzine 1/4 s
; Pritiskom na taster 5 PORTB4 proizvodi se zvuk duzine 1/2 s
; Pritiskom na taster 6 PORTB5 proizvodi se zvuk duzine 1 s
; PORTA4 izlaz na zvucnik
#include "p16f84.inc" ; inicijalizaija procesora koji ce se koristiti
processor 16f84
BROJAC1 equ 0x20 ; dodeljivanje memorijskih lokacija
BROJAC2 equ 0x21
POM equ 0x22
BR equ 0x23
STANJE equ 0x24
TEMP equ 0x25 ; promenljivama
goto inicijalizacija
org 0x04
goto int
org 0x20
inicijalizacija ; inicijalizacija
clrf PORTA
clrf PORTB
clrf BROJAC1
clrf BROJAC2
clrf POM
clrf BR
clrf STANJE
clrf TEMP
bsf STATUS,RP0 ; prebaciti se u banku 1 memorije
movlw b'00111111' ; definisanje ulaznih pinova PORTAB
movwf TRISB ; nazivi registara pisu se velikim slovom
movlw b'00000000' ; definisanje da je PORTA,4 izlazni
movwf TRISA
bcf STATUS,RP0 ; vratiti se iz banke 1 memorije
movlw b'10100000' ; omogucavanje interapta u INTCON registru
movwf INTCON ; vrednost prebaciti iz akumulatora u registar
bsf STATUS,RP0 ; prebaciti se u banku 1 memorije
movlw b'00000000' ; postavljanje preskalera na 1:2
movwf OPTION_REG ; i prebacivanje u OPTION registar
bcf STATUS,RP0 ; vratiti se iz banke 1 memorije
Pocetak0 ; start glavnog programa
btfsc PORTB,0 ; provera da li je pritisnut prvi taster
goto Duzina0 ; skoci na prvu duzinu
bcf STANJE,0 ; resetuj prvi bit promenljive STANJE
Pocetak1
btfsc PORTB,1 ; provera da li je pritisnut drugi taster
goto Duzina1 ; skoci na drugu duzinu
bcf STANJE,1 ; resetuj drugi bit promenljive STANJE
Pocetak2
btfsc PORTB,2 ; provera da li je pritisnut treci taster
goto Duzina2 ; skoci na trecu duzinu
bcf STANJE,2 ; resetuj treci bit promenljive STANJE
Pocetak3
btfsc PORTB,3 ; provera da li je pritisnut cetvrti taster
goto Duzina3 ; skoci na cetvrtu duzinu
bcf STANJE,3 ; resetuj cetvrti bit promenljive STANJE
Pocetak4
btfsc PORTB,4 ; provera da li je pritisnut peti taster
goto Duzina4 ; skoci na petu duzinu
bcf STANJE,4 ; resetuj peti bit promenljive STANJE
Pocetak5
btfsc PORTB,5 ; provera da li je pritisnut sesti taster
goto Duzina5 ; skoci na sestu duzinu
bcf STANJE,5 ; resetuj sesti bit promenljive STANJE
clrf PORTA
goto Pocetak0 ; idi na pocetak
Duzina0 ; 0.032 sec.
btfss STANJE,0 ; proverava da li je taster bio pritisnut
call Vreme32ms ; poziva podprogram za trajanje zvuka od 32 ms
bcf PORTA,4 ; kraj signala za izlaz na zvucnik
bsf STANJE,0 ; setuje prvi bit u promenljivoj STANJE
goto Pocetak0 ; idi na Pocetak0
Duzina1 ; 0.064 sec.
movlw b'00000010' ; upisuje 2 u akumulator
movwf BR ; upisi 2 u promenljivu BR
Poc1
btfss STANJE,1 ; proverava da li je taster bio pritisnut
call Vreme32ms ; poziva podprogram za trajanje zvuka od 32 ms
decfsz BR ; umanji BR za 1 ako je 0 preskoci sledeci red
goto Poc1 ; idi na labelu Poc1
bsf PORTA,4 ; kraj signala za izlaz na zvucnik
bsf STANJE,1 ; setuje drugi bit u promenljivoj STANJE
goto Pocetak1 ; idi na Pocetak1
Duzina2 ; 0.128 sec.
movlw b'00000100' ; upisuje 4 u akumulator
movwf BR ; upisi 4 u promenljivu BR
Poc2
btfss STANJE,2 ; proverava da li je taster bio pritisnut
call Vreme32ms ; poziva podprogram za trajanje zvuka od 32 ms
decfsz BR ; umanji BR za 1 ako je 0 preskoci sledeci red
goto Poc2 ; idi na labelu Poc2
bsf PORTA,4 ; kraj signala za izlaz na zvucnik
bsf STANJE,2 ; setuje treci bit u promenljivoj STANJE
goto Pocetak2 ; idi na Pocetak2
Duzina3 ; 0.256 sec.
movlw b'00001000' ; upisuje 8 u akumulator
movwf BR ; upisi 8 u promenljivu BR
Poc3
btfss STANJE,3 ; proverava da li je cetvrti taster bio pritisnut
call Vreme32ms ; poziva podprogram za trajanje zvuka od 32 ms
decfsz BR ; umanji BR za 1 ako je 0 preskoci sledeci red
goto Poc3 ; idi na labelu Poc3
bsf PORTA,4 ; kraj signala za izlaz na zvucnik
bsf STANJE,3 ; setuje cetvrti bit u promenljivoj STANJE
goto Pocetak3 ; idi na Pocetak3
Duzina4 ;0.62 sec.
movlw b'00010000' ; upisuje 16 u akumulator
movwf BR ; upisi 16 u promenljivu BR
Poc4
btfss STANJE,4 ; proverava da li je peti taster bio pritisnut
call Vreme32ms ; poziva podprogram za trajanje zvuka od 32 ms
decfsz BR ; umanji BR za 1 ako je 0 preskoci sledeci red
goto Poc4 ; idi na labelu Poc4
bsf PORTA,4 ; kraj signala za izlaz na zvucnik
bsf STANJE,4 ; setuje peti bit u promenljivoj STANJE
goto Pocetak4 ; idi na Pocetak4
Duzina5 ; 1.24 sec.
movlw b'00100000' ; upisuje 32 u akumulator
movwf BR ; upisi 32 u promenljivu BR
Poc5
btfss STANJE,5 ; proverava da li je taster bio pritisnut
call Vreme32ms ; poziva podprogram za trajanje zvuka od 32 ms
decfsz BR ; umanji BR za 1 ako je 0 preskoci sledeci red
goto Poc5 ; idi na labelu Poc5
bsf PORTA,4 ; kraj signala za izlaz na zvucnik
bsf STANJE,5 ; setuje sesti bit u promenljivoj STANJE
goto Pocetak5 ; idi na Pocetak5
int
movwf TEMP ; upisi sadrzaj akumulatora u TEMP
movlw b'00101111' ; upisi 47 u akumulator
movwf TMR0 ; upisi 47 iz akumulatora u TMR0
bcf INTCON,T0IF ; resetuj bit u registru INTCON
btfss POM,0 ; provera da li je POM,0 na 1 ako jeste preskoci sledeci red
goto Aset ; idi na Aset
bcf POM,0 ; resetuj promenljivu POM,0
goto endint ; idi na endint
Aset
bsf POM,0 ; setuje POM,0 ako nije setovan
endint
movf TEMP,0 ; vrati sadrzaj iz TEMP u akumulator
retfie
Vreme32ms
movlw b'01100100' ; upisi 100 u akumulator
movwf BROJAC2 ; prepisi 100 u promenljivu BROJAC2 iz akumulatora
Pet2
movlw b'00100000' ; upisi 32 u akumulator
movwf BROJAC1 ; prepisi 32 u promenljivu BROJAC1 iz akumulatora
call Pet1 ; pozovi podprogram Pet1
decfsz BROJAC2 ; umanji BROJAC2 za 1 ako je 0 preskoci sledeci red
goto Pet2 ; idi na Pet2
return ; povratak iz podprograma Vreme250ms
Pet1 ; proizvodi 2,5 ms
btfsc POM,0 ; provera da li je POM,0 na 0 ako jeste preskoci sledeci red
goto Bset ; idi na Bset
bcf PORTA,4 ; resetuj promenljivu PORTA,4
nop
nop
nop
goto kraj
Bset
bsf PORTA,4 ; setuje PORTA,4 ako nije setovan
nop
nop
nop
kraj
decfsz BROJAC1 ; umanji BROJAC1 za 1 ako je 0 preskoci sledeci red
goto Pet1 ; idi na Pet1
return ; povratak iz podprograma Pet1
; konfiguraciona rec
__config B'11111111110001' ; nema zastite koda, powerup dozvoljeno,
; wd iskljucen, xt oscilator
end ; kraj programa
Nisam se nadao da ce mi bilo ko odgovoriti, pa nisam ni pratio toliko.
Kazite mi bar da li je ovaj kod uredu i ako nije, sta trebam da ispravim?
Hvala na svim odgovorima, i na svemu.
Apatinska pivara