Bilgi Paylaşıldığında güzeldir

19 Mart 2013 Salı

Açıklamalı .asm örnekleri




PICTEST1.ASM: Program ilk olarak PIC16F628A’ya B port’unun 8 ucunu da çıkış olarak tanıtacak. Daha sonra bu port’un ilk dört bit’ini lojik 1, sonraki dört bit’ini de lojik 0 yapacak. Son olarak program sonsuz bir döngüye girecektir.

PROG1.ASM : MOVLW ve MOVWF komutlarının çalışmasını gösteren örnek program. PIC’e enerji verildiğinde PORTB’ye bağlı 8 adet LED’i birer aralıklı olarak yakan program.

PROG2.ASM : MOVF komutunun çalışmasını gösteren örnek program. PortA’nın RA0, RA1, RA2 ve RA4 uçlarından girilen veriyi okuyup, PortB’de aynı numaralı bit’lere karşılık gelen LED’lerde gösteren program.

PROG3.ASM : PIC16F628A’nın 16 ucunu I/O ucu olarak kullanmaya örnek program. A port’unun tüm uçlarından (RA3 hariç) girilen gerilim “0” olduğu (butonlar basılı tutulduğunda) sürece, B port’unda o butona karşılık gelen LED’i söndüren program. B port’unun RB3 ucuna bağlı buton basılı tutulduğu sürece de RA3’e bağlı LED’i yakar. PROG2.ASM’de A port’unu devamlı olarak okumak için programı yeniden başlatmak amacıyla RESET butonuna basmak gerekiyordu. Programın bu eksikliğini gidermek için programın akışını “BASLA” etiketine gönderip, sonsuz döngüyü buraya kurmak gerekiyor.

PROG4.ASM : BTFSC ve BTFSS komutlarının çalışmasını gösteren program. PortA’nın 0. bitine bağlı butona basınca PortB’nin 0. bit’indeki LED’i söndürür, PortA’nın 4. bit’indeki butona basınca da aynı LED’i yakar.

PROG5.ASM : DECFSZ kullanılarak döngü düzenlemeye örnek program. A port’unun 0. bit’ine bağlı butona 10 defa bastıktan sonra B port’unun 0. bit’ine bağlı olan LED’i yakan program. NOT: PIC’e uygulanan saat frekansı çok yüksek olursa bu program istenilen biçimde çalışmayacaktır. Bunun nedeni işlem basamaklarında açıklanmıştır.

PROG6.ASM : DECFSZ komutu kullanarak zaman gecikme döngüsü düzenlemeye örnek program. A port’unun 0. bit’indeki butona bastıkça B port’undaki LED’leri binary 9?dan 0?a kadar azaltarak yakar. Butonda meydana gelebilecek arktan ve butona basış süresinin uzunluğundan oluşacak “0” seviyesine düşmeler DECFSZ komutu ile yapılan basit bir zaman gecikme döngüsü ile elenmiştir.

PROG7.ASM : SUBLW komutunun çalışmasını gösteren örnek program. Program h’05’ sayısından h’04’ sayısı çıkardıktan sonra STATUS saklayıcıda meydana gelen bit değişikliklerini portB’deki 8 LED’de gösterir.

PROG8.ASM : SUBWF komutu kullanılarak oluşturulan döngüye örnek program. Bu programda SAYAC adlı bir saklayıcının içerisine döngünün tekrar sayısı konulmuştur. Döngünün her tekrarında INCF komutuyla SAYAC içerisindeki değer bir arttırılır. SUBWF komutuyla W saklayıcı içerisindeki sabit sayı karşılaştırılır. Karşılaştırma sonunda etkilenen sıfır (Zero) bayrağı kontrol edilerek döngü sona erdirilir.

PROG9.ASM : Çift döngülü zaman geciktirme alt programına örnek program. PortB’ye bağlı olan tüm LED’leri belirli zaman aralıklarıyla yakıp-söndürür.

PROG10.ASM : RA0 ucuna bağlı butona basınca PORTB saklayıcısındaki sayıyı “1” arttıran, RA7 ucundaki butona basınca da “1” azaltan program. Program ilk çalışmaya başladığında PORTB’deki hiçbir LED yanmayacaktır. Butonlara bastıkça değişen sayılar PORTB’ye bağlı olan LED’lerde binary sayısal düzeninde yanacaktır. Bu programda gecikme alt programı buton arkını elemek ve butona basılma süresini kontrol etmek amacıyla kullanılmıştır.

