assembly programlama-0 ders 1

ibolina

Yeni üye
13 Tem 2008
32
0
Aslında assembly programlama sanıldı​
ından daha kolay bieydir. Burada assembly ile nasil *** mikrokontrolcü
programlandı
ını örenecez. Önce www.microchip.com sitesinden MPLAB IDE download edip kuralım. imdi de kullanmak
istedi
imiz çipin ( burada 16f628a ) datasheet'inide indirip bi güzel göz attıktan sonra devam edebiliriz.
Önce örnek bir assembly programına göz atalım:

list​
p=16f628a

#include​
p16f628A.inc
sifir
equ 0x00
cblock 0x20

var1​
;hiz

var2​
;zaman

endc
org 0x0000
goto​
basla

org 0x0004
goto​
kesme
basla:

.
call​
fonk

.
.​
kesme:​
.
.
.
retfie​
fonk:​
.
.
.
return
.
.
.
end​
​
imdi parça parça açıklayacam

list​
p=16f628a

Burada kullandı​
ımız çipi tanımlıyoruz.

#include​
p16f628.inc

Burada kullandı​
ımız çipe ait bazı tanımlama bilgilerini dosyamıza ekliyoruz. Eer bu dosyayı bulup notepadle açarsanız
içinde

sifir​
equ 0x00

gibi birçok ifadenin oldu​
unu görürsünüz. equ deyimi sizin yerinize bir ifadenin yerine baka bir ifadeyi koymanızı salar. Yani
siz kendinize göre anlamlı ancak assemblera göre anlamsız birey yazmak isterseniz
equ, yazdıınız ifadeyi assemblerin
anlayaca
ı bireyle deitirmenize yarar. Örnek olarak p16f628.inc dosyasındaki

STATUS EQU H'0003'​
satırını alalım. h'0003'​
STATUS adlı registerin adresidir. ( Datasheete baktık ama di mi? ) Ancak 0x03 gibi bir sayı bizim için
fazla bir anlam taımayaca
ı gibi programdaki hataları ayıklarken zorlanmamıza sebep olacaktır. Üstteki ifadeyle her

STATUS​
kelimesini H'0003' ile deitiriyoruz. Benzer ekilde örnek programımızda her sifir kelimesini 0x00 sayısıyla
de
istiriyoruz.
Aman dikkat! MPLAB büyük küçük harf ayrımı yapar.
STATUS ile status aynı ey deildir mesela.

cblock 0x20​
var1​
;hiz

var2​
;zaman

endc​
Bu ifade ile register hafızasında 0x20 adresinden itibaren degikenlerimiz için yer tutuyoruz.​
;​
iareti assembler için gözardı etmesi gereken eyleri belirtir. Bu sayede kodumuzu içine asssemblerı kızdırmadan tek
satırlık açıklamalar ekleyebiliriz.
endc ile deikenleri tanimlamayı bitirdiimizi belirtiyoruz.

org 0x0000​
​
te asıl koda yavatan geldik.

​
lemciye her reset attıımızda ilk olarak 0x0000 adresindeki komutla mesaiye balar. Bu adrese reset vektörü denir. ( bkz.
Datasheet ).
org yazdıımız kodun hangi adresten itibaren hafızaya yerlemesi gerektiini assemblera anlatmak için
kullanılır.

goto​
basla

Datasheet ve MPLAB help dosyaları isteseniz de istemeseniz de sizin en büyük yardımcınızdır. Bir komutun ne ie yaradı​
ı
en güzel oralarda yazar. Ancak algoritmaların içinde ne ie yarayaca
ı konusunda yardımcı olmaz. ( Bu yüzden gecenin bi
vakti oturup bunu yazıyorum :) ). Komutun anlamı
basla yazan yere zıplamaktır.

org 0x0004
goto​
kesme

Interrupt (kesme) demek ilemciye iini gücünü bırakıp baka biey yapmasını söyleyen olay demektir. Çok çeitli kesme
kaynakları vardır.​
ç saatin 0xFF deerini geçmesi, belli bir pin grubundaki girdinin deimesi... Bu olaylardan herhangi biri
oldu
unda ilemci ilk ikaldıı yeri bi kenara not edip 0x0004 adresine zıplar. ( Interrupt vektörü ) Buradaki komutu çalıtırır
ki bu komut genelde daha ferah bir yere zıplama komutu olur.

basla:​
.
.
call​
fonk

.
.
.​
kesme:​
.
.
.​
​
te zıplama noktaları. : ile biten kelimeler sadece zıplanacak noktalara ad vermeye yarar.
Bir de
call fonk diye bir komut var. Bu da goto benzeri bir komut. Farkı, programın zıpladıı yerden geri dönebilmesine
olanak tanıması. Donanımsal ayrıntılar için datasheete bakmanızı tavsiye ederim, çok önemli ayrıntılar yazıyor orada :).

retfie​
Kesme, iini bitirdikten sonra kumandayı ana programa bırakır. Bu i​
de yukardaki komutla yapılır. Ana program kaldıı
yerden devam eder. Ancak bazı eyleri bıraktı
ı gibi bulamayabilir ve kızabilir. Bu sebeple kesme fonksiyonunun ortalıı
toparlayacak komutları içermesi gerekir. ( MPLAB IDE templatelerinde nasıl yapılabilece
inin örnei var )

fonk:​
.
.
.
return​
​
te call ile çaırılan fonksiyonumuz. return komutu ile çaırılan yere geri dönüyoruz.

end​
Assemblera komutların bittiini anlatmaya yarar.
 

dokuzparmak

Yeni üye
29 Tem 2009
8
0
artvin
abi çok güzel bu yaptığın *** asm ile programlamadır eğer daha fazla bilgi istiyosan adım murat yamak endüstriyel elektronik teknikeriyim [email protected] veya [email protected] a mail atabilirsin bu yazdığın kesmelerle ilgili konu ilk olarak giriş çıkış nasıl oluşturulur trisa trisb ve status register ve port a ve port b ile ilgilenmelisin
örnek
clrf portb
bsf status,5
clrf trisb
bcf status,5
movlw d'12'
movwf portb
end
burdan başla bence
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.