 |
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.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Sep 22, 2010 8:18 pm Naslov sporočila: Mala šola AVR - 6.dan |
|
|
Danes bom malo krajši. Čez dan ni bilo dosti časa. Čaka me še nočna ...
Prejšnji dan sem omenil, da imamo spisane vse glavne procedure za komunikacijo na 1Wire vodilu. Pa poglejmo, če je res oz poglejmo si primer branja DS1820 v primeru, ko je na vodilu sam ter ne preverjamo ID-ja.
Iz tabele je razvidno, da potrebujemo reset proceduro z preverjanjem prisotnosti, proceduro za pošiljanje ter proceduro za sprejemanje. Vse smo že napisali. Torej potrebno je vse to združit v eno proceduro. Pa poglejmo kako lahko to izgleda.
Nadaljevanje sledi... _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Sep 22, 2010 8:27 pm Naslov sporočila: |
|
|
Izgled procedure za branje scratchpad-a DS1820.
Koda: |
;--------------------------------
;Branje scratchpad-a brez id-ja
;--------------------------------
Beri1W:
rcall Reset1W ;klic reset procedure
ldi tmp,0xCC ;v tmp register vpišem 0xCC
rcall Tx1W ;ter to pošljem na vodilo. (senzor poslano razume kot ignoriranje branja ID-ja
ldi tmp,0x44 ;
rcall Tx1W ;pošljem 0x44 kar razume kot začetek konverzije temperature
rcall Reset1W ;reset ter preverjanje prisotnosti
ldi tmp,0xCC
rcall Tx1W ;ignoriranje branja ID-ja
ldi tmp,0xBE ;
rcall Tx1W ;ukaz razume kot branje scratchpad-a
rcall SprejmiSB ;procedura bere vsebino scratchpad-a ter ga vpisuje v sram
rcall Reset1W
ret
;---------------------------------
;procedura bere scratchpad
;ter podatke zapisuje
;inidrekt v sram
;---------------------------------
SprejmiSB:
ldi tmp2,9
clr XH
ldi XL,LsbT
NaprejSB:
rcall Rx1W
st X+,tmp
dec tmp2
brne NaprejSB
ret
|
Drugi del indirektnega naslavlanja bom razložil jutri - danes nimam več časa. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Sep 23, 2010 7:26 pm Naslov sporočila: |
|
|
Najprej razlaga drugega dela procedure, ki je nisem utegnil pokomentirati včeraj. Za lažjo razlago se za moment vrnemo "prvi dan". Iz datasheta je razvidno, da ima Tiny13 64 baytov SRAM-a. To je dejansko 8 bitni pomnilnik z razliko od EEproma se mu ob izklopu napetosti vrednosti ne ohranijo. Do njega lahko dostopamo z instukcijami LDS in STS v danem primeru pa indirektno preko registrov, ki omogočajo indirektni dostop. V proceduri sem uporabil X register. Če pogledamo v datashet mikrokontrolerja vidimo, da gre dejansko za dva splošnonamenska registra, ki imata poleg osnovne možnosti registra, še dodatno možnost indirektnega naslavljanja. Postopek indirektnega naslavljanja je sicer precej preprost. V registra XL (spodnji biti) ter XH (zgornji biti) vpišemo lokacijo SRAM-a v katerega želimo nekaj vpisati oz. iz njega nekaj prebrati. Pri avr-jih se SRAM začne z lokacijo 0x60 velikost pa je lahko različna glede na mikrokontroler. Zaradi lažjega programiranja sem tej lokaciji na začetku programa dodelil ime equ LsbT=0x60. Torej lokacijo vpišemo v XL in XH register. V nadaljevanju s pomočjo instrukcije ST X+, reg shranemo vrednost ki je v registru reg v SRAM. '+' bo po končanem vpisu povečal vrednost v registru X za 1 kar pomeni, da nasledni vpis sledi v naslednjo lokacijo. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Sep 23, 2010 7:51 pm Naslov sporočila: |
|
|
Sedaj imamo spisano vse, za branje senzorja ter pošiljanje podatkov na serijski port računalnika. Naša glavna rutina je dolga celih 6 vrstic. Kot sem že omenil, vse podrutine lahko sedaj shranemo v posebno datoteko, procedure, oz procedure spremenimo v makroje. Tako lahko sedaj te procedure koristimo tudi v drugih programih.
Koda: |
GlZanka:
rcall Beri1W ;procedura Izvede branje DS1820 ter poslane podatke shranje v sram Prvi poslan byte na 0x60 naslednji na 0x61....vseh 9 baytov
lds tmp,LsbT ;preberem v tmp 1.podatek iz srama
rcall SerialTx ;ga pošljem na serijski port
mov tmp,DsErr ;v registru DsErr je shranjeno stanje vodilia "O' ok 'E' Err. Informacija je namenjena računalniškem vmesniku
rcall SerialTx ;podatek pošljem na serijski port
rcall Pavza1S ;pavza pred naslednjo meritvijo
rjmp GlZanka
|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Sep 23, 2010 8:11 pm Naslov sporočila: |
|
|
Pa poglejmo katere podatke smo shranili v SRAM oz kaj nam sploh lahko pošlje DS1820. Blok podatkov je sestavljen iz 9-tih 8 bitnih registrov.
Prva dva poslana bajta sta podatki o izmerjeni temperaturi. (LSB,MSB)
Sledita dva bajta eeproma TH/USER BYTE 1,TL/USER BYTE 2
Sledita dva rezervna bajta (prebrano kot 0xff)
Še dva bajta sta COUNT REMAIN, COUNT PER °C s pomočjo katerih se da izračunat temperatura natančneje od 0.5°C.
Zadnji bajt je CRC
Tukaj je sedaj naš celoten program.
Koda: |
.org 0x0
rjmp GlProg
.org 0x0A
;------------------------------------------------
;glavni program
;Osnovni program iz katerega se potem kličejo
;podrutine
;------------------------------------------------
GlProg:
ldi tmp,low(ramend)
out SPL,tmp ;določitev sklada
sbi PortTx ;določim port, ki bo uporabljen za ser.pošiljanje kot izhod
GlZanka:
rcall Beri1W ;procedura Izvede branje DS1820 ter poslane podatke shranje v sram Prvi poslan byte na 0x60 naslednji na 0x61....vseh 9 baytov
lds tmp,LsbT ;preberem v tmp 1.podatek iz srama
rcall SerialTx ;ga pošljem na serijski port
mov tmp,DsErr ;v registru DsErr je shranjeno stanje vodilia "O' ok 'E' Err. Informacija je namenjena računalniškem vmesniku
rcall SerialTx ;podatek pošljem na serijski port
rcall Pavza1S ;pavza pred naslednjo meritvijo
rjmp GlZanka
;****************************************************************
;razne procedure
;****************************************************************
Tekst1:
.db "*** www.elektronik.si Forum o elektroniki in racunalnistvu ***",0
Napis1:
ldi ZL,low(Tekst1*2)
ldi ZH,high(Tekst1*2)
rjmp PosljiRS232
PosljiRS232:
lpm tmp,Z
tst tmp
breq KonecTxt
rcall SerialTx
inc ZL
brne PC+2
inc ZH
rjmp PosljiRS232
KonecTxt:
ret
;serijska komunikacija
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;-----------------------------------------------------
;serijsko pošiljanje
;procedura ob klicu pošlje na serijski port byte, ki ga
;dobi v register tmp
;hitrost 2400-N-1 (2400bps 0-paritetni 1 stop bit)
;------------------------------------------------------
SerialTx:
ldi stevec,8 ;poslano bo 8 bitov
cbi TxPin ;tx pin na nizko stanje
rcall Pavza415uS ;pavza enega bita (start bit)
NextBit:
ror tmp ;shift desno Izrinjen bit bo poslan
brcs Bit1 ;če je C postavljen se pošlje 1
cbi TxPin ;sicer 0
rjmp StejBit ;
Bit1:
sbi TxPin
StejBit:
rcall Pavza415uS ;pavza dolžine trajanja bita
dec stevec ;stevec -1
brne NextBit ;če rezultat še ni 0 potem nadaljuj
sbi TxPin ;konec bitov
rcall Pavza415uS ;stop bit
ret
;-----------------------------------------------------------
;Pavza 415uS Oscilator 9,6Mhz
;-----------------------------------------------------------
Pavza415uS:
push r20
push r21
ldi r20,38
ldi r21,6
P_zanka:
dec r20
brne P_zanka
dec r21
brne P_zanka
pop r21
pop r20
nop
nop
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;1wire rutine
;------------------------------
;1 wire rutine
;------------------------------
;*********************************
;--------------------------------
;Branje scoreboarda brez id-ja
;--------------------------------
Beri1WId:
rcall Reset1W
ldi tmp,0x33
rcall Tx1W
rcall SprejmiId
rcall Reset1W
sts DsId+8,DsErr
ret
;---------------------------------
;procedura bere scratchpad
;ter podatke zapisuje
;inidrekt v sram
;---------------------------------
SprejmiId:
ldi tmp2,9
clr XH
ldi XL,DsId
NaprejId:
rcall Rx1W
st X+,tmp
dec tmp2
brne NaprejSB
ret
;--------------------------------
;Branje scratchpad-a brez id-ja
;--------------------------------
Beri1W:
rcall Reset1W ;klic reset procedure
ldi tmp,0xCC ;v tmp register vpišem 0xCC
rcall Tx1W ;ter to pošljem na vodilo. (senzor poslano razume kot ignoriranje branja ID-ja
ldi tmp,0x44 ;
rcall Tx1W ;pošljem 0x44 kar razume kot začetek konverzije temperature
rcall Reset1W ;reset ter preverjanje prisotnosti
ldi tmp,0xCC
rcall Tx1W ;ignoriranje branja ID-ja
ldi tmp,0xBE ;
rcall Tx1W ;ukaz razume kot branje scratchpad-a
rcall SprejmiSB ;procedura bere vsebino scratchpad-a ter ga vpisuje v sram
rcall Reset1W
ret
;---------------------------------
;procedura bere scratchpad
;ter podatke zapisuje
;inidrekt v sram
;---------------------------------
SprejmiSB:
ldi tmp2,9
clr XH
ldi XL,LsbT
NaprejSB:
rcall Rx1W
st X+,tmp
dec tmp2
brne NaprejSB
ret
;---------------------------------
;reset 1wire
;---------------------------------
Reset1W:
sbi Port1Wire ;pin definramo kot izhod z nizkim stanjem (vodilo potegne na nizek nivo
ldi XCas,55 ;register, ki ga koristi spremenjiva pavza
rcall XPavza ;ki je dolžina ca 10uS ter se ponovi tolikokrat koliko je vrednost v registru XCas (ca 550uS
cbi Port1Wire ;sprostimo vodilo
ldi XCas,6 ;
rcall XPavza ;čakamo ca 60uS
ldi tmp,'E' ;v register tmp naložimo "E" z njim označimo stanje vodila (error opis v nadaljevanju)
sbic Pin1Wire ;preverimo če je vodilo visoko
rjmp Err1W ;napaka ni odziva z vodila
ldi XCas,30 ;je nizko, velika verjetnost da se je nekdo na vodilu odzval - če ni v stiku z maso
rcall XPavza ;čakam, da bo vodilo sproščeno
sbis Pin1Wire ;je vodlilo sproščeno?
rjmp Err1W ;ne napaka na vodilu
ldi tmp,'O'
mov DsErr,tmp ;označim, da je vodilo OK
ldi XCas,20
rcall XPavza
ret
Err1W:
ldi XCas,50
rcall XPavza
mov DsErr,tmp
ret
;---------------------------------
;procedura na 1W vodilo pošlje
;vrednost, ki jo dobi v tmp
;--------------------------------
Tx1W:
ldi stevec,8 ; v register z imenom števec vpišemo 8 ( štel bo poslane bite)
NasBit:
ror tmp ;rotiramo register tmp v desno (izrinjen bo najižji bit ki bo setiral C bit)
brcs Hbit1W ;izrinjen bit je visok skok na rutino, ki pošlje visok bit na vodilo
rcall Bit0_1W ;ne je nizek zato na vodilo pošljemo nizek bit
rjmp StejB ;na štetje poslanih bitov
Hbit1W:
rcall Bit1_1W ;klic rutine ki pošlje na vodilo visok bit
StejB:
dec stevec ;števec -1
brne NasBit ;še ni 0 skok na labelo NasBit
ret ;konec poslanega
Bit1_1W: ;rutina na vodilo pošlje logično 1
sbi Port1Wire ;nizko stanje na vodilu
ldi XCas,1 ;
rcall XPavza ;traja ca 10uS
cbi Port1Wire ;vodilo sprostim
ldi Xcas,7 ;
rcall XPavza ;čakam konec slota ca 70uS
ret
Bit0_1W: ;rutina pošlje na vodilo logično 0
sbi Port1Wire ;nizko stanje na vodili
ldi XCas,7 ;
rcall XPavza ;traja ca 70uS
cbi Port1Wire ;vodilo sprostim
ldi Xcas,1
rcall XPavza ;počamam do konca slota
ret
;-------------------------------------
;procedura izvede branje vodila
;vrednost bo prebrana v tmp
;-------------------------------------
Rx1W:
clr tmp
ldi stevec,8 ;register števec dobi vrednost 8. Štel bo prejete bite
NexBitRx:
sbi Port1Wire ;nizko stanje na vodilo
rcall Pavza2uS ;pavza ca 2uS
cbi Port1Wire ;sprostimo vodilo
ldi Xcas,2
rcall XPavza ;pavza ca 20uS
sbic Pin1Wire ;preverjanje stanja vodila je vodilo nizko?
rjmp Bere1 ;ne suženj pošilja 1
clc ;brisanje bita C
rjmp StejBRx ;na štetje bitov
Bere1:
sec ;vodilo je visoko postavim bit C
StejBRx:
ror tmp ;rotiranje registra tmp v desno - bit ki vstopa je "C"
ldi Xcas,7 ;
rcall Xpavza ;pavza ca 70uS (čakanje do konca slota)
dec stevec ;števec -1
brne NexBitRx ;števec še ni nič na labelo NexBitRx
ret ;konec sprejemanja
;-----------------------------------------------------------
;Pavza 2uS Oscilator 9,6Mhz
;-----------------------------------------------------------
Pavza2uS:
push r20
ldi r20,2
P_zanka4:
dec r20
brne P_zanka4
pop r20
nop
nop
ret
;-----------------------------------------------------------
;Pavza 10uS Oscilator 9,6Mhz
;-----------------------------------------------------------
XPavza:
push r20
ldi r20,28
P_zanka2:
dec r20
brne P_zanka2
pop r20
nop
dec XCas
brne XPavza
ret
;-----------------------------------------------------------
;Pavza 1S Oscilator 9,6Mhz
;-----------------------------------------------------------
Pavza1S:
push r20
push r21
push r22
ldi r20,96
ldi r21,180
ldi r22,49
P_zanka1:
dec r20
brne P_zanka1
dec r21
brne P_zanka1
dec r22
brne P_zanka1
pop r22
pop r21
pop r20
nop
ret
|
Če sedaj sprogramirano mikrokontrloler, priklopimo senzor ter se povežemo z računalnikom preko serijskega porta. (USB + FT232 ali sličen) ter poćenemo Bray-ev terminal, bo rezultat nekaj takega. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Sep 23, 2010 8:15 pm Naslov sporočila: |
|
|
Prvi poslani bajt je LSB temperature sledi bajt stanja vodila 'O' ok 'E' napaka. Na screenshotu testiranje. 'E' je bil poslan, ko sem vodilo kratko sklenil na maso oz. sem senzor snel v protoborda. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Sep 24, 2010 2:59 pm Naslov sporočila: |
|
|
Prišel sem na idejo, da iz tega, kar smo naredili do sedaj naredimo uporabno zadevo. Recimo nek termostat, kateremu temperaturo ne prestavljamo pogosto, poleg tega pa ne potrebujemo stalnega prikaza le te. Tipičen tak termostat je cevni termostat za vklop črpalke centralne kurjave. (temperaturo praktično nastavimo le enkrat, prav tako ne potrebujemo dodatnega prikaza temperature.) Poleg tega so cevni termostati dokaj nenatančni. Prav tako jih večini ne moreš nastaviti diference. Z "našim" saj slednje ne bi smelo biti problem.
Kaj imamo do sedaj:
- spisane vse rutine za 1Wire komunikacijo
- komunikacija v smeri mikrokontroler -> PC
- možnost prejema vseh podatkov, ki jih pošilja DS na PC
Za termostat nam še manjka:
- komunikacija v smer PC - mikrokontroler (možnost za nastavitev)
- shranitev nastavljenih vrednosti v eeprom
- upravljanje z enim pinom, ki bo krmilil rele
Prostih pinov imamo za enkrat še dovolj. Tudi pomnilnika imamo še več kot dovolj. Do sedaj ga je porabljenega slabih 50%.
Nadaljevanje sledi.... _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Sep 24, 2010 7:02 pm Naslov sporočila: |
|
|
Ker pač uporabljen mikrokontroler nima hardwerskega USART-a bomo morali tudi za sprejemni del spisati svojo proceduro. Procedura mora delati zelo podobno kot oddajna, le da tukaj namesto pošiljamo sprejemamo.
Koda: |
;-----------------------------------------------------
;serijsko sprejemanje
; 2400 0 1
;-----------------------------------------------------
SerialRx:
clr tmp
ldi stevec,8
rcall Pavza207uS ;polovica start bita
NasBRx: ;naslednji bit rx
rcall Pavza415uS
sec ;C bit =1
sbic RxPin ;je stanje na rx pinu nizko
rjmp RxB1 ;ne skok na del, ki shrani sperejeti bit
clc ; stanje na rx pinu je nizko C bit = 0
RxB1: ;poslan bit1
ror tmp ;rotiranje desno
dec stevec ;stevec -1
brne NasBRx ; še ni 0
rcall Pavza415uS ;0 stop bit
rcall Pavza207uS ;1/2 bita
ret
|
Če hočemo, da ne bomo zamudili kakega bit-a moramo proceduro pognati takoj, ko bo poslan startni bit. Najlažje bomo to izvedli, če bomo uporabili zunanjo prekinitev. V ta namen smo izbrali za sprejem ravno pin, ki proži zunajo prekinitev.Spet skok na "Prvi dan" V poglavju 9 stran 44 imamo opisane prekinitvene vektorje. Kaj pravzaprav prekinitev je? Kot že ime samo pove, nekaj se bo prekinilo. V trenutku ko se pojavi katerakoli prekinitev, ki smo jo predhodno vključili se izvajanje glavnega programa prekine. V sklad se shrane lokacija, kjer je bil program prekinjen. Programski števec se postavi na reset vektor ustrezne prekinitve. Od tam pa ga je potrebno preusmerit na proceduro, ki se naj izvede, ko se bo prekinitev zgodila. Prekinitveno rutino zaključimo z instrukcijo RETI. Ko program pride do te instrukcije se iz sklada pobere lakacija, kjer je bil program prekinjen. Program se potem nadaljuje za prekinitvijo.
Ob inicializaciji vključimo zunanjo prekinitev.
Koda: |
ldi tmp,(1<<ISC00)
out MCUCR,tmp ;prekinitev se bo izvedla ob padajoci fronti
ldi tmp,(1<<INT0)
out GIMSK,tmp ;vklop zunanje prekinitve
sei ;vklop prekinitev |
Napišemo še klic procedure, ki se bo izvedla po prekinitvi. Ob prekinitvi se bo kalzalček postavil na 0x01 kjer je prekinitveni vektor zunanje prekinitve. Prekinitev se bo sprožila ob padajoči fronti.
Koda: |
.org 0x0
rjmp GlProg
.org 0x01
rjmp ZPrek
|
Še prekinitvena rutina:
;
Koda: |
-------------------------------------------
;zunanja prekinitev
;-------------------------------------------
ZPrek:
push tmp ;shranem registre, ki jih bom morda uporabil v rutini v sklad
push tmp2
push stevec
in stmp,SREG ;shranem tudi status register
; tukaj bomo napisali kodo, ki se naj izvede ob prekinitvi
ldi tmp,(1<<INTF0)
out GIFR,tmp ;brisanje prekinitvene zastavice, ki se je postavila med prekinitvijo
pop stevec ;vrnem shranjene registre
pop tmp2
pop tmp
out SREG,stmp
reti ;konec prekinitvene rutine |
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Sep 24, 2010 9:44 pm Naslov sporočila: |
|
|
Še zadnja procedurca, preden vse "zmečemo" skupaj. To je vpis v EEprom ter branje iz njega. EEprom smo na kratko omenili že v "prvem dnevu". Gre za pomnilnik, kateri ohrani vrednosti tudi potem, ko se mikrokontrolerju izklopi napajanje. Naš mikrokontroler ga ima 64 bajtov. Za enkrat bomo uporabili le dva. Za temperaturno mejo ter diferenco. Če pogledamo v datashet, (poglavje 5.3) vidimo, da ima mikrokontroler za upravljanje z eepromom tri registre. EEARL - register v katerega vpišemo naslov kamor želimo pisati oz od kod želimo brati. EEDR - register v katerega zapišemo podatek za shranjevanje oz iz njega preberemo podatek pri branju. Za upravljanje služi kontrolni register z imenom EECR. Procedura za vpis je pravzaprav zelo enostavna. Pri vpisu v eeprom vpišemo podatke v zgoraj omenjena EEARL ter EEDR. V kontrolnem registru določimo način vpisa,omogočimo vpis ter vpis izvedemo. Pri branju je podobno. Določimo naslov, izvedemo branje, Rezultat preberemo v EEDR
;
Koda: |
-------------------------------
;shranjevanje v eeprom
;-------------------------------
EeVpis:
sbic EECR,EEPE ;je prejšne vpisovanje končano?
rjmp EeVpis
ldi tmp,(0<<EEPM1)|(0<<EEPM0)
out EECR,tmp ;brisanje in vpis
out EEARL,EeNaslov
out EEDR,EePodatek
sbi EECR,EEMPE ;master program enable
sbi EECR,EEPE ;program enable-vpis
ret
;-------------------------------------------
;procedura ob klicu prebere
;vrednost z lokacije eeproma
;katero dobi v tmp
;rezultat vrne v tmp
;-------------------------------------------
EeBranje:
sbic EECR,EEPE
rjmp EeBranje ;je vpis končan
out EEARL,tmp
sbi EECR,EERE ;izvedem branje
in tmp,EEDR
ret |
_________________ lp
Silvo |
|
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: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|