;==============SERİ PORT UYGULAMASI=============================================23.08.2004===========PAZARTESİ===============
;==============YARARMAN TARAFINDAN GELİŞTİRİLDİ==============================================================================
;____________________________________________________________________________________________________________________________
LIST P=16F84
INCLUDE "P16F84.INC"
;____________________________________________________________________________________________________________________________
;PROGRAMDA ZAMAN GECİKMESİ SAĞLANMASI İÇİN PIC'İN RAM'İNDE SAYAC ADLI BİR REGISTER TANIMLANIR
SAYAC EQU H'0C'
;DATA GÖNDERİLİMİ İÇİN PIC'İN RAM'İNDE GONDER ADLI BİR REGISTER TANIMLANIR
GONDER EQU H'0E'
;PIC'E GELEN VERİYİ KAYDETMEK İÇİN PIC'İN RAM'İNDE ARACI ADLI BİR REGISTER TANIMLANIR
ARACI EQU H'0F'
;
YEDEK EQU H'10'
;
SAYAC1 EQU H'11'
;
SAYAC2 EQU H'12'
;----------------------------------------------------------------------------------------------------------------------------
BSF STATUS,5 ;STATUS REGISTER'ININ 5. BİTİ 1 YAP, BANK1'E GEÇ.
CLRF TRISB ;PORTB'NİN BÜTÜN PİNLERİNİ ÇIKIŞ YAP.
MOVLW H'FF' ;H'FF' VERİSİNİ , W REGISTER'INA YÜKLE.
MOVWF TRISA ;W REGISTER'INI PORTA'YA YÜKLE BÜTÜN PİNLERİ GİRİŞ YAP.
BCF STATUS,5 ;STATUS REGISTER'ININ 5. BİTİNİ 0 YAP BANK0'A GEÇ.
CLRF PORTB ;PORTB'NİN BÜTÜN PİNLERİNİ 0 YAP.
;----------------------------------------------------------------------------------------------------------------------------
;============================================================================================================================
;----------------------------------------------------------------------------------------------------------------------------
;START BİTİ OKUNUP VERI1'E, GELEN DATAYI YÜKLEME İŞİ BAŞLATILIR
START
BTFSC PORTA,0 ;PORTA'NIN 0. BİTİNİ KONTROL ET.
GOTO START ;START'A GİT.
MOVLW H'20' ;VERİLERİN YÜKLENECEĞİ İLK REGISTER'I W REGISTER'INA YÜKLE.
MOVWF FSR ;W REGISTER'INI FSR REGISTER'INA YÜKLE.
YUKLE
CALL GECIKME ;BİLGİSAYARIN 9600bps HIZINI YAKALAMAK İÇİN BİR GECİKME SAĞLA.
CALL GECIKME1 ;AYRICA GELEN BİTİ TAM ORTASINDA OKUMAK İÇİN GECİKME SAĞLA.
;BÖYLECE VERİ KAYBI ENGELLENMİŞ OLUR.
CALL ALMA ;ALMA FONKSİYONUNU ÇAĞIR.
MOVF ARACI,0 ;ARACI'YI W REGISTER'INA YÜKLE.
MOVWF INDF ;INDF, O ANDAKİ ADRESİN YERİNE GEÇER.
INCF FSR ;FSR ADRESİ BİR ARTTIR.
;EN SON KAÇINCI ADRESTE KALDIĞINI ÖĞRENMEK İÇİN FSR YEDEKLENİR.
MOVF FSR,0 ;FSR REGISTER'INI W REGISTER'INA YÜKLE.
MOVWF YEDEK ;W REGISTER'INI YEDEK REGISTER'INA YÜKLE.
MOVLW H'21' ;H'21' VERİSİNİ , W REGISTER'INA YÜKLE.
MOVWF SAYAC2 ;W REGISTER'INI SAYAC2'YE YÜKLE.
DONGU3
BTFSS PORTA,0 ;PORTA'NIN 0. BİTİNİ KONTROL ET.
GOTO YUKLE ;CHIP'E GİT.
DECFSZ SAYAC2 ;SAYAC2'DEN 1 ÇIKAR.
GOTO DONGU3 ;DONGU3'E GİT.
GOTO YAZDIR ;YAZDIR'A GİT.
;****************************************************************************************************************************
ALMA ;"ALMA" FONKSİYONU
;****************************************************************************************************************************
;----------------------------------------------------------------------------------------------------------------------------
;GELEN VERİNİN 0. BİTİ OKUNUP TEST EDİLİR VE ARACI REGISTER'ININ 0. BİTİNE KAYDEDİLİR
BIT0
BTFSS PORTA,0 ;PORTA'NIN 0. BİTİNİ KONTROL ET.
GOTO SIFIR0 ;SIFIR0'A GİT.
BSF ARACI,0 ;ARACI REGISTER'ININ 0. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO BIT1 ;BIT1'E GİT.
SIFIR0
BCF ARACI,0 ;ARACI REGISTER'ININ 0. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
;GELEN VERİNİN 1. BİTİ OKUNUP TEST EDİLİR VE ARACI REGISTER'ININ 1. BİTİNE KAYDEDİLİR
BIT1
BTFSS PORTA,0 ;PORTA'NIN 0. BİTİNİ KONTROL ET.
GOTO SIFIR1 ;SIFIR1'E GİT.
BSF ARACI,1 ;ARACI REGISTER'ININ 1. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO BIT2 ;BIT2'YE GİT.
SIFIR1
BCF ARACI,1 ;ARACI REGISTER'ININ 1. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
;GELEN VERİNİN 2. BİTİ OKUNUP TEST EDİLİR VE ARACI REGISTER'ININ 2. BİTİNE KAYDEDİLİR
BIT2
BTFSS PORTA,0 ;PORTA'NIN 0. BİTİNİ KONTROL ET.
GOTO SIFIR2 ;SIFIR2'YE GİT.
BSF ARACI,2 ;ARACI REGISTER'ININ 2. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO BIT3 ;BIT3'E GİT.
SIFIR2
BCF ARACI,2 ;ARACI REGISTER'ININ 2. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FOKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
;GELEN VERİNİN 3. BİTİ OKUNUP TEST EDİLİR VE ARACI REGISTER'ININ 3. BİTİNE KAYDEDİLİR
BIT3
BTFSS PORTA,0 ;PORTA'NIN 0. BİTİNİ KONTROL ET.
GOTO SIFIR3 ;SIFIR3'E GİT.
BSF ARACI,3 ;ARACI REGISTER'ININ 3. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO BIT4 ;BIT4'E GİT.
SIFIR3
BCF ARACI,3 ;ARACI REGISTER'ININ 3. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
;GELEN VERİNİN 4. BİTİ OKUNUP TEST EDİLİR VE ARACI REGISTER'ININ 4. BİTİNE KAYDEDİLİR
BIT4
BTFSS PORTA,0 ;PORTA'NIN 0. BİTİNİ KONTROL ET.
GOTO SIFIR4 ;SIFIR4'E GİT.
BSF ARACI,4 ;ARACI REGISTER'ININ 4. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO BIT5 ;BIT5'E GİT.
SIFIR4
BCF ARACI,4 ;ARACI REGISTER'ININ 4. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
;GELEN VERİNİN 5. BİTİ OKUNUP TEST EDİLİR VE ARACI REGISTER'ININ 5. BİTİNE KAYDEDİLİR
BIT5
BTFSS PORTA,0 ;PORTA'NIN 0. BİTİNİ KONTROL ET.
GOTO SIFIR5 ;SIFIR5'E GİT.
BSF ARACI,5 ;ARACI REGISTER'ININ 5. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO BIT6 ;BIT6'YA GİT.
SIFIR5
BCF ARACI,5 ;ARACI REGISTER'ININ 5. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
;GELEN VERİNİN 6. BİTİ OKUNUP TEST EDİLİR VE ARACI REGISTER'ININ 6. BİTİNE KAYDEDİLİR
BIT6
BTFSS PORTA,0 ;PORTA'NIN 0. BİTİNİ KONTROL ET.
GOTO SIFIR6 ;SIFIR6'YA GİT.
BSF ARACI,6 ;ARACI REGISTER'ININ 6. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSIYONUNU ÇAĞIR.
GOTO BIT7 ;BIT7'YE GİT.
SIFIR6
BCF ARACI,6 ;ARACI REGISTER'ININ 6. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
;GELEN VERİNİN 7. BİTİ OKUNUP TEST EDİLİR VE ARACI REGISTER'ININ 7. BİTİNE KAYDEDİLİR
BIT7
BTFSS PORTA,0 ;PORTA'NIN 0. BİTİNİ KONTROL ET.
GOTO SIFIR7 ;SIFIR7'YE GİT.
BSF ARACI,7 ;ARACI REGISTER'ININ 7. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO STOP ;STOP'A GİT.
SIFIR7
BCF ARACI,7 ;ARACI REGISTER'ININ 7. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR
;----------------------------------------------------------------------------------------------------------------------------
;STOP BİTİ GELDİKTEN SONRA ARACI REGISTER'INA YÜKLEME İŞLEMİ SONLANIR
STOP
BSF PORTB,0 ;PORTB'NİN 0. BİTİNİ 1 YAP.
RETURN ;GERİ DÖN.
;----------------------------------------------------------------------------------------------------------------------------
;****************************************************************************************************************************
YAZDIR ;"YAZDIR" FONKSİYONU
;****************************************************************************************************************************
;============================================================================================================================
;PORTA'NIN 1. BİTİ KONTROL EDİLİR.EĞER BU BİT SIFIRSA RAM'DEKİ VERİLER GÖNDERİLMEYE BAŞLAR
CONTROL
BTFSC PORTA,1 ;PORTA'NIN 1. BİTİNİ KONTROL ET.
GOTO CONTROL ;CONTROL'A GİT.
MOVLW H'20' ;VERİLERİN OKUNACAĞI İLK REGISTER'I W REGISTER'INA YÜKLE.
MOVWF FSR ;W REGISTER'INI FSR REGISTER'INA YÜKLE.
MOVLW H'20' ;H'12' VERİSİNİ W REGISTER'İNE YÜKLE.
SUBWF YEDEK,1 ;YEDEK REGISTER'INDAN W REGISTER'İNİ ÇIKAR.
YENIBYTEYAZ
MOVF INDF,0 ;O ANDAKİ REGISTER'I W REGISTER'INA YÜKLE.
MOVWF GONDER ;W REGISTER'C
CALL GONDERME ;GONDERME FONKSİYONUNU ÇAĞIR
INCF FSR ;FSR ADRESİ 1 ARTTIR.
DECFSZ YEDEK,F ;YEDEK REGISTER'INDAN 1 ÇIKAR , YEDEK REGISTER'INA YÜKLE.
GOTO YENIBYTEYAZ ;YENİBYTEYAZ'A GİT.
GOTO SON ;SON'A GİT.
;GÖNDERME İŞİ BİTTİKTEN SONRA , PROGRAM RESETLENDİRİLMİŞ GİBİ BAŞTAN ÇALIŞTIRILIR
SON
GOTO START ;START'A GİT.
;============================================================================================================================
;****************************************************************************************************************************
GONDERME ;"GONDERME" FONKSİYONU
;****************************************************************************************************************************
;----------------------------------------------------------------------------------------------------------------------------
BCF PORTB,0 ;PORTB'NİN 0. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
BIT00
BTFSS GONDER,0 ;GONDER REGISTER'NIN 0. BİTİNİ KONTROL ET.
GOTO SIFIR00 ;SIFIR00'A GİT.
BSF PORTB,0 ;PORTB'NİN 0. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKMR FONKSİYONUNU ÇAĞIR.
GOTO BIT01 ;BIT01'E GİT.
SIFIR00
BCF PORTB,0 ;PORTB'NİN 0. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
BIT01
BTFSS GONDER,1 ;GONDER REGISTER'ININ 1. BİTİNİ KONTROL ET.
GOTO SIFIR01 ;SIFIR01'E GİT.
BSF PORTB,0 ;PORTB'NİN 0.BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO BIT02 ;BIT02'YE GİT.
SIFIR01
BCF PORTB,0 ;PORTB'NİN 0. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
BIT02
BTFSS GONDER,2 ;GONDER REGISTER'ININ 2. BİTİNİ KONTROL ET.
GOTO SIFIR02 ;SIFIR02'YE GİT.
BSF PORTB,0 ;PORTB'NİN 0. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO BIT03 ;BIT03'E GİT.
SIFIR02
BCF PORTB,0 ;PORTB'NİN 0. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
BIT03
BTFSS GONDER,3 ;GONDER REGISTER'ININ 3. BİTİNİ KONTROL ET.
GOTO SIFIR03 ;SIFIR03'E GİT.
BSF PORTB,0 ;PORTB'NİN 0. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO BIT04 ;BIT04'E GİT.
SIFIR03
BCF PORTB,0 ;PORTB'NİN 0. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
BIT04
BTFSS GONDER,4 ;GONDER REGISTER'ININ 4. BİTİNİ KONTROL ET.
GOTO SIFIR04 ;SIFIR04'E GİT.
BSF PORTB,0 ;PORTB'NİN 0. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO BIT05 ;BIT05'E GİT.
SIFIR04
BCF PORTB,0 ;PORTB'NİN 0. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU YAP.
;----------------------------------------------------------------------------------------------------------------------------
BIT05
BTFSS GONDER,5 ;GONDER REGISTER'ININ 5. BİTİNİ KONTROL ET.
GOTO SIFIR05 ;SIFIR05'E GİT.
BSF PORTB,0 ;PORTB'NİN 0. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO BIT06 ;BIT06'YA GİT.
SIFIR05
BCF PORTB,0 ;PORTB'NİN 0. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
BIT06
BTFSS GONDER,6 ;GONDER REGISTER'ININ 6. BİTİNİ KONTROL ET.
GOTO SIFIR06 ;SIFIR06'YA GİT.
BSF PORTB,0 ;PORTB'NİN 0. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO BIT07 ;BIT07'YE GİT.
SIFIR06
BCF PORTB,0 ;PORTB'NİN 0. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
BIT07
BTFSS GONDER,7 ;GONDER REGISTER'ININ 7. BİTİNİ KONTROL ET.
GOTO SIFIR07 ;SIFIR07'YE GİT.
BSF PORTB,0 ;PORTB'NİN 0. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
GOTO STOP1 ;STOP1'E GİT.
SIFIR07
BCF PORTB,0 ;PORTB'NİN 0. BİTİNİ 0 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
;----------------------------------------------------------------------------------------------------------------------------
STOP1
BSF PORTB,0 ;PORTB'NİN 0. BİTİNİ 1 YAP.
CALL GECIKME ;GECIKME FONKSİYONUNU ÇAĞIR.
RETURN ;GERİ DÖN.
;----------------------------------------------------------------------------------------------------------------------------
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;GECİKMELER BÖLÜMÜ
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;****************************************************************************************************************************
GECIKME ;"GECIKME" FONKSİYONU
;****************************************************************************************************************************
;GECIKME = 9600 bps' LİK GECİKME
MOVLW H'21' ;H'21' VERİSİNİ , W REGISTER'INA VERİSİNİ YÜKLE.
MOVWF SAYAC ;W REGISTER'INI , SAYAC REGISTER'INA YÜKLE.
DONGU1
DECFSZ SAYAC,F ;SAYAC REGISTER'INDAN 1 ÇIKAR , SAYAC REGISTER'INA YÜKLE.
GOTO DONGU1 ;DONGU1'E GİT.
RETURN ;GERİ DÖN.
;****************************************************************************************************************************
GECIKME1 ;"GECIKME1" FONKSİYONU
;****************************************************************************************************************************
;GECIKME1 = BİTLERİ ORTASINDA OKUMAK İÇİN GECİKME
MOVLW H'05' ;H'05' VERİSİNİ , W REGISTER'INA YÜKLE.
MOVWF SAYAC ;W REGISTER'INI , SAYAC REGISTER'INA YÜKLE.
DONGU2
DECFSZ SAYAC,F ;SAYAC REGISTER'INDAN 1 ÇIKAR , SAYAC REGISTER'INA YÜKLE.
GOTO DONGU2 ;DONGU2'YE GİT.
RETURN ;GERİ DÖN.
;END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_END_
END ;PROGRAM BİTTİ.