PIC16F887 Assembly ile 4x4 Tuş Matrix Tarama

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

  1; Copyright (c) 2017 Kozmotronik (İsmail Sahillioğlu)
  2; 
  3; Permission is hereby granted, free of charge, to any person obtaining a copy 
  4; of this software and associated documentation files (the "Software"), to deal 
  5; in the Software without restriction, including without limitation the rights 
  6; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
  7; copies of the Software, and to permit persons to whom the Software is 
  8; furnished to do so, subject to the following conditions:
  9; 
 10; The above copyright notice and this permission notice shall be included in 
 11; all copies or substantial portions of the Software.
 12;
 13; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
 14; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
 15; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
 16; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
 17; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
 18; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
 19; SOFTWARE.
 20
 21;  Bu alistirmada tuslari tarayip girilen degeri 7-Parcali LED gostergede
 22;  gösterecegiz. Denetleyici burada UYKU kipinde calistirilacaktir. Tus darbesi
 23;  olmadigi surece UYKU kipinde bekleyecek, herhangi bir tusa basildiginda
 24;  uyanip gereken islemleri yapacak ve yeniden uyku kipine girecektir.
 25;  KOZMOTRONIK                                               10.03.2017
 26    
 27		    LIST    P=16F887
 28
 29		    #include "p16f887.inc"
 30
 31; CONFIG1
 32; __config 0xEFE4
 33 __CONFIG _CONFIG1, _FOSC_INTRC_NOCLKOUT & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF
 34; CONFIG2
 35; __config 0xFEFF
 36 __CONFIG _CONFIG2, _BOR4V_BOR21V & _WRT_OFF
 37 
 38	;YAPILANDIRMA (CONFIGURATION) ACIKLAMALARI
 39;Frekans dahili osilator, osilator bacaklari giris-cikis
 40;BekciKopegi (WDT) kapali
 41;Enerjilenme Sifirlamasi (PowerOn-Reset) etkin
 42;AnaSifirlama (MasterClear) etkin
 43;Kod koruma kapali
 44;Veri kod koruma kapali
 45;Düşük voltaj koruma (BrownOut-Reset) sifirlamasi etkin
 46;Dahili - Harici Anahtarlamasi etkin
 47;Saat kaynagi Hatasi Guvenligi etkin
 48;Dusuk Voltaj Programlama kapali
 49;Dusuk Voltaj Koruma siniri 2.1V
 50;Veri Bellegi Yazma Korumasi kapali
 51 
 52		ORG	0X00
 53		GOTO	GIRIS
 54		
 55		ORG	0X04
 56		GOTO	TUS_KESME
 57		
 58;   ALT PROGRAMLAR VE KESME ALT PROGRAMLARI BOLUMU
 59		
 60PORT_KUR
 61		CLRF	PORTB
 62		CLRF	PORTC
 63		CLRF	PORTD
 64		BANKSEL	TRISB	;TRISB NIN OLDUGU BANKA GEC (BANK1)
 65		MOVLW	0XF0
 66		MOVWF	TRISB	;RB<7:4> GIRIS, RB<3:0> CIKIS
 67		MOVWF	IOCB	;RB<7:4> DEGISIMDE KESMELER ETKIN
 68		CLRF	TRISC	;RC TUMDEN CIKIS
 69		BCF	TRISD, 2;RD2 CIKIS
 70		BSF	OPTION_REG, 7	;RB PULL-UP DIRENCLERI ETKISIZ
 71		BANKSEL	ANSELH	;ANSEL IN OLDUGU BANKA GEC (BANK3)
 72		CLRF	ANSELH	;RB TUM BITLERI SAYISAL GIRIS-CIKIS
 73		BANKSEL	PORTC	;BANK0 A GEC
 74		RETLW	0X40	
 75		
 76GOSTERGE_KUR
 77		MOVWF	PORTC	; GOSTERGEYE '--' CIKIS DEGERINI GONDER
 78		BSF	PORTD, 2 ;GOSTREGEYI SASEYE BATIR
 79		RETLW	0XF1
 80		
 81		
 82;		KESME SERVISI ALT PROGRAMLARI
 83		
 84TUS_KESME
 85		BCF	INTCON, GIE ;TUM KESMELER DEVRE DISI
 86		BTFSS	INTCON, RBIF	;RB DEGISIM KESMESI MI?
 87		GOTO	KESME_CIKIS	;DEGILSE, HER SEYI NORMALE DONDUR VE KESMEDEN CIK
 88		CLRF	PORTB	    ;EVETSE, SUTUN BESLEMELERINI KES
 89		GOTO	GOSTER
 90		
 91TUS_TARA
 92		;7, 4, 1, 0 ICIN TARAMA
 93		BSF	PORTB, 0    ;1. SUTUN ETKIN
 94		BTFSC	PORTB, 4    ;7 MI?
 95		RETLW	.7	    ;EVETSE, W = 7
 96		BTFSC	PORTB, 5    ;4 MU?
 97		RETLW	.4	    ;EVETSE, W = 4
 98		BTFSC	PORTB, 6    ;1 MI?
 99		RETLW	.1	    ;EVETSE, W = 1
