Professional Documents
Culture Documents
Katedra za elektroniku
Predmet: Mikroprocesorski sistemi
prof. dr Mile Stojev
Student:
Ranko Prokopovi
10609
SADRAJ
1.
2.
3.
4.
5.
6.
7.
8.
9.
Uvod.........................................................................................3
Opis mikrokontrolera PIC16F877.............................................4
Asembler za PIC mikrokontrolere...........................................13
PIC simulator IDE...................................................................30
Primeri....................................................................................46
Laboratorijske vebe..............................................................99
Zakljuak...............................................................................100
Literatura...............................................................................101
CV.........................................................................................102
1. Uvod
Misao vodilja autora ovog seminarskog rada bila je da studentima priblii program PIC
Simulator IDE, koji je razvio Vladimir oo iz Zemuna. U pitanju je simulator velikog broja
mikrokontrolera 12F i 16F serija. Detaljnije informacije o pomenutom programu su
dostupne na sajtu http://www.oshonsoft.com/pic.html, a koriste ga brojni renomirani
koledi i fakulteti.
U radu je dat kratak opis mikrokontrolera PIC16F877, pregled menija PIC Simulator IDE,
napisano je 8 primera u asembleru, uraena su 3 jednostavna i 3 naprednija primera kao i
4 dopunska primera. Na kraju su u Laboratorijskoj vebi dati zadaci za samostalan rad
studenata tanije, omogueno je da studenti samostalno isprogramiraju neke
jednostavne aplikacije.
Nadam se da e naredni opis programa PIC Simulator IDE naii na dobar prijem kod
studenata i da e ih zaintrigirati da koriste PIC mikrokontrolere.
Slika 2-1. Kuita u koja se pakuje PIC16F877 (a. DIP-40, b.PLC-44, c.TQFP-44)
Sa blok dijagrama kojeg daje Microchip (Slika 2-2) moe se ustanoviti da se
koncepcija ovog mikrokontrolera ne razlikuje mnogo od koncepcije RISC mikrokontrolera
drugih proizvoaa prisutnih na tritu. Uoavaju se standardne komponente:
Flash programska memorija 8 kilorei
RAM (File Registers) 368 bajtova
Aritmetiko-logika jedinica (ALU)
Akumulator (Working Register)
Hardverski magacin (Stack) sa 8 nivoa
EEPROM memorija podataka 256 bajtova
Razne periferne jedinice (portovi, tajmeri, A/D konvertor, USART,...)
Programska memorija
Memorija podataka
EEPROM memorija podataka.
Svaka banka moe da sadri do 128 registara (0x7F). Nie lokacije u banci
zauzimaju specijalni registri, a ostatak prostora popunjavaju registri opte namene
implementirani kao statiki RAM. Neki specijalni registri koji se esto koriste mapirani
su u sve banke da bi se omoguio bri pristup i redukcija kda.
Mapa registara procesora PIC16F877A prikazana je na Slici 2-4. Nekoliko
specijalnih registara su registri jezgra, usko povezani sa funkcionisanjem CPU. Ostali
registri su vezani za periferne module i slue njihovom upravljanju i kontroli statusa.
Sledi opis nekoliko najvanijih i najee korienih registara jezgra:
- Programski broja (PC) odreuje adresu instrukcije u programskom fleu koja e
sledea biti pribavljena. Re je o 13-bitnom registru. Simboliko ime nieg bajta je PCL. To
je registar koji se moe i upisivati i iitavati. Teih pet bita programskog brojaa
smeteni su u izolovani registar PCH kojem se pristupa samo preko lea PCLATH
mapiranom u internom RAM-u na adresi 0x0A.
- STATUS registar je veoma bitan i zato je predvieno da se moe adresirati iz bilo
koje banke. On pokazuje status aritmetiko-logike jedinice, reset status mikrokontrolera i
I/O (ulaz/izlaz)
I/O (ulaz/izlaz)
I/O (ulaz/izlaz)
I/O (ulaz/izlaz)
I/O (ulaz/izlaz)
I/O (ulaz/izlaz)
Port B
Port B je 8-bitni bidirekcioni port. Svakom pinu porta korespondira odgovarajui bit
u registru TRISB kojim se definie smer (ulaz ili izlaz). Svi pinovi ovog porta poseduju
pullup otpornike. Ovi otpornici mogu da se ukljue jednim kontrolnim bitom. To se postie
postavljanjem odgovarajueg bita na '0'. Pull-up otpornici se automatski iskljuuju kada se
pin definie kao izlazni. Otpornoci su iskljueni i kod Power-on reseta. etiri pina ovog
porta (RB7 do RB4) imaju mogunost generisanja prekida. Jedino pinovi definisani kao
ulazni imaju mogunost uzrokovanja prekida.
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
Port C
Port C je 8-bitni bidirekcioni port. Ovaj port je poseban po tome to ima ugraen
USART modul koji slui za serijsku komunikaciju (sa raunarom ili drugim mikrokontrolerom). Modulu USART se pristupa preko pinova RC7 i RC6. Ove pinove treba softverski
konfigurisati da budu u funkciji USART modula.
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
I/O (ulaz/izlaz) ili izlaz oscilatora za TIMER1 ili ulaz takta za TIMER1
I/O (ulaz/izlaz) ili ulaz oscilatora za TIMER1 ili ulaz Capture2/izlaz Compare2/izlaz
PWM2 (Pulse With Modulation)
I/O (ulaz/izlaz) ili ulaz Capture1/izlaz Compare1/izlaz PWM1
ovaj pin moe da slui za sinhroni serijski takt reima rada SPI (Serial Peripheral
Interface) kao i I2C (Inter-Integrated Circuit)
ovaj pin moe da slui kao pin podataka za SPI i I2C modove
I/O (ulaz/izlaz) ili serijski sinhroni izlaz podataka
I/O (ulaz/izlaz) ili USART asinhroni transmiter ili sinhroni takt
I/O (ulaz/izlaz) ili USART asinhroni risiver ili sinhroni podaci (data)
Port D
Port D je 8-bitni bidirekcioni port. Ovaj port moe da se konfigurie kao paralelni
mikroprocesorski port (parallel slave port PSP).
Port E
Port E je 3-bitni bidirekcioni port. Ima mogunost A/D konverzije. Pinovi mogu da se
konfiguriu kao analogni ili digitalni, kao kod porta A.
Tajmeri
Ove se periferije koriste za merenje vremena i brojanje eksternih dogaaja.
Ugraena su tri tajmerska modula (TMR 0,1,2) od kojih svaki ima svoje specifinosti.
Tajmer0 je jednostavni 8-bitni broja koji generie interapt pri prelasku sa 0xFF na
0x00 (overflow). Poseduju ga svi nii PICmicro procesori i ovde je zadrana
10
kompatibilnost s njima. Izvor takta za tajmer 0 moe biti bilo interni sistemski sat (Fosc/4),
bilo spoljanji generator takta spojen na pin RA4/T0CKI. Mogue je podesiti da se broja
inkrementira na rastuu ili opadajuu ivicu spoljanjeg signala.
U sadejstvu sa modulom tajmera 0 moe se koristiti programabilni preskaler (delilac
frekvencije) sa odnosima deljenja od 1:2 do 1:256. Ukoliko deljenje nije potrebno
preskaler se dodeli watchdog tajmeru.
Kada je preskaler u upotrebi maksimalna frekvencija eksternog izvora iznosi 50 MHz
to je vee od maksimalne frekvencije samog mikrokontrolera.
Tajmer 1 je 16-bitni i osposobljen je da radi kao broja/mera vremena. Ima tri
izvora takta: sistemski sat (Fosc/4), spoljanji takt ili spoljanji kristal.
Broja eksternih dogaaja moe da se sinhronizuje sa internim oscilatorom, a postoji
i asinhroni nain rada koji omoguuje da se broja inkrementira i u sleep reimu.
Preskaliranje je upotrebljivo sa vrednostima deljenja 1:1, 1:2, 1:4 i 1:8.
Tajmer 2 je 8-bitni tajmer sa programabilnim preskalerom i postskalerom. Moe da
bude tajmer/broja opte namene. Meutim, potreban je CCP modulu prilikom generisanja
PWM signala, te modulu za sinhronu serijsku komunikaciju (SSP) kao Baud Rate
generator. U kooperaciji sa tajmerom 2 koristi se registar PR2 (Period Register). Kada se
vrednost brojaa izjednai sa vrednou upisanom u registar PR2, generie se
odgovarajui interapt.
CCP moduli
CCP je skraenica za Compare/Capture/PWM. PIC16F877 poseduje dva ovakva
modula koji mu pomau da se lake nosi sa raznim zahtevima real-time aplikacija.
U modu Capture kada se desi dogaaj na pinu RC2/CCP1 16-bitna vrednost
tajmera 1 preslikava se u registre CCPR1H:CCPR1L. Istovremeno se setuje
korespondentni interapt fleg u registru PIR1. Da bi ova operacija bila uspena
tajmer1 mora raditi u tajmerskom modu ili modu sinhronizovanog brojanja.
U modu Compare 16-bitna vrednost registra CCPR1 se stalno poredi sa
vrednou para registara tajmera 1. Kada doe do izjednaenja mogue je da se pin
RC2/CCP1 setuje, resetuje ili ostane nepromenjen, to se ranije podesi odgovarajuim
konfiguracionim bajtom upisanim u registar CCP1CON. I u ovom sluaju se setuje interapt
fleg CCP1IF.
U modu PWM (Pulse Width Modulation) pin RC2/CCP1 proizvodi irinskoimpulsni modulisani signal rezolucije do 10 bita.
Period PWM signala odreuje se upisom u PR2 registar po formuli:
PWM_period = [(PR2)+1] 4 Tosc TMR2_preskaler.
Vreme ispune (Duty Cycle Time) menja se upisom u registar CCPR1L i dva bita
registra CCP1CON (bitovi 5 i 4). Time je omoguena maksimalno 10-bitna rezolucija
PWM izlaza. Formula za proraun je:
PWM_Duty_Cycle = (CCPR1L:CCP1CON<5:4>) Tosc TMR2_preskaler.
11
Ostale periferije
Ovde e ukratko biti pomenuti jo nekoliko periferijskih modula koje PIC16F877
poseduje.
S obzirom na kontinualnost pojava u spoljanjem svetu, teko je upravljati bilo kojim
procesom bez digitalizacije analognih veliina. Na veinu zahteva moe odgovoriti 10bitni, 8-kanalni A/D konvertor konstruisan na principu sukcesivnih aproksimacija.
Mikrokontroler je deo mree elektronskih sklopova koji meusobno komuniciraju i
razmenjuju podatke. U tu svrhu, on je opremljen sa tri hardverska komunikaciona modula.
Prvi meu njima je SSP modul (Synchronous Serial Port), koji slui za komunikaciju
sa serijskim EEPROM-ima,
pomerakim
registrima,
displej-drajverima, A/D
konvertorima, itd. Ovaj modul moe raditi u jednom od dva moda:
Drugi
serijski
komunikacioni modul je USART (Universal
Synchronous
Asynchronous Receiver Transmiter). On uglavnom slui za povezivanje sa personalnim
raunarom, ali to nije njegova jedina mogunost primene. USART se moe konfigurisati
u neki od sledeih modova rada:
12
MNEMONIK
OPIS
OPERACIJA
MARKERI
CIK
PRIM.
1
1
1
1
1
1
1, 2
C, DC, Z
C, DC, Z
C, DC, Z
C, DC, Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
1
1
1
1
1
1
1
1
1
1
1
1
1
1, 2
C
C
1
1
1
1
1, 2
1, 2
1, 2
1, 2
UPIS PODATAKA
MOVF f, d
MOVWF f
MOVLW k
CLRF
CLRW
SWAP f, d
prepii f u d
prepii W u f
upii konstantu u W
upii 0 u f
upii 0 u W
prepii unakrsno niblove iz f u
d
f ->d
W ->f
k -> W
0 -> f
0 -> W
f(7:4),(3:0)->d(3:0),(7:4)
Z
Z
Z
2
1, 2
ARITMETIKA I LOGIKA
ADDWF f
ADDLW k
SUBWF f, d
SUBLW k
INCF f, d
DECF f, d
IORWF f, d
ANDWF f, d
XORWF f, d
IORLW k
ANDLW k
XORLW k
COMF f, d
saberi W i f
saberi W sa konstantom
oduzmi W od f
oduzmi W od konstante
uveaj f
umanji f
logiko ILI W sa f
logiko I W sa f
logiko iskljuivo ILI W sa f
logiko ILI W sa konstantom
logiko I W sa konstantom
logiko ILI W sa konstantom
komplementiraj f
f + W -> d
k + W -> W
f - W -> d
k - W -> W
f + 1 -> d
f -1 -> d
f v W -> d
f ^ W -> d
f xor W -> d
k v W -> W
k ^ W -> W
k xor W -> W
f -> d
1, 2
1,
1,
1,
1,
1,
2
2
2
2
2
1, 2
OPERACIJE SA BITOVIMA
BCF f, b
BSF f, b
RLF f, d
RRF f, d
resetuj bit b u f
setuj bit b u f
rotiraj f nalevo kroz CARRY
rotiraj f nadesno kroz CARRY
0 -> f(b)
1 -> f(b)
0
1
skip if f(b) = 0
skip if f(b) = 1
f + 1 -> d, skip if Z = 1
f - 1 -> d, skip if Z = 1
k -> PC
PC -> TOS, k -> PC
TOS -> PC
k -> W, TOS -> PC
TOS -> PC, 1 -> GIE
1(2)
1(2)
1(2)
1(2)
2
2
2
2
2
3
3
1,2,3
1,2,3
1,2,3
OSTALO
NOP
CLRWDT
SLEEP
bez operacije
inicijalizuj watchdog tajmer
prelazak u reim male
potrone
1
1
1
13
14
Sada emo za svaku od sledeih 35 instrukcija prikazati njenu sintaksu, opis i prikazati
efekte koja ona proizvodi. Uz svaku instrukciju je priloen primer, kao i broj rei i ciklusa za
izvrenje.
A.1 MOVLW
A.2 MOVWF
A.3 MOVF
A.4 CLRW
A.5 CLRF
A.6 SWAPF
A.7 ADDLW
A.8 ADDWF
A.9 SUBLW
A.10 SUBWF
A.11 ANDLW
A.12 ANDWF
A.13 IORLW
A.14 IORWF
A.15 XORLW
A.16 XORWF
A.17 INCF
A.18 DECF
A.19 RLF
A.20 RRF
A.21 COMF
A.22 BCF
A.23 BSF
A.24 BTFSC
A.25 BTFSS
A.26 INCFSZ
A.27 DECFSZ
A.28 GOTO
A.29 CALL
A.30 RETURN
A.31 RETLW
A.32 RETFIE
A.33 NOP
A.34 CLRWDT
A.35 SLEEP
A.1 MOVLW
Sintaksa:
MOVLW k
Opis:
8-bitna konstanta k se upisuje u akumulator W
Operacija: k (W)
Operand:
0 k 255
Marker:
Br. rei:
1
Br. ciklusa: 1
Primer A1
MOVLW 0x2A
;Posle ove instrukcije u akumulatoru W je vrednost 2Ahex.
15
A.2 MOVWF
Sintaksa:
Opis:
Operacija:
Operand:
Marker:
Br. rei:
Br. ciklusa:
MOVWF f
Sadraj akumulatora W se upisuje u f registar/lokaciju
W (f)
0 f 127
1
1
Primer A2
MOVWF REG
A.3 MOVF
Sintaksa:
Opis:
MOVF f,d
Sadraj registra f se smeta na lokaciju koju odreuje operand d
Ako je d=0 sadraj se smeta u akumulator (W)
Ako je d=1 lokacija sam registar f
Opcija d=1 se koristi sa testiranje sadraja registra f zbog toga to
izvravanje ove instrukcije utie na Z marker STATUS registra
Operacija: f (d)
Operand:
0 f 127
d [0,1]
Marker:
Z
Br. rei:
1
Br. ciklusa: 1
Primer A.3:
MOVF FSR,0
Pre instrukcije:
Posle instrukcije:
CLRW
Sadraj akumulatora W se izjednaav a sa 0 (nulom) a Z marker u
STATUS registru se postavlja na jedinicu (1)
Operacija: 0 (W)
Operand:
Marker:
Z
Br. rei:
1
Br. ciklusa: 1
PrimerA.4:
CLRW
Pre instrukcije:
W = 0x55
Posle instrukcije: W = 0x00
Z=1
16
A.5 CLRF
Sintaksa:
Opis:
CLRF f
Sadraj registra f se izjednaava sa nulom, a Z marker u STATUS
registru se postavlja na jedinicu
Operacija: 0 f
Operand:
0 f 127
Marker:
Z
Br. rei:
1
Br. ciklusa: 1
Primer A.5:
CRLF STATUS
Pre instrukcije:
Posle instrukcije:
A.6 SWAPF
Sintaksa:
Opis:
SWAPF f, d
Gornja i donja polovina registra f zamenjuju mesta
Ako je d = 0 rezultat se smeta u akumulator W
Ako je d = 1 rezultat se smeta u registar f
Operacija: f<0:3> d<4:7> ; f<4:7> d<0:3>
Operand:
0 f 127
Marker:
Br. rei:
1
Br. ciklusa: 1
Primer A.6:
SWAP REG,1
Pre instrukcije:
Posle instrukcije:
A.7 ADDLW
Sintaksa:
Opis:
ADDLW k
Sadraj akumulatora W se sabira sa 8-mo bitnom konstantom k i
rezultat se smeta u akumulator W
Operacija: (W) + k W
Operand:
0 k 255
Marker:
C, DC, Z
Br. rei:
1
Br. ciklusa: 1
PrimerA.7:
ADDLW 0x15 ;Sadraju akumulatora W dodaj 15
17
Pre instrukcije:
Posle instrukcije:
A.8 ADDWF
W = 0x10
W = 0x25
Sintaksa:
Opis:
ADDWF f, d
Sadraj akumulatora W saberi (dodaj) sa sadrajem registra f
Ako je d = 0 rezultat se smeta u akumulator W
Ako je d = 1 rezultat se smeta u registar f
Operacija: (W) + (f) d
d [0,1]
Operand:
0 f 127
Marker:
C, DC, Z
Br. rei:
1
Br. ciklusa: 1
Primer A.8:
ADDWF FSR, 0
Pre instrukcije:
Posle instrukcije:
A.9 SUBLW
Sintaksa:
Opis:
SUBLW k
Sadraj akumulatora W se oduzima od konstante k i rezultat se
smeta u akumulator W
Operacija: k (W) W
Operand:
0 k 255
Marker:
C, DC, Z
Br. rei:
1
Br. ciklusa: 1
18
Primer A.9:
SUBLW 0x03
Pre instrukcije:
Posle instrukcije:
W = 0x01, C = x, Z = x
W = 0x02, C = 1, Z = 0
Pre instrukcije:
Posle instrukcije:
Rezultat = 0
Pre instrukcije:
Posle instrukcije:
Rezultat < 0
Rezultat > 0
A.10 SUBWF
Sintaksa:
Opis:
SUBWF f,d
Sadraj akumulatora W se oduzima od sadraja registra f
Ako je d = 0 rezultat se smeta u akumulator W
Ako je d = 1 rezultat se smeta u registar f
Operacija: (f) (W) d
Operand:
0 f 127
d [0,1]
Marker:
C, DC, Z
Br. rei:
1
Br. ciklusa: 1
Primer A.10:
SUBWF REG, 1
Pre instrukcije:
Posle instrukcije:
REG = 3, W = 2, C = x, Z = x
REG = 1, W = 2, C = 1, Z = 0
Pre instrukcije:
Posle instrukcije:
Pre instrukcije:
Posle instrukcije:
REG = 1, W = 2, C = x, Z = x
REG = 0xFF, W = 2, C = 0, Z = 0
A.11 ANDLW
Rezultat > 0
Rezultat = 0
Rezultat < 0
Sintaksa:
Opis:
ANDLW k
Vri se operacija logiko I nad sadrajem akumulatora W i konstante k
Rezultat se smeta u akumulator W
Operacija: (W) .AND. k W
Operand:
0 k 255
Marker:
Z
Br. rei:
1
Br. ciklusa: 1
Primer A.11:
ANDLW 0x5F
;Izvri logiku I operaciju nad sadrajem
akumulatora W i konstante 5F
Pre instrukcije:
Posle instrukcije:
A.12 ANDWF
Sintaksa:
Opis:
Operacija:
W = 0xA3
W = 0x03
Operand:
0 f 127
d [0,1]
Marker:
Z
Br. rei:
1
Br. ciklusa: 1
Primer A.12:
ANDWF FSR, 1
Pre instrukcije:
Posle instrukcije
A.13 IORLW
; 0001 0111
; 1100 0010
; 0000 0010
(0x17)
(0xC2)
(0x02)
Sintaksa:
Opis:
IORLW k
Logika ILI operacija se izvrava nad sadrajem akumulatora W i nad
8-mo bitnom konstantom k i rezultat se smeta u akumulator W
Operacij:
(W) .OR. k W
Operand:
0 k 255
Marker:
Z
Br. rei:
1
Br. ciklusa: 1
Primer A.13:
IORLW 0x35
Pre instrukcije:
Posle instrukcije:
A.14 IORWF
Sintaksa:
Opis:
IORWF f, d
Logika ILI operacija se izvrava nad sadrajima registara W
(akumulator) i f
Ako je d = 0 rezultat se smeta u akumulator W
Ako je d = 1 rezultat se smeta u registar f
Operacija: (W) .OR. (f) d
Operand:
0 f 127
d [0,1]
Marker:
Z
Br. rei:
1
Br. ciklusa: 1
Primer A.14:
IORWF REG,0
;Izvri logiku ILI operaciju nad sadrajima W akumulatora i
registra REG, rezultat smesti u W
Pre instrukcije:
REG = 0x13, W = 0x91
Posle instrukcije: REG = 0x13, W = 0x93
Z=0
20
A.15 XORLW
Sintaksa:
Opis:
XORLW k
Logika XOR operacija se izvrava nad sadrajem akumulatora W i
konstantom k, rezultat se smeta u akumulator W
Operacija: (W) .XOR. k W
Operand:
0 k 255
Marker:
Z
Br. rei:
1
Br. ciklusa: 1
Primer A.15:
XORLW 0xAF
Pre instrukcije:
Posle instrukcije:
A.16 XORWF
; 1010 1111
; 1011 0101
; 0001 1010
(0xAF)
(0xB5)
(0x1A)
Sintaksa:
Opis:
XORWF f, d
Logika XOR operacija se izvrava nad sadrajima registara W i f
Ako je d = 0 rezultat se smeta u akumulator W
Ako je d = 1 rezultat se smeta u registar f
Operacija: (W) .XOR. (f) d
Operand:
0 f 127
d [0,1]
Marker:
Z
Br. rei:
1
Br. ciklusa: 1
Primer A.16:
XORWF REG, 1
Pre instrukcije:
Posle instrukcije:
A.17 INCF
Sintaksa:
Opis:
Operacija:
Operand:
Marker:
Br. rei:
; 1010 1111
; 1011 0101
; 0001 1010
(0xAF)
(0xB5)
(0x1A)
Br. ciklusa: 1
Primer A.17:
INCF REG, 1
Pre instrukcije:
Posle instrukcije:
A.18 DECF
REG = 0xFF
Z=0
REG = 0x00
Z=1
Sintaksa:
Opis:
DECF f, d
Sadraj registra f umanji za 1
Ako je d = 0 rezultat smesti u akumulator W
Ako je d = 1 rezultat smesti u registar f
Operacija: (f) 1 d
Operand:
0 f 127
d [0,1]
Marker:
Z
Br. rei:
1
Br. ciklusa: 1
Primer A.18:
DECF REG, 1
Pre instrukcije:
REG = 0x01
Z=0
Posle instrukcije: REG = 0x00
Z=1
A.19 RLF
Rotiraj sadraj registra f na levo preko CARRY-a
Sintaksa:
Opis:
RLF f, d
Sadraj registra f se rotira za jedno mesto na levo preko markera
(markera) C (CARRY)
Ako je d = 0 rezultat smesti u akumulator W
Ako je d = 1 rezultat smesti u registar f
Operacija: (f<n>) d<n+1>, f<7> C, C d<0>
Operand:
0 f 127
d [0,1]
Marker:
C
Br. rei:
1
Br. ciklusa: 1
Primer A.19:
RLF REG, 0
Pre instrukcije:
22
Posle instrukcije:
A.20 RRF
Sintaksa:
Opis:
RRF f, d
Sadraj registra f se rotira za jedno mesto na desno preko markera
(markera) C (CARRY)
Ako je d = 0 rezultat smesti u akumulator W
Ako je d = 1 rezultat smesti u registar f
Operacija:
Operand:
Primer A.20:
RRF REG, 0
Pre instrukcije:
Posle instrukcije:
A.21 COMF
Sintaksa:
Opis:
COMF f, d
Sadraj registra f se komplementira
Ako je d = 0 rezultat smesti u akumulator W
Ako je d = 1 rezultat smesti u registar f
Operacija: ( f ) d
Operand:
0 f 127
d [0,1]
Marker:
Z
Br. rei:
1
Br. ciklusa: 1
Primer A.21:
COMF REG, 0
Pre instrukcije:
Posle instrukcije:
; 0001 0011
; komplement
; 1110 1100
(0x13)
(0xEC)
23
A.22 BCF
Sintaksa:
Opis:
Operacija:
Operand:
BCF f, b
Resetuje se bit na poziciji b u registru f
0 f<b>
0 f 127
0b7
Marker:
Br. rei:
1
Br. ciklusa: 1
Primer A.22:
BCF REG, 7
Pre instrukcije:
Posle instrukcije:
REG = 0xC7
REG = 0x47
A.23 BSF
; 1100 0111
; 0100 0111
(0xC7)
(0x47)
Sintaksa:
Opis:
Operacija:
Operand:
BSF f, b
Postavi bit na poziciji b u registru f
1 f<b>
0 f 127
0b7
Marker:
Br. rei:
1
Br. ciklusa: 1
Primer A.23:
BSF REG, 7
Pre instrukcije:
Posle instrukcije:
REG = 0x07
REG = 0x17
A. 24 BTFSC
Sintaksa:
Opis:
; 0000 0111
; 1000 0111
(0x07)
(0x17)
BTFSC f, b
Ako je bit b u registru f jednak 0, onda se preskae izvrenje naredne
instrukcije. Ako je bit b jednak 0, za vreme izvrenja tekue instrukcije,
onda se izvrenje naredne instrukcije stopira,pa se tada izvrava NOP
instrukcija to ini da tekua instrukcija ima 2 ciklusa
Operacija: Preskoi narednu instrukciju ako je (f<b>) = 0
Operand:
0 f 127
0b7
Marker:
Br. rei:
1
Br. ciklusa: 1 ili 2 u zavisnosti od bita b
Primer A.24:
LAB_01
BTFSC REG, 1
; proveri bit broj 1 u registru REG
LAB_02
.........................
;preskoi ovu liniju ako je bit jednak 0
LAB_03
.........................
;skoi na ovu liniju ako je bit jednak 1
24
Pre instrukcije:
Posle instrukcije:
A.25 BTFSS
Sintaksa:
Opis:
BTFSS f, b
Ako je bit b u registru f jednak 1, onda se preskae izvrenje naredne
instrukcije. Ako je bit b jednak 1, za vreme izvrenja tekue instrukcije,
onda se izvrenje naredne instrukcije stopira,pa se tada izvrava NOP
instrukcija to ini da tekua instrukcija ima 2 ciklusa
Operacija: Preskoi narednu instrukciju ako je (f<b>) = 1
Operand:
0 f 127
0b7
Marker:
Br. rei:
1
Br. ciklusa: 1 ili 2 u zavisnosti od bita b
Primer A.25:
LAB_01
LAB_02
LAB_03
Pre instrukcije:
Posle instrukcije:
A.26 INCFSZ
BTFSS REG, 1
.........................
.........................
Sintaksa:
Opis:
INCFSZ f, d
Sadraj registra f se uveava za 1
Ako je d = 0 rezultat smesti u akumulator W
Ako je d = 1 rezultat smesti u registar f
Ako je rezultat jednak nuli, sledea instrukcija se izvrava kao NOP,
tako da tekua instrukcija ima 2 ciklusa
Operacija: (f) + 1 d
Operand:
0 f 127
d [0,1]
Marker:
Br. rei:
1
Br. ciklusa: 1 ili 2 u zavisnosti od rezultata
Primer A.26:
LAB_01
INCFSZ REG, 1 ; uveaj sadraj REG za 1
LAB_02
.........................
;preskoi ovu liniju ako je jednak 0
LAB_03
.........................
;skoi na ovu liniju ako je jednak 1
25
Pre instrukcije:
Posle instrukcije:
A.27 DECFSZ
Sintaksa:
Opis:
DECFSZ f, d
Sadraj registra f se umanjuje za 1
Ako je d=0 rezultat smesti u akumulator W
Ako je d=1 rezultat smesti u registar f
Ako je rezultat jednak nuli, narednainstrukcija se izvrava kao NOP,
tako da tekua instrukcija ima 2 ciklusa
Operacija: (f) - 1 d
Operand:
0 f 127
d [0,1]
Marker:
Br. rei:
1
Br. ciklusa: 1 ili 2 u zavisnosti od rezultata
Primer A.27:
LAB_01
LAB_02
LAB_03
Pre instrukcije:
Posle instrukcije:
A.28 GOTO
Sintaksa:
Opis:
Operacija:
Operand:
Marker:
Br. rei:
Br. ciklusa:
Primer A.28:
LAB_00
.
.
.
LAB_01
Pre instrukcije:
Posle instrukcije:
26
DECFSZ CNT, 1
.........................
.........................
GOTO LAB_01
.......................
Programski broja pokazuje adresu LAB_00
Programski broja pokazuje adresu LAB_01
A. 29 CALL
Pozovi program
Sintaksa:
Opis:
CALL k
Instrukcija poziva potprogram. Prvo se povratna adresa (PC+1)
smeta u magacin, onda se 11-to bitn direktni operand k, koji sadri
adresu potprograma, smeta u programski broja
Operacija: (PC) + 1 TOS (Top Of Stack vrh magacina)
k PC<10:0>, (PCLATH<4:3>) PC<12:11>
Operand:
0 k 2048
Marker:
Br. rei:
1
Br. ciklusa: 2
Primer A.29:
LAB_01
.
.
LAB_02
Pre instrukcije:
Posle instrukcije:
A.30 RETURN
Sintaksa:
Opis:
Operacija:
Operand:
Marker:
Br. rei:
Br. ciklusa.
........................
Povratak iz potprograma
RETURN
Sadraj iz vrha magacina (TOS) se smeta u programski broja
TOS PC (Program Counter programski broja)
1
2
Primer A.30:
RETURN
Pre instrukcije:
Posle instrukcije:
A.31 RETLW
CALL LAB_02
PC = x
TOS = x
PC = TOS
TOS = TOS 1
Sintaksa:
Opis:
RETLW k
8-mo bitna konstanta k se smeta u akumulator W. Vrednost iz vrha
magacina (TOS) se smeta u programski broja
Operacija: (k) W; TOS PC
Operand:
0 k 255
Marker:
Br. rei:
1
Br. ciklusa: 2
27
Primer A.31:
RETLW 0x43
Pre instrukcije:
Posle instrukcije:
A.32 RETFIE
W=x
PC = x
TOS = x
W = 0x43
PC = TOS
TOS = TOS 1
Sintaksa:
Opis:
RETFIE
Povratak iz potprograma. Vrednost iz vrha magacina (TOS) se smeta
u programski broja (PC). Interapti (prekidi) su dozvoljeni
postavljanjem GIE bita (Global Interrupt Enable).
Operacija: TOS PC, 1 GIE
Operand:
Marker:
Br. rei:
1
Br. ciklusa. 2
Primer A.32:
RETFIE
Pre instrukcije:
Posle instrukcije:
A.33 NOP
PC = x
GIE = 0
PC = TOS
GIE = 1
Sintaksa:
NOP
Opis:
Ne izvrava nikakvu operaciju i ne utie na markere
Operacija: Operand:
Marker:
Br. rei:
1
Br. ciklusa. 1
Primer A.33:
NOP
Pre instrukcije:
Posle instrukcije:
A.34 CLRWDT
Sintaksa:
Opis:
28
PC = x
PC = x + 1
Operacija:
0 WDT
0 WDT preskaler
1 TO
1 PD
Operand:
PD , TO
Marker:
Br. rei:
1
Br. ciklusa. 1
Primer A.34:
CLRWDT
Pre instrukcije:
Posle instrukcije:
A.35 SLEEP
WDT broja = x
WDT preskaler = 1:128
WDT broja = 0x00
WDT preskaler broaj = 0
TO = 1
PD = 1
WDT preskaler = 1:128
Stanje pripravnosti (STAND BY mod)
Sintaksa:
Opis:
SLEEP
Procesor prelazi u reim niske potronje. Oscilator se zaustavlja.
PD (Power Down) statusni bit se resetuje. TO (Time Out) bit se
postavlja. WDT (Watchdog Timer) tajmer i njegov preskaler se
resetuju.
Operacija: 0 WDT
0 WDT preskaler
1 TO
0 PD
Operand:
Marker:
PD , TO
Br. rei:
1
Br. ciklusa. 1
Primer A.35:
SLEEP
Pre instrukcije:
Posle instrukcije:
WDT broja = x
WDT preskaler = x
WDT broja = 0x00
WDT preskaler = 0
TO = 1
PD = 0
29
Clear memory Ova komanda vri resetovanje simulatora i postavlja ga u poetno stanje
(inicijalno stanje), prazni bafere programske FLASH memorije i EEPROM memorije
podataka.
Load program Ova komanda uitava programski fajl u bafer FLASH memorije PIC
simulatora. Programski fajl mora biti u formatu HEX. Uitani (pokrenuti) programski fajl
moe ponovo brzo da se uita tako to se selektuje pointerom na njegovom tasteru u
glavnom programskom interfejsu (prozoru) ili pritiskom tastera SPACE na tastaturi.
Save memory Ova komanda omoguava da se sauva sadraj bafera programske
FLASH memorije i podataka EEPROM memorije, i to u fajlu HEX.
30
Step Ova komanda omoguava da se simulacija izvri korak po korak, ali se prethodno
mora podesiti da e simulacija da se odvija korak po korak. Pritiskom tastera F2 na
tastaturi izvrava se naredna instrukcija.
Stop Ovom komandom se zaustavlja simulacija i zatim se prezentuju informacije o
ukupnom broju izvrenih instrukcija, trajanju simulacije i ukupnom realnom vremenu
simulacije u taktnim intervalima i s, i sve to na nivou PIC mikrokontolera.
31
Step by step Ovom komandom se omoguuje korisniku da sam odreuje vreme izmeu
dve susedne instrukcije. Korisnik pritiskom odreenog tastera pokree izvrenje naredne
instrukcije. Kada se simulator nalazi u ovom modu (Step by step), mogue je menjati
vrednosti u svim specijalnim funkcijama i registrima opte upotrebe, programskim
brojaima i radnim registrima, tako to se selektuje odgovarajue ime ili vrednost polja na
programskom interfejsu. Vrednost u SFR registrima moe da se menja alternativno
zamenom pojedinanih bitova grafike reprezentacije i ova osobina moe da se koristi i pri
drugim brzinama simulacije. Kada se odabere ova brzina simulacije (Step by step) na
programskom interfejsu e se pojaviti nova stavka u glavnom meniju (Main menu) koja
omoguava lak pristup komandi Step iz menija Simulation. Dodatna prednost je
omoguena programima generisanim u integrisanom BASIC kompajleru. Komanda 'Run
To Next Basic Statement' e pokrenuti simulaciju na brzini Extremely Fast sve dok se ne
dostigne sledea naredba u BASIC-u, a onda se simulacija automatski prebacuje na reim
Step by step.
Slow Ovom komandom se zadaje brzina simulacije od 1500 ms izmeu instrukcija.
Normal Ovom komandom se zadaje brzina simulacije od 250 ms izmeu instrukcija.
Fast Ovom komandom se zadaje brzina simulacije od oko 50 ms izmeu instrukcija.
Extremely fast Kada se postavi ova komanda, interval izmeu instrukcija je veoma mali
i brzina simulacije linearno zavisi od brzine rada raunara.
Ultimate (No refresh) Ovom komandom se glavni prozor simulatora ne osveava to
znaajno ubrzava izvrenje simualcije. Ova brzina simulacije treba da se koristi u
kombinaciji sa Breakpoint Manager da bi se rutine sa velikim kanjenjem simulirale to
bre.
32
Program Memory Editor Ova komanda omoguuje pristup Flash memoriji PIC
simulatora. Mogue je runo uneti operacione kodove instrukcije tako to se selektuje linija
na displeju na eljenoj lokaciji.
33
EEPROM Memory Editor Ova komanda otvara EEPROM memoriju PIC simulatora. Ako
je ovaj prozor otvoren, osveavae se u toku simulacije. Vrednost na bilo kojoj
memorijskoj lokaciji se moe izmeniti jednostavnim selektovanjem iste.
34
Alternative SFR Viewer Ova komanda otvara prozor za specijalne funkcionalne registre
(SFR) koji su podloni promenama veliine.
35
Disassembler PIC Simulator IDE ima integrisani disasembler koji se pokree ovom
naredbom. Proces disasembliranja se inicira automatski samim otvaranjem ovog prozora.
Uvek se poinje od adrese 0000H. Kada se proces zavri disasembler izbacuje izlazni
listing. Ovaj listing se moe sauvati na hard disku korisnik mora uneti ime izlaznog fajla,
a ek-stenzija je LST.
36
37
8 x LED Board Ovom opcijom se aktivira niz od 8 LED dioda koje je mogue povezati
na bilo koje pinove. Mogua je promena boje LED (crvena, uta, zelena).
38
LCD Module Ovom opcijom se aktivira LCD modul (koji prikazuje tekst).
Graphical 128x64 LCD Module Ovom opcijom se aktivira grafiki LCD modul. Pre
korienja, neophodno je podesiti parametre u Setup-u.
39
PC's Serial Port Terminal Ovom opcijom se aktivira softverski alat nezavisan od
simulatora i moe se koristiti za komunikaciju stvarnih/fizikih PIC mikrokontrolera i
serijskog porta raunara.
40
Oscilloscope Ovo je moan alat u okviru simulatora preko kojeg mogu da se prate
promene signala na maksimalno 4 pina mikrokontrolera.
41
42
Watch Variables Aktiviranjem ove opcije tokom simulacije se prate promene varijabli
koje se koriste u programu.
43
44
Show RAM Memory Usage Information Ukoliko je ova opcija aktivan, korisnik e biti
obaveten o zauzeu RAM memorije posle kompajliranja programa u BASIC-u.
Use Simple Editor in Basic Compiler and Assembler Ako je ova opcija aktivna,
koriste se jednostavni editori BASIC i asemblerskog kompajlera.
Preserve Input States on Simulation Start Ako je ova opcija aktivna, stanja na
digitalnim i analognim ulazima u prozoru Microcontroller View nee biti resetovana kada
simulacija ponovo zapone.
Change Color Theme promena boja u prozorima aplikacije.
45
5. Primeri
U ovom odeljku bice dato nekoliko primera na kojima moe da se vidi sutina rada
mikrokontrolera, kao i znaaj simulatora koji predstavlja bitan alat za projektante. Primeri
e biti dati u nekoliko grupa, od jednostavnijih primera ka sloenijim. U poslednjem odeljku
mogu se nai i jednostavni zadaci koji slue za proveru znanja studenata u ovoj oblasti.
5.1. Elementarni primeri
Ovi primeri su najjednostavnijeg oblika i slue za upoznavanje asemblera.
EP1. Treba sabrati brojeve a=22 (16h) i b=111 (6Fh) i rezultat sabiranja smestiti na
memorijsku lokaciju broja a (a + b a).
a EQU
b EQU
MOVLW
MOVWF
MOVLW
MOVWF
ADDWF
0x20
0x21
0x6F
0x21
0x16
0x20
0x21,W
MOVWF 0x20
L0001: GOTO L0001
END
46
EP2. Od broja b=111 (6Fh) oduzeti broj a=22 (16hx). Rezultat oduzimanja smestiti na
memorijsku lokaciju broja a (b - a a).
a EQU 0x20
b EQU 0x21
MOVLW 0x6F
MOVWF 0x21
MOVLW 0x16
MOVWF 0x20
SUBWF 0x21,W
MOVWF 0x20
L0001: GOTO L0001
END
47
a EQU 0x20
b EQU 0x21
MOVLW %11110000
MOVWF 0x20
MOVLW %01010101
MOVWF 0x21
XORWF 0x20
MOVF 0x20,W
XORWF 0x21
MOVF 0x21,W
XORWF 0x20
L0001: GOTO L0001
END
48
EP5. Kreirati program koji vri upis brojeva x = 0x42, y =0xAACC i u =0xB1 sukcesivno
poev od lokacije 0x20 u registrima opte namene.
x EQU 0x20
y EQU 0x21
u EQU 0x23
MOVLW 0x42
MOVWF 0x20
MOVLW 0xCC
MOVWF 0x21
MOVLW 0xAA
MOVWF 0x22
MOVLW 0xB1
MOVWF 0x23
L0001: GOTO L0001
END
EP6. Kreirati program koji sukcecivno prikazuje sledea stanja Porta B: 0x55, 0xAA i
0x00.
(Za praenje stanja Porta B aktivirati opciju ToolsMicrocontroler View.)
BSF STATUS,RP0
CLRF 0x06
BCF STATUS,RP0
MOVLW 0xAA
MOVWF 0x06
MOVLW 0x55
MOVWF 0x06
CLRF 0x06
L0001: GOTO L0001
END
;Port B je izlazni
BSF STATUS,RP0
CLRF 0x06
BCF STATUS,RP0
BSF STATUS,RP0
MOVLW 0xFF
MOVWF 0x07
BCF STATUS,RP0
BSF STATUS,RP0
MOVLW 0xFF
MOVWF 0x08
BCF STATUS,RP0
MOVF 0x07,W
SUBWF 0x08,W
MOVWF 0x06
MOVF 0x08,W
ADDWF 0x07,W
MOVWF 0x06
L0001: GOTO L0001
END
;Port B je izlazni
;Port C je ulazni
;Port D je ulazni
49
EP8. Napisati program koji prikazuje sledei rezultat: Port B = PortC XOR PortD.
(Stanja Portova C i D zadati proizvoljno. Za praenje stanja Porta B i definisanja
heksadecimalnih vrednosti Porta C i Porta D treba aktivirati opciju
ToolsMicrocontroler View.)
R0L EQU 0x20
BSF STATUS,RP0
CLRF 0x06
BCF STATUS,RP0
BSF STATUS,RP0
MOVLW 0xFF
MOVWF 0x07
BCF STATUS,RP0
BSF STATUS,RP0
MOVLW 0xFF
MOVWF 0x08
BCF STATUS,RP0
MOVF 0x07,W
MOVWF R0L
MOVF 0x08,W
XORWF R0L,W
MOVWF 0x06
L0001: GOTO L0001
END
50
;Port C je ulazni
;Port D je ulazni
5.2.
Jednostavni primeri
51
52
BTFSS STATUS,C
GOTO L0005
; display = 255 - a
MOVF 0x2C,W
SUBLW 0xFF
MOVWF 0x06
; Next a
MOVLW 0x01
ADDWF 0x2C,F
BTFSS STATUS,C
GOTO L0004
L0005:
MOVLW 0x1F
ANDWF STATUS,F
; kraj programa
L0006:
GOTO L0006
; kraj listinga
END
53
54
55
56
57
58
59
60
; poetak
;Prvih 12 registara opste namene (od adrese 0x20 do
;adrese 0x2B) PIC Simulator rezervise za 4-bajtne
;promenljive R0-R5
61
62
Kao u Primeru 1, student treba da izabere da li e direktno uitati heksadecimalni fajl (Upis
u memoriju.hex) ili e to uiniti preko asemblerskog fajla (Upis u memoriju.asm), njegovog
prevoenja i uitavanja u program. Treba izabrati mikrokontroler PIC16F877 i frekvenciju
4MHz (ako je potrebno, tj. ako nije ve tako podeeno).
Da bi se pratio upis, neophodno je aktivirati editor EEPROM memorije (ToolsEEPROM
memory editor) i, ako je potrebno, aktivirati opciju Clear (koja se nalazi unutar prozora) u
cilju brisanja prethodnog sadraja.
Treba podesiti brzinu (RateExtremely Fast) i pokrenuti simulaciju (SimulationStart). U
okviru editora EEPROM memorije moe se pratiti popunjavanje memorijskih lokacija.
Kao i u prethodnom primeru, mogue je pratiti izvravanje asemblerskim instrukcija
aktiviranjem opcije Breakpoints Manager iz menija Options.
63
64
;Glavni program
;skok na potprogram za konverziju
;prikaz rezultata A/D konverzije
;ponovi beskonacnu petlju
;Potprogram koji vrsi A/D konverziju
;start A/D konverzije
;sacekati dok se konverzija ne zavrsi
65
BSF 0x1F,2
;While ad_start sacekati dok se konverzija ne zavrsi
L0005:
BTFSS 0x1F,2
GOTO L0006
;Wend
GOTO L0005
L0006:
MOVLW 0x1F
ANDWF STATUS,F
;Return
RETURN
;kraj programa
L0007:
GOTO L0007
; kraj listinga
END
Student treba da izabere da li e direktno uitati heksadecimalni fajl (AD konverzija.hex) ili
e to uiniti preko asemblerskog fajla (AD konverzija.asm), njegovog prevoenja i
uitavanja u program. Treba izabrati mikrokontroler PIC16F877 i frekvenciju 4MHz (ako je
potrebno, tj. ako nije ve tako podeeno).
Sada treba ukljuiti pregled mikrokontrolera sa rasporedom pinova (Microcontroler View) i
LED diode (8 x LED board). Oba grafika interfejsa se biraju u meniju Tools.
Zatim treba podesiti brzinu (RateExtremely Fast) i pokrenuti simulaciju
(SimulationStart). Klikom na pin PA0 aktivira se potenciometar na kojem se zadaje
vrednost napona (0-1023 koraka). Prikaz 8-bitne digitalne rei, koja je rezultat A/D
konverzije, prikazuje se na LED diodama (koje treba da budu povezane na Port B u
opadajuem nizu od PB7 do PB0).
Naravno, mogue je pratiti izvravanje asemblerskim instrukcija (aktiviranjem opcije
Breakpoints Manager), kao i stanja varijabli (aktiviranjem opcije Watch Variables). Obe
opcije su iz menija Options.
(Napomena: Iako mikrokontroler PIC16F877 poseduje 10-bitni A/D konvertor, zbog toga
to u simulatoru postoji samo 8 LED dva najnia bita rezultata A/D konverzije se
odbacuju, ime se gubi na rezoluciji).
66
67
5.3.
broja a
broja b
broja x
rezultata y
a
b
x
y
a
b
x
y
224
;dodeljivanje vrednosti brojevima a, b i c
120
48
(a + b) * x ;izracunavanje rezultata
=
=
=
=
As
As
As
As
;definisanje
;definisanje
;definisanje
;definisanje
Dim
Dim
Dim
Dim
68
MOVWF 0x2D
MOVLW 0x30
MOVWF 0x2E
MOVF 0x2C,W
ADDWF 0x2D,W
MOVWF 0x2F
CLRW
BTFSC STATUS,C
ADDLW 0x01
ADDLW 0x00
MOVWF 0x30
MOVF 0x2F,W
MOVWF R3L
MOVF 0x30,W
MOVWF R3H
MOVF 0x2E,W
MOVWF R1L
CLRF R1H
CALL M001
MOVWF 0x2F
MOVF R2H,W
MOVWF 0x30
;x = 48
;y = (a + b) * x 'izracunavanje rezultata
; kraj programa
L0002:
GOTO L0002
; rutina mnoenja
69
70
To 127
;pauza 1ms, kako bi se uocio proces
;Citanje podatka b sa adrese a
b ; prikaz na Portu B
;Sledeca adresa
' pauza 5ms
0 ' prikaz 0=(00000000)b na Portu B
71
BCF STATUS,RP0
;Symbol display = PORTB prikaz stanja na LED na
;Portu B
display EQU 0x6 ;adresa'display' je 0x6
;For a = 0 To 127 proi kroz celu EEPROM memoriju
CLRF 0x2C
L0002:
MOVF 0x2C,W
SUBLW 0x7F
BTFSS STATUS,C
GOTO L0003
MOVLW 0x80
;b = 128 + a vrednost koja se upisuje na adresu a
ADDWF 0x2C,W
MOVWF 0x2D
MOVF 0x2C,W
;Write a, b upis u EEPROM memoriju
BSF STATUS,RP1
MOVWF EEADR
BCF STATUS,RP1
MOVF 0x2D,W
BSF STATUS,RP1
MOVWF EEDATA
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,WREN
MOVLW 0x55
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1,WR
L0004:
BTFSC EECON1,WR
GOTO L0004
BCF EECON1,WREN
BCF STATUS,RP1
BCF STATUS,RP0
BCF PIR2,EEIF
;Next a
MOVLW 0x01
ADDWF 0x2C,F
BTFSS STATUS,C
GOTO L0002
L0003:
MOVLW 0x1F
ANDWF STATUS,F
;For a = 0 To 127 upis se vrsi u prvih 128 lokacija
CLRF 0x2C
L0005:
MOVF 0x2C,W
SUBLW 0x7F
BTFSS STATUS,C
GOTO L0006
;WaitMs 1
pauza 1ms, kako bi se uocio proces
MOVLW 0x01
MOVWF R0L
CLRF R0H
CALL W001
MOVF 0x2C,W
;Read a, b Citanje podatka b sa adrese a
BSF STATUS,RP1
MOVWF EEADR
BSF STATUS,RP0
72
BCF EECON1,EEPGD
BSF EECON1,RD
NOP
BCF STATUS,RP0
MOVF EEDATA,W
BCF STATUS,RP1
MOVWF 0x2D
;display = b
prikaz na Portu B
MOVF 0x2D,W
MOVWF 0x06
;Next a
Sledeca adresa
MOVLW 0x01
ADDWF 0x2C,F
BTFSS STATUS,C
GOTO L0005
L0006:
MOVLW 0x1F
ANDWF STATUS,F
;WaitMs 5
pauza 5ms
MOVLW 0x05
MOVWF R0L
CLRF R0H
CALL W001
;display = 0
CLRF 0x06
; kraj programa
L0007:
GOTO L0007
; rutina kasnjenja
73
NOP
RETURN
W006: CALL W007
GOTO W005
W007: MOVLW 0x0D
MOVWF R2L
W008: DECFSZ R2L,F
GOTO W008
NOP
RETURN
; kraj listinga
END
74
75
Define
Define
Define
Define
Define
LCD_RSREG = PORTD
LCD_RSBIT = 1
LCD_EREG = PORTD
LCD_EBIT = 3
LCD_RWREG = PORTD
Adcin 0, an0
x0 = (5 * an0) / 1023
x1 = (48 * ((an0 + 2) - (x0 * 205))) / 100
Lcdcmdout LcdClear
;brisanje LCD displeja
Lcdout "Napon na pinu A0" ;tekst prve linije
Lcdcmdout LcdLine2Home ;postavljanje kursora na pocetak 2.linije
Lcdout "iznosi: ", #x0, ".", #x1, "V" ;nacin formatiranja teksta
;2.linije
WaitMs 2
;kasnjenje 2ms
Adcin 1, an1
x2 = (5 * an1) / 1023
x3 = (48 * ((an1 + 2) - (x2 * 205))) / 100
Lcdcmdout LcdClear
;brisanje LCD displeja
Lcdout "Napon na pinu A1" ;tekst prve linije
Lcdcmdout LcdLine2Home ;postavljanje kursora na pocetak 2.linije
Lcdout "iznosi: ", #x2, ".", #x3, "V" ;nacin formatiranja teksta
;2.linije
WaitMs 2
;kasnjenje 2ms
Goto loop ;beskonacna petlja
76
77
x3 EQU 0x36
x4 EQU 0x38
x5 EQU 0x3A
BSF STATUS,RP0
MOVLW 0xFF
MOVWF 0x05
BCF STATUS,RP0
;26: ADCON1 = 0 'definisanje pinova Porta A kao
;analognih
BSF STATUS,RP0
CLRF 0x1F
BCF STATUS,RP0
;27:
;28: Lcdinit 'inicijalizacija LCD modula
BCF 0x08,3
BCF 0x08,1
BCF 0x08,2
BSF STATUS,RP0
BCF 0x08,3
BCF 0x08,1
BCF 0x08,2
CLRF 0x06
BCF STATUS,RP0
MOVLW 0x02
MOVWF R0L
MOVLW 0x00
MOVWF R0H
CALL W001
MOVLW 0x33
CALL LC02
MOVLW 0x33
CALL LC02
MOVLW 0x33
CALL LC02
MOVLW 0x38
CALL LC02
MOVLW 0x0C
CALL LC02
MOVLW 0x01
CALL LC02
;29: petlja
L0001:
;30:
;31: Adcin 0, an0
BSF STATUS,RP0
BSF ADCON1,ADFM
MOVLW 0x00
BCF STATUS,RP0
MOVWF R0L
CALL A001
BSF STATUS,RP0
MOVF ADRESL,W
78
BCF STATUS,RP0
MOVWF 0x2C
MOVF ADRESH,W
MOVWF 0x2D
;32: x0 = (5 * an0) / 1023
MOVLW 0x05
MOVWF R3L
CLRF R3H
MOVF 0x2C,W
MOVWF R1L
MOVF 0x2D,W
MOVWF R1H
CALL M001
MOVWF 0x30
MOVF R2H,W
MOVWF 0x31
MOVF 0x30,W
MOVWF R0L
MOVF 0x31,W
MOVWF R0H
MOVLW 0xFF
MOVWF R1L
MOVLW 0x03
MOVWF R1H
CALL D001
MOVWF 0x30
MOVF R0H,W
MOVWF 0x31
;33: x1 = (48 * ((an0 + 2) - (x0 * 205))) / 100
MOVF 0x2C,W
ADDLW 0x02
MOVWF 0x32
MOVF 0x2D,W
BTFSC STATUS,C
ADDLW 0x01
ADDLW 0x00
MOVWF 0x33
MOVF 0x30,W
MOVWF R3L
MOVF 0x31,W
MOVWF R3H
MOVLW 0xCD
MOVWF R1L
CLRF R1H
CALL M001
MOVWF 0x3C
MOVF R2H,W
MOVWF 0x3D
MOVF 0x3C,W
SUBWF 0x32,W
MOVWF 0x32
MOVF 0x3D,W
BTFSS STATUS,C
ADDLW 0x01
SUBWF 0x33,W
MOVWF 0x33
MOVLW 0x30
MOVWF R3L
79
CLRF R3H
MOVF 0x32,W
MOVWF R1L
MOVF 0x33,W
MOVWF R1H
CALL M001
MOVWF 0x32
MOVF R2H,W
MOVWF 0x33
MOVF 0x32,W
MOVWF R0L
MOVF 0x33,W
MOVWF R0H
MOVLW 0x64
MOVWF R1L
CLRF R1H
CALL D001
MOVWF 0x32
MOVF R0H,W
MOVWF 0x33
;34: Lcdcmdout LcdClear 'brisanje LCD displeja
MOVLW 0x01
CALL LC02
;35: Lcdout "Napon na pinu A0" 'tekst prve linije
MOVLW 0x4E
CALL LC01
MOVLW 0x61
CALL LC01
MOVLW 0x70
CALL LC01
MOVLW 0x6F
CALL LC01
MOVLW 0x6E
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x6E
CALL LC01
MOVLW 0x61
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x70
CALL LC01
MOVLW 0x69
CALL LC01
MOVLW 0x6E
CALL LC01
MOVLW 0x75
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x41
CALL LC01
MOVLW 0x30
CALL LC01
;36: Lcdcmdout LcdLine2Home 'postavljanje kursora
;na pocetak 2.linije
80
MOVLW 0xC0
CALL LC02
;37: Lcdout "iznosi: ", #x0, ".", #x1, "V" 'nacin
;formatiranja teksta 2.linije
MOVLW 0x69
CALL LC01
MOVLW 0x7A
CALL LC01
MOVLW 0x6E
CALL LC01
MOVLW 0x6F
CALL LC01
MOVLW 0x73
CALL LC01
MOVLW 0x69
CALL LC01
MOVLW 0x3A
CALL LC01
MOVLW 0x20
CALL LC01
MOVF 0x30,W
MOVWF R2L
MOVF 0x31,W
MOVWF R2H
CALL LC21
MOVLW 0x2E
CALL LC01
MOVF 0x32,W
MOVWF R2L
MOVF 0x33,W
MOVWF R2H
CALL LC21
MOVLW 0x56
CALL LC01
;38: WaitMs 2
kasnjenje 2ms
MOVLW 0x02
MOVWF R0L
CLRF R0H
CALL W001
;39: Adcin 1, an1
BSF STATUS,RP0
BSF ADCON1,ADFM
MOVLW 0x01
BCF STATUS,RP0
MOVWF R0L
CALL A001
BSF STATUS,RP0
MOVF ADRESL,W
BCF STATUS,RP0
MOVWF 0x2E
MOVF ADRESH,W
MOVWF 0x2F
;40: x2 = (5 * an1) / 1023
MOVLW 0x05
MOVWF R3L
CLRF R3H
MOVF 0x2E,W
MOVWF R1L
81
MOVF 0x2F,W
MOVWF R1H
CALL M001
MOVWF 0x34
MOVF R2H,W
MOVWF 0x35
MOVF 0x34,W
MOVWF R0L
MOVF 0x35,W
MOVWF R0H
MOVLW 0xFF
MOVWF R1L
MOVLW 0x03
MOVWF R1H
CALL D001
MOVWF 0x34
MOVF R0H,W
MOVWF 0x35
;41: x3 = (48 * ((an1 + 2) - (x2 * 205))) / 100
MOVF 0x2E,W
ADDLW 0x02
MOVWF 0x36
MOVF 0x2F,W
BTFSC STATUS,C
ADDLW 0x01
ADDLW 0x00
MOVWF 0x37
MOVF 0x34,W
MOVWF R3L
MOVF 0x35,W
MOVWF R3H
MOVLW 0xCD
MOVWF R1L
CLRF R1H
CALL M001
MOVWF 0x3C
MOVF R2H,W
MOVWF 0x3D
MOVF 0x3C,W
SUBWF 0x36,W
MOVWF 0x36
MOVF 0x3D,W
BTFSS STATUS,C
ADDLW 0x01
SUBWF 0x37,W
MOVWF 0x37
MOVLW 0x30
MOVWF R3L
CLRF R3H
MOVF 0x36,W
MOVWF R1L
MOVF 0x37,W
MOVWF R1H
CALL M001
MOVWF 0x36
MOVF R2H,W
MOVWF 0x37
MOVF 0x36,W
82
MOVWF R0L
MOVF 0x37,W
MOVWF R0H
MOVLW 0x64
MOVWF R1L
CLRF R1H
CALL D001
MOVWF 0x36
MOVF R0H,W
MOVWF 0x37
;42: Lcdcmdout LcdClear 'brisanje LCD displeja
MOVLW 0x01
CALL LC02
;43: Lcdout "Napon na pinu A1" 'tekst prve linije
MOVLW 0x4E
CALL LC01
MOVLW 0x61
CALL LC01
MOVLW 0x70
CALL LC01
MOVLW 0x6F
CALL LC01
MOVLW 0x6E
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x6E
CALL LC01
MOVLW 0x61
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x70
CALL LC01
MOVLW 0x69
CALL LC01
MOVLW 0x6E
CALL LC01
MOVLW 0x75
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x41
CALL LC01
MOVLW 0x31
CALL LC01
;44: Lcdcmdout LcdLine2Home 'postavljanje kursora
;na pocetak 2.linije
MOVLW 0xC0
CALL LC02
;45: Lcdout "iznosi: ", #x2, ".", #x3, "V" 'nacin
;formatiranja teksta 2.linije
MOVLW 0x69
CALL LC01
MOVLW 0x7A
CALL LC01
MOVLW 0x6E
CALL LC01
83
MOVLW 0x6F
CALL LC01
MOVLW 0x73
CALL LC01
MOVLW 0x69
CALL LC01
MOVLW 0x3A
CALL LC01
MOVLW 0x20
CALL LC01
MOVF 0x34,W
MOVWF R2L
MOVF 0x35,W
MOVWF R2H
CALL LC21
MOVLW 0x2E
CALL LC01
MOVF 0x36,W
MOVWF R2L
MOVF 0x37,W
MOVWF R2H
CALL LC21
MOVLW 0x56
CALL LC01
;46: WaitMs 2 'kasnjenje 2ms
MOVLW 0x02
MOVWF R0L
CLRF R0H
CALL W001
;47:
;48: Goto loop 'beskonacna petlja
GOTO L0001
; kraj programa
L0003:
GOTO L0003
; rutina mnoenja
84
;rutina deljenja
; rutina kanjenja
W001: MOVF R0L,F
BTFSC STATUS,Z
GOTO W002
CALL W003
DECF R0L,F
NOP
NOP
NOP
NOP
NOP
GOTO W001
W002: MOVF R0H,F
BTFSC STATUS,Z
RETURN
CALL W003
DECF R0H,F
DECF R0L,F
GOTO W001
W003: MOVLW 0x0C
MOVWF R2H
W004: DECFSZ R2H,F
GOTO W004
NOP
NOP
MOVLW 0x12
MOVWF R1L
W005: DECFSZ R1L,F
GOTO W006
CALL W007
85
CALL W007
NOP
NOP
RETURN
W006: CALL W007
GOTO W005
W007: MOVLW 0x0D
MOVWF R2L
W008: DECFSZ R2L,F
GOTO W008
NOP
RETURN
; rutina kanjenja - Byte Argument
X001: MOVLW 0x0A
SUBWF R4L,F
BTFSS STATUS,C
RETURN
GOTO X002
X002: MOVLW 0x06
SUBWF R4L,F
BTFSS STATUS,C
RETURN
GOTO X002
; rutina kanjenja - Word Argument
Y001: MOVLW 0x10
SUBWF R4L,F
CLRW
BTFSS STATUS,C
ADDLW 0x01
SUBWF R4H,F
BTFSS STATUS,C
RETURN
GOTO Y002
Y002: MOVLW 0x0A
SUBWF R4L,F
CLRW
BTFSS STATUS,C
ADDLW 0x01
SUBWF R4H,F
BTFSS STATUS,C
RETURN
GOTO Y002
; Adcin rutina
A001: RLF R0L,F
RLF R0L,F
RLF R0L,F
MOVLW 0x38
ANDWF R0L,F
MOVLW 0xC1
IORWF R0L,W
MOVWF ADCON0
MOVLW 0x0A
MOVWF R4L
CALL X001
BSF ADCON0,GO
A002: BTFSC ADCON0,GO
GOTO A002
BCF PIR1,ADIF
86
BCF ADCON0,ADON
RETURN
LC01: BSF 0x08,1
BCF 0x08,2
MOVWF 0x06
BSF 0x08,3
NOP
BCF 0x08,3
MOVLW 0x32
MOVWF R4L
CALL X001
RETURN
LC02: BCF 0x08,1
BCF 0x08,2
MOVWF 0x06
BSF 0x08,3
NOP
BCF 0x08,3
MOVLW 0xD0
MOVWF R4L
MOVLW 0x07
MOVWF R4H
CALL Y001
RETURN
LC21: BSF R3H,7
MOVLW 0x27
MOVWF R1H
MOVLW 0x10
CALL LC22
MOVLW 0x03
MOVWF R1H
MOVLW 0xE8
CALL LC22
CLRF R1H
MOVLW 0x64
CALL LC22
CLRF R1H
MOVLW 0x0A
CALL LC22
MOVF R2L,W
GOTO LC23
LC22: MOVWF R1L
MOVF R2H,W
MOVWF R0H
MOVF R2L,W
MOVWF R0L
CALL D001
MOVF R0L,W
BTFSS STATUS,Z
BCF R3H,7
BTFSC R3H,7
RETURN
LC23: ADDLW 0x30
CALL LC01
RETURN
; Lcdout rutina
; Lcdcmdout rutina
; kraj listinga
END
87
88
5.4.
Dopunski primeri
For i = 0 To 5
If i > 2 Then
j = 5 - i
Else
j = 0
Endif
Next i
ASEMBLER:
R0L EQU 0x20
R0H EQU 0x21
R1L EQU 0x22
R1H EQU 0x23
R2L EQU 0x24
R2H EQU 0x25
R3L EQU 0x26
R3H EQU 0x27
R4L EQU 0x28
R4H EQU 0x29
R5L EQU 0x2A
R5H EQU 0x2B
BCF PCLATH,3
BCF PCLATH,4
GOTO L0001
ORG 0x0004
RETFIE
;Povratak iz prekida
;Povratak iz interapta
L0001:
i EQU 0x2C
j EQU 0x2D
CLRF 0x2C
L0002:
MOVF 0x2C,W
SUBLW 0x05
89
BTFSS STATUS,C
GOTO L0003
;5: If i > 2 Then
;Ispituje da li je i>5 na isti nacin kao prethodno
;ispitivanje
MOVF 0x2C,W
SUBLW 0x02
BTFSC STATUS,C
GOTO L0004
MOVF 0x2C,W
SUBLW 0x05
MOVWF 0x2D
; 6: j = 5 - i
;U akumulator se smesta vrednost sa adrese 2Ch
;(to je promenljiva i)
;Od vrednosti 02h (to je 2DEC)oduzima se vrednost
;koja je u akumulatoru
; Rezultat se smesta u akumulator
;Rezultat iz akumulatora se smesta na adresu 2Dh
; (to je adresa promenljive j)
; 7: Else
GOTO L0005
L0004:
MOVLW 0x1F
ANDWF STATUS,F
CLRF 0x2D
; 8: j = 0
;U suprotnom, stanje na adresi 2Dh (to je promen;ljiva j) je 0
; 9: Endif
L0005:
MOVLW 0x1F
ANDWF STATUS,F
MOVLW 0x01
ADDWF 0x2C,F
; 10: Next i
; Inkrementiranje promenljive
; U akumulator se smesta vrednost 1
; Vrednost sa adrese 2Ch (adresa promenljive i)
;se sabira sa stanjem akumulatora smesta se na
;adresu 2Ch
BTFSS STATUS,C
; Test bit C u STATUS, preskoi ako je 1
GOTO L0002
L0003:
MOVLW 0x1F
ANDWF STATUS,F ;logika I operacija nad sadrajem akumulatora
;(to je 0x1F) i STATUS registrom
L0006:
GOTO L0006
END
; Kraj programa
90
ASEMBLER:
R0L EQU 0x20
R0H EQU 0x21
R1L EQU 0x22
R1H EQU 0x23
R2L EQU 0x24
R2H EQU 0x25
R3L EQU 0x26
R3H EQU 0x27
R4L EQU 0x28
R4H EQU 0x29
R5L EQU 0x2A
R5H EQU 0x2B
BCF PCLATH,3
BCF PCLATH,4
GOTO L0001
ORG 0x0004
91
RETFIE
L0001:
; Povratak iz prekida
92
ASEMBLER:
R0L
R0H
R1L
R1H
R2L
R2H
R3L
R3H
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x20
0x21
0x22
0x23
0x24
0x25
0x26
0x27
93
94
MOVWF
CLRW
BTFSC
ADDLW
ADDWF
MOVWF
0x2F
STATUS,C
0x01
0x30,W
0x30
; 10: Next y
MOVLW 0x01
ADDWF 0x2D,F
MOVLW 0x00
BTFSC STATUS,C
ADDLW 0x01
BTFSC STATUS,C
GOTO L0005
ADDWF 0x2E,F
BTFSS STATUS,C
GOTO L0004
L0005:
MOVLW 0x1F
ANDWF STATUS,F
; 11: Next x
MOVLW 0x01
SUBWF 0x2C,F
BTFSC STATUS,C
GOTO L0002
L0003:
MOVLW 0x1F
ANDWF STATUS,F
; Kraj programa
L0006:
GOTO L0006
; Rutina za mnozenje
M001: MOVLW 0x10
MOVWF R4L
CLRF R0H
CLRF R0L
M002: RRF R3H,F
RRF R3L,F
BTFSS STATUS,C
GOTO M003
MOVF R1L,W
ADDWF R0L,F
MOVF R1H,W
BTFSC STATUS,C
INCFSZ R1H,W
ADDWF R0H,F
M003: RRF R0H,F
RRF R0L,F
RRF R2H,F
RRF R2L,F
DECFSZ R4L,F
GOTO M002
MOVF R2L,W
RETURN
; Rutina za poredjenje
C001: MOVWF R1L
MOVLW 0x05
GOTO C007
C002: MOVWF R1L
MOVLW 0x02
GOTO C007
95
96
ASEMBLER:
R0L EQU 0x20
R0H EQU 0x21
R1L EQU 0x22
R1H EQU 0x23
R2L EQU 0x24
R2H EQU 0x25
R3L EQU 0x26
R3H EQU 0x27
R4L EQU 0x28
R4H EQU 0x29
R5L EQU 0x2A
R5H EQU 0x2B
BCF PCLATH,3
BCF PCLATH,4
GOTO L0001
ORG 0x0004
RETFIE
L0001:
BSF STATUS,RP0
CLRF 0x06
BCF STATUS,RP0
MOVLW 0xAA
MOVWF 0x06
;Povratak iz prekida
;1: TRISB = %00000000 'svi pinovi PORTA B su izlazni
;Brisanje (resetovanje) Porta B koji ima adresu 0x06
; 2:
;3: PORTB = %10101010 'pocetno stanje (10101010bin=0xAA)
;Vrednost 0xAA se upisuje na Port B, cija je adresa 0x06
;4: WaitUs 50
MOVLW 0x32 (0x32=50DEC)
MOVWF R4L
;Informacija o kasnjenju se cuva u R4L
CALL X001
;Pozivanje rutine koja definise kasnjenje od 50us
;5: PORTB = %01010101 'stanje posle 50us (01010101bin=0x55)
MOVLW 0x55
MOVWF 0x06
;6: WaitUs 50 (0x32=50DEC)
MOVLW 0x32
MOVWF R4L
;Informacija o kasnjenju se cuva u R4L
CALL X001
;Pozivanje rutine koja definise kasnjenje od 50us
;7: PORTB = %00000000 'konacno stanje (00000000bin=0x00)
CLRF 0x06
; Brisanje (resetovanje) Porta B
;KRAJ PROGRAMA
L0002:
GOTO L0002
;Rutina kojom se definise kasnjenje
;Osnovno kasnjenje iznosi 1us tako da
;se 50us implementira preko dve FOR
;petlje obelezene labelama X001 i X002
X001: MOVLW 0x0A
97
SUBWF R4L,F
BTFSS STATUS,C ;Test bit C u STATUS, preskoi ako je 1
RETURN
;Povratak iz potprograma
GOTO X002
X002: MOVLW 0x06
;Povratak iz potprograma
SUBWF R4L,F
BTFSS STATUS,C
;Test bit C u STATUS registru, preskoi ako je 1
RETURN
; Povratak iz potprograma
GOTO X002
END
98
6. Laboratorijske vebe
1.
Napisati program koji vri upis broja a=52h na lokaciju registra opte namene 0x2F.
2.
Treba sabrati brojeve a=21 (15h), b=96 (60h) i c = 34 (22h) rezultat sabiranja
smestiti na memorijsku lokaciju broja b (a + b + c b).
3.
4.
5.
Napisati program koji sukcecivno prikazuje sledea stanja Porta C: 0x22, 0xF4 i
0x00. (Za praenje stanja Porta C aktivirati opciju ToolsMicrocontroler View.)
6.
7.
8.
9.
10.
Napisati program koji vri resetovanje bita na poziciji 6 u 8-mo bitnom broju koji se
proizvoljno unese
99
7. Zakljuak
U prethodnom tekstu ovog seminarskog rada je opisan softver PIC Simulator IDE, koji
slui za simulaciju veeg broja PIC mikrokontrolera 12F i 16F serija.
Najpre je detaljno opisano 8 primera u asembleru, da bi kasnije bilo detaljno opisano i
ilustrovano 6 primera sa mikrokontrolerom PIC16F877:
broja,
upis u EEPROM mikrokontrolera,
A/D konverzija preko mikrokontrolera,
izraunavanje izraza,
upis i itanje podataka u/iz EEPROM-a mikrokontrolera,
prikaz dvokanalne A/D konverzije na LCD modulu.
100
8. Literatura
PIC16F877, Microchip, sajt http://www.microchip.com
PIC Simulator IDE, sajt http://www.oshonsoft.com/pic.html
Instrukcije u PIC BASIC-u, sajt http://milan.milanovic.org/skola
Instrukcije u asembleru za PIC, sajt http://mikroe.com
101
9. CV
Prezime:
Ime:
Adresa stanovanja:
E-mail adresa:
Brano stanje:
Datum roenja:
Nacionalnost:
Obrazovanje:
Kompletna ili stepenovana diploma:
Vozaka dozvola:
Poznavanje jezika
Poznavanje operativnih sistema i
programskih paketa
Posebna interesovanja
Sposobnosti
Napomene
102
Prokopovi
Ranko
Moe Pijade 5/11, Vladiin Han
bodraje@yahoo.com
Neoenjen
08.01.1982. godine
Gimnazija Jovan Skerli Vladiin Han
IV stepen
B kategorija
Engleski (dobro)
WINDOWS XP, PIC Simulator IDE
Pretraivanje Interneta, itanje strune
literature, automobili i tehnika
Radoznalost, preduzimljivost, snalaljivost
Nosilac Vukove diplome u osnovnoj i srednjoj
koli.