Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
mujo Član


Pridružen-a: Ned 02 Jan 2005 19:24 Prispevkov: 746 Aktiv.: 3.15 Kraj: MB
|
Objavljeno: Ned Jan 08, 2006 1:22 pm Naslov sporočila: Prenos bitov z enega porta na drugega - assembler |
|
|
Zanima me ce sem spodnjo kodo napisal pravilno. Sem totalen začetnik v programiranju v assemblerju in delanju z PIC-i.
Koda: |
;------------------------------------------
;8bit podatek z PORTB prenesi na PORTC
;Uporabljen mikrokontroler: PIC 16F877
;
;Avtor: 08.01.06
;-----------------------------------------
list p=16f877 ;kompajleru povemo kateri uC imamo
#include "16f877.inc"
org 0 ;naslednji ukaz sodi v prvo lokacijo
goto GLAVNI ;gremo v glavni program
GLAVNI
banksel TRISB ;premaknemo se v bank1
movlw 0xff ;v working register damo vrenost 255
movwf TRISB ;iz working registra skopiramo vrednost 255 -> kar pomeni da je port TRISB nastavljen za branje
clrf TRISC ;v PORTC pisemo - torej more imeti register TRISC vrednost 0
banksel PORTB ;iz bank1 v bank0
movf PORTB,0 ;vsebino PORTB prenesemo v working register
movwf PORTC ;vsebino working registra prenesemo na PORTC
end
|
Nazadnje urejal/a mujo Pon Maj 02, 2022 3:26 pm; skupaj popravljeno 1 krat |
|
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: Ned Jan 08, 2006 1:30 pm Naslov sporočila: |
|
|
Koda: |
list p=16f877 ;kompajleru povemo kateri uC imamo
#include "16f877.inc"
org 0 ;naslednji ukaz sodi v prvo lokacijo
goto GLAVNI ;gremo v glavni program
GLAVNI
; banksel TRISB ;premaknemo se v bank1
bsf STATUS,RP0 ;s to instrukcijo menjaš bank
movlw 0xff ;v working register damo vrenost 255
movwf TRISB ;iz working registra skopiramo vrednost 255 -> kar pomeni da je port TRISB nastavljen za branje
clrf TRISC ;v PORTC pisemo - torej more imeti register TRISC vrednost 0
; banksel PORTB ;iz bank1 v bank0
bcf STATUS,RP0
movf PORTB,0 ;vsebino PORTB prenesemo v working register
movwf PORTC ;vsebino working registra prenesemo na PORTC
end
|
Tako bi delalo. Banke menjaš v STATUS registru.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
mujo Član


Pridružen-a: Ned 02 Jan 2005 19:24 Prispevkov: 746 Aktiv.: 3.15 Kraj: MB
|
Objavljeno: Ned Jan 08, 2006 1:37 pm Naslov sporočila: |
|
|
Aha, to mi je jasno.
V literaturi (neko gradivo z univerze (mislim da mariborske)), sem zasledil da je mozno izbiranj preko macroja banksel.
Najlepša hvala za pomoč
|
|
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: Ned Jan 08, 2006 1:44 pm Naslov sporočila: |
|
|
Drži,
Lahko bi na začetku programa definiral
#define BANK1 bsf STATUS,RP0
#define BANK0 bcf STATUS,RP0
v programu pa bi le napisal:
BANK1
prevajalnik pa zamenja to z :
bsf STATATUS,RP0
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
snow Član


Pridružen-a: Tor 27 Dec 2005 14:02 Prispevkov: 341 Aktiv.: 1.44 Kraj: Ljubljana || Velenje
|
Objavljeno: Ned Jan 08, 2006 6:01 pm Naslov sporočila: |
|
|
BANKSEL TRISA ;gre na bank1 oziroma tja kjer je TRISA
CLRF TRISA
BANKSEL PORTA ;gre na bank0 oziroma tja kjer je PORTA
....
|
|
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: Ned Jan 08, 2006 9:52 pm Naslov sporočila: |
|
|
Očitno prevajalnik pozna tudi to okrajšavo, če prav je sam nisem nikoli uporabljal.
Opis: |
|
 Download |
Ime datoteke: |
Directive Summary.pdf |
Velikost datoteke: |
31.03 KB |
Downloadano: |
11 krat |
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
mujo Član


