Ynt: Kafamdaki ASM şimşekleri

Başlatan baran123, 08 Mayıs 2015, 22:32:44

baran123

Micro dersi ortalamam düşük yalan yok :D Niye düşük diye sorarsanız aslında geçtim ama notu yükseltmek istiyorum.Direk atladım
+ "Hocam telefon kontrollu devre yapayım ?"
- "Yap getir.Aldın artık dönüş yok"
+ Tam sevindim derken
- "ama ASM ile heee" diye arkamdan bağırdı.(ASM Sınavında bütün sorular C ile yapmıştım) :)
Bluetooth modül ile iletişim kuracağım.Önce bir 84a ile ASM yi biraz çözeyim sonra 628A ya geçip seri iletişim ile hallederim diye düşünüyorum.Okuldan zar zor bir mikroişlemciler kitabı buldum.Şöyle bir şey demiş.

Bunu tanımla :  INCLUDE "P16F84A.INC" yoksa bellek adresi tanımlaman lazım demiş.Mesela TRISB h'86' bunun içinde bir takım tanımlamalar mevcut.Mesela PORTB h'86' demiş ben programda şöyle bir kullanım yapmıştım.CLRF PORTB yani kütüphaneyi eklemesem direk adres versem böyle mi olacak ? CLRF h'86'

mesaj birleştirme:: 08 Mayıs 2015, 22:48:03

Ekleme : Status,5 ile bank 1'e geçince A1 nasıl giriş yapabilirim ?

RaMu

#1
Gerçek (asıl esas anlamında) mikrodenetleyici programlamaya HOŞGELDİN :)

mesaj birleştirme:: 08 Mayıs 2015, 23:14:37

Önce MPLAB IDE yi kur,
(Aslında MPLABx kullanmak lazım ama
ben henüz mplabx i çözemediğim için
mplabx ile asm de yardımcı olamam.)
Artık microchip in arşivinde olan MPLAB ide
http://www.microchip.com/pagehandler/en-us/devtools/dev-tools-parts.html
MPLAB IDE v8.92 versiyonunu kur.

Asm programını bu ide üzerinde yazacaksın.
asm derleyicisi olan MPasm ide ile bereber kurulmak
ekstra birşey yapmana gerek yok,
asm derleyicisi ful ve her zaman ücretsizdir.

Daha sonra programın kurulduğu yerde
istediğin picin .inc dosyasını bulabilirsin
aslında tam yeri
c>program files > Microchip > MPasm suite > picin .inc si
p16f84a.inc ye bakabilirsin.

Buna bakarken artık pcye çoktan indirmiş olduğun
16f84A nın datasheet inide aç,
datasheet kullanmadan asm ile program yazmak neredeyse imkansızdır.
Datasheet te memory organization kısmına gel
register file map ve
special function register file summary
kısımlarında adları geçen ve addr(address) veya file address
şeklinde belirtilen tabloda bulanan sayılarla
bahsi geçen .inc dosyasındaki sayıları bir karşılaştır.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

baran123

Hoş bulduk :D Datasheetten o kısımları inceliyorum.Notepad++ ile MPasm kullanıyorum şuan.Aslında daha önceden asm ile uğraştım ama led ve display yaptım sonra komutları unuttum.

Şöyle bir start verdim
LIST P=16F84A     ;işlemci
INCLUDE "P16F84A.INC" ; işlemcinin register dosyası

__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC  ;kod koruma kapalı, köpek kapalı:) ,harici osilatör

CLRF PORTB ;b portunu sıfırla
BSF STATUS,5  ;bank 1 e geç ayar modu gibi bir şey sanırım ?
MOVLW h'FF' ; w registerine ff yükle
MOVWF TRISA ; aküdeki değeri tris a ya yükle (hepsi giriş)
CLRF TRISB ; trisb 00 yani hepsi çıkış
BCF STATUS,5; bank0 a geç

MAIN
TEST_A0
BTFSS PORTA,0 ;a0 1 mi ?
GOTO TEST_A0 ; hayır teste git
MOVLW H'01' ; evet ise w registerine 0x01 yükle
MOVWF PORTB ; değeri port b ye aktar
GOTO MAIN ; maine git
END ; program biter (goto mainden dolayı buraya hiç düşmez )

Doğru anlamış mıyım hocam ?
MPasm ile hex'e çevirince program kapanıyor sürekli açma olayına çözüm var mı ?

RaMu

#3
Notepad vs. ile tırmalama
verdiğim linkden mplabide8.92 yi kur,

sana güzel bir yöntemde anlatacağım.


