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
Bu uygulamanın kodları MIT lisansı altında paylaşılmaktadır.
İndirmeler