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 

Picassembler nasveti, primeri, triki ...

 
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
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Tor Mar 01, 2005 8:22 pm    Naslov sporočila:  Picassembler nasveti, primeri, triki ... Odgovori s citatom

Spet bi rabil nasvet glede programiranja PIC-ev. Imam sledeč problem: ko sem pred 10. leti programiral v asemblerju za procesorje 8051 sem za zaporedje raznih preklopov uporabil nek register (v primeru r7) kateremu sem povečeval vrednost, in ko je ta dosegla predvideno je izvedel nek ukaz (v primeru postavlja in briše bite .pisk in .utripa).

Primer: pri aktiviranju nekega alarma se po vklopu izvedejo določeni ukazi v razmaku nekaj sekund. Čez 5 sek. se vklopi pisk in po 10 sek. se izklopi. Po 15 sek. se vklopijo utripalci in po 18 sek. se izklopijo ....... itd.
Uporabljeni ukazi:
cjne (Compare fr to literal and jump if not equal)
setb (set bit)
clr (clear bit)
Opis: v interuptni rutini se register r7 povečuje vsako sekundo za 1. Ko doseže vrednost #5 vklopi .pisk, ko doseže vrednost #10 izklopi .pisk ......
Koda:

.....
cjne r7,#5,.Step1 ; Če ni v registru r7 vrednost 5 skoči na Step1
setb .pisk ;- drugače pa postavi bit .pisk

Step1 cjne r7,#10,.Step2 ; Če ni v registru r7 vrednost 5 skoči na Step1
clr .pisk ;- drugače pa briši bit .pisk

Step2 cjne r7,#15,.Step3 ; Če ni v registru r7 vrednost 5 skoči na Step1
setb .utripa ;- drugače pa postavi bit .utripa

Step3 cjne r7,#18,.Step4 ; Če ni v registru r7 vrednost 5 skoči na Step1
clr .utripa ;- drugače pa briši bit .utripa
.....



Sedaj pa me zanima če pri programiranju PIC-ev obstaja kakšen podoben način. Za dosedanje aplikacije sem uporabil sledeči način:
Koda:

.....
movf SetC1,0
subwf TmrVrt,0
btfsc 3,2
goto Pisk
nop
movf SetC2,0
subwf TmrVrt,0
btfsc 3,2
goto Utripa
goto Konec
.....


Ta način pa se mi zdi precej neroden in razvlečen, pa tudi potraten za registre, ker je treba za vsako prednastavljeno vrednost uporabit po en register. Npr. registra SetC1 in SetC2 je treba posebej določit in jima postavit vrednost pri zagonu, dočim je v prejšnjem slučaju zadostoval številčni parameter npr. #5.
Če pa sem namesto registra uporabil ukaz movf .5,0 z direktnim vnosom števične vrednosti pa program ni deloval pravilno.

Upam da sem dovolj dobro in ne prenadolgo opisal vprašanje. Very Happy
Ali mogoče obstaja tudi za PIC-e kakšna enostavnejša rutina podobno kot v 8051?


Tole sporočilo mi je Iztok napisal pod zasebno. Odgovoriti pa bom skušal tukaj, ker se mi zdi vsebina sporočila zanimiva ter zna še koga zanimati. Mogoče bo k mojemu odgovoru še kdo kaj dodal.
Avtorji Picassemblerja so izgleda sam assembler 'oklestili' na minimalno število instrukcij. Pozna le 35 instrukcij katere se v večini (z izjemo par) izvršijo v enem ukaznem ciklusu.
Poznamo še nekaj takozvanih 'speciallih instrukcij', ki so kombinacija osnovnih instukcij. O njih mogoče napišem kaj več kasneje. Vzrok za to, da je 'okleščen' na minimalno število instrukcij je po moje to, da je sploh začetniku lažje dojemljiv. Teh par ukazov se namreč da naučiti v zelo kratkem času.
Da se vrnem k Iztokovem spročilu;
Instrukcijo setb ter clrb pozna tudi picassemler, ki se sicer imenuje malo drugače in sicer bsf f,b in bcf f,b . Ukaza 'cjne' zal ne pozna. Želenega ukaza žal ne boš uspel realizirati v enem ukaznem ciklusu Sad . Kakor vsi programski jeziki pa tudi assembler omogoča izdelavo makroja, ki bo služil ravno tako kot katerakoli ostala vgrajena instrukcija. Primer makroja, ki bo delal ravno tako kot 'cjne' celo imenuješ ga lahko tako Wink.

Koda:
cjne macro m_reg1,m_stevilo,m_skok
   movf m_reg1,W
   sublw m_stevilo
   btfss STATUS,Z
   goto m_skok
   endm

