bu da program - MOdderatorlar kusura bakmasın ama .asm veya txt tek dosya olarak upload edemedim
;PREAMBLE:101010110
;8 BİT DATA:1D01D01D01D01D01D01D01D0
;SONLANDIRMA:1110
;TÜM DATA:101010110 1D01D01D01D01D01D01D01D0 1110
;HERBİR 1 VE 0 SÜRESİ 10MS
#INCLUDE P16F628.INC
BITSAYAC EQU H'20'
FLAG EQU H'21'
CIKIS_ZAMANLAYICI EQU H'22'
FLAG2 EQU H'23'
IN_RECEIVE EQU 0 ;VERI ALINMAYA BAŞLAYINCA SET OLUR FLAG2'NIN BIT0
;FLAG
;76543210
; 00 ----PREAMBLE \
; 01 ----KOD \MOD
; 10 ----SONLANDIRMA /
; 00 ------BİR \
; 01 ------DATA \ALTMOD (KOD BÖLÜMÜ İÇİN)
; 10 ------SIFIR /
LAST_LOOK EQU 7 ;FLAG BIT7 verinin yükselen kenarında set olur
HATA EQU 6 ;FLAG BIT6 verı alınırken hata oluştuğu an set olur,
;senkronizasyonu sağlamak için veri doğru olunca da set olur
IN_OUTPUT EQU 5 ;FLAG BIT5 çıkış set olunca set olur
KOD_PATTERN EQU H'24'
CIKIS_ZAMANLAYICI1 EQU H'25'
CIKIS EQU 0 ;PORTA BIT0
VERI EQU 1 ;PORTA BIT1
; GELEN_KOD EQU B'10100011'
GELEN_KOD EQU H'26'
ORG 000
GOTO MAIN
ORG 004
GOTO INTERRUPT
ORG H'10'
MAIN
MOVLW 0x07 ;Turn comparators off and
MOVWF CMCON ;enable pins for I/O
;functions
clrf ccp1con ;CCP MODÜLÜ KAPATILDI
BCF STATUS, RP1
BSF STATUS, RP0 ;Select Bank1
MOVLW B'11111110' ;Value used to initialize
MOVWF TRISA;data direction
MOVLW H'FF'
MOVWF TRISB
MOVLW B'00000101' ;64 MİKROSANİYEDE BİR ARTAR, PUL-UP ENABLE
MOVWF OPTION_REG
BCF STATUS,RP0
CLRF PORTA
CLRF FLAG2
CLRF CIKIS_ZAMANLAYICI
CLRF CIKIS_ZAMANLAYICI
CLRF FLAG
MOVLW D'9'
MOVWF BITSAYAC ;PREAMBLE SINYALİ İÇİN SAYAÇ AYARLA
; MOVLW D'100' ;TMR0'I 10MS'YE AYARLA
; MOVLW D'225' ;2MS'YEYE AYARLA
MOVLW D'240' ;1MS'YEYE AYARLA
; MOVLW D'248' ;500 MİKOSANİYE
MOVWF TMR0
MOVLW H'A0'
MOVWF INTCON ;GIE:1 TMR0:1
EDGE_CHECK
BTFSS PORTA,VERI
GOTO CHECK
BTFSC FLAG,LAST_LOOK
GOTO EDGE_CHECK
BCF INTCON,GIE
BSF FLAG,LAST_LOOK
BSF FLAG2,IN_RECEIVE
movlw b'11111100'
andwf flag,1
MOVLW D'9' ;HATA OLUNCA
MOVWF BITSAYAC ;PREAMBLE SINYALİ İÇİN SAYAÇ AYARLA
;MOVLW D'178' ;TMR0:5ms AYARLA
; MOVLW D'240' ;1MS'YEYE AYARLA
MOVLW D'248' ;500 MİKROSANİYE
; MOVLW D'252' ;256 MİKROSANİYE
MOVWF TMR0
BSF INTCON,GIE
MOVF PORTB,0
MOVWF GELEN_KOD
;************************HATA OLMADIĞI SÜRECE BURADA LOOP YAPAR**********
LOOP
BTFSS FLAG,HATA
GOTO LOOP
;**************************************************************************
MOVF PORTB,0
MOVWF GELEN_KOD
BCF FLAG,HATA
BCF FLAG2,IN_RECEIVE
GOTO EDGE_CHECK
CHECK
BCF FLAG,LAST_LOOK
GOTO EDGE_CHECK
;*******************İNTERRUPT RUTİNİ (10MS)**********************
ORG H'50'
INTERRUPT
BCF INTCON,T0IF
BTFSS FLAG,IN_OUTPUT
GOTO SDEVAM
DECFSZ CIKIS_ZAMANLAYICI
GOTO SDEVAM
DECFSZ CIKIS_ZAMANLAYICI1
GOTO SDEVAM
BCF FLAG,IN_OUTPUT
BCF PORTA,CIKIS
SDEVAM
BTFSS FLAG2,IN_RECEIVE
GOTO TIMERAYARLA
MOVF FLAG,0
ANDLW B'00000011' ;EĞER PREAMBLE MODDA İSE DEVAM ET
BTFSS STATUS,Z ;DEĞİLSE KOD MODUNA BAK
GOTO KOD
;********************PREAMBLE KONTROL************
MOVLW D'2'
XORWF BITSAYAC,0
BTFSS STATUS,Z
GOTO PREDEVAM
GOTO ON
PREDEVAM
MOVLW D'1'
XORWF BITSAYAC,0
BTFSC STATUS,Z
GOTO SAYACKONTROL
BTFSC BITSAYAC,0
GOTO ON
GOTO OFF
;*************************************************
ON
BTFSS PORTA,VERI
GOTO HATALI
GOTO SAYACKONTROL
OFF
BTFSC PORTA,VERI
GOTO HATALI
GOTO SAYACKONTROL
;******************KOD KONTROL*********************
KOD
BTFSS FLAG,0 ;KOD MODUNDA İSE DEAM ET
GOTO SONLANDIR ;DEĞİLSE SONLANDIRMA MODUNA GEÇ
MOVF FLAG,0
ANDLW B'00001100'
BTFSS STATUS,Z ;BIR ALTMODUNDA İSE BIRI AL
GOTO KOD1 ;DEĞİSE DATAYA GİT
BSF FLAG,2 ;DATA ALTMODUNA GEÇ
GOTO ON
KOD1
BTFSS FLAG,2
GOTO ZERO ;DATA ALTMODUNDA İSE DATAYI AL
BSF STATUS,C ;DEĞİLSE SIFIRI ALMAYA GİT
BTFSC PORTA,VERI
GOTO GEC
BCF STATUS,C
GEC
RRF KOD_PATTERN
BCF FLAG,2 ;SIFIR ALTMODUNA GEÇ
BSF FLAG,3
GOTO SAYACKONTROL
ZERO
BCF FLAG,3 ;BİR ALTMODUNA GEÇ
GOTO OFF
;************************************************************
SONLANDIR
MOVF BITSAYAC,0
XORLW D'1'
BTFSS STATUS,Z
GOTO ON
GOTO OFF
;************************************************************
SAYACKONTROL
DECFSZ BITSAYAC
GOTO TIMERAYARLA
BTFSC PORTA,VERI ;EN SON BITIN SIFIR OLMASI GEREKIR
GOTO HATALI ;DEĞİLSE HATALIDIR
MOVF FLAG,0
ANDLW B'00000011' ;MOD KONTROL
BTFSS STATUS,Z ;EĞER PREAMLE MODUNDA İSE
GOTO KODMODU
MOVLW D'24'
MOVWF BITSAYAC
BSF FLAG,0 ;KOD MODUNA GEÇ
GOTO TIMERAYARLA
KODMODU
BTFSS FLAG,0
GOTO SONLANDIRMODU ;EĞER KOD MODUNDA İSE
MOVLW D'4'
MOVWF BITSAYAC
BCF FLAG,0 ;SONLANDIR MODUNA GEÇ
BSF FLAG,1
GOTO TIMERAYARLA
SONLANDIRMODU
MOVLW D'9' ;EĞER SONLANDIR MODUNDA İSE
MOVWF BITSAYAC
BCF FLAG,1 ;PREAMBLE MODUNA GEC
MOVF KOD_PATTERN,0
XORWF GELEN_KOD,0
BTFSS STATUS,Z
GOTO HATALI ;VERİ DOĞRU İSE ÇIKIŞI SET ET VE 1 SN AKTİF KALMASINI SAĞLA VE YENİ GELEN VERİ İÇİN
BSF FLAG,IN_OUTPUT ;TEKRAR SENKRONİZASYONU BAŞLATMAK İÇİN HATA BİTİNİ SET ET (HATA BİTİ SET OLUNCA
; MOVLW D'100' ;VERİNİN İLK YÜKSELEN KENARINDA TIMER 5MS'YEYE AYARLANIR
; MOVLW D'255'
MOVLW D'250'
MOVWF CIKIS_ZAMANLAYICI
MOVLW D'4'
MOVWF CIKIS_ZAMANLAYICI1
BSF PORTA,CIKIS
GOTO HATALI
TIMERAYARLA
; MOVLW D'100' ;10 ms AYARLA
; MOVLW D'225' ;2MS'YEYE AYARLA
MOVLW D'240' ;1MS'YEYE AYARLA
; MOVLW D'248' ;500 MİKOSANİYE
MOVWF TMR0
RETFIE
HATALI
BSF FLAG,HATA ;GELEN BILGININ HERHANGİ BİR BÖLÜMÜ HATALI İSE YADA ALINAN VERI PAKETİ DOĞRU İSE
GOTO TIMERAYARLA ;TIMER 5ms'YEYE AYARLANIR VE İLK YÜKSELEN KENARDA
;TEKRAR KONTROL BAŞLAR
END