PROG11.ASM : RLF komutunun çalışmasını gösteren program. PortB’ye bağlı 8 LED üzerindeki bir LED’in yanışını belirli aralıklarla kaydırır (D0?dan D7?ye doğru). Yanarak kayan LED en sona geldiğinde tüm LED’ler sönük kalır.

PROG12.ASM : RLF ve RRF komutlarını kullanılmasına örnek program. PortB’ye bağlı olan 8 LED üzerinde bir LED’in yanışını sürekli olarak sağa-sola kaydırır.

PROG13.ASM : COMF komutunun çalışmasına örnek program. PortB’deki LED’leri dönüşümlü olarak ilk önce ilk dört bit’indeki, sonra da son dört bit’indeki LED’leri yakar.

PROG14.ASM : ANDLW ve XORWF komutlarının kullanılmasına örnek program. PortA’nın 0. ve 4. bit’lerine bağlı olan RA0 ve RA4 butonlarının her ikisi birden basılı olduğunda PortB’nin 0. bit’ine bağlı LED’i yakar.

PROG15.ASM : ADDLW komutunun çalışmasını gösteren örnek program. W saklayıcı içerisindeki h’5A” sayısıyla, h’53? sayısını toplayıp, sunucu B port’undaki LED’lerde gösteren program. STATUS saklayıcının 0. bit’i (carry bit’i) “1” olduğunda RA3 ucuna bağlı LED yanar.

PROG16.ASM : 16 bit’lik iki sayının toplanmasına örnek program. h’61A3? ve h’2EE0? sayılarını toplar. Program çalıştığında toplamın alt bayt’ı PortB’deki LED’lerde görülür. Üst bayt’ın toplamını görmek için RA0 butonuna basılır.2 bayt’lık h’61A3? sayısına A, h’2EE0? sayısına da B dersek, bu sayıları 1 bayt’lık veri depolayabilen 2 tane saklayıcı kullanmamız gerekir.

PROG17.ASM : 8-bit’lik sayıların çıkarılmasına örnek program (büyük sayıdan küçük sayıyı çıkarma). PORTB saklayıcısı içerisindeki h’5A’ sayısından W saklayıcı içerisindeki h’53’ sayısını çıkarır, sonucu PORTB’ye bağlı LED’lerde gösteriri. Çıkarma sonucunun negatif veya pozitif olduğunu RA3’e bağlı LED’de gösterir.

PROG18.ASM : 8-bit’lik sayıların çıkarılmasına örnek program (küçük sayıdan büyük sayıyı çıkarma). PORTB saklayıcısı içerisindeki h’52’ sayısından W saklayıcısı içerisindeki h’53’ sayısını çıkaran, sonucu PORTB’ye bağlı LED’lerde gösteren program.

PROG19.ASM : 16-bit’lik sayıların çıkarılmasına örnek program (büyük sayıdan küçük sayıyı çıkarma). h’0004? sayısından h’0001? sayısını çıkaran program. Program çalıştığında çıkarma sonucunun alt bayt’ı PortB’deki LED’lerde görülür. Üst bayt’ı görmek için RA0 butonuna basılır.

PROG20.ASM : Çevrim tablosu kullanmaya örnek program. 7 segment display üzerinde “5? sayısını gösterir. NOT: Program 5 sayısına karşılık gelen h’6D’ sayısını seçmek için kullanılan PC ve çevrim tablolarının kullanılmasını açıklaması bakımından önemlidir.

PROG21.ASM : PORTB’nin uçlarına bağlı 7 segment display’de 0~F arasında saydıran program. Sayılar arasındaki duruş GECIKME alt programı tarafından sağlanmıştır.

PROG22.ASM : Bipolar (4 uçlu) bir step motoru bir yöne doğru RA0 butonuna bastıkça adım adım döndüren program. Step motor uçlarına gönderilecek gerilimler PORTB’deki RB0~RB3 uçlarına bağlanan LED’lerde görülür.

PROG23.ASM : Çevrim tablosunun kullanılmasına örnek program. Bir step motoru PORTA’nın 0. bit’ine bağlı RA0 butonuna basınca sağa doğru döndüren, RA7 butonu basılı tutularak RA0 butonuna basıldığında da sola döndürür. Step motor uçlarına gönderilecek olan gerilimler PORTB’deki LED’lerde görülür.

