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

Pridružen-a: Pet 02 Mar 2007 12:01 Prispevkov: 20 Aktiv.: 0.09 Kraj: Ljubljana
|
Objavljeno: Tor Mar 06, 2007 11:00 am Naslov sporočila: Vhodno izhodni pini pri pic |
|
|
Pozdravljeni!
Ali se da v podprogramu dolocati kdaj je pin izhoden in kdaj ne!! |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Tor Mar 06, 2007 11:20 am Naslov sporočila: |
|
|
Seveda - zakaj se pa ne bi dalo ? _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
gl83 Član

Pridružen-a: Pet 02 Mar 2007 12:01 Prispevkov: 20 Aktiv.: 0.09 Kraj: Ljubljana
|
Objavljeno: Tor Mar 06, 2007 11:24 am Naslov sporočila: |
|
|
Kako,  |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Tor Mar 06, 2007 11:25 am Naslov sporočila: |
|
|
Tako kot tudi izven podprograma; preberi datasheet za izbrani PIC (poglavje I/O Ports). _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
gl83 Član

Pridružen-a: Pet 02 Mar 2007 12:01 Prispevkov: 20 Aktiv.: 0.09 Kraj: Ljubljana
|
Objavljeno: Tor Mar 06, 2007 11:27 am Naslov sporočila: |
|
|
hvala |
|
Nazaj na vrh |
|
 |
gl83 Član

Pridružen-a: Pet 02 Mar 2007 12:01 Prispevkov: 20 Aktiv.: 0.09 Kraj: Ljubljana
|
Objavljeno: Tor Mar 06, 2007 11:30 am Naslov sporočila: |
|
|
zdaj pa se to, ko mi pride stevec do devet bi jst rad klico izhod, pac enega od pinov ra. stevec je na pritisk tipke! |
|
Nazaj na vrh |
|
 |
gl83 Član

Pridružen-a: Pet 02 Mar 2007 12:01 Prispevkov: 20 Aktiv.: 0.09 Kraj: Ljubljana
|
Objavljeno: Tor Mar 06, 2007 12:40 pm Naslov sporočila: |
|
|
Danes se mal igram pa se tu in tam zaletim v 'zid'!
Kako naj zgleda koda, ki mi ob pritisku tipke1 sproži ledico1, ob pritisku tipke2 pa ledico2, ki pa mora utripat v nekem intervalu. Intreval bi rad dolocil s timerjem!
Ce ma kdo idejo, lepo prosim!
LP
goran |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Tor Mar 06, 2007 1:00 pm Naslov sporočila: |
|
|
Ena hitra ideja je tukaj: Temeljito se razglej , druga pa čez par dni tukaj: Priporočam nakup .
Potrebuješ pa ADC pretvorbo in dve zanki.
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.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Tor Mar 06, 2007 2:05 pm Naslov sporočila: Re: Vhodno izhodni pini pri pic |
|
|
gl83 je napisal/a: |
Ali se da v podprogramu dolocati kdaj je pin izhoden in kdaj ne!! |
Za ta namen služi TRIS instrukcija. Deluje enako v programu in v podprogramu. Dva primera za različne porte in različne pine:
Koda: |
MOVLW B’00001111’ ;RA 0 - 3 so inputi (vhodi), RA 4-7 so outputi (izhodi)
TRIS PORT_A ; |
Koda: |
MOVLW B’00000011’ ;RB 0 in 1 sta inputa (vhoda), RB 2-7 so outputi (izhodi)
TRIS PORT_B ; |
Quote: "zdaj pa se to, ko mi pride stevec do devet bi [slovenščina je zame španska vas] rad klico izhod, pac enega od pinov ra. stevec je na pritisk tipke!"
Koda, ki prižge LED diodo na portu a, prvi pin, ko je števec 9.
Koda: |
/*[slovenščina je zame španska vas] ne vem, kaj želiš tukaj */
If števec=9 then ra.1=1 /* če je števec 9, potem prižgeš led diodo */ |
Quote:"...rad klico izhod..."
Izhodov ne kličeš. Postaviš jih na nek logičen nivo. Če so izhodi digitalni, je vrednost običajno 1 ali 0.
V katerem programskem jeziku programiraš?
Jur |
|
Nazaj na vrh |
|
 |
gl83 Član

