pesoholicar90 Milos Mladenovic Fakultet inzenjerskih nauka Kragujevac
Član broj: 297822 Poruke: 2 *.dynamic.isp.telekom.rs.
|
evo koda....samo me zanima da li radi kako treba
#include p16f84.inc ; inicijalizacija procesora koji ce se koristiti
processor 16f84
org 5 ; program pocinje od pozicije 5 u memoriji
cinil1 equ 0x18 ; prvi cinilac
cin1 equ 0x19 ; prvi cinilac/pomocna promenljiva
cin2 equ 0x20 ; drugi cinilac/pomocna promenljiva
proizvod equ 0x21 ; proizvod
stanje equ 0x22 ; pomocna promenljiva za upis prethodnog stanja PORTA
delay equ 0x23 ; pomocna promenljiva za definisanje kasnjenja
brojac equ 0x24 ; brojac
pombr equ 0x25 ; pomocni brojac inicijalizacija
clrf PORTA ;
clrf PORTB ;
clrf stanje ;
clrf cinil1 ;
bsf STATUS,RP0 ; prebaciti se u banku 1 memorije
movlw 0x1f ; definisanje da je PORTA ulazni
movwf TRISA ; nazivi registara pisu se velikim slovom
movlw B'00000000' ; definisanje da je PORTB izlazni
movwf TRISB ; vratiti se iz banke 1 memorije
bcf STATUS,RP0
start
btfsc PORTA,4 ; provera da li je pritisnut taster za reset cinilaca
call reset ; pozovi potprogram za reset
btfsc PORTA,0 ; provera da li je pritisnut poziv 1. cinioca, ako jeste
goto cinilac1 ; idi na upis 1 cinioca
clrf stanje ; pripremi stanje za sledecu operaciju
movf proizvod,0 ; prikazi proizvod na PORTB ako nisu pritisnuti tasteri 0,1
movwf PORTB
clrf proizvod ; resetuj proizvod
mnozenje
movf cinil1,0 ; prebacivanje cinioca 1 u pomocnu promenljivu
movwf cin1
movf cinil1,0 ; prebacivanje cinioca 1 u pomocnu promenljivu
movwf cin2
clrf brojac ; resetuj brojac
clrf pombr ; resetuj pomocni brojac
btfsc cin2,0 ; provera da li je prva cifra drugog cinioca 1
call zbir1 ; ako jeste uradi podprogram sa labelom zbir1
btfss cin2,0 ;
call zbir0 ; u suprotnom uradi podprogram sa labelom zbir0
incf brojac,1 ; inkrementiraj brojac
petlje
rlf cin1,1 ; rotiraj sadrzaj cinioca 1 ulevo i smesti ga u njega samog
bcf cin1,0 ; resetuj prvi bit cinioca 1
btfsc STATUS,C ; proveri da li je bit C 1
call provera ; ako jeste uradi podprogram sa labelom provera
rrf cin2,1 ; rotiraj sadrzaj cinioca 2 udesno i smesti ga u njega samog
btfsc cin2,0 ; provera da li je prv bit drugog cinioca 1
call zbir2 ; ako jeste uradi podprogram sa labelom zbir2
btfss cin2,0 ;
call zbir0 ; u suprotnom uradi podprogram sa labelom zbir0
incf brojac,1 ; inkrementiraj brojac
btfsc brojac,3 ; ako je brojac stigao do 8
goto start ; idi na pocetak ciklusa
goto petlje ; idi na podprogram sa labelom petlje
zbir1
movf cin1,0 ; smesti sadrzaj cinioca 1 u akumulator
movwf proizvod ; saberi to sa proizvodom
return ; vrati se ispod mesta poziva
zbir2
movf cin1,0 ; smesti sadrzaj cinioca 1 u akumulator
addwf proizvod ; dodaj sadrzaj akumulatora proizvodu
return ; vrati se ispod mesta poziva
zbir0
clrw ; obrisi sadrzaj akumulatora
addwf proizvod ; dodaj sadrzaj akumulatora proizvodu
return ; vrati se ispod mesta poziva
provera
rrf cin2,1 ; rotiraj sadrzaj cinioca 2 udesno i smesti ga u njega samog
incf pombr,1 ; inkrementiraj pomocni brojac
btfsc cin2,0 ; provera da li je prvi bit drugog cinioca 1
bsf PORTB,3 ; setuj cetvrti bit PORT-a B
btfsc pombr,7-brojac ; provera da li su ispitani svi bitovi drugog cinioca
goto start ; ako jesu idi na start programa
goto provera ; u suprotnom idi na proveru
return ; vrati se ispod mesta poziva
cinilac1
btfsc PORTA,2 ; proveri da li je pritisnut taster za inkrementiranje
call inkr1 ; idi na inkrementiranje
btfss PORTA,2 ;
bcf stanje,2 ; ciklus inkrementiranja zavrsen
btfsc PORTA,3 ; proveri da li je pritisnut taster za dekrementiranje
call dekr1 ; idi na dekrementiranje
btfss PORTA,3 ;
bcf stanje,3 ; ciklus dekrementiranja zavrsen
movf cinil1,0 ; prikazi 1 cinilac na PORTB
movwf PORTB
goto mnozenje ; idi na mnozenje
reset ; potprogram za brisanje cinilaca
clrf cinil1
return
inkr1 ; potprogram za inkrementiranje 1 cinioca
btfss stanje,2 ; proveri da li je taster 2 bio pritisnut, ako nije
incf cinil1,1 ; inkrementiraj 1 cinilac
bsf stanje,2 ; jedno inkrementiranje zavrseno
call pauza ; sacekaj da se kontakti smire
return
dekr1 ; potprogram za dekrementiranje 1 cinioca
btfss stanje,3 ; proveri da li je taster 3 bio pritisnut, ako nije
decf cinil1,1 ; dekrementiraj 1 cinilac
bsf stanje,3 ; jedno dekrementiranje zavrseno
call pauza ; sacekaj da se kontakti smire
return
pauza ; potprogram za pravljenje kasnjenja
movlw 0xff
movwf delay
petlja
decfsz delay,1 ; kasnjenje je oko delay * 2 mikrosekundi
goto petlja ; za oscilator od 4MHz
return
; konfiguraciona rec
__config B'11111111110001' ; nema zastite koda, powerup dozvoljeno,
; wd iskljucen, xt oscilator
end ; kraj programa
|