Teknomerkez
TR EN ES
Konular

16F887 ve PIC ASM ile 4x4 Matris Tuş Takımı Tarama

Yazar: İsmail Sahillioğlu
Tarih: 16.03.2017
Türkçe
Kullanılan Denetleyici: PIC16F887

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ı etkindir ve herhangi bir anda sıfırlama tuşuna basılarak sıfırlanabilir.

Tuş sırasını ben kafama 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:

TUS_TARAMA_MPLAB.zip

Tus_Tarama_Proteus.zip

Devre Şeması:

;  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
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


Yorumlarınız

Hiç yorum yapılmamış.

Bir yorum ekleyin

İsim:
E-posta:
Yorumunuz:
Güvenlik Kodu:
 
Tüm alanları doldurmak zorunludur. Yorumunuz kontrol edilince yayınlanacaktır. E-posta adresi yayınlanmaz.
İzin verilen html etiketler (tag): <p><div><b><strong><i><u><del><hr><sup><sub><br>