 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Tor Mar 01, 2005 8:22 pm Naslov sporočila: Picassembler nasveti, primeri, triki ... |
|
|
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 . 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 .
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 |
|
 |
Iztok Član

Pridružen-a: Pet 08 Okt 2004 0:55 Prispevkov: 4974 Aktiv.: 21.00 Kraj: LJ
|
Objavljeno: Sre Mar 02, 2005 3:52 pm Naslov sporočila: |
|
|
Silvo, hvala
Sem uporabil ta makro in seveda dela BP.
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.
LP
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Mar 02, 2005 8:20 pm Naslov sporočila: |
|
|
V pdf datoteko sem spravil "specialne instrukcije". V prilogi.
Opis: |
|
 Download |
Ime datoteke: |
special instrukcije.pdf |
Velikost datoteke: |
14.35 KB |
Downloadano: |
91 krat |
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Mar 03, 2005 11:27 pm Naslov sporočila: |
|
|
Citiram: |
....ko sem se s predznanjem angleščine začel učit še nemščino.... |
Iztok, je to bilo pri Siemensu S5 in S7 Osebno sem kar se tiče nemščine popolna 0. Najbolj "grozno" je nemški operacijski sistem in ostali software na računalniku.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Iztok Član

Pridružen-a: Pet 08 Okt 2004 0:55 Prispevkov: 4974 Aktiv.: 21.00 Kraj: LJ
|
Objavljeno: Pet Mar 04, 2005 12:38 am Naslov sporočila: |
|
|
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 |
|
 |
Kralj Član


Pridružen-a: Čet 24 Apr 2003 20:18 Prispevkov: 196 Aktiv.: 0.83 Kraj: koroška
|
Objavljeno: Pet Mar 04, 2005 6:39 pm Naslov sporočila: |
|
|
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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Okt 24, 2005 7:42 am Naslov sporočila: |
|
|
Včeraj sem "padel" na preprosti stvari, ki mi je "vzela" več kot pol ure, da sem ugotovil kaj je narobe. Š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.
Torej za poznavalce Picassemblerja - kaj je narobe? . 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 |
|
 |
Iztok Član

Pridružen-a: Pet 08 Okt 2004 0:55 Prispevkov: 4974 Aktiv.: 21.00 Kraj: LJ
|
Objavljeno: Tor Okt 25, 2005 1:11 am Naslov sporočila: |
|
|
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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Tor Okt 25, 2005 5:38 am Naslov sporočila: |
|
|
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 . 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 |
|
 |
LoLek Član

Pridružen-a: Sre 25 Feb 2004 12:46 Prispevkov: 343 Aktiv.: 1.45
|
Objavljeno: Tor Okt 25, 2005 7:09 am Naslov sporočila: |
|
|
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.
|
|
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: 491 dni
Powered by phpBB © 2001, 2005 phpBB Group
|