Pridružen-a: Pet 02 Mar 2007 12:01 Prispevkov: 20 Aktiv.: 0.09 Kraj: Ljubljana
|
Objavljeno: Tor Mar 06, 2007 6:55 pm Naslov sporočila: |
|
|
programiram v asemblerju |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Sre Mar 07, 2007 4:18 pm Naslov sporočila: |
|
|
Koda v ki prižge LED diodo na portu a, prvi pin, ko je števec 9.
Koda ki ni assembler:
Koda: |
If števec=9 then ra.1=1 |
Koda od assemblerja:
Koda: |
MOVF A,0 // v števcu imamo neko poljubno vrednost
SUBLW 9 //od nje odštejemo 9
BTFSS STATUS,Z //preverimo, ali je rezultat odštevanje nič
BSF PORTA,0 //prižgemo prvi bit na portu a, če je rezultat nič (9-9=0)
BCF PORTA,0 //ugasnemo prvi bit na portu a, če je rezultat različen od nič |
Zadeva je videti komplicirana. PIC mikroji nimajo instrukcije kot je na primer CAIE (compare accumulator if equal), kar bi bilo videti tako:
Koda: |
CAIE A,9 // ali je v registru 9?
BSF PORTA,0 //ja, je
BCF PORTA,0 //ni |
To je elegantno in učinkovito. Ampak ne pri PICih. PICi uporabljajo harwardsko arhitekturo (ne von Neumannove), in imajo posebno vodilo za instrukcije in posebno vodilo za podatke. To ima dobre in očitno tudi slabe lastnosti .
Jur |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Sre Mar 07, 2007 5:54 pm Naslov sporočila: |
|
|
Jur, pozabil si se
btfsc status,z
pred zadnjo vrstico, sicer bos dobil samo kratek impulz na izhodu (ali pa se to ne, odvisno od stanja stevca).
Pri vecjih picih (18F) lahko uporabis
cpfseq naslov, vrednost
To sicer nima nobene zveze z arhitekturo; tudi x51 je recimo harvardska arhitektura, pa ima vseeno na voljo mnemonik cjne, ki pocne nekaj takega, kot tvoj primer. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
Objavljeno: Sre Mar 07, 2007 6:26 pm Naslov sporočila: |
|
|
Ali pa recimo..
Koda: |
MOVF A, w
SUBLW 9
; BTFSS STATUS, Z ;ni vedno potrebno odvisno od dizajna
BCF PORTA, 0
BTFSC STATUS, Z
BSF PORTA, 0
|
LP GJ |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Čet Mar 08, 2007 10:09 am Naslov sporočila: |
|
|
Ja,res je napaka. Najprej sem hotel tja vtakniti goto stavek, ki bi preusmeril program. Zdelo se mi je, da bo potem (z goto stavki) zadeva bolj nepregledna, pa sem zaj*. Meni se vedno zdelo obupno zoprno, ko je za neko stvar podan primer uporabe, pri tem pa je vedno dodano še nekaj tretjega, ki z konkretno razlago nima nič.
Arhitektura: v Microchipovih datasheetih piše, da primerjava akumulatorja z neko konkretno vrednostjo ne deluje ravno zaradi harwardske arhitekture. To stvar (nedelujočo primerjavo) sem že nevemkolikokrat preklel. Instrukcije za primerjave: večje, večjealienako, manjše, manšjealienako bi z veseljem pogrešal, če bi delal preprosti: enako.
Compare bi se seveda dalo realizirati na PICih, vendar to ne bi bila več single cycle instrukcija. Instruction set ne bi bil več Reduced Instruction set (RISC).
Nekaj o arhitekturi PICov (dolgočasno in neuporabno): http://ww1.microchip.com/downloads/en/DeviceDoc/31004a.pdf
Popravljena koda, ki bi jo moral podpirati PIC, pa je ne:
Koda: |
CAIE A,9 // ali je v registru 9?
BSF PORTA,0 //ja, je. Prižgemo diodo
GOTO NI:
<tu je neka koda>
NI: BCF PORTA,0 //ni 9, zato ugasnemo diodo |
Jur |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Čet Mar 08, 2007 11:59 am Naslov sporočila: |
|
|
jur je napisal/a: |
Arhitektura: v Microchipovih datasheetih piše, da primerjava akumulatorja z neko konkretno vrednostjo ne deluje ravno zaradi harwardske arhitekture. To stvar (nedelujočo primerjavo) sem že nevemkolikokrat preklel. Instrukcije za primerjave: večje, večjealienako, manjše, manšjealienako bi z veseljem pogrešal, če bi delal preprosti: enako. |
Tudi vecji PICi (18F) in drugi MCUji primer harvardske arhitekture, a tovrstne ukaze imajo (pri 18F je za operacije na "akumulatorju" ekvivalent tvojega primera "compare and skip if equal", torej mnemonik cpfseq).
Manjsi (14 in manj bitov na ukaz) jih ne morejo imeti preprosto zato, ker jih niso implementirali - so ze ocenili, da so drugi ukazi pomembnejsi, prostora za vse je pa ocitno zmanjkalo. Ker so vsi GPRji registri, nad katerimi je mogoce opravljati operacije (nekatere lahko celo samo na GPRjih in ne tudi na "akumulatorju"), ni tezko razumeti zakaj ni mogoce v 14 bitov stlaciti ukaza, ki bi primerjal vsebino registra (z 8-bitnim naslovom znotraj banke ali se sirsim absolutnim naslovom) z (spet 8-bitnim) neposredno v ukaz vkljucenim podatkom in se dodati par bitov za dekodiranje ukaza - skupaj bi jih prislo vsaj 8+8+1=17, kar je vec kot 12 oz. 14 pri malckih (ali 16 pri 18F !).
8051 ima po drugi strani razlicno dolge ukaze (od 1 pa do 3 bajte), zato lahko ukaz, kot je cjne deluje nad vsemi registri (vseh 256 bajtov internega RAMa & SFRjev). Tudi 8051 je primer harvardske arhitekture, celo malo bolj ekstremen kot PIC, ker nima zgolj locenega pomnilnika za ukaze in podatke, ampak ima kar dva naslovna prostora za podatke, torej skupaj tri.
Primerjavo kodiranja ukazov lahko vidis v datasheetu za PICe in tukaj za x51 (stran 31). Razlika ni v arhitekturi, kot je razvidno tudi iz opisa na strani 2 PDFja, katerega si omenil, temvec oblikovanju ukaznega nabora (RISC vs. CISC). _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
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: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|