Ter tudi cele procedure, ki je prav tako čisto enaka Iztokovi, ki je pisana za assembler 8051.
p.s.
(napisana koda je kot primer z Iztokovega primera , prevajalnik bi jo sicer prebavil a nima kakega logičnega poteka)

Koda:

   list P=16f84

#include "p16f84.inc"

#define pisk TEST,0
#define utripa TEST,1

cjne macro m_reg1,m_stevilo,m_skok
   movf m_reg1,W
   sublw m_stevilo
   btfss STATUS,Z
   goto m_skok
   endm
   
   cblock 0xC
   r7,TEST
   endc
   
   org 0
zanka


   cjne r7,.5,step1
   bsf pisk
step1   
   cjne r7,.10,step2
   bcf pisk
step2
   bsf utripa
   cjne r7,.15,step3
   bsf utripa
step3   
   cjne r7,.20,step4
   bcf utripa
step4   

   
   goto zanka
   
   
   
   end

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Iztok
Član
Član



Pridružen-a: Pet 08 Okt 2004 0:55
Prispevkov: 4974
Aktiv.: 21.00
Kraj: LJ

PrispevekObjavljeno: Sre Mar 02, 2005 3:52 pm    Naslov sporočila:   Odgovori s citatom

Silvo, hvala

Sem uporabil ta makro in seveda dela BP. Smile

Oba assemblerja imata precej podobnih ukazov, čeprav je pri PIC-ovih treba večkrat kombinirat z večimi, da se dobijo podobni, ki jih v krajši obliki uporablja intel ...

Zato imam včasih malo težav, ker se mi stvari mal pomešajo. Pač nisem poliglotski tip, ker sem imel podobne težave, ko sem se s predznanjem angleščine začel učit še nemščino. Razz

LP
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sre Mar 02, 2005 8:20 pm    Naslov sporočila:   Odgovori s citatom

V pdf datoteko sem spravil "specialne instrukcije". V prilogi.


special instrukcije.pdf
 Opis:

Download
 Ime datoteke:  special instrukcije.pdf
 Velikost datoteke:  14.35 KB
 Downloadano:  91 krat


_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Čet Mar 03, 2005 11:27 pm    Naslov sporočila:   Odgovori s citatom

Citiram:
....ko sem se s predznanjem angleščine začel učit še nemščino....


Iztok, je to bilo pri Siemensu S5 in S7 Confused Osebno sem kar se tiče nemščine popolna 0. Najbolj "grozno" je nemški operacijski sistem in ostali software na računalniku. Sad

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Iztok
Član
Član



Pridružen-a: Pet 08 Okt 2004 0:55
Prispevkov: 4974
Aktiv.: 21.00
Kraj: LJ

PrispevekObjavljeno: Pet Mar 04, 2005 12:38 am    Naslov sporočila:   Odgovori s citatom

Nemščino sem se poizkusil učit zato, ker so takrat našo firmo kupili nemci, čeprav je bil uradni jezik med SLO in GER zaposlenimi samo angleščina. Potem so nas pa itak kupili angleži za dve leti ...

S simatikom je bil res problem od začetka. Najprej smo dobili nek laptop - programirno napravo (mislim da je bil PG710) z operacijskim sistemom PCPM v nemščini. Nekaj časa smo se mučili z njim potem pa se je pokvaril in ko smo ga poslali na servis smo zaprosili za angleško verzijo in jo brez problemov tudi dobili.
Kasneje smo naročili še PG720 z Win95, kjer je bilo po naročilu že vse v angleščini.
Zase pa sem si nabavi povprečen laptop kjer S5 (DOS) deluje v XP-jih, S7 pa samo v Win9x ali ME.

Kateri S7 software pa imaš? Mogoče imam instalacijski CD za to verzijo v angleščini, da bi ga ponovno instaliral.
Si dobil poleg vsega tudi avtorizacijsko disketo?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Kralj
Član
Član



Pridružen-a: Čet 24 Apr 2003 20:18
Prispevkov: 196
Aktiv.: 0.83
Kraj: koroška

PrispevekObjavljeno: Pet Mar 04, 2005 6:39 pm    Naslov sporočila:   Odgovori s citatom

Pozdravljen Iztok

Z Silvom imava SIMATIC S7 Verzija 5.1 in je tudi v angleškem jeziku. No nekaj težavic izgleda da bo z samo programirno napravo, ker je operaciski sistem WIN98 v nemščini. Prav tako je vsa programska oprema nemška. Se bo potrebno prilagoditi.


Lep pozdrav

_________________
Zakaj ljudje verjemejo, da je na nebu nešteto zvezd, ne da bi jih šteli,
če pa na klopi piše "sveže pleskano" pa morajo preverit?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pon Okt 24, 2005 7:42 am    Naslov sporočila:   Odgovori s citatom

