www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Zacetek
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
toncibalonci
Član
Član



Pridružen-a: Pet 03 Avg 2007 21:12
Prispevkov: 331
Aktiv.: 1.63
Kraj: Dravograd

PrispevekObjavljeno: Pet Dec 07, 2007 12:51 am    Naslov sporočila:  Zacetek Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2066
Aktiv.: 9.30
Kraj: Ljubljana

PrispevekObjavljeno: Pet Dec 07, 2007 1:26 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 17.11

PrispevekObjavljeno: Pet Dec 07, 2007 1:31 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 23.16
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Pet Dec 07, 2007 10:08 am    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
toncibalonci
Član
Član



Pridružen-a: Pet 03 Avg 2007 21:12
Prispevkov: 331
Aktiv.: 1.63
Kraj: Dravograd

PrispevekObjavljeno: Sob Dec 08, 2007 3:31 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 17.11

PrispevekObjavljeno: Sob Dec 08, 2007 4:35 pm    Naslov sporočila:   Odgovori s citatom

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 Wink .
LP,
Igor

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
toncibalonci
Član
Član



Pridružen-a: Pet 03 Avg 2007 21:12
Prispevkov: 331
Aktiv.: 1.63
Kraj: Dravograd

PrispevekObjavljeno: Sob Dec 08, 2007 7:43 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
milan62
Član
Član



Pridružen-a: Ned 04 Jan 2004 23:19
Prispevkov: 2379
Aktiv.: 10.71
Kraj: Kranj

PrispevekObjavljeno: Sob Dec 08, 2007 8:29 pm    Naslov sporočila:   Odgovori s citatom

Deutsch ist doch so einfach !

LP
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mannetou
Član
Član



Pridružen-a: Pet 08 Jan 2010 20:34
Prispevkov: 26
Aktiv.: 0.15
Kraj: LJ

PrispevekObjavljeno: Pon Jan 25, 2010 3:50 pm    Naslov sporočila:  ************************************************************ Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.66
Kraj: Ljubljana

PrispevekObjavljeno: Pon Jan 25, 2010 11:22 pm    Naslov sporočila:   Odgovori s citatom

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 Wink

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mannetou
Član
Član



Pridružen-a: Pet 08 Jan 2010 20:34
Prispevkov: 26
Aktiv.: 0.15
Kraj: LJ

PrispevekObjavljeno: Tor Jan 26, 2010 11:47 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.66
Kraj: Ljubljana

PrispevekObjavljeno: Sre Jan 27, 2010 12:17 am    Naslov sporočila:   Odgovori s citatom

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 Wink
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mannetou
Član
Član



Pridružen-a: Pet 08 Jan 2010 20:34
Prispevkov: 26
Aktiv.: 0.15
Kraj: LJ

PrispevekObjavljeno: Sre Jan 27, 2010 1:07 am    Naslov sporočila:   Odgovori s citatom

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)? Smile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pingi
Član
Član



Pridružen-a: Tor 13 Okt 2009 12:44
Prispevkov: 123
Aktiv.: 0.70
Kraj: Selnica ob Dravi - Maribor

PrispevekObjavljeno: Tor Mar 02, 2010 6:59 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pingi
Član
Član



Pridružen-a: Tor 13 Okt 2009 12:44
Prispevkov: 123
Aktiv.: 0.70
Kraj: Selnica ob Dravi - Maribor

PrispevekObjavljeno: Čet Mar 04, 2010 3:08 pm    Naslov sporočila:   Odgovori s citatom

Shhh

Nazadnje urejal/a Pingi Pon Mar 15, 2010 2:34 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group