Ana Sayfa PIC Assembly - PIC C 16F887 ve PIC ASM ile 4×4 Matris Tuş Takımı Tarama

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

12 min read
0
0
1,675

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:

  1. Osilatör ayarları yapılır.
  2. Giriş-çıkış yönlendirmeleri yapılır ve portlar kullanıma hazır hale getirilir.
  3. 7-Parçalı LED gösterge ilk kullanıma hazır hale getirilir.
  4. Kesme bayrakları temizlenir ve ardından kesmeler kurulur.
  5. 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.
  6. 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.
  7. 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.
  8. Gösterme işlemi bittikten sonra her şey normal durumuna geri alınır ve kesmeden çıkılır.
  9. 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

 

 

 

Buna Benzer Yazılar Göster !
Daha Fazlasını Yükle - Konuk Yazar
Daha Fazla Göster -  PIC Assembly - PIC C

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bak Bakalım ?

Ucuz Zelio (Akıllı Röle) Kablosu Nasıl Yapılır ?

Daha önce ‘Zelio Akıllı Röleden’ bahsetmiştik, bu yazıda onu programlamak için kullanılan …