13 Mart 2010 Cumartesi

pic16f628a ile 0-9999 ileri geri resetli sayıcı

pic16f628a ile 0-9999 ileri geri resetli sayıcı
Buradaki yazımda bahsettiğim binary-desimal sayıcı simulasyonundan sonra birde 0-9999 ileri geri sayan reset özelliği olan pic16f628 üzerine kurulu bir sayıcı devresi tasarladım. Kodları pic basic pro'da yazdım. Aşağıda bas kodları ve devre şeması mevcut. Gerekli dosyalarıda (isis, hex, devre şeması, bas,pbp) aşağıdaki linkten indirebilirsiniz.

pic16f628 ile 0-9999 ileri geri resetli sayıcı dosyalar download

Hazırladığım sayıcıda bir simülasyon ancak gerçek uygulamada da çalışacaktır. İşlemci için gerekli parametreleri verdiğim için sorun çıkacağını sanmıyorum. Zaten dahili osilatör sayesinde kristal kullanmaya gerek yok. Displayleri de 4511 ile sürdüm. Belki ilerde tarama yöntemi ile devrenin 4X7 segment tek sürücü entegreli versiyonunu da yapabilirim. Devreye 5 volt besleme devreside ilave edilmeli.

Simulasyon farklı bilgisayarlarda farklı hızlarda çalışabilir. Böyle bir durumda bas kodundaki süreleri değiştirmeniz gerekebilir. Bundan sonra pic programlama çalışmalarım dahada hızlanacak ve sizlerle paylaşıma devam. :)

Devre şeması ve bas kodları:


'****************************************************************
'* Name : Pic16f628 ile 0-9999 Sayıcı.BAS *
'* Author : [Davut Naci Kaya] *
'* Notice : Copyright (c) 2010 *
'* : All Rights Reserved *
'* Date : 27.02.2010 *
'* Version : 1.0 *
'* Notes : 0-9999 ileri geri resetli sayıcı *
'* : elektroinfo.blogspot.com *
'****************************************************************
@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_on
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak
PortA=0
TrisA=000111
PortB=0
TrisB=000000

SAYI VAR WORD
BIRLER VAR WORD '1.DİJİT
ONLAR VAR WORD '2.DİJİT
YUZLER VAR WORD '3.DIJIT
BINLER VAR WORD '4.DIJIT

SYMBOL TUSA=PORTA.0 ' ileri geri reset tuş tanımlamaları
SYMBOL TUSB=PORTA.1
SYMBOL TUSC=PORTA.2

PORTB=0 'PORTB'NİN TAMAMINI SIFIRLA
SAYI=0 'SAYI İÇERİĞİNİ SIFIRLA

PAUSE 25

BASLA:

BIRLER=SAYI DIG 0
ONLAR=SAYI DIG 1
YUZLER=SAYI DIG 2
BINLER=SAYI DIG 3

IF SAYI=9999 AND TUSA=0 THEN 'İLERİ sayma kontrolü
SAYI=0 :PAUSE 25
ENDIF 'IF komutu sonlandırma

IF TUSA=0 THEN ' İLERİ SAYMA
SAYI=SAYI+1 :PAUSE 25
ENDIF

IF SAYI=0000 AND TUSB=0 THEN 'başlangıçta geri sayma kontrolü
SAYI=9999 :PAUSE 25
ENDIF

IF SAYI=9999 AND TUSA=0 THEN 'ileri sayma kontrolü
SAYI=0000 :PAUSE 25
ENDIF

IF TUSB=0 THEN 'GERİ SAYMA
SAYI=SAYI-1 :PAUSE 25
ENDIF

IF TUSC=0 THEN ' RESETLEME
SAYI=0 :PAUSE 50
ENDIF

PORTB=240 BIRLER '4511 entegreleri için rakam display gösterim kontrolü LE
LOW PORTB.7
PAUSE 5
HIGH PORTB.7
PAUSE 5
PORTB=240 ONLAR
LOW PORTB.6
PAUSE 5
HIGH PORTB.6
PAUSE 5
PORTB=240 YUZLER
LOW PORTB.5
PAUSE 5
HIGH PORTB.5
PAUSE 5
PORTB=240 BINLER
LOW PORTB.4
PAUSE 5
HIGH PORTB.4
PAUSE 5
GOTO BASLA
GERISAY:
IF SAYI=0 THEN SAYI=9999
SAYI=SAYI-1
PAUSE 5
BIRLER=SAYI DIG 0
ONLAR=SAYI DIG 1
YUZLER=SAYI DIG 2
BINLER=SAYI DIG 3
PORTB=240 BIRLER
LOW PORTB.7
PAUSE 5
HIGH PORTB.7
PAUSE 5
PORTB=240 ONLAR
LOW PORTB.6
PAUSE 5
HIGH PORTB.6
PAUSE 5
PORTB=240 YUZLER
LOW PORTB.5
PAUSE 5
HIGH PORTB.5
PAUSE 5
PORTB=240 BINLER
LOW PORTB.4
PAUSE 5
HIGH PORTB.4
PAUSE 5

GOTO BASLA

END

2 yorum

avatar

bu devre ısıs de calısmıo sıkıntı var

avatar

Kullandığınız proteus versiyonu eski olabilir. Yada hex kodunu yükleyememiş olabilirsiniz. Simulasyon çalışıyor.