100		BTFSC	PORTB, 7    ;0 MI?
101		RETLW	0	    ;EVETSE, W = 0
102		BCF	PORTB, 0    ;HICBIRI DEGILSE, 1. SUTUN TARAMASI BITTI, BESLEMEYI KES
103		
104		;8, 5, 2, A ICIN TARAMA
105		BSF	PORTB, 1    ;2. SUTUN ETKIN
106		BTFSC	PORTB, 4    ;8 MI?
107		RETLW	.8	    ;EVETSE, W = 8
108		BTFSC	PORTB, 5    ;5 MI?
109		RETLW	.5	    ;EVETSE, W = 5
110		BTFSC	PORTB, 6    ;2 MI?
111		RETLW	.2	    ;EVETSE, W = 2
112		BTFSC	PORTB, 7    ;0 MI?
113		RETLW	0Ah	     ;EVETSE, W = A (10)
114		BCF	PORTB, 1    ;HICBIRI DEGILSE, 2. SUTUN TARAMASI BITTI, BESLEMEYI KES
115		
116		;9, 6, 3, B ICIN TARAMA
117		BSF	PORTB, 2    ;3. SUTUN ETKIN
118		BTFSC	PORTB, 4    ;9 MU?
119		RETLW	.9	    ;EVETSE, W = 9
120		BTFSC	PORTB, 5    ;4 MI?
121		RETLW	.6	    ;EVETSE, W = 6
122		BTFSC	PORTB, 6    ;3 MU?
123		RETLW	.3          ;EVETSE, W = 3
124		BTFSC	PORTB, 7    ;0 MI?
125		RETLW	0Bh	    ;EVETSE, W = B (11)
126		BCF	PORTB, 2    ;HICBIRI DEGILSE, 3. SUTUN TARAMASI BITTI, BESLEMEYI KES
127		
128		;F, E, D, C ICIN TARAMA
129		BSF	PORTB, 3    ;4. SUTUN ETKIN
130		BTFSC	PORTB, 4    ;F MI?
131		RETLW	0Fh	    ;EVETSE, W = F (15)
132		BTFSC	PORTB, 5    ;E MI?
133		RETLW	0Eh	    ;EVETSE, W = E (14)
134		BTFSC	PORTB, 6    ;D MI?
135		RETLW	0Dh	    ;EVETSE, W = D (13)
136		BTFSC	PORTB, 7    ;0 MI?
137		RETLW	0Ch	    ;EVETSE, W = C (12)
138		BCF	PORTB, 0    ;HICBIRI DEGILSE, 4. SUTUN TARAMASI BITTI, BESLEMEYI KES
139		RETLW	010h	    ;BOS LED SURME OFSET DEGERI ILE GERI DON
140		
141LED_TABLO
142		ADDWF	PCL, F	    ;OFSET DEGERINI PCL E EKLE
143		RETLW	0X3F	    ;0 ICIN LED SURUCU
144		RETLW	0X06	    ;1 ICIN LED SURUCU
145		RETLW	0X5B	    ;2 ICIN LED SURUCU
146		RETLW	0X4F	    ;3 ICIN LED SURUCU
147		RETLW	0X66	    ;4 ICIN LED SURUCU
148		RETLW	0X6D	    ;5 ICIN LED SURUCU
149		RETLW	0X7D	    ;6 ICIN LED SURUCU
150		RETLW	0X07	    ;7 ICIN LED SURUCU
151		RETLW	0X7F	    ;8 ICIN LED SURUCU
152		RETLW	0X6F	    ;9 ICIN LED SURUCU
153		RETLW	0X77	    ;A ICIN LED SURUCU
154		RETLW	0X7C	    ;B ICIN LED SURUCU
155		RETLW	0X39	    ;C ICIN LED SURUCU
156		RETLW	0X5E	    ;D ICIN LED SURUCU
157		RETLW	0X79	    ;E ICIN LED SURUCU
158		RETLW	0X71	    ;F ICIN LED SURUCU
159		RETLW	0X40	    ;BOS ICIN LED SURUCU	
160
161GOSTER
162		CALL	TUS_TARA    ;HANGI TUSA BASILMIS BAK
163		CALL	LED_TABLO   ;BASILAN TUSA GORE LEDI SURMEK ICIN TABLODAN DEGER AL
164		MOVWF	PORTC	    ;LED SURME DEGERINI PORTC DEN CIKAR
165		
166KESME_CIKIS
167		CLRF	INTCON	    ;BAYRAKLARI TEMIZLE
168		MOVLW	0X0F	    
169		MOVWF	PORTB	    ;SUTUN BESLEMELERINI YENIDEN ETKINLESTIR
170		MOVLW	0X88
171		MOVWF	INTCON	    ;KESMELER YENIDEN ETKIN
172		RETFIE
173		
174		
175;	    GIRIS YAPILANDIRMALARI VE ANA PROGRAM
176	
177GIRIS
178		MOVLW	0XF1
179		MOVWF	OSCCON	    ;DAHILI 8MHZ OSILATOR, OSILATOR SISTEM SAATI OLARAK ATANDI
180		CALL	PORT_KUR
181		CALL	GOSTERGE_KUR
182		MOVWF	PORTB	    ;SUTUN BESLEMELERI ETKIN
183		MOVLW	0X88	
184		MOVWF	INTCON	    ;RB DEGISIMDE KESME VE TUM KESMELER ETKIN
185		
186UYKU
187		SLEEP
188		GOTO	UYKU
189		
190		END
Lisans

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

İndirmeler

comments powered by Disqus