7 segment sayıcı da nasıl bir hatam var

Başlatan enginkanat, 22 Ocak 2012, 11:19:09

enginkanat

Arkadaşlar ben bir sayıcı yapmaya çalıştım. program kodları ve isis dosyası ektedir. Nerede yanlış yaptığımı bana anlatabilirmisiniz

ete

Programda bir sürü hata daha doğrusu eksik var. Onları programı düzelterek yanlarına yazdım.
Bu arada simulasyonda tek tek 7 segment yerine çoklu display kullanmaya çalışın. Çoklu olanlar simulasyonda daha hızlı çalışmaktadır.

Ete
TRISA=%00000011     'hata-1  , buton pinleri giriş değil çıkış olarak ayarlanmış giriş yapıldılar.
TRISB=%00000000
PORTA=0:PORTB=0
'................... hata-2  hiç bir sigorta ayarı verilmemiş...................
@ DEVICE pic16F628                      'işlemci 16F628                               
@ DEVICE pic16F628, WDT_OFF              'Watch Dog timer kapalı
@ DEVICE pic16F628, PWRT_ON              'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF          'Kod Koruma kapalı
@ DEVICE pic16F628, MCLR_off            'MCLR pini kullanılmıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak

DEFINE OSC 4   '......hata-3  Çalışma frekansı belirlenmemiş....................
CMCON=7        ',,,,,,hata-4  628A da komparatör pinleri default aktifdir. İptal edilmesi gerekir
OPTION_REG.7=0
X VAR BYTE      56    'Hata-5 yalnızca bir x değişkeni kullanmışsın Bu durumda 3 hanede de aynı rakam gözükür
BIRLER VAR BYTE 57    'bu nedenle her hane için ayrı değişken kulandık.
ONLAR VAR BYTE  58
YUZLER VAR BYTE 59
SAYI VAR WORD
temp var byte
SYMBOL YUKARI=PORTA.0
SYMBOL ASAGI=PORTA.1
SYMBOL DIG0=PORTB.4   'Hata-6 , bir önceki kısımda aktif edilen digit bir sonrakinde söndürülmelidir.
SYMBOL DIG1=PORTB.5   'bu nedenle digitler için ayrı sembol kullandık.
SYMBOL DIG2=PORTB.6
TEMP=2
BASLA:
IF YUKARI=0 THEN
    SAYI=SAYI+1
    IF SAYI>999 THEN SAYI=0
    while YUKARI=0    'hata-7 saydırmada butona basılı tutarsan alıp başını gidiyor.Bu nedenle bu satırı ilave ettik.
      GOSUB EKRAN
    WEND
     
ENDIF
IF ASAGI=0 THEN
    SAYI=SAYI-1
    IF SAYI<1 THEN SAYI=999
    while ASAGI=0   'hata-8  aynı sebeple azaltma butonu satırınada durdurma komutunu ilave ettik.
      GOSUB EKRAN
    WEND
ENDIF
BIRLER=SAYI DIG 0   'hata-9 her bir hanede yazılacak değeri sayı değişkeninden alıp kendi değişkenlerine verdik.
ONLAR=SAYI DIG 1
YUZLER=SAYI DIG 2
GOSUB EKRAN         'ekran kısmını ana programdan ayırdık.

GOTO BASLA

EKRAN:
Temp=temp+1:if temp=3 then Temp=0  'taramalı sistemde her seferinde bir digit aktif edilmelidir.
Select Case temp                   'bu nedenle temp isimli bir değişken kullanıp sıranın hangi digitte
case 0                             'olduğunu belirledik.
DIG2=0                             'sıra bu digitte ise bir önceki aktif edilen Dig2 olmalı ve off yapılmalı
PORTB=BIRLER                       'porta (4511'e) bilgiyi verdik ve ardından
DIG0=1                             'o haneyi aktif ettik.

case 1
DIG0=0
PORTB=ONLAR
DIG1=1

case 2
DIG1=0
PORTB=YUZLER 
DIG2=1

end select
pause 5       'her bir digit en azından 1 ms ile 5ms arasında yanık kalmalıki göz görebilsin.
RETURN

enginkanat

Çok teşekkür ederim. hataları anladım

enginkanat

Bu arada sayın hocam sigortalar ile derlediğimde asm hatası veriyor. gerçi derlemeyi yapıyor ama nedenini bulamadım PBP247 dosyasınıda tanıttım.

ete

Sigorta ayarlarını 16F628 için vermişsin ama seçtiğin işlemci (yukarıda ) 16F628A bu nedenle derleme hatası veriyor.
Seçimi 16F628A yerine 16F628 oalrak değiştir düzelir.

Ete

Powered by EzPortal