|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
toncibalonci Član
Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.63 Kraj: Dravograd
|
Objavljeno: Pet Dec 07, 2007 12:51 am Naslov sporočila: Zacetek |
|
|
Ker skoraj nimam pojma bi rabil malo pomoči! Ta program naj bi po vklopu izklopil LED-ico ampak ta gori naprej. Če je kdo tako prijazen pa mi pove kje je fora???
list p=16f84
#include <p16f84.inc>
__CONFIG _CP_OFF & _XT_OSC & _WDT_OFF & _PWRTE_ON
Zakas equ 0x0c
org 0x000
goto Zacni
org 0x004
Zacni
bsf STATUS,RP0
clrf TRISB
bcf STATUS,RP0
clrf PORTB
bsf PORTB,4
movlw .250
movwf Zakas
A decfsz Zakas
goto A
bcf PORTB,4
end |
|
Nazaj na vrh |
|
|
int47 Član
Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2066 Aktiv.: 9.27 Kraj: Ljubljana
|
Objavljeno: Pet Dec 07, 2007 1:26 am Naslov sporočila: |
|
|
PIC-ev in njihovega zbirnika ne poznam.
Po mojem pred "end" manjka še ena vrstica v stilu "ZANKA goto ZANKA".
Zakasnitev se mi zdi premajhna, da bi lahko videl utripniti LED diodo.
Nazadnje urejal/a int47 Pet Dec 07, 2007 1:56 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.05
|
Objavljeno: Pet Dec 07, 2007 1:31 am Naslov sporočila: |
|
|
Brez da se poglabljam v program:
Tisti "end" na koncu pove prevajalniku, kako dolg je program, ki ga je treba vpisati v PIC-a.
Na koncu mora biti zanka:
Koda: |
Konec goto Konec
end |
, v kateri bo program obstal. V tvojem primeru pa po bcf PORTB,4 odpluje v svet ADDLW - po domače napisano: programu se "sfuzla".
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
jur Član
Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 23.08 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pet Dec 07, 2007 10:08 am Naslov sporočila: |
|
|
Zadeva je taka:
Koda: |
bsf PORTB,4 ;prižge diodo
movlw .250 ;;zelo kratka zakasnitev
movwf Zakas ;;zelo kratka zakasnitev
A decfsz Zakas ;;zelo kratka zakasnitev
goto A ;;zelo kratka zakasnitev
bcf PORTB,4 ;ugasne diodo
;od tu naprej se program se nadaljuje v neznano kam. Verjetno se nekje izvede vklop diode: bsf PORTB,4
end ; end pomeni konec assemblerske kode, ne konec programa v mikrokontrolerju. Program izvaja naslednje instrukcije v pomnilniku eno po eno, dokler ne naleti na stack ali kaj drugega... |
Prav bi bilo:
Koda: |
bcf PORTB,4 ;ugasne diodo
x goto x ; program se kontrolirano zacikla. Lahko bi uporabil na primer tudi instrukcijo sleep, da ustaviš chip zmanjšaš porabo elektrike |
Tvoja zakasnitev je tako hitra, da se vidi samo na osciloskopu. Razen če uporabljaš oscilator par kilohertzov, ne pa par megahertzov (verjetno imaš okoli 4 MHz).
Jur |
|
Nazaj na vrh |
|
|
toncibalonci Član
Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.63 Kraj: Dravograd
|
Objavljeno: Sob Dec 08, 2007 3:31 pm Naslov sporočila: |
|
|
Sem že popravil in deluje,zakasnitev pa je res zelo kratka ampak se jo da videt! Kot sem že rekel,skoraj nimam pojma ampak upam da ne bo več dolgo tako! Hvala za pomoč! |
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.05
|
Objavljeno: Sob Dec 08, 2007 4:35 pm Naslov sporočila: |
|
|
Koda: |
Cakaj
movlw .250 ; Konstanta v "W"
movwf Zakas ; W-krat Kratka zakasnitev = W*255 korakov
clrf Zakas1
Cak1 decfsz Zakas1 ; Kratka zakasnitev = 255 korakov
goto Cak1
decfsz Zakas ; Kolikokrat se je izvršila Kratka zakasnitev?
goto Cak1 ; W-krat --> gremo ven iz zanke
|
Trajanje zakasnitve nastaviš s konstanto.
Lahko tudi napišeš
call Cakaj
vendar moraš pod spodnjim "goto Cak1" dodati še "return".
Malce daljše zakasnitve delaj z dvema spremenljivkama Zakas_ , če daljše pa s tremi (trojna povratna zanka).
Ko boš obvladal prekinitve, boš rabil manj tovrstnih zank, saj se prekinitve že same po sebi izvajajo bolj poredko.
Večkrat prilepim tole povezavo: Sprut.de . Dostikrat dobim odgovor, da ne znajo nemško, a vsaj od tebe nekako pričakujem, da znaš nemško .
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
toncibalonci Član
Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.63 Kraj: Dravograd
|
Objavljeno: Sob Dec 08, 2007 7:43 pm Naslov sporočila: |
|
|
Hvala za odgovor Igor,ampak tudi jaz nimam pojma o nemščini,čeprav sem doma blizu meje! Ima pa zato Altavista kar dober prevajalnik,tako da ni panike! LP |
|
Nazaj na vrh |
|
|
milan62 Član
Pridružen-a: Ned 04 Jan 2004 23:19 Prispevkov: 2379 Aktiv.: 10.68 Kraj: Kranj
|
Objavljeno: Sob Dec 08, 2007 8:29 pm Naslov sporočila: |
|
|
Deutsch ist doch so einfach !
LP |
|
Nazaj na vrh |
|
|
mannetou Član
Pridružen-a: Pet 08 Jan 2010 20:34 Prispevkov: 26 Aktiv.: 0.15 Kraj: LJ
|
Objavljeno: Pon Jan 25, 2010 3:50 pm Naslov sporočila: ************************************************************ |
|
|
Si bom sposodil temo in kar tukaj vprašal.
Sem začetnik v programiranju PICev v zbirniku in mi nikakor ni jasna predvsem ena stvar. Ko gledam različne programe, velikokrat naletim na vpeljavo konstant, na začetku programa, ki zgledajo npr. takole:
LED equ 2 ; vpeljava konstante LED -> RB2
TIPKA equ 4 ; vpeljava konstante TIPKA -> RC4
Torej iz tega zapisa mi nikakor ni jasno, kako zbirnik ve, s preprostim ukazom equ x, kater port sem dejansko imel v mislih? Zakaj ni recimo obratno RC2 in RB4 ali pa RA2 in RD4, npr... Edina smiselna razlaga zame bi bila, da zbirnik konstanto LED shrani v vse tretje bite portov in konstanto TIPKA v vse 5. bite portov, kar pa sem prepričan, da ne drži. Res bom hvaležen za pojasnilo, pa upam, da se ne osmešim preveč. Se zahvaljujem v naprej. LP |
|
Nazaj na vrh |
|
|
bungee Član
Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.64 Kraj: Ljubljana
|
Objavljeno: Pon Jan 25, 2010 11:22 pm Naslov sporočila: |
|
|
Zadevo si vzel iz konteksta. Definicija LED equ 2 ne pomeni porta temveč pin na portu. Če bi malo bolj pozorno pogledal, so verjetno te številke, ki jih vidiš poleg equ vedno število 0,2,4,8,... torej posamezen bit na portu
Definicija za kater port gre je vsekakor napisana nekje drugje. Če bi rad ti lahko opišem na dejanskem primeru, ki te zanima (pripni kodo) |
|
Nazaj na vrh |
|
|
mannetou Član
Pridružen-a: Pet 08 Jan 2010 20:34 Prispevkov: 26 Aktiv.: 0.15 Kraj: LJ
|
Objavljeno: Tor Jan 26, 2010 11:47 pm Naslov sporočila: |
|
|
Mislim da sem si razjasnil. Se pravi vpis konstante TIPKA je ekvivalenten vpisu števila 2, vedno pa je potrebno definirati za kater register gre. Torej če je 'TIPKA equ 2' lahko pišem PORTC, TIPKA ali PORTD, TIPKA, celo STATUS, TIPKA, ker je enako kot STATUS, 2. Se pravi konstante na ta način nikoli ne morejo imeti enake vrednosti.. Npr.:
TIPKA equ 2
LED equ 2.
Imam prav?
Če najdem primer, pri katerem mi to ni bilo takoj razvidno, ga prilepim.
Hvala za pomoč. LP |
|
Nazaj na vrh |
|
|
bungee Član
Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.64 Kraj: Ljubljana
|
Objavljeno: Sre Jan 27, 2010 12:17 am Naslov sporočila: |
|
|
Konstantam lahko definira katerokoli vrednost, tako da je prav lahko LED in TIPKA enaka vrednost, le da potem vrjetno ne bosta vezana na isti register.... lahko pa tudi, ampak to so pa potem že naprednejša poglavja |
|
Nazaj na vrh |
|
|
mannetou Član
Pridružen-a: Pet 08 Jan 2010 20:34 Prispevkov: 26 Aktiv.: 0.15 Kraj: LJ
|
Objavljeno: Sre Jan 27, 2010 1:07 am Naslov sporočila: |
|
|
No lahko zavzemata isto vrednost, ampak potem bi bilo verjetno vseeno ali napišem PORTB, TIPKA ali PORTB, LED?
Kako dosežem, da konstanti ne bi bili vezani na isti register(vezani na ista bita v različnih registrih)? |
|
Nazaj na vrh |
|
|
Pingi Član
Pridružen-a: Tor 13 Okt 2009 12:44 Prispevkov: 123 Aktiv.: 0.70 Kraj: Selnica ob Dravi - Maribor
|
Objavljeno: Tor Mar 02, 2010 6:59 pm Naslov sporočila: |
|
|
Koda: |
list p=16f84
#include <p16f84.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
Work equ 0x0c
Stat equ 0x0d ; Zacasne spremenljivke za W in STATUS
Stevec equ 0x0e ; Spremenljivka za stetje casa
org 0x000
goto Glavni ; Pojdi na glavni program po resetu
;*************************************************************************
org 0x004
Prekinitev ; Prekinitvena rutina
bcf INTCON,GIE ; Izklopi prekinitve
movwf Work ; Shrani register w
swapf STATUS,w
movwf Stat ; Shrani register STATUS
bcf STATUS,RP0 ; Banka 0
*** movlw 0x07
*** movwf TMR0[/b] ; Nova vrednost v TMR0
decfsz Stevec,f ; Zmanjsaj Stevec. Ali je ze 0?
goto Koncaj ; Ne, koncaj
movlw b'00001000'
xorwf PORTB,f ; Da, preklopi LED na RB3
movlw .250
movwf Stevec ; Ponovno nastavi Stevec
Koncaj
bcf INTCON,T0IF ; Izbrisi T0IF
swapf Stat,w
movwf STATUS ; Povrni vrednost STATUS
swapf Work,f
swapf Work,w ; Povrni vrednost W
retfie ; Izhod iz prekinitve
;*************************************************************************
Glavni ; Glavni program
bsf STATUS,RP0 ; Banka 1
clrf TRISA
clrf TRISB ; Vsi pini izhodni
movlw b'10000011'
movwf OPTION_REG ; Preddelilnik 1:16, preddelilnik dodeli
; timerju, izklopi PORTB pull-up upore,
; timer 0 povecuje strojna ura
bcf STATUS,RP0 ; Banka 0
clrf PORTB ; Izklopi LED
movlw b'10100000'
movwf INTCON ; GIE=1, T0IE=1. Ostale prekinitve
; onemogocene
movlw .250
movwf Stevec ; Stevec=250
clrf TMR0 ; Zacni stet od nicle
Zanka goto Zanka ; Neskoncna zanka
END ; Konec
|
Lep pozdrav !
Zgornja koda prižiga in ugaša LED diodo s fekvenco 1Hz, čas merimo s timerjem TMR0.
Koda je iz knjige Programirajmo mikrokontrolerje in mi je popolnoma razumljiva, razen del ki sem ga označil z *** mi sploh ni jasen.
Zakaj ravno vrednost 7 v timer TMR0 ?
Hvala za razlago (če se komu ljubi seveda),
Domen |
|
Nazaj na vrh |
|
|
Pingi Član
Pridružen-a: Tor 13 Okt 2009 12:44 Prispevkov: 123 Aktiv.: 0.70 Kraj: Selnica ob Dravi - Maribor
|
Objavljeno: Čet Mar 04, 2010 3:08 pm Naslov sporočila: |
|
|
Nazadnje urejal/a Pingi Pon Mar 15, 2010 2:34 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 70 dni
Powered by phpBB © 2001, 2005 phpBB Group
|