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

PIC 16 F 84 Proizvesti zvucni signal. Pomoc, MPLAB Asembler.

[es] :: Elektronika :: Mikrokontroleri :: PIC 16 F 84 Proizvesti zvucni signal. Pomoc, MPLAB Asembler.

[ Pregleda: 1796 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mr.jelenko
Vuletic Djordje
Pejovac

Član broj: 213553
Poruke: 46
*.dynamic.isp.telekom.rs.



+1 Profil

icon PIC 16 F 84 Proizvesti zvucni signal. Pomoc, MPLAB Asembler.22.01.2013. u 12:01 - pre 136 meseci
Zadatak glasi:
Proizvesti zvucni signal razlicite ucestanosti 500Hz duzine trajanja.

PORTB.0 Pritisak na taster proizvodi zvuk koji traje 1/32 s
PORTB.1 Isto samo 1/16s
PORTB.2 1/8s
PORTB.3 1/4s
PORTB.4 1/2s
PORTB.5 1s

PORTA.4 Izlaz zvucnika

Ne trazim da mi uradite ceo zadatak, jer znam da to nije moguce. Jos uvek sam nub za mikrokontrolere, narocito za asembler.

Da li mi recimo mozete uraditi bar algoritam kako to treba da izgleda, pomoc kako dobiti odredjeno trajanje u sekundama, 500Hz, ili neke delove programa ili bilo kakvu pomoc koja ce mi pomoci pri realizaciji ovog programa.

Unapred Hvala.
Apatinska pivara
 
Odgovor na temu

Seme
Miroslav Bozic
Nis
Elektronski fakultet
Nis, Zajecar

Član broj: 43158
Poruke: 390
*.dynamic.isp.telekom.rs.

Sajt: www.ebuyelektronika.co.cc


+5 Profil

icon Re: PIC 16 F 84 Proizvesti zvucni signal. Pomoc, MPLAB Asembler.22.01.2013. u 15:47 - pre 136 meseci
Za generisanje zvuka mozes da iskoristis sledeci makro:
Code:
BEEPinit    MACRO
       bcf         STATUS, RP0
       bcf         STATUS, RP1
       bcf         BEEPport
       bsf         STATUS, RP0
       bcf         STATUS, RP1
       bcf         BEEPtris
       movlw       b'00000111'     ; TMR0 prescaler rate 1:256
       movwf       OPTION_REG      ; OPTION <- W
       bcf         STATUS, RP0
       bcf         STATUS, RP1
       ENDM
BEEP   MACRO       freq, duration
       bcf         STATUS, RP0
       bcf         STATUS, RP1
       movlw       freq
       movwf       Beep_TEMP1
       movlw       duration
       movwf       Beep_TEMP2
       call        BEEPsub
       ENDM
;**********************************************************************
; Subroutines

BEEPsub
       clrf        TMR0            ; Counter initialization
       bcf         INTCON, T0IF
       bcf         BEEPport
BEEPa
       bcf         INTCON, T0IF    ; Clears TMR0 Overflow Flag
BEEPb
       bsf         BEEPport
       call        B_Wait          ; Logic one "1" duration
       bcf         BEEPport
       call        B_Wait          ; Logic zero "0" duration
       btfss       INTCON, T0IF    ; Check TMR0 Overflow Flag,
       goto        BEEPb           ; skip next if set
       decfsz      Beep_TEMP2, f   ; Is Beep_TEMP2 = 0 ?
       goto BEEPa                  ; Go to BEEPa again
       return
B_Wait
       movf Beep_TEMP1, w
       movwf Beep_TEMP3
B_Waita
       decfsz Beep_TEMP3, f
       goto B_Waita
       return


pozivas ga na sledeci nacin:
Code:
BEEP MACRO frequency, duration

pri cemu su ti frequency i duration 8bit ni brojevi(0-255). Veci broj za frequency znaci visi ton, veci broj za duration znaci duze trajanje tona.

Sledeca stvar je obrada tastera:
Code:
;****************************************************
button MACRO port,pin,hilo,label
       local       Pressed1        ; All labels are local
       local       Pressed2
       local       Exit1
       local       Exit2
       
       IFNDEF      debouncedelay   ; Enables debounce time to be defined
                                   ; in main program
       #define     debouncedelay .10
       ENDIF
       
       IF (hilo == 0)              ; If pull-up used
       btfsc       port, pin       ; If "1", push-button is pressed
       goto        Exit1
       pausems     debouncedelay   ; Wait for 10ms debounce
Pressed1
       btfss       port, pin
       goto        Pressed1
       pausems     debouncedelay   ; Wait until released and
       goto        label           ; jump to specified address
Exit1
       ELSE                        ; If pull-down used
       btfss       port, pin
       goto        Exit2           ; If "0", push-button is released
       pausems     debouncedelay   ; Wait for 10ms debounce
Pressed2
       btfsc       port, pin
       goto        Pressed2
       pausems     debouncedelay   ; Wait until released and
       goto        label           ; jump to specified address
Exit2
       ENDIF
       
       ENDM
;**********************************************************************


U ovom slucaju makro pozivas na sledeci nacin:
Code:
button      PORTD,0,0,Play1 ;


Znaci taster je povezan na portD, pin 0, reaguje na logicku nulu tj. na pin mikrokontrolera taster je povezan preko pull up otpornika, i kada se pritisne izvrsice se skok na Play1 labelu.

Koriscenjem ova dva makroa mozes da napises svoj program, ciji je glavni deo dat ispod:
Code:

;*********************** Header ***************************************
;******************* Defining variables in program ********************
       cblock      0x20
       HIcnt                       ; Auxiliary variables for macro pausems
       LOcnt
       LOOPcnt
       PRESCwait
       Beep_TEMP1                  ; Belongs to macro "BEEP"
       Beep_TEMP2
       Beep_TEMP3
       endc
       
#define  BEEPport PORTD, 2         ; Speaker pin
#define  BEEPtris TRISD, 2

       expand

;**********************************************************************
       ORG         0x0000          ; RESET vector address
       goto        main            ; Jump to program start (label - main)
;**********************************************************************
; remaining code goes here

       include     "pause.inc"
       include     "button.inc"
       include     "beep.inc"
main
       banksel     ANSEL           ; Selects bank containing ANSEL
       clrf        ANSEL           ; All outputs are digital
       clrf        ANSELH
       
       banksel     TRISD
       movlw       b'11111011'     ; PORTA D initialization
       movwf       TRISD
       banksel     PORTD
       BEEPinit                    ; Macro "Beep"
Loop
       button      PORTD,0,0,Play1 ; Push-button 1
       button      PORTD,1,0,Play2 ; Push-button 2
       goto        Loop
       
Play1                              ; First tone
       BEEP        0xFF, 0x02
       BEEP        0x90, 0x05
       BEEP        0xC0, 0x03
       BEEP        0xFF, 0x03
       goto        Loop
       
Play2                              ; Second tone
       BEEP        0xBB, 0x02
       BEEP        0x87, 0x05
       BEEP        0xA2, 0x03     
       BEEP        0x98, 0x03
       goto        Loop
;**********************************************************************
       END                         ; End of program


Ovim programom, tj main procedurom, povezao si dva tastera na pinove PORTD.0, i PORTD.1 i pritiskom na prvi taster program ce otici na Play1 cime ces generisati prvi ton pozivom makroa BEEP. Pritiskom na drugi taster program ce skociti na Play2 cime ces izgenerisati novu melodiju.

U BEEP makrou se koristi makro za generisanje pauze pa ti evo i on:
Code:
pausems MACRO arg1
       local        Loop1
       local        dechi
       local        Delay1ms
       local        Loop2
       local        End

       movlw        High(arg1)     ; Higher byte of argument is moved
                                   ; to HIcnt
       movwf        HIcnt
       movlw        Low(arg1)      ; Lower byte of argument is moved
                                   ; to LOcnt
       movwf        LOcnt
Loop1
       movf         LOcnt, f       ; Decrements HIcnt and LOcnt while
       btfsc        STATUS, Z      ; needed and calls subroutine Delay1ms
       
       goto         dechi
       call         Delay1ms
       decf         LOcnt, f
       goto         Loop1
dechi
       movf         HIcnt, f
       btfsc        STATUS, Z
       goto         End
       call         Delay1ms
       decf         HIcnt, f
       decf         LOcnt, f
       goto         Loop1
Delay1ms:                          ; Delay1ms provides delay of
       movlw        .100           ; 100*10us=1ms
       movwf        LOOPcnt        ; LOOPcnt<-100
Loop2:
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       decfsz      LOOPcnt, f
       goto        Loop2           ; Execution time of Loop2
       return                      ; is 10 us
End
       ENDM
;**********************************************************************


Toliko, sad ti sedi i prokljuvi sta je ovde pisac hteo da kaze, ili samo iskoristi za tvoj problem koji trebas da resis. Program je pisan za PIC16F887 ali ce svi makroi jednako dobro funkcionisati i na PIC16F84, provereno dobro!
Mislim da si dobio i vise nego sto si trazio sada je na tebe red.

Source: http://www.mikroe.com/products/view/11/book-pic-microcontrollers/ na sajtu mozes naci jos dosta primera.


Pozz. M.
 
Odgovor na temu

mr.jelenko
Vuletic Djordje
Pejovac

Član broj: 213553
Poruke: 46
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: PIC 16 F 84 Proizvesti zvucni signal. Pomoc, MPLAB Asembler.22.01.2013. u 22:38 - pre 136 meseci
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
 
Odgovor na temu

mr.jelenko
Vuletic Djordje
Pejovac

Član broj: 213553
Poruke: 46
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: PIC 16 F 84 Proizvesti zvucni signal. Pomoc, MPLAB Asembler.22.01.2013. u 22:42 - pre 136 meseci
Nije mi jasno ovo sto se tice preskalera, tj frekvencije na kojoj radi kontroler.
bits tmr0
000 1:2
001 1:4
010 1:8
....

Mislio sam da je u mom slucaju potrebno podesiti da bude 1:2?

Ako moze i tu malo pojasnjenje posto nisam bas razumeio i ako sam procitao neke strucne tekstove... :D

Interapt koliko sam razumeo ubacen je ako dodje do prekoracenja tmr0 brojaca.

Hvala
Apatinska pivara
 
Odgovor na temu

mr.jelenko
Vuletic Djordje
Pejovac

Član broj: 213553
Poruke: 46
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: PIC 16 F 84 Proizvesti zvucni signal. Pomoc, MPLAB Asembler.23.01.2013. u 16:58 - pre 136 meseci
Mislim da bi ovaj kod trebao biti u redu, i da je dosta toga nepotrebno u gore datom kodu, ispravite me ako gresim. Hvala na svemu

; 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
BR equ 0x21
STANJE equ 0x22
TEMP equ 0x23 ; promenljivama
goto inicijalizacija
org 0x04
goto int
org 0x20
inicijalizacija ; inicijalizacija
clrf PORTA
clrf PORTB
clrf BROJAC1

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 Vreme ; 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 Vreme ; 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 Vreme ; 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 Vreme ; 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 Vreme ; 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 Vreme ; 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
bcf INTCON, GIE
movwf TEMP ; upisi sadrzaj akumulatora u TEMP
movlw 0x82 ; upisi 130 u akumulator
movwf TMR0 ; upisi 130 iz akumulatora u TMR0
bcf INTCON,T0IF ; resetuj bit u registru INTCON
btfss PORTA,4 ; provera da li je PORTA,4 na 1 ako jeste preskoci sledeci red
goto Aset ; idi na Aset
bcf PORTA,4 ; resetuj promenljivu PORTA,4
goto endint ; idi na endint
Aset
bsf PORTA,4 ; setuje PORTA,4 ako nije setovan
endint
movf TEMP,0 ; vrati sadrzaj iz TEMP u akumulator
bsf INTCON, GIE
retfie

Vreme

pet
movlw b'00111110'
movwf BROJAC1
decfsz BROJAC1,1
goto pet
return



; konfiguraciona rec
__config B'11111111110001' ; nema zastite koda, powerup dozvoljeno,
; wd iskljucen, xt oscilator
end ; kraj programa


Apatinska pivara
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: PIC 16 F 84 Proizvesti zvucni signal. Pomoc, MPLAB Asembler.

[ Pregleda: 1796 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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