16f88 ileri geri sayıcı uygulaması

Başlatan huseyin0579, 06 Ocak 2017, 20:20:53

huseyin0579

Arkadaşlar yeni ileri-geri sayıcı uygulaması ekliyorum. Programda tek yapılması gereken sayım değerinin  epromdan okunduktan sonra yeniden portb üzerinde gösterilmesi, eprom yazma ve okuma çalışıyor fakat yeni değer portb son dört bit üzerinde gösteremedim. Yardımcı olabilecek arkadaşlara teşekkür ederim.
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 26.11.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE PIC16F88
@ DEVICE PIC16F88,WDT_OFF
@ DEVICE PIC16F88,PWRT_ON
@ DEVICE PIC16F88,MCLR_OFF
@ DEVICE PIC16F88,INTRC_OSC_NOCLKOUT
@ DEVICE PIC16F88,LVP_OFF
@ DEVICE PIC16F88,BOD_ON
@ DEVICE PIC16F88,FCMEN_OFF
@ DEVICE PIC16F88,IESO_OFF
@ DEVICE PIC16F88,CCPMX_OFF
@ DEVICE PIC16F88,DEBUG_OFF
@ DEVICE PIC16F88,WRT_OFF
@ DEVICE PIC16F88,CPD_OFF
@ DEVICE PIC16F88,PROTECT_OFF

DEFINE OSC 8


OPTION_REG.7=0
OSCCON=%01110100   

CMCON=7

TRISA=%00011000
TRISB=%00000000
PORTA=0
PORTB=0
ANSEL=%00000000
ADCON1=%10000000

SAYIA VAR BYTE 56
YAZ   VAR BYTE 57
W VAR WORD
   
SYMBOL ILERI=PORTA.3
SYMBOL GERI=PORTA.4


READ 10,SAYIA
IF SAYIA=255 THEN
SAYIA=0
ENDIF   

BASLA:   
                 
      IF ILERI=0 THEN                 
      WHILE ILERI=0
      SAYIA=SAYIA+1           
      IF SAYIA>=15 then SAYIA=15
      PORTB=(PORTB & (%00001111))+(SAYIA<<4)                                                             
      GOSUB GECIKME
      WEND
      YAZ=1:GOSUB DEGER_YAZ
      ENDIF
     
     
      IF GERI=0 THEN           
      WHILE GERI=0
      SAYIA=SAYIA-1
      IF SAYIA>=15 then SAYIA=0
      PORTB=(PORTB & (%00001111))+(SAYIA<<4)                                                                                           
      GOSUB GECIKME
      WEND
      YAZ=1:GOSUB DEGER_YAZ
      ENDIF
                                   
      GOTO BASLA
           
GECIKME:
       
        FOR W=0 to 10000
        NEXT               
        RETURN
       
DEGER_YAZ:

      write 10,SAYIA
      PAUSE 10
      Return

END

huseyin0579

Yani enson aldığı değeri PORTB=(PORTB & (%00001111)) kalıcı olarak göstermek istiyorum.




ete

#2
Kullandığın yöntem yanlış değilki .Öncelikle PORTB nin en sondaki 4 biti boşaltılıp ilk 4 biti aynen kopyalamak gerekir. Bunu işi şu komut yapar;
PORTB=(PORTB & %00001111)
Sonra sayı değerini sondaki 4 bitin yerine yerleştirmek gerekir Bunun için önce SAYI değeri 4 bit sola kaydırılır.
SAYI<<4 komutu bunu yapar. Bunu onceki komuta eklersen Sayı değeri 4 bit sola kaymış vaziyette yerine oturumuş olur.
Yani PORTB=(PORTB & %00001111)+(SAYIA<<4)  komut satırı tamda senin istediğin işi yapar. Olmayan nedirki burada. Olması gerek ve olmuyorsa hatayı başka yerde aramalısın.

Ete

elektro77

"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Powered by EzPortal