Včeraj sem "padel" na preprosti stvari, ki mi je "vzela" več kot pol ure, da sem ugotovil kaj je narobe. d'oh! Šlo je za preprosto rutino, za vpis v eeprom PIC16F628.
Moram priznati, da sem šel iskati dateshet za omenjen pic, da bi ugotovil kaj za vraga sem naredil narobe. Confused
Torej za poznavalce Picassemblerja - kaj je narobe? Wink. Rutina naj bi ob klicu izvedla vnos v eeprom predhodno nastavlnih vrednosti v registu EEADR ter EEDATA.

Koda:

;----------------------------------------------
;procedura izvede vpis v EE
;predhodno je treba nastavit lokacijo ter
;vpisati vrednost v EEDATA
;----------------------------------------------
VPIS_EE      
   bsf STATUS,RP0      ;bank1
   bcf INTCON,GIE      ;onemogocim vse prekinitve
   btfsc INTCON,GIE   ;so onemogocene
   goto $-2      ;ne
   bsf EECON1,VREN      ;omogocim vpis
   movlw 0x55      ;\
   movwf EECON2      ;  > magicna sekvenca
   movlw 0xAA      ; |
   movwf EECON2      ;/
   bsf EECON1,WR      ;izvedem vpis
   btfsc EECON1,WR      ;je koncan?
   goto $-1      ;ne torej cakaj
   bcf EECON1,VREN      ;onemogocim vpis
   bcf STATUS,RP0      ;bank0
   bsf INTCON,GIE      ;vklop prekinitev
   return

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Iztok
Član
Član



Pridružen-a: Pet 08 Okt 2004 0:55
Prispevkov: 4974
Aktiv.: 21.00
Kraj: LJ

PrispevekObjavljeno: Tor Okt 25, 2005 1:11 am    Naslov sporočila:   Odgovori s citatom

Tako na hitro pogledano ... v registru EECON1 si uporabil neobstoječ bit VREN, namesto EEPROM Write Enable bita.

Ti prevajalnik ni javil te napake?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Tor Okt 25, 2005 5:38 am    Naslov sporočila:   Odgovori s citatom

Iztok je napisal/a:
Tako na hitro pogledano ... v registru EECON1 si uporabil neobstoječ bit VREN, namesto EEPROM Write Enable bita.

Ti prevajalnik ni javil te napake?


He, he točno to. "Pravopisna" napaka. VREN namesto WREN Sad . Kot sem omenil uporabil sem PIC16F628, ki ima v "inc" datoteki tudi definiran bit VREN. Prevajalnik zaradi tega ni javil napake.
Primer sem ravno zaradi tega dal na forum.

Del datoteke "P16F628.inc"

Koda:
;----- EECON1 Bits ---------------------------------------------------------
WRERR                        EQU     H'0003'
WREN                         EQU     H'0002'
WR                           EQU     H'0001'
RD                           EQU     H'0000'

;----- VRCON Bits ---------------------------------------------------------

VREN                         EQU     H'0007'
VROE                         EQU     H'0006'
VRR                          EQU     H'0005'
VR3                          EQU     H'0003'
VR2                          EQU     H'0002'
VR1                          EQU     H'0001'
VR0                          EQU     H'0000'


_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
LoLek
Član
Član



Pridružen-a: Sre 25 Feb 2004 12:46
Prispevkov: 343
Aktiv.: 1.45

PrispevekObjavljeno: Tor Okt 25, 2005 7:09 am    Naslov sporočila:   Odgovori s citatom

Iztok je napisal/a:
Nemščino sem se poizkusil učit zato, ker so takrat našo firmo kupili nemci, čeprav je bil uradni jezik med SLO in GER zaposlenimi samo angleščina. Potem so nas pa itak kupili angleži za dve leti ...

S simatikom je bil res problem od začetka. Najprej smo dobili nek laptop - programirno napravo (mislim da je bil PG710) z operacijskim sistemom PCPM v nemščini. Nekaj časa smo se mučili z njim potem pa se je pokvaril in ko smo ga poslali na servis smo zaprosili za angleško verzijo in jo brez problemov tudi dobili.
Kasneje smo naročili še PG720 z Win95, kjer je bilo po naročilu že vse v angleščini.
Zase pa sem si nabavi povprečen laptop kjer S5 (DOS) deluje v XP-jih, S7 pa samo v Win9x ali ME.

Kateri S7 software pa imaš? Mogoče imam instalacijski CD za to verzijo v angleščini, da bi ga ponovno instaliral.
Si dobil poleg vsega tudi avtorizacijsko disketo?


Jaz imam verzijo 5.3 s cr****, angleško. Nisem še preizkusil cr****, vendar mislim, da bi moralo delati.
Ja, jaz sem se tudi zdaj prvič srečal z nemščino in na začetku ti delajo probleme čisto osnovno ukazi, ki so v angleščini že samoumevni. Confused
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
Stran 1 od 1

 
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: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group