PIC Assembly - PIC C 16F887 ve PIC ASM ile 4×4 Matris Tuş Takımı Tarama By Konuk Yazar Posted on 5 Nisan 2017 12 min read 0 0 5,214 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr Kullanılan Denetleyici: PIC16F887 Amaç: Matris yapılı tuş takımlarının taranıp, basılan tuş değerinin 7-parçalı LED göstergede gösterilmesi. Devre Şeması: Açıklama: Bu program başlangıç düzeyinde olanların Assembler’da tuşların nasıl taranıp, girilen değerin nasıl 7-Parçalı bir LED göstergede gösterilebileceğini kavrayabilmesi için yapılmştır. Programın işleyişi şu şekildedir: Osilatör ayarları yapılır. Giriş-çıkış yönlendirmeleri yapılır ve portlar kullanıma hazır hale getirilir. 7-Parçalı LED gösterge ilk kullanıma hazır hale getirilir. Kesme bayrakları temizlenir ve ardından kesmeler kurulur. Sonrasında denetleyici tuş darbelerini beklemek üzere uyku kipine geçirilir. Bu kipte kullanılması aygıtın mümkün olduğu kadar en düşük güçte çalışması içindir. Herhangi bir tuş darbesi geldiğinde, PORTB bacaklarının değişimde kesmede uyandırma özelliği sayesinde denetleyici uyku kipinden uyanır ve kesme servisine gider. Kesme servisinde tuşlar tek tek taranır, hangi tuş basılı ise o tuşun değeri alınıp 7-Parçalı LED göstergenin gösterebileceği sayı kodlarına dönüştürülür ve o sayı göstergede gösterilir. Gösterme işlemi bittikten sonra her şey normal durumuna geri alınır ve kesmeden çıkılır. Kesmeden çıktıktan sonra denetleyici mışıl mışıl uykusuna kaldığı yerden devam eder. Bu esnada gösterge yeni bir tuş darbesi gele dek en son girilen sayıyı göstermeyi sürdürür. Denetleyicinin sıfırlaması(resetlemesi) etkindir ve herhangi bir anda sıfırlama tuşuna basılarak sıfırlanabilir. Tuş sırasını ben kendime göre düzenledim. İsteyen satır ve sütunlarda numaraların yerlerini değiştirip program içinden karşılık gelen yerleri yeni düzene göre değiştirebilir. Böylelikle kendi tuş düzeninizi yapmayı ve bunu programda değiştirmeyi deneyebilirsiniz. Deney bordu üzerinde denenmek istendiğinde Port çıkışları ile LED gösterge arasına ortalama 220 ohm’luk dirençler koymayı unutmayınız. Devre yalnızca simülasyon programında denenmiştir ve sorunsuz çalşmaktadır. Devrenin yetkin bir biçimde çalışması için PIC16F887 denetleyicisinin dahili 8MHz osilatörü kullanılmıştır. Kararlılık açısından 4MHz in altındaki hızlarda çalıtırılmaması önerilir. Program içinde neredeyse tüm komutların işlevlerini ve açıklamalarını yaptım, iyi denemeler… Ekler: Tuş tarama MPLAB kodları dosyaları Tuş tarama Proteus çizim dosyaları Assembly kodları: ; Bu alistirmada tuslari tarayip girilen degeri 7-Parcali LED gostergede ; gösterecegiz. Denetleyici burada UYKU kipinde calistirilacaktir. Tus darbesi ; olmadigi surece UYKU kipinde bekleyecek, herhangi bir tusa basildiginda ; uyanip gereken islemleri yapacak ve yeniden uyku kipine girecektir. ; KOZMOTRONIK 10.03.2017 LIST P=16F887 #include "p16f887.inc" ; CONFIG1 ; __config 0xEFE4 __CONFIG _CONFIG1, _FOSC_INTRC_NOCLKOUT & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF ; CONFIG2 ; __config 0xFEFF __CONFIG _CONFIG2, _BOR4V_BOR21V & _WRT_OFF ;YAPILANDIRMA (CONFIGURATION) ACIKLAMALARI ;Frekans dahili osilator, osilator bacaklari giris-cikis ;BekciKopegi (WDT) kapali ;Enerjilenme Sifirlamasi (PowerOn-Reset) etkin ;AnaSifirlama (MasterClear) etkin ;Kod koruma kapali ;Veri kod koruma kapali ;Düşük voltaj koruma (BrownOut-Reset) sifirlamasi etkin ;Dahili - Harici Anahtarlamasi etkin ;Saat kaynagi Hatasi Guvenligi etkin ;Dusuk Voltaj Programlama kapali ;Dusuk Voltaj Koruma siniri 2.1V ;Veri Bellegi Yazma Korumasi kapali ORG 0X00 GOTO GIRIS ORG 0X04 GOTO TUS_KESME ; ALT PROGRAMLAR VE KESME ALT PROGRAMLARI BOLUMU PORT_KUR CLRF PORTB CLRF PORTC ;Kulanilacak giris-cikis portlarını artiklardan temizle CLRF PORTD BANKSEL TRISB ;TRISB NIN OLDUGU BANKA GEC (BANK1) MOVLW 0XF0 MOVWF TRISB ;RB<7:4> GIRIS, RB<3:0> CIKIS MOVWF IOCB ;RB<7:4> DEGISIMDE KESMELER ETKIN CLRF TRISC ;RC TUMDEN CIKIS BCF TRISD, 2;RD2 CIKIS BSF OPTION_REG, 7 ;RB PULL-UP DIRENCLERI ETKISIZ BANKSEL ANSELH ;ANSEL IN OLDUGU BANKA GEC (BANK3) CLRF ANSELH ;RB TUM BITLERI SAYISAL GIRIS-CIKIS BANKSEL PORTC ;BANK0 A GEC RETLW 0X40 GOSTERGE_KUR MOVWF PORTC ; GOSTERGEYE '--' CIKIS DEGERINI GONDER BSF PORTD, 2 ;GOSTREGEYI SASEYE BATIR RETLW 0XF1 ; KESME SERVISI ALT PROGRAMLARI TUS_KESME BCF INTCON, GIE ;TUM KESMELER DEVRE DISI BTFSS INTCON, RBIF ;RB DEGISIM KESMESI MI? GOTO KESME_CIKIS ;DEGILSE, HER SEYI NORMALE DONDUR VE KESMEDEN CIK CLRF PORTB ;EVETSE, SUTUN BESLEMELERINI KES GOTO GOSTER TUS_TARA ;7, 4, 1, 0 ICIN TARAMA BSF PORTB, 0 ;1. SUTUN ETKIN BTFSC PORTB, 4 ;7 MI? RETLW .7 ;EVETSE, W = 7 BTFSC PORTB, 5 ;4 MU? RETLW .4 ;EVETSE, W = 4 BTFSC PORTB, 6 ;1 MI? RETLW .1 ;EVETSE, W = 1 BTFSC PORTB, 7 ;0 MI? RETLW 0 ;EVETSE, W = 0 BCF PORTB, 0 ;HICBIRI DEGILSE, 1. SUTUN TARAMASI BITTI, BESLEMEYI KES ;8, 5, 2, A ICIN TARAMA BSF PORTB, 1 ;2. SUTUN ETKIN BTFSC PORTB, 4 ;8 MI? RETLW .8 ;EVETSE, W = 8 BTFSC PORTB, 5 ;5 MI? RETLW .5 ;EVETSE, W = 5 BTFSC PORTB, 6 ;2 MI? RETLW .2 ;EVETSE, W = 2 BTFSC PORTB, 7 ;0 MI? RETLW 0Ah ;EVETSE, W = A (10) BCF PORTB, 1 ;HICBIRI DEGILSE, 2. SUTUN TARAMASI BITTI, BESLEMEYI KES ;9, 6, 3, B ICIN TARAMA BSF PORTB, 2 ;3. SUTUN ETKIN BTFSC PORTB, 4 ;9 MU? RETLW .9 ;EVETSE, W = 9 BTFSC PORTB, 5 ;4 MI? RETLW .6 ;EVETSE, W = 6 BTFSC PORTB, 6 ;3 MU? RETLW .3 ;EVETSE, W = 3 BTFSC PORTB, 7 ;0 MI? RETLW 0Bh ;EVETSE, W = B (11) BCF PORTB, 2 ;HICBIRI DEGILSE, 3. SUTUN TARAMASI BITTI, BESLEMEYI KES ;F, E, D, C ICIN TARAMA BSF PORTB, 3 ;4. SUTUN ETKIN BTFSC PORTB, 4 ;F MI? RETLW 0Fh ;EVETSE, W = F (15) BTFSC PORTB, 5 ;E MI? RETLW 0Eh ;EVETSE, W = E (14) BTFSC PORTB, 6 ;D MI? RETLW 0Dh ;EVETSE, W = D (13) BTFSC PORTB, 7 ;0 MI? RETLW 0Ch ;EVETSE, W = C (12) BCF PORTB, 0 ;HICBIRI DEGILSE, 4. SUTUN TARAMASI BITTI, BESLEMEYI KES RETLW 010h ;BOS LED SURME OFSET DEGERI ILE GERI DON LED_TABLO ADDWF PCL, F ;OFSET DEGERINI PCL E EKLE RETLW 0X3F ;0 ICIN LED SURUCU RETLW 0X06 ;1 ICIN LED SURUCU RETLW 0X5B ;2 ICIN LED SURUCU RETLW 0X4F ;3 ICIN LED SURUCU RETLW 0X66 ;4 ICIN LED SURUCU RETLW 0X6D ;5 ICIN LED SURUCU RETLW 0X7D ;6 ICIN LED SURUCU RETLW 0X07 ;7 ICIN LED SURUCU RETLW 0X7F ;8 ICIN LED SURUCU RETLW 0X6F ;9 ICIN LED SURUCU RETLW 0X77 ;A ICIN LED SURUCU RETLW 0X7C ;B ICIN LED SURUCU RETLW 0X39 ;C ICIN LED SURUCU RETLW 0X5E ;D ICIN LED SURUCU RETLW 0X79 ;E ICIN LED SURUCU RETLW 0X71 ;F ICIN LED SURUCU RETLW 0X40 ;BOS ICIN LED SURUCU GOSTER CALL TUS_TARA ;HANGI TUSA BASILMIS BAK CALL LED_TABLO ;BASILAN TUSA GORE LEDI SURMEK ICIN TABLODAN DEGER AL MOVWF PORTC ;LED SURME DEGERINI PORTC DEN CIKAR KESME_CIKIS CLRF INTCON ;BAYRAKLARI TEMIZLE MOVLW 0X0F MOVWF PORTB ;SUTUN BESLEMELERINI YENIDEN ETKINLESTIR MOVLW 0X88 MOVWF INTCON ;KESMELER YENIDEN ETKIN RETFIE ; GIRIS YAPILANDIRMALARI VE ANA PROGRAM GIRIS MOVLW 0XF1 MOVWF OSCCON ;DAHILI 8MHZ OSILATOR, OSILATOR SISTEM SAATI OLARAK ATANDI CALL PORT_KUR CALL GOSTERGE_KUR MOVWF PORTB ;SUTUN BESLEMELERI ETKIN MOVLW 0X88 MOVWF INTCON ;RB DEGISIMDE KESME VE TUM KESMELER ETKIN UYKU SLEEP GOTO UYKU END