8 ledli yürüyen ışık devresi hakkında

Başlatan nicksiz88, 18 Aralık 2009, 12:41:46

nicksiz88

arkdaşlar bana RA1'e bağlı buton ve Portb'ye bağlı 8 adet ledden oluşan devre için, butona basılı
tutulduğu sürece çalışan yürüyen ışık sistemi istemi lazım yardım ede bilirmisiniz?
Her şeyin bi fiyatı, her insanın bi değeri vardır. Fiyatı olmayan eşyaya çöp, Değeri olmayan insana; "giderken kapıyı ört" denir

nicksiz88

Yardım edecek kimse yokmu arkdaşlar?
Her şeyin bi fiyatı, her insanın bi değeri vardır. Fiyatı olmayan eşyaya çöp, Değeri olmayan insana; "giderken kapıyı ört" denir

ete

Al sana yardım.

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2009 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 18.12.2009                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F628                      'işlemci 16F628                                
@ DEVICE pic16F628, WDT_Off              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 
'-----------------------------------------------------------------
DEFINE OSC 4


PortA=0:TrisA=2
PortB=0:TRISB=0

symbol TUS=PORTA.1
SAYI VAR BYTE
SURE VAR BYTE
pause 200
SURE=200

BASLA:
SAYI=0:PORTB=0
while TUS=0
IF SAYI=0 THEN SAYI=1
PORTB=SAYI
PAUsE SURE
SAYI=SAYI<<1
WEND
GOTO BASLA


Ete

SURE isimli değişken yürüme hızını ayarlamaktadır. Programda 200 (ms) verilmiş olup en fazla 255 verilebilir. Daha azı mümkün ama 255 den fazla değerler için değişken tipi byte dan WORD e değiştirilmelidir.
O zaman 65535 'e kadar değer verilebilir.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mrtclk0891

lıst             p=16f628a
ınclude       "p16f628a. ınc"
__confıg _ıntrc_osc_nockout &_wdt_0ff & _pwrte_on_  & _mclr_on &_
boden_off &_lvp_off & _data_cp_off& _cp_off

sayac      equ  h'20'
sayac1    equ   h'20'

clrf          portb
bcf          status, 0
banksel   trısb
clrf          trısb
banksel    portb
movlw      h'01'
movwf      portb
goto         test

test

btfss        porta, 1
goto         test
goto         kay

kay

rrf            portb, f
call           gecıkme
goto          test
 
gecıkme

movlw       h'ff'
movwf       sayac

dongu1

movlw        h'ff'
movwf        sayac1

dongu2

decfsz         sayac1, f
goto            dongu2
decfsz         sayac, f
goto            dongu1
return

end



basıtbir kaydırma devresi fikir siteden geliştirme sizden saygılar

ete

mrtclk0891,
Bu yazdığın programı denedinmi?
Bazı eksikler ve yanlışların olduğunu görüyorum.

Birincisi ,
sayac equ h'20'
sayac1 equ h'20'
satırlarında iki değişkenide aynı adrese yerleştirdin. (h20) Sence doğrumu?

İkincisi, PortA.1 pini giriş olması gerek ve sen PortB yi yönlendirdin ama PortA da bir şey yapmadın bu bir eksik.

Üçüncüsü , PortB ye 1 yazdın ama kaydırmayı sağa yaptın. PortB de zaten 1 varken kaydırmadan sonra değer sıfır olacaktır. Sağa değilde sola kaydırma yapman gerekmezmi?. Üstelik kaydırma komutunda f değerini 1 olarak vermen gerekmiyormu?.

Üstelik kaydırmayı solada yapsan bir PortB=128 den sonraki kaydırmanda değer sıfırlanacaktır. Dolayısıyla işlemin devamlılığı açısından PortB ye yeniden 1 değerinin verilmesi gerekir. Bunun içinde kaydırmadan sonra değerin sıfır olup olmadığı veya carry flag'ının 1 olup olmadığına bakılması ve buna bağlı olarak yeniden portB ye 1 değerinin verilmesi gerekmezmi.?

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com