Notlar..

320volt / Mikrodenetleyici Projeleri/

Açıklamalı assembly örnekleri (pic16f628a asm hex)

Mikrodenetleyici Projeleri, blog arşivinde AÇIKLAMALI ASSEMBLY ÖRNEKLERI (PIC16F628A ASM HEX) konusu "asm* asm kod* assemly örnekleri* microchip pic projeleri* PIC programlama* PIC16F628A* " ile etiketlendi

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.

Hazırlayan: Orhan Altınbaşak “Mikrodenetleyiciler ve PIC programlama” kitabına ait uygulama kodları dosyaları http://www.altaskitap.com/ adresinden indirebilirsiniz alternatif link bir çok örneği buradaki deneme geliştirme kartı ile çalıştırabilirsiniz Emeği geçen Kişilere Teşekkürler

  • feridun

    Çok teşekkür ederim gerçekten çok iyi bir çalışma olmuş ve paylaşımınız çok büyük incelik bana yararı dokundu teşekkür ederim

  • ErDi

    Emeğiniz için gerçekten size ne kadar teşekkür etsem azdır belki de bir Türk gencinin gelecegini kurtarmış bulunuyorsunuz. Allah sizden razı olsun

  • engin

    Burada emeği geçen tüm arakdaşlara sonsuz teşekkürler.

  • eray

    kolay gelsin iyi çalışmlar bana pıc16f628a entegresiyle yaptığım katot 0 kayan yazı devremde “hoşgeldiniz” hiç yazmadım bilmiyorum internette iki üç haftadır sürekli araştırıyorum pek bir bilgi bulamadım display 8×8 uçlarınıda bağlayamadım displaylerin pin numaraları nasıl okunduğunu bilmiyorm yardımcı olursunuz umarım mail atarsanız sevinirim negatif yada pozitif bi mail yollarsanız iyi olur kolay gelsin

  • özlem

    Paylaşım için Teşekkürler ; Allah razı olsun.. ;)

  • coşkun

    hazırlayandan Allah razı olsun çok güzel bir çalışma olmuş çok teşekkürler

  • Harun

    eşine az raslanır bir çalışma çok teşekkür ederim

  • mahmoud166

    Çalışma için teşekkür ederim..

  • john mellor

    hi would like to thank you for the programs that you have kindly allowed us to download i am new at programming and find i need as much info as i can get so again thank you

  • emre

    2 saniyede bir port b deki ledleri kaydırarak yazma programını nasıl yapa bilirim TMR0 yada TMR1 bana yardımcı ola bilir misiniz ?

  • Mustafa ÇAKIR

    Çok Teşekkür ederim. Elinize sağlık. Güzel Paylaşım. Öğrencilerime dağıttım ve uygulattım.

  • KERİM54

    ben daha yeni başladım bu işe şimdilik hobi olarak yapıyorum bu bilgiler inşallah çok işime yarayacak paylaşan arkadaşa teşekkür etmeden olmaz diye düşündüm ALLAH razı olsun gerçekten güzel paylaşım benim için…

  • arl

    Teşekkürler güzel paylaşım gerçekten.

  • deniz kurtulus

    emeği geçen tüm arkadaşlara teşekkür ederim.çok güzel bilgiler ve örnekler var…

  • ruya

    Merhaba ben assembly de yeniyim hexadecimal sayilari load ederken f5 gibi sayilari hexadecimal grdurtemedim yardimci olur musunuz