PROG24.ASM : RB0/INT ucundan girilen bir sinyal ile kesme oluşturulmasına örnek program. Akış diyagramında da görüldüğü gibi RB1 ucuna bağlı olan bir LED ana program içerisinde belirli aralıklarla yanıp söndürülmektedir. RB0/INT ucuna bağlı bir butona basınca kesme oluşturulur. Kesme alt programı çalışarak RB2 LED’inin yanma durumunu değiştirir (yanıksa söndürür, sönükse yakar.) Bu da ana program normal olarak çalışırken harici bir kesme meydana geldiğinde programın buna tepki verdiğini ve RB2 LED’nin durumunu değiştirdiğini gösterir.

PROG25.ASM : RB<4:7> lojik seviye değişiklik kesmesine örnek program. Ana program içerisinde RA3 ucuna bağlı bir LED belirli aralıklarla yakıp söndürülmektedir. RB4~RB7 uçlarına bağlı butonlardan birisine basınca oluşan kesme alt programıyla PORTB’nin üst 4 bit’i okunmaktadır. Okunan bu dört bit PORTB’nin alt dört bit’ine bağlı LED’lerde gösterilmektedir. Böylece RA3’teki LED’in yanıp sönmesi devam ederken, PORTB’nin üst 4 bit’i (RB<4:7>) okuyup, PORTB’nin alt 4 bit’ine gönderilerek kesme oluşturma yoluyla PIC’in işlem yapma kapasitesi arttırılmış olur.

PROG26.ASM : TMR0 zamanlayıcısının dahili komut frekansı ile saymasının sağlanmasına örnek program. RB0 ve RB1 uçlarına bağlı LED’leri 1’er sn aralıklarla birini yakıp diğerini söndüren ve bu işlemi her kesme oluştuğunda devamlı olarak tekrar eden program.

PROG27.ASM : TMR0 sayıcısının sinyal kaynağı olarak harici dijital sinyal (RA4/T0CKI ucu) kullanılmasına örnek program. Ayrıca TMR0?ın okunabilme ve sinyal sayıcı olarak kullanılabilme özelliğini de gösterir. Program, PORTA’nın 4. bit’ine bağlı olan butona (RA4) basıldığında PORTB’deki LED’lerde binary olarak artan sayıları gösterir. LED’lerin gösterdiği sayı 31’e ulaştıktan sonra bir daha butona basınca TMR0 saklayıcısını sıfırlar ve saymaya 0?dan itibaren tekrar başlatır.

PROG28.ASM : TMR1 sayıcısının kullanılmasına örnek program. Prog26.asm’de TMR0 ile yaptığımız programı bu defa TMR1 zamanlayıcısıyla yapılması. Timer-1 16 bit’lik bir sayıcı olduğundan önceki programda yaptığımız sapma hatasını bu programda sıfıra indirebileceğimizi göreceksiniz. Şimdi 10 mS’de bir kesme oluşması için TMR1’in hangi sayıdan başlatılacağını bulduktan sonra 8 bit’lik TMRH ve TMRL saklayıcılarına bu sayının program içerisinde nasıl yükleneceğini görelim. Programın akış diyagramı prog26.asm ile aynıdır.

PROG29.ASM : TMR2 zamanlayıcısının kullanılmasına örnek program. Prog26.asm ve prog28.asm’de yapılan programın aynısının TMR2 nasıl yapılacağını ve bu zamanlayıcının temel kullanım özelliklerini gösterir. Programda RB0 ve RB1 uçlarına bağlı LED’ler 1 sn aralıklarla yanarlar.

PROG30.ASM : WDT zamanlayıcısının kullanılmasına örnek program. RA0 butonuna 2.3 sn’yi geçmeyen aralıklarla basıldığında RB0’daki bir LED’in devamlı yanmasını sağlar, bu süreden daha uzun aralıklarla basıldığında WDT devreye girerek sistemi reset eder. Sistem reset olduğunda RB3’e bağlı bir buzzer’den uyarı sesi verilir ve program bu noktada sonsuz döngüye girer. Programı tekrar çalıştırmak için MCLR ucundaki butona basmak gerekir.

PROG31.ASM : Uyku (sleep) modununun kullanılmasına örnek program. PIC’e enerji verince PORTB’nin alt 4 bit’ine (RB0, RB1, RB2, RB3) bağlı LED’lerde H’00’dan h’FF’e kadar artan binary sayıları gösteren LED’lerin yanışı görülür. Sayı h’FF’e geldiğinde tekrar H’00’dan saymaya başlar. RA0’a bağlı bir butona basınca tüm LED’ler söner ve PIC uyku moduna girer. PIC’i uyku modundan çıkarmak için RB<4:7> değişiklik kesmesi kullanılır. RB4~RB7 butonlarından birisine basınca LED’ler uyku moduna girdiği anda kaldığı sayıdan itibaren saymaya devam eder.

