PIC18F2550 Assembly İle 4x7 Segment Gösterge Çoğullama (Multiplexing)

Genel Bakış

Üye olduğum forumları gezdiğimde Assembly ile PIC programlama konusunda özellikle PIC18 serisi ile ilgili yeteri kadar Türkçe kaynak bulamadım. Bu yüzden ben de yeterli İngilizcem olduğu için İngilizce kaynaklara yöneldim. Şu an hala Assembly programlamada ilerliyorum. Bunu yaparken de Türkçe kaynak sıkıntısından dolayı deneyimlerimi yardımcı kaynak olması adına, özellikle PIC18 serisini Assembly ile programlamayı öğrenmek isteyenler için paylaşmak istiyorum. Çünkü bilenler bilir PIC18 serisinde veri belleği bloklarının yönetimi yazılımsal ve donanımsal olarak klasik PIC16 serisinin bellek yapısından biraz farklıdır. PIC16 serisinde Assembly ile programlamayı bilenler, PIC18 serisinde Assembly ile programlama yaparken özellikle BANK blokları ve yazılımda nasıl yönetilmesi gerektiği konusunda afallayabilirler. Ancak düşünülenin aksine PIC18 serisinde bank yönetimine gerek yoktur, eğer RAM de çok büyük miktarlarda veri saklanması gerekmiyorsa BANK sistemini kullanmaya hiç gerek yoktur. Örnek programlarda bu ve buna benzer mimari ve yazılımsal farklılıklar ve ne yapılması gerektiği hakkında anlaşılır Türkçe içerikli açıklamalar olacaktır.

Bu örnekte tek bir çıkış portundan 4 adet 7 parçalı göstergenin; çoğullama (multiplexing) tekniği kullanılarak nasıl sürüleceğini göreceğiz. Asıl amacımız çoğullama tekniğine yoğunlaşmak olduğu için, amacımıza yardımcı olması açısından; saniyede bir artan basit bir yukarı sayıcı kodu da yazacağız.

Timer0 donanımı, 5 milisaniyelik kesmeler üreterek; hem sayıcıya bir süre tabanı oluşturacak, hem de herbir göstergenin yenileme rutinlerini tetikleyecektir.

Donanım

Devre şeması

8-Bitlik B portunun tamamı 4 x 7-Parçalı göstergenin veri sürme işlevini gerçekler (yerine getirir).

4-Bitlik A portunun <3:0> bacakları her bir hanenin akımını batırmak (sink) için kullanılan harici batırma (sink) transistörlerini ya da mosfetlerini sürme işlevini gerçekler (yerine getirir). Bunun için diğer bir seçenek de açık kollektörlü batırma akım sürücüsü ULN2003 16 bacaklı DIP paket entegresini kullanmaktır. ULN2003'ün dizi transistörlerinden her biri en fazla 500mA'e kadar yükleri sürebilir ve Beyz uçları doğrudan PORTA bacaklarından sürülebilir.

Yazılım

Göstergeyi sürme işlemi (multiplexing); her bir hane göstergesini her 20ms'de 5ms boyunca çalıştırarak gerçeklenmiştir. Bu 50hz'lik bir güncelleme oranı verir ki, kararlı bir gösterge olarak insan gözü için oldukça kabul edilebilir bir orandır.

5ms süre tabanı, 4,096MHz'lik osilatör saatini bölerek üretilmektedir. Timer0 8 bitlik sayıcı/zamanlayıcı olarak düzenlenmiştir.

Dahili önölçekçi(prescaler) bir 32'ye (1/32) bölücü olarak düzenlenmiş ve Timer0'a atanmıştır.

TMR0L; 96 desimal değeriyle önyüklenmiştir. TMR0L 96'dan itibaren saymaya başlayıp 256'ya dek artacak, ardından, (256-96)x(32x4/4096000) = 5ms'lik bir süreden sonra 0' a yuvarlanacaktır. TMR0L 0'a her yuvarlandığında, T0IF (Timer0 kesme bayrağı) biti donanım tarafından kurulur, GIE (Global Interrupt Enable / Küresel Kesme Etkinleştirme) biti ve T0IE kesme bitleri etkinleştirildiğinden, bir kesme üretilir.

