MPASM - yardm

Cenator

Üye
Katılım
11 May 2007
Mesajlar
7
Puanları
1
Yaş
40
MPASM de acaip bir hata ile karşı karşıya kaldım
forumlarda aradaım ama bi yerde bulamadım buna benzerini
yardım lütfen:confused:
 

Ekli dosyalar

  • hata.JPG
    hata.JPG
    18.6 KB · Görüntüleme: 22
Bu hatayı help de arat, yada programı buraya koy belki daha net birşeyler söylenebilir.
 
programı derken .asm yi kastettiysen ekledim .ama hel demiş isem de bi şey bulamadı gene .MPLAB son versionu - onu da freware olduğunu biliyorum :)
yine de yardım çağrılarıma cevap verdiğiniz içi teşekkürler
 
Son düzenleme:
Hayır, demek istediğim assembly de yazdığın programı foruma yazabilme imkanın varsa birde ben göz gezdirmek isterdim. :)
 
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
 
Bazı yazmaçları küçük harfle yazmışsın şimdi derleme yapıyor fakat DECFSZ ve RRF komutlarında işlemin hangi yazmaca yükleneceğini belirtmemişsin bu yüzden default değeri kabul ederek derliyor.






;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
 
çok teşekkür ederim :) yani biraz daha dikkatli olmam lazımmış
yardım icin çok teşekkür gene
 

Forum istatistikleri

Konular
129,173
Mesajlar
923,922
Kullanıcılar
451,525
Son üye
ituran20

Yeni konular

Çevrimiçi üyeler

Geri
Üst