Ü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
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
; 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.
; PIC18F2550 Configuration Bit Settings
; Assembly source line config statements
LIST P=18F2550
#include "p18f2550.inc"
; CONFIG1L
CONFIG PLLDIV = 1 ; PLL Prescaler Selection bits (No prescale (4 MHz oscillator input drives PLL directly))
CONFIG CPUDIV = OSC1_PLL2 ; System Clock Postscaler Selection bits ([Primary Oscillator Src: /1][96 MHz PLL Src: /2])
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)
; CONFIG1H
CONFIG FOSC = INTOSCIO_EC ; Oscillator Selection bits (Internal oscillator, port function on RA6, EC used by USB (INTIO))
CONFIG FCMEN = OFF ; Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
CONFIG IESO = OFF ; Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)
; CONFIG2L
CONFIG PWRT = ON ; Power-up Timer Enable bit (PWRT enabled)
CONFIG BOR = ON ; Brown-out Reset Enable bits (Brown-out Reset enabled in hardware only (SBOREN is disabled))
CONFIG BORV = 3 ; Brown-out Reset Voltage bits (Minimum setting 2.05V)
CONFIG VREGEN = OFF ; USB Voltage Regulator Enable bit (USB voltage regulator disabled)
; CONFIG2H
CONFIG WDT = OFF ; Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
CONFIG WDTPS = 32768 ; Watchdog Timer Postscale Select bits (1:32768)
; CONFIG3H
CONFIG CCP2MX = ON ; CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
CONFIG PBADEN = OFF ; PORTB A/D Enable bit (PORTB<4:0> pins are configured as digital I/O on Reset)
CONFIG LPT1OSC = OFF ; Low-Power Timer 1 Oscillator Enable bit (Timer1 configured for higher power operation)
CONFIG MCLRE = ON ; MCLR Pin Enable bit (MCLR pin enabled; RE3 input pin disabled)
; CONFIG4L
CONFIG STVREN = ON ; Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
CONFIG LVP = OFF ; Single-Supply ICSP Enable bit (Single-Supply ICSP enabled)
CONFIG XINST = OFF ; Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))
; CONFIG5L
CONFIG CP0 = OFF ; Code Protection bit (Block 0 (000800-001FFFh) is not code-protected)
CONFIG CP1 = OFF ; Code Protection bit (Block 1 (002000-003FFFh) is not code-protected)
CONFIG CP2 = OFF ; Code Protection bit (Block 2 (004000-005FFFh) is not code-protected)
CONFIG CP3 = OFF ; Code Protection bit (Block 3 (006000-007FFFh) is not code-protected)
; CONFIG5H
CONFIG CPB = OFF ; Boot Block Code Protection bit (Boot block (000000-0007FFh) is not code-protected)
CONFIG CPD = OFF ; Data EEPROM Code Protection bit (Data EEPROM is not code-protected)
; CONFIG6L
CONFIG WRT0 = OFF ; Write Protection bit (Block 0 (000800-001FFFh) is not write-protected)
CONFIG WRT1 = OFF ; Write Protection bit (Block 1 (002000-003FFFh) is not write-protected)
CONFIG WRT2 = OFF ; Write Protection bit (Block 2 (004000-005FFFh) is not write-protected)
CONFIG WRT3 = OFF ; Write Protection bit (Block 3 (006000-007FFFh) is not write-protected)
; CONFIG6H
CONFIG WRTC = OFF ; Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) are not write-protected)
CONFIG WRTB = OFF ; Boot Block Write Protection bit (Boot block (000000-0007FFh) is not write-protected)
CONFIG WRTD = OFF ; Data EEPROM Write Protection bit (Data EEPROM is not write-protected)
; CONFIG7L
CONFIG EBTR0 = OFF ; Table Read Protection bit (Block 0 (000800-001FFFh) is not protected from table reads executed in other blocks)
CONFIG EBTR1 = OFF ; Table Read Protection bit (Block 1 (002000-003FFFh) is not protected from table reads executed in other blocks)
CONFIG EBTR2 = OFF ; Table Read Protection bit (Block 2 (004000-005FFFh) is not protected from table reads executed in other blocks)
CONFIG EBTR3 = OFF ; Table Read Protection bit (Block 3 (006000-007FFFh) is not protected from table reads executed in other blocks)
; CONFIG7H
CONFIG EBTRB = OFF ; Boot Block Table Read Protection bit (Boot block (000000-0007FFh) is not protected from table reads executed in other blocks)
CBLOCK 0X00
GNL1
GNL2
GNL3
SAY
HANE34
HANE12
ENDC
ORG 0X0000
BRA BASLA
ORG 0X0008
BRA KESME_SERVIS
; 7 PARCALI GOSTERGE SURME KODLARI TABLOSU
; BILGI: PIC18F/C serisinde program sayicinin degeri donanimsal duzenlemeden dolayi
; 2ser olarak artmaktadir yani: PCL = PCL + 2. Bu yuzden PIC16F/C serisine gore
; cevrim tablosu yazilmissa; offset degerini PCL e eklemeden once 2 ile carpmak gerekir.
; PIC18 Serisi carpma islemini yapabilecek donanima ve komuta (MULWF, MULLW) sahiptir
; Nitekim Tablodan deger almadan once ofset degeri once 2 ile carpilmis ardindan
; PCL e eklenmistir. Ofset = ofset x 2 (MULLW 0X02).
;Carpma isleminden sonra sonuc PRODL ve PRODH yazmaclarinda saklanir; W de saklanmaz
; ve hiç bir durum bayragi etkilenmez. Dolayisiyla sonuc PRODx dosyalarindan WREG
; dosyasina tasinmalidir.
BCD_7PARCALIYA
MULLW 0X02 ;OFSET DEGERINI 2 ILE CARP
MOVF PRODL, W ;CARPMA ISLEMININ SONUCUNU W YE AL
ADDWF PCL ;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 0X67 ;9 ICIN LED SURUCU
RETLW 0X00 ;BOS ICIN LED SURUCU
BASLA
MOVLW 63
MOVWF OSCCON
CALL PORTLARI_KUR ;PORTLARI KURAN ALT PROGRAMI CAGIR
CALL SUREVCILERI_KUR ;SUREVCIYI KURAN ALT PROGRAMI CAGIR
DON
GOTO DON ;KESME OLANA KADAR DONGUYE GIR
; PORTLARIN KURULUMU VE A/D DUZENLEMELERI
PORTLARI_KUR
MOVLW 0X0F
MOVWF ADCON1 ;RA0-3 DIJITAL G/C
MOVLW 0X07
MOVWF CMCON ;RA0-3 KARSILASTIRICI GIRISLERI ETKISIZ RA= DIJITAL G/C
CLRF TRISA ;RA = CIKIS
CLRF TRISB ;RB = CIKIS
CLRF PORTA
CLRF PORTB
BSF PORTA,3 ;4. HANEYI BATIRMA ETKIN
RETURN
; SUREVCILERIN KURULUMU VE DUZENLENMELERI
SUREVCILERI_KUR
CLRF HANE34
CLRF HANE12
MOVLW 0X44
MOVWF T0CON ;ONOLCEKCI 1/32 OLCEGINDE
MOVLW 0X20
MOVWF INTCON ;TIMER0 KESMESI ETKIN
MOVLW .96
MOVWF TMR0L ;DOSYAYA HESAPLANAN 96 ONDEGERINI YUKLE
BSF T0CON, TMR0ON ;TIMER0 I ETKINLESTIR
BSF INTCON, GIE ;KESMELERI ETKINLESTIR
RETURN
; KESME SERVISI
KESME_SERVIS
BTFSC INTCON, T0IF ;TIMER0 KESMESI MI?
BRA TMR0SERVIS ;EVET, TIMER0 SERVISINE DALLAN
MOVLW 0X20
MOVWF INTCON ;HAYIR, BAYRAKLARI TEMIZLE, TIMER0 KESMESINI KUR VE
RETFIE ;KESME SERVISINDEN CIK
; TIMER0 KESME SERVISI
TMR0SERVIS
MOVLW .96
MOVWF TMR0L ;TMR0L DOSYASINI YENIDEN ONDEGERLE YUKLE
BCF INTCON, T0IF ;TIMER0 KESME BAYRAGINI TEMIZLE
CALL SUREART ;HANE DEGERLERINI GUNCELLEME ALT PROGRAMINI CAGIR
CALL GSTRGGUNCELLE ;GOSTERGELERI GUNCELLEME ALT PROGRAMINI CAGIR
RETFIE
;7-PARCALI GOSTERGE HER 1 (200 x 5ms) SANIYEDE BIR ARTTIRILIR
; SURE DEGERLERINI GUNCELLEME ALT PROGRAMI
SUREART
INCF SAY, W ;SAY DOSYA DEGERINI 1 ARTIR SONRA W YE KOPYALA
XORLW .200 ;200 ILE KARSILASTIR (1 SANIYE OLUP OLMADIGINI SINA)
BTFSC STATUS, Z ;DEGERLER AYNI MI? (AYNI ISE SONUC 0 VE Z BAYRAGI 1 OLUR)
BRA SUREARTYAP ;EVET, SURE ARTIRMA ALT PROGRAMINA DALLAN
INCF SAY, F ;HAYIR, OYLEYSE SAY DOSYA DEGERINI ARTIR VE GERI DON
RETURN ;TMR0SERVIS KESME ALT PROGRAMINA GERI DON
; SURE DEGERLERININ ARTIRILMASININ YAPILDIGI ALT PROGRAM
SUREARTYAP
CLRF SAY ;SAY DOSYASINI YENIDEN SAYMA ICIN SIFIRLA
INCF HANE12, W ;HANE12 DOSYA DEGERINI 1 ARTIR VE W YE KOPYALA
ANDLW 0X0F ;2. HANEYI MASKELE
XORLW 0X0A ;10 ILE KARSILASTIR
BTFSC STATUS,Z ;1. HANE 10 A ULASTI MI?
BRA IKINCIHANEART ;EVET, OYLEYSE 2. HANEYI ARTIRMA ALT PROGRAMINA DALLAN
INCF HANE12, F ;HAYIR, 1. HANENIN DEGERINI 1 ARTIR VE DOSYAYA SAKLA
RETURN ;SUREART ALT PROGRAMINA GERI DON
; 2. HANENIN ARTIRMA ISLEMININ YAPILDIGI ALT PROGRAM
IKINCIHANEART
SWAPF HANE12, W ;1. HANE ILE 2. HANENIN YERINI DEGISTIR VE W YE KOPYALA
ANDLW 0X0F ;1. HANEYI MASKELE
ADDLW .1 ;2. HANEYI 1 ARTIR
MOVWF HANE12 ;ARDINDAN HANE12 DOSYASINA GERI SAKLA
SWAPF HANE12, F ;1 VE 2. HANEYI ESKI YERINE AL
XORLW 0X0A ;2. HANE DEGERINI 10 ILE KARSILASTIR
BTFSC STATUS, Z ;2. HANE 10 A ULASTI MI?
BRA UCUNCUHANEART ;EVET, OYLEYSE 3. HANEYI ARTIRMA ALT PROGRAMINA DALLAN
RETURN ;HAYIR, OYLEYSE SUREART ALT PROGRAMINA GERI DON
; 3. HANENIN ARTIRMA ISLEMININ YAPILDIGI ALT PROGRAM
UCUNCUHANEART
CLRF HANE12 ;1. VE 2. HANEYI TEMIZLE
INCF HANE34, W ;3. HANEYI 1 ARTIR SONRA W YE KOPYALA
ANDLW 0X0F ;4. HANEYI MASKELE
XORLW 0X0A ;3. HANE DEGERINI 10 ILE KARSILASTIR
BTFSC STATUS, Z ;3. HANE 10 A ULASTI MI?
BRA DORDUNCUHANEART ;EVET, OYLEYSE 4. HANEYI ARTIRMA ALT PROGRAMINA GIT
INCF HANE34, F ;HAYIR, OYLEYSE 3. HANEYI 1 ARTIR VE DOSYAYA SAKLA
RETURN ;HAYIR, OYLEYSE SUREART ALT PROGRAMINA GERI DON
; 4. HANENIN ARTIRMA ISLEMININ YAPILDIGI ALT PROGRAM
DORDUNCUHANEART
SWAPF HANE34, W ;3. HANE ILE 4. HANENIN YERINI DEGISTIR VE W YE KOPYALA
ANDLW 0X0F ;3. HANEYI MASKELE
ADDLW .1 ;4. HANEYE 1 EKLE
MOVWF HANE34 ;ARDINDAN HANE34 DOSYASINA GERI SAKLA
SWAPF HANE34 ;3 VE 4. HANELERI YERLERINE AL
XORLW 0X0A ;4. HANE DEGERINI 10 ILE KARSILASTIR
BTFSC STATUS, Z ;4. HANE 10 A ULAŞTI MI?
CLRF HANE34 ;EVET, OYLEYSE 3 VE 4. HANELERI SIFIRLA
RETURN ;HAYIR, ARTIRMADAN SONRA SUREART ALT PROGRAMINA GERI DON
;___________________________________________________________________________________________
;___________________________________________________________________________________________
; GOSTERGELERIN GUNCELLEME ISLEMININ YAPILDIGI ALT PROGRAM BLOGU
GSTRGGUNCELLE
MOVF PORTA, W ;SON BATIRMA(SINK) DURUMUNU W YE KOPYALA
CLRF PORTA
ANDLW 0X0F ;RA0-3 HARICINI MASKELE
MOVWF GNL1 ;SON BATIRMA DURUMUNU GECICI OLARAK GNL1 DOSYASINDA SAKLA
BSF GNL1, 4 ;1 VE 2. HANE GOSTERGELERI BATIRMA ICIN ONKURMA
RRCF GNL1, F ;SONRAKI BATIRMA DEGERINI BELIRLE
BTFSS STATUS, C ;TASMA BITI 1 MI?
BCF GNL1, 3 ;HAYIR, OYLEYSE ONKURMAYI SIFIRLA
BTFSC GNL1, 0 ;EVET, OYLEYSE 4. HANEYE BAK 1 MI?
BRA DORDUNCUYUGUNCELLE ;EVET, 4. GOSTERGEYI GUNCELLEME ALT PROGRAMINA DALLAN
BTFSC GNL1, 1 ;HAYIR, YOKSA 3. HANE MI 1?
BRA UCUNCUYUGUNCELLE ;EVET, OYLEYSE 3. GOSTERGEYI GUNCELLEME ALT PROGRAMINA DALLAN
BTFSC GNL1, 2 ;HAYIR, YOKSA 2. HANE MI 1?
BRA IKINCIYIGUNCELLE ;EVET, OYLEYSE 2. GOSTERGEYI GUNCELLEME ALT PROGRAMINA DALLAN
; 1. GOSTERGEYI GUNCELLEME ALT PROGRAMI
BIRINCIYIGUNCELLE
MOVF HANE12, W ;HANE12 YI W YE AL
ANDLW 0X0F ;2. HANEYI MASKELE
BRA GSTRGCIKIS ;GOSTERGEYI ETKINLESTIR VE GUNCELLEME ALT PROGRAMINA DALLAN
; 2. GOSTERGEYI GUNCELLEME ALT PROGRAMI
IKINCIYIGUNCELLE
CALL IKINCI0DNT ; 2. HANENIN SIFIR OLUP OLMADIGINI DENETLEYEN ALT PRORAMI CAGIR
BTFSS STATUS, Z ;2, 3, VE 4. HANELER 0 MI?
SWAPF HANE12, W ;HAYIR, OYLEYSE 1. VE 2. HANENIN YERINI DEGISTIR VE BURADAN DEVAM ET
ANDLW 0X0F ;EVETSE, 2. HANEYI MASKELE HAYIRSA 1. HANEYI MASKELE
BRA GSTRGCIKIS ;GOSTERGEYI ETKINLESTIR VE GUNCELLEME ALT PROGRAMINA DALLAN
; 3. GOSTERGEYI GUNCELLEME ALT PROGRAMI
UCUNCUYUGUNCELLE
CALL HANE340DNT ;EN YUKSEK DEGERLI HANELERIN 0 OLUP OLMADIĞINI SINAYAN ALT PROGRAMI CAGIR
BTFSS STATUS, Z ;EYD HANELER 0 MI?
MOVF HANE34, W ;HAYIRSA ONCE HANE34 U W YE AL OYLE DEVAM ET
ANDLW 0X0F ;EVETSE YUKARIDAKI KOMUTU ATLA, 4. HANYI MASKELE
BRA GSTRGCIKIS ;GOSTERGEYI ETKINLESTIR VE GUNCELLEME ALT PROGRAMINA DALLAN
; 4. GOSTERGEYI GUNCELLEME ALT PROGRAMI
DORDUNCUYUGUNCELLE
SWAPF HANE34, W ;3 VE 4. HANENIN YERINI DEGISTIR
ANDLW 0X0F ;3. HANEYI MASKELE
BTFSC STATUS, Z ;4. HANE 0 MI?
MOVLW 0X0A ;EVET, OYLEYSE W YE 10 YUKLE VE DEVAM ET
;_______________________________________________________________________________________
;_______________________________________________________________________________________
; GOSTERGELERIN CIKISININ YAPILDIGI ALT PROGRAM BLOGU
GSTRGCIKIS
CALL BCD_7PARCALIYA ;BCD YI 7 PARCALI GOSTERGEYE KODLAYAN ALT PROGRAMI CAGIR
MOVWF PORTB ;GOSTERGE DEGERLERINI PORTB DEN CIKAR
MOVF GNL1, W ;BATIRMA DEGERLERINI YEDEKTEN W YE AL
MOVWF PORTA ;BATIRMA DEGERLERINI PORTA YA GERI YUKLE
RETURN ;TMR0SERVIS KESME ALT PROGRAMINA GERI DON
; SIFIR DENETLEME ALT PROGRAM BLOGU
IKINCI0DNT
CALL HANE340DNT ;EN YUKSEK DEGERLI HANELERIN 0 OLUP OLMADIĞINI SINAYAN ALT PROGRAMI CAGIR
BTFSS STATUS, Z ;EYD HANELER 0 MI?
RETURN ;EVET, OYLEYSE ALT PROGRAMI BITIR VE UST PROGRAMA GERI DON
SWAPF HANE12, W ;HAYIRSA, 1. VE 2. HANENIN YERINI DEGISTIR
ANDLW 0X0F ;1. HANEYI MASKELE
BTFSS STATUS, Z ;2. HANE 0 MI?
RETURN ;HAYIRSA, ALT PROGRAMDAN BU DEGERLERLE GERI DON
RETLW .10 ;EVETSE W YE 10 YUKLEYIP GERI DON
HANE340DNT
MOVF HANE34, W ;UST HANELERI W YE AL
BTFSS STATUS, Z ;UST HANELER 0 MI?
RETURN ;HAYIRSA BURADAN GERI DON
RETLW .10 ;EVETSE W YE 10 YUKLEYIP GERI DON
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.