Şimdi portları giriş çıkış olarak atama işi:
Öncelikle kullanacağın portun başka fonksiyonu var mı
misal adc psp vs. olarak kullanılabiliyor mu,
buna göre her şeyden önce o portu digital i/o olabilecek hale getirmek gerekir,
bunun için datasheet te i/o ports kısmından ilgili portu inceliyoruz.

16f serisinde bir portu giriş çıkış yapmak için kullanılan register TRIS
diye isimlendirilmiştir, misal portA için trisA kullanılıyor.
16f de tris register ı bank1 de oladuğundan öncelikle bank1 e geçmek gerekiyor,
bunun için STATUS adlı register kullanılıyor,
Status un rp0 biti (bit5) 1 yapılırsa bank1 e geçilir,
bakınız datasheet STATUS REGISTER
BSF STATUS,RP0 deyince bank 1 e geçmiş olursun.
Bank1 e geçtiğimizde artık tris registerlarına erişebiliriz demektir,
(bakınız datasheet register file map)
Burada giriş yapmak istediğimiz pin için
TRIS registerının ilgili bitini 1 bir yapmamız gerekir,
çıkış yapmak istediğimiz pin için ilgili biti 0 yapmamız gerekir,
bu bütün picler için böyledir,
akılda kalması için
Giriş ingilizce In     1 yaparak
çıkış               Out  0 yaparak
I harfi 1 rakamına
O harfi 0 rakamına benzer.

Ayrıca pinler ve bitler zaten aynı dizilimdedir,
misal trisA 0. biti RA0 pini içindir,
         trisA 3. biti RA3 pini içindir.

Yani portb,1 yani RA1 i giriş yapmak için;
bank1 e geç,
trisA,1 i high 1 yap

BSF STATUS,RP0   ;bank1 e geç
BSF TRISA,1          ;portb,1 RA1 i giriş yap
BCF STATUS,RP0   ;bank0 a geç


veya
BANKSEL TRISA     ;trisa nın olduğu banka geç, bank1 e geç
BSF TRISA,1          ;portb,1 RA1 i giriş yap
BANKSEL  PORTA   ;PORTa nın olduğu banka geç, bank0 a geç


Banksel bir asm komutu değildir,
preprocessor-önişlemci komutudur,
derleyiciye hükmeden bir komuttur,
asm kod yazarken işimizi kolaylaştıran bir yöntem diyebiliriz.

Şimdi
MPLAB ide de
wiev menüsünden disassembly listing penceresini aç,
yazdığın kodlar ve karşılıkları gözükmektedir,
burada sorunun net cevabınıda bulacaksın.




mesaj birleştirme:: 08 Mayıs 2015, 23:49:43

Mplabide ile proje oluşturma:

Benim anlatmama gerek yok aslında
videosu var
Asm derlemek için:
Step2 da microchip mpasm toolsuite seçmen lazım
Ayrıca source file içinde
dosyaadi.ASM olmak zorunda,
https://www.youtube.com/watch?v=bWMPdLNrwDI

Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

MrDarK

Biri şu çocuğu durdursun :P

Şaka bi yana ASM ile uğraşıyor olman hoşuma gitti :)

Adam her yerde torpilli Ramu hocası sağ olsun
Picproje Eğitim Gönüllüleri ~ MrDarK

baran123

RaMu hocam çoook çok teşekkür ederim.Bir kaç örnek ve araştırma yapayım yine takılırsam sorarım.:)
MrDarK hocam işlemciye tam hakimiyet hoşuma gitti :D ne o öyle output_high(pin) :P

RaMu

Sağolasın @MrDark, çırağını çalıyorum ama :)
Baran gibi öğrenen (öğrendiğini öğreten) varken tam destek bizden.

Daha dur Baran CcsC de yazdığın programın c/asm list ine bakacaksın,
use fast io ... kullanınca ve kullanmayınca asm çıktısı nasıl değişmiş bize yorumlayacaksın.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

baran123

Sağ olun hocam sayenizde :)

Tamam hocam onuda yapacağım girmişken iyice anlamam gerek.
(Pc bozuldu ara vermemek için eski bir makina bulduım yavaş ama idare ediyor, oyun da olmayınca araştır dur :P )

Kabil ATICI

pic18f serisinde asm ile çalışırsen pic16f serisinden farklı ve ek komut seti geliyor. Ve bank olayı ortadan kalkıyor.
ambar7

ido2323

bence de önce pic16f tam öğren ama sonra direkt 18f geç ekstra komutlar gerçekten işi kolaylaştırıyor zaten komut setleri de çok farklı değil.