Yazılım 1-saniye oranında artan bir sürevci (zamanlayıcı) gerçekler.

Her saniyede gereken hanenin 4 nibble (4x4-bitlik veri birimi yada 2 byte); HANE12 ve HANE34 dosyalarında BCD (Binary Coded Decimal/İkilik Kodlanmış Onluk) biçiminde artırılır ve saklanır. Programda; HANE34 dosyası En Yüksek Değerli haneleri, HANE12 dosyası da En Düşük Değerli haneleri saklar.

4-bitlik BCD değer; hangi göstergenin çalıştığına bağlı olarak ya HANE34 ya da HANE12 dosyalarından alınır ve 7-parçalı göstergeyi sürecek karşılık gelen kodlara çevrilir.

Timer0 kesmesi 5 milisaniyelik kararlı bir oranda üretilir ve 1us'lik bir komut süresi verilir.

Bütün gösterge güncelleme programı; kesme servis rutininin içine oturtulabilir.

Assembly Kodu

  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; PIC18F2550 Configuration Bit Settings
 22; Assembly source line config statements
 23	LIST	P=18F2550
 24#include "p18f2550.inc"
 25
 26; CONFIG1L
 27  CONFIG  PLLDIV = 1            ; PLL Prescaler Selection bits (No prescale (4 MHz oscillator input drives PLL directly))
 28  CONFIG  CPUDIV = OSC1_PLL2    ; System Clock Postscaler Selection bits ([Primary Oscillator Src: /1][96 MHz PLL Src: /2])
 29  CONFIG  USBDIV = 1            ; USB Clock Selection bit (used in Full-Speed USB mode only; UCFG:FSEN = 1) (USB clock source comes directly from the primary oscillator block with no postscale)
 30
 31; CONFIG1H
 32  CONFIG  FOSC = INTOSCIO_EC    ; Oscillator Selection bits (Internal oscillator, port function on RA6, EC used by USB (INTIO))
 33  CONFIG  FCMEN = OFF           ; Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
 34  CONFIG  IESO = OFF            ; Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)
 35
 36; CONFIG2L
 37  CONFIG  PWRT = ON             ; Power-up Timer Enable bit (PWRT enabled)
 38  CONFIG  BOR = ON              ; Brown-out Reset Enable bits (Brown-out Reset enabled in hardware only (SBOREN is disabled))
 39  CONFIG  BORV = 3              ; Brown-out Reset Voltage bits (Minimum setting 2.05V)
 40  CONFIG  VREGEN = OFF          ; USB Voltage Regulator Enable bit (USB voltage regulator disabled)
 41
 42; CONFIG2H
 43  CONFIG  WDT = OFF             ; Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
 44  CONFIG  WDTPS = 32768         ; Watchdog Timer Postscale Select bits (1:32768)
 45
 46; CONFIG3H
 47  CONFIG  CCP2MX = ON           ; CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
 48  CONFIG  PBADEN = OFF          ; PORTB A/D Enable bit (PORTB<4:0> pins are configured as digital I/O on Reset)
 49  CONFIG  LPT1OSC = OFF         ; Low-Power Timer 1 Oscillator Enable bit (Timer1 configured for higher power operation)
 50  CONFIG  MCLRE = ON            ; MCLR Pin Enable bit (MCLR pin enabled; RE3 input pin disabled)
 51
 52; CONFIG4L
 53  CONFIG  STVREN = ON           ; Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
 54  CONFIG  LVP = OFF              ; Single-Supply ICSP Enable bit (Single-Supply ICSP enabled)
 55  CONFIG  XINST = OFF           ; Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))
 56
 57; CONFIG5L
 58  CONFIG  CP0 = OFF             ; Code Protection bit (Block 0 (000800-001FFFh) is not code-protected)
 59  CONFIG  CP1 = OFF             ; Code Protection bit (Block 1 (002000-003FFFh) is not code-protected)
 60  CONFIG  CP2 = OFF             ; Code Protection bit (Block 2 (004000-005FFFh) is not code-protected)
 61  CONFIG  CP3 = OFF             ; Code Protection bit (Block 3 (006000-007FFFh) is not code-protected)
 62
 63; CONFIG5H
 64  CONFIG  CPB = OFF             ; Boot Block Code Protection bit (Boot block (000000-0007FFh) is not code-protected)
 65  CONFIG  CPD = OFF             ; Data EEPROM Code Protection bit (Data EEPROM is not code-protected)
 66
 67; CONFIG6L
 68  CONFIG  WRT0 = OFF            ; Write Protection bit (Block 0 (000800-001FFFh) is not write-protected)
 69  CONFIG  WRT1 = OFF            ; Write Protection bit (Block 1 (002000-003FFFh) is not write-protected)
 70  CONFIG  WRT2 = OFF            ; Write Protection bit (Block 2 (004000-005FFFh) is not write-protected)
 71  CONFIG  WRT3 = OFF            ; Write Protection bit (Block 3 (006000-007FFFh) is not write-protected)
 72
 73; CONFIG6H
 74  CONFIG  WRTC = OFF            ; Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) are not write-protected)
 75  CONFIG  WRTB = OFF            ; Boot Block Write Protection bit (Boot block (000000-0007FFh) is not write-protected)
 76  CONFIG  WRTD = OFF            ; Data EEPROM Write Protection bit (Data EEPROM is not write-protected)
 77
 78; CONFIG7L
 79  CONFIG  EBTR0 = OFF           ; Table Read Protection bit (Block 0 (000800-001FFFh) is not protected from table reads executed in other blocks)
 80  CONFIG  EBTR1 = OFF           ; Table Read Protection bit (Block 1 (002000-003FFFh) is not protected from table reads executed in other blocks)
 81  CONFIG  EBTR2 = OFF           ; Table Read Protection bit (Block 2 (004000-005FFFh) is not protected from table reads executed in other blocks)
 82  CONFIG  EBTR3 = OFF           ; Table Read Protection bit (Block 3 (006000-007FFFh) is not protected from table reads executed in other blocks)
 83
 84; CONFIG7H
 85  CONFIG  EBTRB = OFF           ; Boot Block Table Read Protection bit (Boot block (000000-0007FFh) is not protected from table reads executed in other blocks)
 86
 87
 88    CBLOCK	    0X00
 89  GNL1
 90  GNL2
 91  GNL3
 92  SAY
 93  HANE34
 94  HANE12
 95  ENDC
 96  
 97  
 98	ORG	0X0000
 99	BRA	BASLA