PROG32.ASM : “Ortak referanslı iki karşılaştırıcı” moduna örnek program. Bu uygulamada ışığa duyarlı bir çeşit direnç olan LDR kullanılacaktır. Böylece sokak aydınlatmalarının otomatik olarak yapılmasına benzer işlem yaptırılacaktır. RA2 ucuna bağlı bir potansiyometre ile referans gerilimi sağlanmaktadır. RA0 ucuna bağlı bir LDR, RA1 ucuna da bir potansiyometre bağlanmıştır. Karşılaştırma iki ayrı karşılaştırıcıda (C1 ve C2) yapılmaktadır. LDR uçlarındaki ve RA1 potansiyometresindeki gerilim RA2 ucundaki referans gerilimiyle karşılaştırılmaktadır. Karşılaştırma sonucu RB6 ve RB7’deki LED’lerde gösterilmektedir.

PROG33.ASM : “Dahili ortak referanslı dört girişten seçimli iki karşılaştırıcı” moduna örnek program. Programın yaptığı işlem prog32.asm ile aynı olacaktır. Tek farkı, referans geriliminin RA2 potansiyometresinden değil de VREF biriminden alınacak olmasıdır. Bu uygulamada da karşılaştırıcılardan bir tanesine otomatik sokak aydınlatması yaptırılacaktır. LDR uçlarında düşen gerilim ile VREF gerilim karşılaştırılacaktır. Diğer karşılaştırıcıda da VREF gerilimi ile potansiyometre uçlarındaki gerilim karşılaştırılacaktır.

PROG34.ASM : Bar LED frekans sayıcı uygulaması. Bu program CCP1 biriminin yakalama moduna örnektir. RB3 ucuna bağlı bir osilatörün ürettiği kare dalga sinyalinin belirli aralıklardaki frekansını PORTB’deki LED’lerde gösterir.

PROG35.ASM : CCP biriminin karşılaştırma modunda çalıştırılmasına örnek program. CCPR1H:CCPR1L saklayıcılarına h’F0F0’=d’61680’ sayısı yüklendikten sonra TMR1 sayıcısı çalıştırılır. TMR1 sayıcısı bu sayıya her ulaştığında oluşan kesme ile PORTB’deki 8 LED belirli aralıklarla yakıp söndürülür.

PROG36.ASM : CCP biriminin PWM modunda çalıştırılmasına örnek program. Program çalıştırılınca RB3 ucuna bağlı bir LED’in parlaklığı çok küçük kademeli artışlarla artar, daha sonra azalır. Bu durum enerji kesilinceye kadar devam eder. Programı denemek için gerekli devrede sadece RB3 ucuna bağlı bir LED yeterli olmaktadır.

PROG37.ASM : USART arabirimi ile PIC16F628A’dan bilgisayara veri gönderme işlemine örnek program. Şekil 16-15’deki görülen devreye göre RA0 butonuna her basıldığında önceden tanımlanan 8 bit’lik veri paketleri ardı ardına gönderilerek bilgisayar ekranında “ALTAS” yazdırır.

PROG38.ASM : USART arabirimi ile bilgisayardan gönderilen verinin PIC16F628A’dan alınması işlemine örnek program. Şekil 16-19’da görülen devreye göre bilgisayar klavyesinden gönderilen karakterlerin ASCII kodu karşılığı olan sayı Hyper terminal programı ile gönderilir. Gönderilen bu sayı PIC16F628A’nın RX ucundan alınarak A port’unun alt dört bit’ine ve B port’unun üst dört bit’ine bağlı olan LED’lerde binary olarak gösterilir.

PROG39.ASM : PIC16F628A’nın dahili EEPROM veri belleğine veri yazdırma ve okuma işlemine örnek program. RA0 pin’ine bağlı butona basınca EEPROM’un h’05’ adresine h’8F’ verisini, RA4 pin’indeki butona basınca da EEPROM’un h’05’ adresine h’3D’ verisini yazan, RA7 pin’indeki butona basınca yine h’05’ adresindeki veriyi PortB’deki LED’lerde gösteren program.


.Asm Download

1 yorum:

Floyn dedi ki...

Merhaba,
.asm dosyaları linki bozulmuş indiremiyorum. Birde bu .asm dosyalarının
proteus dosyaları da mevcut mu?

şimdiden teşekkürler :)