deroder
Üye
- Katılım
- 13 Tem 2011
- Mesajlar
- 3
- Puanları
- 1
- Yaş
- 38
Başlıkta da belirttiğim gibi pic 16F877A'nın tock1 girişine gelen kare dalgayı düzgün saydırabiliyorum ama pic'in çıkışında saydığım değeri 7 segmente aktarırken 1'ler basamağı yanıp sönüyor sonra onlar basamağı yanıp sönüyor bu şekilde binler basamağına kadar bu flaş sorunu devam ediyor.
Konuyla ilgili video kaydı :
Projenin asm kodu :
Ben sorunun tara göster kısmında olduğunu düşünüyorum. Bakarsanız sevinirim. Amacın 4 7segmentin aynı anda yanık kalarak saydırılması.
Konuyla ilgili video kaydı :
Projenin asm kodu :
Kod:
;--------Harici pulse ile numeratör projesi-----------
LIST P=16F877A
INCLUDE "P16F877A.INC"
__CONFIG h'3F31' ;__CONFIG b'11111100110001'
;__CONFIG _CP_OFF &_WDT_OFF & _PWRT_ON & _XT_OSC &
;_BODEN_OFF &_LVP_OFF & _CPD_OFF
;------DEĞİŞKENLERİN TANIMLANMASI-------
SAYAC1 EQU h'20' ;SAYAC1 REGISTERININ ADRESİ
SAYAC2 EQU h'21' ;SAYAC2 REGISTERININ ADRESİ
BIRLER_BASAM EQU h'22'
ONLAR_BASAM EQU h'23'
YUZLER_BASAM EQU h'24'
BINLER_BASAM EQU h'25'
;------PROGRAM BELLEĞİNİN YAPISI-------
ORG h'00' ;RESET VEKTÖRÜ
CLRF PCLATH ;PROGRAM BELLEĞİNİN İLK 2KB'A KADAR OLAN BÖLÜMÜ
GOTO BASLA ;ANA PROGRAMIN BAŞLANGICI OLAN BAŞLAYA GİT
ORG h'04' ;İNTERRUPT ADRESİ YÖNLENDİRİCİSİ
GOTO KESME_PROG ;KESME ALT PROGRAMINA GİT
BASLA MOVLW h'00' ;W<-h'00'
MOVWF BIRLER_BASAM ;BIRLER_BASAM <-W
MOVWF ONLAR_BASAM ;ONLAR_BASAM <-W
MOVWF YUZLER_BASAM ;YUZLER_BASAM <-W
MOVWF BINLER_BASAM ;BINLER_BASAM <-W
BANKSEL OPTION_REG ;BANK 1'E GEÇ
MOVLW b'11111000' ;PSA (BİT 3)=1 SEÇİLEREK PRESCLAR TMR0 İÇİN GEÇERSİZ OLUP ORAN 1:1 OLMAKTADIR,TOCK1'DEKİ HARİCİ PULSELAR 1:1 ORANINDA TMR0'I ARTIRACAK
MOVWF OPTION_REG ;PS=1 YANİ PULSE'IN DÜŞEN HER KISMINDA TMR0 BİR ARTIRILACAKTIR
BSF INTCON,GIE ;TÜM KESME OLAYLARI İÇİN İZİN VERİLDİ
BSF INTCON,5 ;TMR0IE İÇİN İZİN VERİLDİ
MOVLW h'06' ;W YAZMACINA 6 SAYISINI YÜKLE
MOVWF ADCON1 ;PORTA NIN DİJİTAL I/O YAPILABİLMESİ İÇİN ADCON1 REGISTERINA UYGUN DEĞER ATANDI
MOVLW h'00' ;W REGISTERİNE 0'I YÜKLE
MOVWF TRISB ;PORTB ÇIKIŞ YAPILIR
MOVLW h'F0' ;W YA F0 YÜKLENİR
MOVWF TRISA ;RA3,RA2,RA1,RA0 ÇIKIŞ YAPILDI
BCF STATUS,RP0 ;BANK0'A GEÇ
MOVLW h'FF'
MOVWF TMR0
CLRF PORTA ;PORTA TEMİZLENDİ JUNK DEĞERLER KALMAMASI İÇİN
CLRF PORTB ;PORTB " " " " "
DONGU CALL TARA_GOSTER
GOTO DONGU
KESME_PROG
CALL TARA_GOSTER
BTFSS INTCON,5
GOTO CIK
BTFSS INTCON,2
GOTO CIK
MOVLW h'FF'
MOVWF TMR0
BCF INTCON,2
;-------ARTIRMA İŞLEMİ
INCF BIRLER_BASAM,F ;BİRLER BASAMAĞI BİR ARTIRILDI
MOVF BIRLER_BASAM,W ;BİRLER BASAMAĞINI W'YE YÜKLER
SUBLW h'0A' ;W=10-W
BTFSS STATUS,2 ;EŞİT İSE Z BİTİ 1 OLACAKTIR Z BİTİ 1 Mİ?
GOTO CIK ;10 SAYISINA HENÜZ ULAŞILMADI KESMEDEN ÇIK
MOVLW h'00' ;W REGİSTERİNE 0 YAZ
MOVWF BIRLER_BASAM ;BİRLER BASAMAĞINA 0 YAZDIK
BCF STATUS,2 ;STATUS REGİSTERININ ZERO FLAG'İ SIFIRLANDI
INCF ONLAR_BASAM,F ;ONLAR BASAMAĞI BİR ARTIRILDI
MOVF ONLAR_BASAM,W ;ONLAR BASAMAĞINI W'YE YÜKLER
SUBLW h'0A' ;W=10-W
BTFSS STATUS,2 ;EŞİT İSE Z BİTİ 1 OLACAKTIR Z BİTİ 1 Mİ?
GOTO CIK ;10 SAYISINA HENÜZ ULAŞILMADI KESMEDEN ÇIK
MOVLW h'00' ;W REGİSTERİNE 0 YAZ
MOVWF ONLAR_BASAM ;ONLAR BASAMAĞINA 0 YAZDIK
BCF STATUS,2 ;STATUS REGİSTERININ ZERO FLAG'İ SIFIRLANDI
INCF YUZLER_BASAM,F ;YUZLER BASAMAĞI BİR ARTIRILDI
MOVF YUZLER_BASAM,W ;YUZLER BASAMAĞINI W'YE YÜKLER
SUBLW h'0A' ;W=10-W
BTFSS STATUS,2 ;EŞİT İSE Z BİTİ 1 OLACAKTIR Z BİTİ 1 Mİ?
GOTO CIK ;10 SAYISINA HENÜZ ULAŞILMADI KESMEDEN ÇIK
MOVLW h'00' ;W REGİSTERİNE 0 YAZ
MOVWF YUZLER_BASAM ;YUZLER BASAMAĞINA 0 YAZDIK
BCF STATUS,2 ;STATUS REGİSTERININ ZERO FLAG'İ SIFIRLANDI
INCF BINLER_BASAM,F ;BINLER BASAMAĞI BİR ARTIRILDI
MOVF BINLER_BASAM,W ;BINLER BASAMAĞINI W'YE YÜKLER
SUBLW h'0A' ;W=10-W
BTFSS STATUS,2 ;EŞİT İSE Z BİTİ 1 OLACAKTIR Z BİTİ 1 Mİ?
GOTO CIK ;10 SAYISINA HENÜZ ULAŞILMADI KESMEDEN ÇIK
MOVLW h'00' ;W REGİSTERİNE 0 YAZ
MOVWF BINLER_BASAM ;BINLER BASAMAĞINA 0 YAZDIK
BCF STATUS,2 ;STATUS REGİSTERININ ZERO FLAG'İ SIFIRLANDI
CIK
RETFIE
;-----------------------------------------------------------------
TARA_GOSTER
MOVLW b'00001110' ;1.DISPLAYA ENERJİ VERDİK
MOVWF PORTB
MOVF BIRLER_BASAM,0 ;W YA BİRLER BASAMAĞINI ATTIK
MOVWF PORTA
CALL GECİKME ;4 MS GECİKME (SEGMENTLERİN IŞIK VERECEĞİ SÜREYİ KAZANMASI İÇİN)
MOVLW b'00001101' ;1.DISPLAYA ENERJİ VERDİK
MOVWF PORTB
MOVF ONLAR_BASAM,0
MOVWF PORTA
CALL GECİKME
MOVLW b'00001011'
MOVWF PORTB
MOVF YUZLER_BASAM,0
MOVWF PORTA
CALL GECİKME
MOVLW b'00000111'
MOVWF PORTB
MOVF BINLER_BASAM
MOVWF PORTA
CALL GECİKME
RETURN
;--------------------------------------------------------------------
GECİKME
MOVLW h'07'
MOVWF SAYAC1
DONGU1
MOVLW h'FF'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2,F
GOTO DONGU2
DECFSZ SAYAC1,F
GOTO DONGU1
RETURN
END