User account menu

  • Giriş yapın
Anasayfa
Kozmotronik Blog
Yıldız tozundan teknolojiye!

Main navigation

  • Anasayfa
  • Kategoriler
    • Elektronik
    • Programlama
      • Gömülü Programlama
      • Mobil Programlama
    • Programlama Dilleri
  • Seriler
    • Android Bluetooth Programlama
    • JAL Başvuru Kılavuzu
    • Görevci ile Sistem Programlama
  • Projeler
    • Görevci
  • Hakkında

PIC16F887 Assembly ile 4x4 Tuş Matrix Tarama

Sayfa yolu

  • Anasayfa
  • PIC16F887 Assembly ile 4x4 Tuş Matrix Tarama
Yazar: İsmail Sahillioğlu | Mart 16, 2017
Devre şeması

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.

Program içinde neredeyse tüm komutların işlevlerini ve açıklamalarını yaptım, iyi denemeler...

; Copyright (c) 2017 Kozmotronik (İsmail Sahillioğlu)
; 
; Permission is hereby granted, free of charge, to any person obtaining a copy 
; of this software and associated documentation files (the "Software"), to deal 
; in the Software without restriction, including without limitation the rights 
; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
; copies of the Software, and to permit persons to whom the Software is 
; furnished to do so, subject to the following conditions:
; 
; The above copyright notice and this permission notice shall be included in 
; all copies or substantial portions of the Software.
;
; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
; SOFTWARE.

;  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

Lisans
Bu uygulamanın kodları MIT lisansı altında paylaşılmaktadır.

TUS_TARAMA_MPLAB.zip (25.97 KB)
Tus_Tarama_Proteus.zip (51.61 KB)
PIC
PIC16
PIC16F887
Assembly
Gömülü Programlama

Sorumluluk Reddi

Bu site bilgilendirme amaçlıdır. Burada sunulan bilgileri, uygulayıcı kendi sorumluluğu altında uygular. Bu bilgilerin uygulanması sırasında ihmal, dikkatsizlik, konuyla ilgili bilgi eksikliği veya yanlış uygulama nedeniyle meydana gelebilecek hasarlardan, can veya mal kaybından, maddi veya fiziksel kayıplardan tamamen uygulayıcı sorumlu olup site ve yazarları sorumlu tutulamaz.

Projects

Görevci

Monthly archive

  • Nisan 2021 (2)
  • Kasım 2023 (2)
  • Nisan 2026 (2)
Sayfalama
  • Önceki sayfa ‹‹
  • Sayfa 2

Footer menu

  • İletişim

Copyright © 2026 Kozmotronik Tech - All rights reserved

Kozmotronik Tech