100	
101	ORG	0X0008
102	BRA	KESME_SERVIS
103	
104		
105	
106;		7 PARCALI GOSTERGE SURME KODLARI TABLOSU
107    ; BILGI: PIC18F/C serisinde program sayicinin degeri donanimsal duzenlemeden dolayi
108; 2ser olarak artmaktadir yani: PCL = PCL + 2. Bu yuzden PIC16F/C serisine gore
109; cevrim tablosu yazilmissa; offset degerini PCL e eklemeden once 2 ile carpmak gerekir.
110
111    ; PIC18 Serisi carpma islemini yapabilecek donanima ve komuta (MULWF, MULLW) sahiptir
112; Nitekim Tablodan deger almadan once ofset degeri once 2 ile carpilmis ardindan
113; PCL e eklenmistir. Ofset = ofset x 2 (MULLW	0X02).
114    
115    ;Carpma isleminden sonra sonuc PRODL ve PRODH yazmaclarinda saklanir; W de saklanmaz 
116; ve hiç bir durum bayragi etkilenmez. Dolayisiyla sonuc PRODx dosyalarindan WREG
117; dosyasina tasinmalidir.
118	
119BCD_7PARCALIYA
120	MULLW	0X02	    ;OFSET DEGERINI 2 ILE CARP
121	MOVF	PRODL, W    ;CARPMA ISLEMININ SONUCUNU W YE AL
122	ADDWF	PCL	    ;OFSET DEGERINI PCL E EKLE
123	RETLW	0X3F	    ;0 ICIN LED SURUCU
124	RETLW	0X06	    ;1 ICIN LED SURUCU
125	RETLW	0X5B	    ;2 ICIN LED SURUCU
126	RETLW	0X4F	    ;3 ICIN LED SURUCU
127	RETLW	0X66	    ;4 ICIN LED SURUCU
128	RETLW	0X6D	    ;5 ICIN LED SURUCU
129	RETLW	0X7D	    ;6 ICIN LED SURUCU
130	RETLW	0X07	    ;7 ICIN LED SURUCU
131	RETLW	0X7F	    ;8 ICIN LED SURUCU
132	RETLW	0X67	    ;9 ICIN LED SURUCU
133	RETLW	0X00	    ;BOS ICIN LED SURUCU
134	
135	
136BASLA
137	MOVLW	63
138	MOVWF	OSCCON
139	CALL	PORTLARI_KUR		;PORTLARI KURAN ALT PROGRAMI CAGIR
140	CALL	SUREVCILERI_KUR		;SUREVCIYI KURAN ALT PROGRAMI CAGIR
141	
142DON
143	GOTO	DON		;KESME OLANA KADAR DONGUYE GIR
144	
145	
146;		PORTLARIN KURULUMU VE A/D DUZENLEMELERI
147	
148PORTLARI_KUR
149	MOVLW	0X0F
150	MOVWF	ADCON1	    ;RA0-3 DIJITAL G/C
151	MOVLW	0X07
152	MOVWF	CMCON	    ;RA0-3 KARSILASTIRICI GIRISLERI ETKISIZ RA= DIJITAL G/C
153	CLRF	TRISA	    ;RA = CIKIS
154	CLRF	TRISB	    ;RB = CIKIS
155	CLRF	PORTA
156	CLRF	PORTB
157	BSF	PORTA,3	    ;4. HANEYI BATIRMA ETKIN
158	RETURN
159	
160	
161;		SUREVCILERIN KURULUMU VE DUZENLENMELERI
162	
163SUREVCILERI_KUR
164	CLRF	HANE34
165	CLRF	HANE12
166	MOVLW	0X44
167	MOVWF	T0CON	    ;ONOLCEKCI 1/32 OLCEGINDE
168	MOVLW	0X20
169	MOVWF	INTCON	    ;TIMER0 KESMESI ETKIN
170	MOVLW	.96
171	MOVWF	TMR0L	    ;DOSYAYA HESAPLANAN 96 ONDEGERINI YUKLE
172	BSF	T0CON, TMR0ON	;TIMER0 I ETKINLESTIR
173	BSF	INTCON, GIE	;KESMELERI ETKINLESTIR
174	RETURN
175	
176	
177;		KESME SERVISI
178	
179KESME_SERVIS
180	BTFSC	INTCON, T0IF	;TIMER0 KESMESI MI?
181	BRA	TMR0SERVIS	;EVET, TIMER0 SERVISINE DALLAN
182	MOVLW	0X20
183	MOVWF	INTCON		;HAYIR, BAYRAKLARI TEMIZLE, TIMER0 KESMESINI KUR VE
184	RETFIE			;KESME SERVISINDEN CIK
185	
186	
187;		TIMER0 KESME SERVISI
188	
189TMR0SERVIS
190	MOVLW	.96
191	MOVWF	TMR0L	    ;TMR0L DOSYASINI YENIDEN ONDEGERLE YUKLE
192	BCF	INTCON, T0IF	;TIMER0 KESME BAYRAGINI TEMIZLE
193	CALL	SUREART	    ;HANE DEGERLERINI GUNCELLEME ALT PROGRAMINI CAGIR
194	CALL	GSTRGGUNCELLE	;GOSTERGELERI GUNCELLEME ALT PROGRAMINI CAGIR
195	RETFIE
196	
197;7-PARCALI GOSTERGE HER 1 (200 x 5ms) SANIYEDE BIR ARTTIRILIR
198
199;		SURE DEGERLERINI GUNCELLEME ALT PROGRAMI
200
201SUREART
202	INCF	SAY, W	    ;SAY DOSYA DEGERINI 1 ARTIR SONRA W YE KOPYALA
203	XORLW	.200	    ;200 ILE KARSILASTIR (1 SANIYE OLUP OLMADIGINI SINA)
204	BTFSC	STATUS, Z   ;DEGERLER AYNI MI? (AYNI ISE SONUC 0 VE Z BAYRAGI 1 OLUR)
205	BRA	SUREARTYAP  ;EVET, SURE ARTIRMA ALT PROGRAMINA DALLAN
206	INCF	SAY, F	    ;HAYIR, OYLEYSE SAY DOSYA DEGERINI ARTIR VE GERI DON
207	RETURN		    ;TMR0SERVIS KESME ALT PROGRAMINA GERI DON
208	
209	
210;		SURE DEGERLERININ ARTIRILMASININ YAPILDIGI ALT PROGRAM
211	
212SUREARTYAP
213	CLRF	SAY	    ;SAY DOSYASINI YENIDEN SAYMA ICIN SIFIRLA
214	INCF	HANE12, W   ;HANE12 DOSYA DEGERINI 1 ARTIR VE W YE KOPYALA
215	ANDLW	0X0F	    ;2. HANEYI MASKELE
216	XORLW	0X0A	    ;10 ILE KARSILASTIR
217	BTFSC	STATUS,Z    ;1. HANE 10 A ULASTI MI?
218	BRA	IKINCIHANEART	;EVET, OYLEYSE 2. HANEYI ARTIRMA ALT PROGRAMINA DALLAN
219	INCF	HANE12, F   ;HAYIR, 1. HANENIN DEGERINI 1 ARTIR VE DOSYAYA SAKLA
220	RETURN		    ;SUREART ALT PROGRAMINA GERI DON
221	
222	
223;		2. HANENIN ARTIRMA ISLEMININ YAPILDIGI ALT PROGRAM
224	
225IKINCIHANEART
226	SWAPF	HANE12, W	;1. HANE ILE 2. HANENIN YERINI DEGISTIR VE W YE KOPYALA
227	ANDLW	0X0F		;1. HANEYI MASKELE
228	ADDLW	.1		;2. HANEYI 1 ARTIR
229	MOVWF	HANE12		;ARDINDAN HANE12 DOSYASINA GERI SAKLA
230	SWAPF	HANE12, F	;1 VE 2. HANEYI ESKI YERINE AL
231	XORLW	0X0A		;2. HANE DEGERINI 10 ILE KARSILASTIR
232	BTFSC	STATUS, Z	;2. HANE 10 A ULASTI MI?
233	BRA	UCUNCUHANEART	;EVET, OYLEYSE 3. HANEYI ARTIRMA ALT PROGRAMINA DALLAN
234	RETURN			;HAYIR, OYLEYSE SUREART ALT PROGRAMINA GERI DON
235	
236	
237;		3. HANENIN ARTIRMA ISLEMININ YAPILDIGI ALT PROGRAM
238	
239UCUNCUHANEART
240	CLRF	HANE12		;1. VE 2. HANEYI TEMIZLE
241	INCF	HANE34, W	;3. HANEYI 1 ARTIR SONRA W YE KOPYALA
242	ANDLW	0X0F		;4. HANEYI MASKELE
243	XORLW	0X0A		;3. HANE DEGERINI 10 ILE KARSILASTIR
244	BTFSC	STATUS, Z	;3. HANE 10 A ULASTI MI?
245	BRA	DORDUNCUHANEART	;EVET, OYLEYSE 4. HANEYI ARTIRMA ALT PROGRAMINA GIT
246	INCF	HANE34, F	;HAYIR, OYLEYSE 3. HANEYI 1 ARTIR VE DOSYAYA SAKLA
247	RETURN			;HAYIR, OYLEYSE SUREART ALT PROGRAMINA GERI DON
248	
249	
250;		4. HANENIN ARTIRMA ISLEMININ YAPILDIGI ALT PROGRAM
251	
252DORDUNCUHANEART
253	SWAPF	HANE34, W	;3. HANE ILE 4. HANENIN YERINI DEGISTIR VE W YE KOPYALA
254	ANDLW	0X0F		;3. HANEYI MASKELE
255	ADDLW	.1		;4. HANEYE 1 EKLE
256	MOVWF	HANE34		;ARDINDAN HANE34 DOSYASINA GERI SAKLA
257	SWAPF	HANE34		;3 VE 4. HANELERI YERLERINE AL
258	XORLW	0X0A		;4. HANE DEGERINI 10 ILE KARSILASTIR
259	BTFSC	STATUS, Z	;4. HANE 10 A ULAŞTI MI?
260	CLRF	HANE34		;EVET, OYLEYSE 3 VE 4. HANELERI SIFIRLA
261	RETURN			;HAYIR, ARTIRMADAN SONRA SUREART ALT PROGRAMINA GERI DON
262	
263;___________________________________________________________________________________________
264;___________________________________________________________________________________________
265	
266;		GOSTERGELERIN GUNCELLEME ISLEMININ YAPILDIGI ALT PROGRAM BLOGU
267	
268GSTRGGUNCELLE
269	MOVF	PORTA, W	;SON BATIRMA(SINK) DURUMUNU W YE KOPYALA
270	CLRF	PORTA		
271	ANDLW	0X0F		;RA0-3 HARICINI MASKELE
272	MOVWF	GNL1		;SON BATIRMA DURUMUNU GECICI OLARAK GNL1 DOSYASINDA SAKLA
273	BSF	GNL1, 4		;1 VE 2. HANE GOSTERGELERI BATIRMA ICIN ONKURMA 
274	RRCF	GNL1, F		;SONRAKI BATIRMA DEGERINI BELIRLE
275	BTFSS	STATUS, C	;TASMA BITI 1 MI?
276	BCF	GNL1, 3		;HAYIR, OYLEYSE ONKURMAYI SIFIRLA
277	BTFSC	GNL1, 0		;EVET, OYLEYSE 4. HANEYE BAK 1 MI?
278	BRA	DORDUNCUYUGUNCELLE  ;EVET, 4. GOSTERGEYI GUNCELLEME ALT PROGRAMINA DALLAN
279	BTFSC	GNL1, 1		;HAYIR, YOKSA 3. HANE MI 1?
280	BRA	UCUNCUYUGUNCELLE    ;EVET, OYLEYSE 3. GOSTERGEYI GUNCELLEME ALT PROGRAMINA DALLAN
281	BTFSC	GNL1, 2		;HAYIR, YOKSA 2. HANE MI 1?
282	BRA	IKINCIYIGUNCELLE    ;EVET, OYLEYSE 2. GOSTERGEYI GUNCELLEME ALT PROGRAMINA DALLAN
283	
284	
285;		1. GOSTERGEYI GUNCELLEME ALT PROGRAMI
286	
287BIRINCIYIGUNCELLE
288	MOVF	HANE12, W   ;HANE12 YI W YE AL
289	ANDLW	0X0F	    ;2. HANEYI MASKELE
290	BRA	GSTRGCIKIS  ;GOSTERGEYI ETKINLESTIR VE GUNCELLEME ALT PROGRAMINA DALLAN
291
292	
293;		2. GOSTERGEYI GUNCELLEME ALT PROGRAMI
294	
295IKINCIYIGUNCELLE
296	CALL	IKINCI0DNT	    ; 2. HANENIN SIFIR OLUP OLMADIGINI DENETLEYEN ALT PRORAMI CAGIR
297	BTFSS	STATUS, Z	;2, 3, VE 4. HANELER 0 MI?
298	SWAPF	HANE12, W	;HAYIR, OYLEYSE 1. VE 2. HANENIN YERINI DEGISTIR VE BURADAN DEVAM ET
299	ANDLW	0X0F		;EVETSE, 2. HANEYI MASKELE HAYIRSA 1. HANEYI MASKELE
300	BRA	GSTRGCIKIS	;GOSTERGEYI ETKINLESTIR VE GUNCELLEME ALT PROGRAMINA DALLAN
301	
302	
303;		3. GOSTERGEYI GUNCELLEME ALT PROGRAMI
304		
305UCUNCUYUGUNCELLE
306	CALL	HANE340DNT	;EN YUKSEK DEGERLI HANELERIN 0 OLUP OLMADIĞINI SINAYAN ALT PROGRAMI CAGIR
307	BTFSS	STATUS, Z	;EYD HANELER 0 MI?
308	MOVF	HANE34, W	;HAYIRSA ONCE HANE34 U W YE AL OYLE DEVAM ET
309	ANDLW	0X0F		;EVETSE YUKARIDAKI KOMUTU ATLA, 4. HANYI MASKELE
310	BRA	GSTRGCIKIS	;GOSTERGEYI ETKINLESTIR VE GUNCELLEME ALT PROGRAMINA DALLAN
311	
312	
313;		4. GOSTERGEYI GUNCELLEME ALT PROGRAMI
314		
315DORDUNCUYUGUNCELLE
316	SWAPF	HANE34, W	;3 VE 4. HANENIN YERINI DEGISTIR
317	ANDLW	0X0F		;3. HANEYI MASKELE
318	BTFSC	STATUS, Z	;4. HANE 0 MI?
319	MOVLW	0X0A		;EVET, OYLEYSE W YE 10 YUKLE VE DEVAM ET
320	
321;_______________________________________________________________________________________
322;_______________________________________________________________________________________
323	
324;		GOSTERGELERIN CIKISININ YAPILDIGI ALT PROGRAM BLOGU
325
326GSTRGCIKIS
327	CALL	BCD_7PARCALIYA	    ;BCD YI 7 PARCALI GOSTERGEYE KODLAYAN ALT PROGRAMI CAGIR
328	MOVWF	PORTB		    ;GOSTERGE DEGERLERINI PORTB DEN CIKAR
329	MOVF	GNL1, W		    ;BATIRMA DEGERLERINI YEDEKTEN W YE AL
330	MOVWF	PORTA		    ;BATIRMA DEGERLERINI PORTA YA GERI YUKLE
331	RETURN			;TMR0SERVIS KESME ALT PROGRAMINA GERI DON
332
333	
334;		SIFIR DENETLEME ALT PROGRAM BLOGU
335	
336IKINCI0DNT
337	CALL	HANE340DNT	;EN YUKSEK DEGERLI HANELERIN 0 OLUP OLMADIĞINI SINAYAN ALT PROGRAMI CAGIR
338	BTFSS	STATUS, Z	;EYD HANELER 0 MI?
339	RETURN			;EVET, OYLEYSE ALT PROGRAMI BITIR VE UST PROGRAMA GERI DON
340	SWAPF	HANE12, W	;HAYIRSA, 1. VE 2. HANENIN YERINI DEGISTIR
341	ANDLW	0X0F		;1. HANEYI MASKELE
342	BTFSS	STATUS, Z	;2. HANE 0 MI?
343	RETURN			;HAYIRSA, ALT PROGRAMDAN BU DEGERLERLE GERI DON
344	RETLW	.10		;EVETSE W YE 10 YUKLEYIP GERI DON
345	
346HANE340DNT
347	MOVF	HANE34, W	;UST HANELERI W YE AL
348	BTFSS	STATUS, Z	;UST HANELER 0 MI?
349	RETURN			;HAYIRSA BURADAN GERI DON
350	RETLW	.10		;EVETSE W YE 10 YUKLEYIP GERI DON
351	END	;SON
Not

Yararlandığım kaynakta bu program PIC16C71 denetleyicisine göre yazılmıştır. Program benim tarafımdan PIC18F2550 denetleyicisinin donanım ve yazılım düzenine göre yeniden yazılmış ve hemen hemen her komut ve işlemin Türkçe açıklaması ilgili bölgede yapılmıştır ve olabildiğince Türkçeleştirilmiştir. Derleyicilerin karakter kodlama ve tanıma farklarından dolayı açıklamalarda İngilizce olan karakterlerin dışına çıkılmamıştır. Umarım kaynak arayan herkes için yararlı olur.

Lisans

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

İndirmeler

Yararlanılan Kaynaklar
AN557 Four Channel Digital Voltmeter with Display and Keyboard (İngilizce)

comments powered by Disqus