Ma nije profesor. Profesorka je. :)
Imam jedan resen primer, ali mene interesuje "malo" drugaciji.
Ovako glasi tekst resenog zadatka:
Prikazati redom brojeve od 0 do 9 na sedmosegmentnom displeju. Svaka cifra se prikazuje 1 sekundu.
Prikaz može da bude u rastućem ili opadajućem redosledu.
Zadatak realizovati pomoću mikrokontrolera PIC16F84 na asembleru.
Napomena: Mozdace nekome trebati ovaj zadatak....
resenje zadatka je:
Code:
#include p16f84.inc ; inicijalizaija procesora koji ce se koristiti
processor 16f84
org 5 ; program pocinje od pozicije 5 u memoriji
; inicijalizacija
clrf PORTA ;
clrf PORTB ;
bsf STATUS,RP0 ; prebaciti se u banku 1 memorije
movlw 0x1f ; definisanje da je port A 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
reset equ 0x20 ; deklaracija promenljive
rastuci equ 0x21 ; deklaracija promenljive
brojac equ 0x22 ; deklaracija promenljive
stop equ 0x23 ; deklaracija promenljive
inc equ 0x24 ; deklaracija promenljive
brojac2 equ 0x25 ; deklaracija promenljive
movlw B'00000000' ; pocetno je reset jednak nuli
movwf reset ;
movlw B'00000001' ; pocetno je niz rastuci
movwf rastuci ;
nula
movlw B'10111111' ; stampanje nule na displeju
movwf PORTB
bcf reset,0 ; brisanje reset tastera
call pauza
btfsc reset,0 ; provera da li je pritisnut taster za reset sabiraka
goto nula ; reset znaci idi na nulu
btfsc stop,1
goto nula
btfsc rastuci,0 ; da li je trazen rastuci prikaz?
goto jedan
goto devet
jedan
movlw B'10000110' ; stampanje jedinice na displeju
movwf PORTB
bcf reset,0 ; brisanje reset tastera
call pauza
btfsc reset,0 ; provera da li je pritisnut taster za reset sabiraka
goto nula ; reset znaci idi na nulu
btfsc stop,1
goto jedan
btfsc rastuci,0 ; da li je trazen rastuci prikaz?
goto dva
goto nula
dva
movlw B'11011011' ; stampanje dvojke na displeju
movwf PORTB
bcf reset,0 ; brisanje reset tastera
call pauza
btfsc reset,0 ; provera da li je pritisnut taster za reset sabiraka
goto nula ; reset znaci idi na nulu
btfsc stop,1
goto dva
btfsc rastuci,0 ; da li je trazen rastuci prikaz?
goto tri
goto jedan
tri
movlw B'11001111' ; stampanje trojke na displeju
movwf PORTB
bcf reset,0 ; brisanje reset tastera
call pauza
btfsc reset,0 ; provera da li je pritisnut taster za reset sabiraka
goto nula ; reset znaci idi na nulu
btfsc stop,1
goto tri
btfsc rastuci,0 ; da li je trazen rastuci prikaz?
goto cetiri
goto dva
cetiri
movlw B'11100110' ; stampanje cetvorke na displeju
movwf PORTB
bcf reset,0 ; brisanje reset tastera
call pauza
btfsc reset,0 ; provera da li je pritisnut taster za reset sabiraka
goto nula ; reset znaci idi na nulu
btfsc stop,1
goto cetiri
btfsc rastuci,0 ; da li je trazen rastuci prikaz?
goto pet
goto tri
pet
movlw B'11101101' ; stampanje petice na displeju
movwf PORTB
bcf reset,0 ; brisanje reset tastera
call pauza
btfsc reset,0 ; provera da li je pritisnut taster za reset sabiraka
goto nula ; reset znaci idi na nulu
btfsc stop,1
goto pet
btfsc rastuci,0 ; da li je trazen rastuci prikaz?
goto sest
goto cetiri
sest
movlw B'11111101' ; stampanje sestice na displeju
movwf PORTB
bcf reset,0 ; brisanje reset tastera
call pauza
btfsc reset,0 ; provera da li je pritisnut taster za reset sabiraka
goto nula ; reset znaci idi na nulu
btfsc stop,1
goto sest
btfsc rastuci,0 ; da li je trazen rastuci prikaz
goto sedam
goto pet
sedam
movlw B'10000111' ; stampanje sedmice na displeju
movwf PORTB
bcf reset,0 ; brisanje reset tastera
call pauza
btfsc reset,0 ; provera da li je pritisnut taster za reset sabiraka
goto nula ; reset znaci idi na nulu
btfsc stop,1
goto sedam
btfsc rastuci,0 ; da li je trazen rastuci prikaz?
goto osam
goto sest
osam
movlw B'11111111' ; stampanje osmice na displeju
movwf PORTB
bcf reset,0 ; brisanje reset tastera
call pauza
btfsc reset,0 ; provera da li je pritisnut taster za reset sabiraka
goto nula ; reset znaci idi na nula
btfsc stop,1
goto osam
btfsc rastuci,0 ; da li je trazen rastuci prikaz?
goto devet
goto sedam
devet
movlw B'11101111' ; stampanje devetke na displeju
movwf PORTB
bcf reset,0 ; brisanje reset tastera
call pauza
btfsc reset,0 ; provera da li je pritisnut taster za reset sabiraka
goto nula ; reset znaci idi na nulu
btfsc stop,1
goto devet
btfsc rastuci,0 ; da li je trazen rastuci prikaz?
goto nula
goto osam
pauza
movlw 0x02 ; kasnjenje
movwf brojac
petlja
btfsc PORTA,4 ; provera da li je pritisnut taster za reset
bsf reset,0
btfsc PORTA,1 ; provera da li je pritisnut taster za rastuci niz
bsf rastuci,0
btfsc PORTA,2 ; provera da li je pritisnut taster za opadajuci
bcf rastuci,0
btfsc PORTA,3 ; provera da li je pritisnut taster za stop/start prikaza
call zastop ; pozivanje potprograma za start ili stop prikaza
btfss PORTA,3 ; provera da li je pritisnut taster za stop/start prikaza
bcf inc,1
pauza2
movlw 0x02 ; kasnjenje
movwf brojac2
petlja2
decfsz brojac2,1
goto petlja2
decfsz brojac,1
goto petlja
return
zastop
btfsc inc,1
return
bsf inc,1
btfsc stop,1
goto jeste
btfss stop,1
goto nije
povratak
return
jeste
bcf stop,1
goto povratak
nije
bsf stop,1
goto povratak
; konfiguraciona rec
__config B'11111111110001' ; nema zastite koda, powerup dozvoljeno,
; wd iskljucen, xt oscilator
end ; kraj programa
E sad, meni treba ovaj zadatak:
Realizovati svetlosni efekat tako da se led diode PORTAB, PORTA,0 i PORTA,1, PORTA,2 se pale po jedna sa leve i desne strane počev od PORTB,5 (koja se pali sama) redom svake sekunde. Kada se sve upale prvo se gase poslednje upaljene led diode Zadatak realizovati pomoću mikrokontrolera PIC16F84 na asembleru.
Svaki komentar je dobrodosao.