Pridružen-a: Ned 02 Jan 2005 19:24 Prispevkov: 746 Aktiv.: 3.15 Kraj: MB
|
Objavljeno: Tor Jan 17, 2006 3:43 pm Naslov sporočila: |
|
|
Ok prenos 8 bitnega števila je bil uspešen.
Sedaj pa me zanima kako je z prenosom prvih štirov bitov?
Sam sem ražmislal da bi working registru prek bcf zadnje štiri bite pac nastavil na 0. Vendar mi nekako ni delovalo - sploh ni upostevalo bcf ukazov. Je sploh mozno spreminjat vrednost w registra preko bcf in bfs ukazov?
Drugo rešitev pa sem naredil da sem pac TRISB (port z katerega berem) nastavil na b'00001111' - torej da bere iz zadnjih 4 bitov. Kaj se pa zgodi ce so npr na pinu RB7 (ki je definiran kot izhod) bila napetost 5V (torej logicna 1?)?
Lp, Matjaž
|
|
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 Jan 17, 2006 6:34 pm Naslov sporočila: |
|
|
Glede vprašanja nisi bil dovolj jasen oz. sam ga nisem razumel najbolje.
Poskusimo s primerom:
Koda: |
;recimo želimo prenesti gornje 4 bite s portab na port c s tem da mora na portuc
;ostati stanje nespremnenjeno (vrednosti bom pisal binarno, ker bo bolj razumljivo
;recimo portb so definirani vhodi s stanjem b'10101010'
;portc so izhodi s stanjem b'11000011'
movlw '11110000' ;vrednost v W registu
andwf PORTB,W ;nova vrednost v W registru je b'10100000'
movwf TMP ;rezultat shranem v nek začasen register
movlw b'1111'
andwf PORTC,W ;v W registru imamo stanje spodjih bitov, ki jih moramo ohraniti torej W= b'11'
iorwf TMP,W ;"Inclusive OR W with f" W je sedaj b'10100011'
movwf PORTC ;vrednost pošljemo na port
|
P.S.
To je ena iz med mnogih rešitev.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
mujo Član


Pridružen-a: Ned 02 Jan 2005 19:24 Prispevkov: 746 Aktiv.: 3.15 Kraj: MB
|
Objavljeno: Tor Jan 17, 2006 7:29 pm Naslov sporočila: |
|
|
eee Silvo! Hvala lepa za ta primer! Si mi odprl še en del logike za programiranje v assemblerju. Moj problem je da mislim preveč visoko (sem pač navajen na visoke programske jezike).
Drugo vprasanje katero imam (prej si rekel da ga nisi razumel - ga bom zdaj probal bolj po domače obrazložit).
TRISC je nastavljen na 0x00 - torej se vseh 8 pinov obnaša kot izhod. Kaj se zgodi če pride na kakteri izmed teh pinov napajalna napetost?
edit: odprava napake
Nazadnje urejal/a mujo Tor Jan 17, 2006 8:05 pm; skupaj popravljeno 1 krat |
|
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 Jan 17, 2006 7:40 pm Naslov sporočila: |
|
|
mujo je napisal/a: |
TRISC je nastavljen na 0x00 - torej se vseh 8 pinov obnaša kot izhod. Kaj se zgodi če pride na kakteri izmed teh pinov napajalna napetost? |
Izhodi so pri picih izgleda kar solidno zaščiteni. V svoji praksi sem jih skuril zelo malo. V opisanem primeru - recimo, da je bil na izhodu stik med dvema izhodoma, pri katerim je eden "vlekel" gor drugi dol, se običajno ni zgodilo nič. Le aplikacija se je čudno obnašala - očitno je prihajalo tudi do motenja programa. Pic pa je "preživel". Enako tudi običajno pri stiku izhoda z Vss oz. Vdd. Izhod pa je "podlegel" če je na njega prišla večja napetost od Vdd.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Tor Jan 17, 2006 7:42 pm Naslov sporočila: |
|
|
Meni se v navedenem primeru ponavadi PIC resetira, saj ga v večini primerov furam kar z baterijami...
|
|
Nazaj na vrh |
|
 |
mujo Član


Pridružen-a: Ned 02 Jan 2005 19:24 Prispevkov: 746 Aktiv.: 3.15 Kraj: MB
|
Objavljeno: Tor Jan 17, 2006 8:07 pm Naslov sporočila: |
|
|
Najlepša hvala za izčrpne odgovore!
|
|
Nazaj na vrh |
|
 |
bobo01 Neznanec


Pridružen-a: Sob 20 Jan 2007 12:31 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Ned Jan 21, 2007 1:48 pm Naslov sporočila: |
|
|
Na izhodu v seriji priključiš 100E upor, in šele nato priklučiš perifeijo. Karkoli se bo zgodilo, neboš imel problemov (samo v TTL !!!) , razen če dobiš na izhod večje napetostne nivoje (špice iz omrežja, napaka pri priklopu npr. 30V ....) boš izhod sigurno uničil! Podobno je pri vhodih!!!
Poskrbi za stabilizacijo napajalnih napatost (Kar ste v šoli sigurno jemali!), kompenziraj morebitne motnje v napajanju (inducirana napetost na vezju, manjše špice v napajanju, ...) tik ob napajalnih sponkah procesorja in seveda točno se seznani z tem kaj delaš (ka ne zabluzeš kaj)!
bobo
|
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Ned Jan 21, 2007 4:08 pm Naslov sporočila: |
|
|
Od kod si ti to temo povlekel... T-1year
_________________ Lp,
Matevž |
|
Nazaj na vrh |
|
 |
mujo Član


Pridružen-a: Ned 02 Jan 2005 19:24 Prispevkov: 746 Aktiv.: 3.15 Kraj: MB
|
Objavljeno: Ned Jan 21, 2007 5:40 pm Naslov sporočila: |
|
|
uh več kot eno leto stara tema...
Koliko se spomnim smo stvar morali samo teoretično in programsko rešit. Tako da hardwerskih problemov nismo imeli :>
|
|
Nazaj na vrh |
|
 |
|