Bu programda yanlışık varmı bakarmısnız lütfen

Başlatan togier, 03 Mayıs 2012, 14:02:36

togier


nurim

Alıntı yapılan: togier - 09 Mayıs 2012, 11:39:20
Yardım edebilecek kimse yokmu acaba ?

Alıntı yapılan: ete - 07 Mayıs 2012, 17:07:18
Programda , dtmfal: şeklinde bir etiket mevcut. Bu alt programda Dtmf bilgisi sayıya çevrilmektedir.
Alt kısmına doğru bakarsan orada;
if q1 = 1 then
dtmfa = dtmfa + 1
endIF
if q2 = 1 then
dtmfa = dtmfa + 2
endIF
IF q3 = 1 then
dtmfa = dtmfa + 4
endIF
IF q4 = 1 then
dtmfa = dtmfa + 8


şeklinde kodlar görürsün. Bu kodlar DTMF entegresinden çıkan 4 bitlik binary sayıyı almaktadır. Bu kodların sonunda yer alan;
IF q4 = 1 then
dtmfa = dtmfa + 8
Endif
satırlarını silersen program artık yalnızca 3 bitlik bilgi alır.
Bir öncekinide yani IFq3=1 ile başlayan 
IF q3 = 1 then
dtmfa = dtmfa + 4
endIF
satırlarını silersen o zamanda yalnızca 2 bitlik bilgi alır.

Ete

"ete" hoca burada istediğin cevabı zaten vermiş.
Kolay Gelsin
nurim

ete

Su anda seyehatte oldugum icin zorlukla cevapliyorum mesajlari. Sorunun cevabini dogru vermistim. Ancak programda iki yerde 4 digit sayi alimi var. Ben sadece sifre alimini duzeltecek cevap yazdim- Digerinide degistirmek isterseniz  ayni seyleri o satirada yapmak gerekir.
Aslinda sonradan aklima daha kolay bir yol geldi. Alinan sifre degerini 10 a bolerseniz sayiniz 3 digit haline gelir zaten.
Hic bir sey degitisirmeyin sayiyi yalnizca 10 bolun.
Ete

togier

Ete abi teşekkürler abi pic basic bilgim pek yok abi 10 böl derken  bunu bi komutla gösterebilme şansın varmı.

Mucit23

Bölme işleminin zor bir tarafı yok

Sayı=Sayı/10 gibi kullanımı var...
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Senin sorunun cozumu tahminimden uzunmus.
Aslında programdan DTMF kısmını çıkarmak ve ona bagli kontrollarida kaldırmak gerek.
Kolayda kendin yap degilse bekle biraz.
Ete

togier

Tmm abi bilmeden porgramda değişikler yapıyorum yani bu bu yazılımla o iş olmaz yani ben biraz daha araştırayım.

togier

Ete abi rahatsız ediyom ama yok abi istediğim gibi bi yazılın kaç gündür bakıoym bi bu var sen verdiğinde oynama yapamıyom çok karışık yada bana öle geliyo bişi yapıyom derlemiyo yazılım sen bana nasıl yapılacağını sölersen ama açık olursa iyi olur abi ben pek hakim değilim yazılıma teşekkürler abi şimdiden

ete

Togier,

Aşağıdaki programı bir dene bakalım istediğini yapıyormu. Hane sayısı 3 olarak çalışacaktır.

Programda Define OSC 3 şeklinde komut var. 3 Mhz lik kristal bağlı olduğu zaman yazılacak bir komut bu. Ama 3 Mhz kristal zor bulunanbir kristaldir. Sen buldun da mı yazdın yoksa öylesine mi yazıldı bu satır. Öylesine ise doğru kristal değeri ile değiştir aksi halde komutlar yanlış çalışabilir.

Programdaki ayarlamalara bakarsak;
- 3 hane girildikten sonra PortB.5 de bağlı olan dip sw LOW a çekilirse sistem girilen 3 haneyi AÇMA şifresi olarak kaydediyor.  PortB.6 daki pin LOW a çekilirse girilen şifre kapatma şifresi olarak kayıt ediliyor.
- PortA.2 de bağlı olan sanırım buton ve bu butona basılıp portA.2 pini Low a çekilir ise açık olan sistem kapatılıyor.
  Bu işlem yalınza yeni rakam girişlerinde en başta bir kere kontrol edilmektedir. Daha hassas çalışması için ayı komutu diğer satırlarda yazmak gerekebilir.

Ete

define osc 3
OPTION_REG=0
cmcon=7
TRISA=%00000110
TRISB=%01111111
std var portb.0
led var porta.3
memo var porta.0
symbol d1=portb.5 'dıp swic acma kayıt
symbol d2=portb.6 'dıp swıc kapama kayıt

symbol kapat=porta.2

q4 var portb.1 'q1 8870
q3 var portb.2 'q2 8870
q2 var portb.3 'q3 8870
q1 var portb.4 'q4 8870

dtmfa var byte
dtmfb var byte
dtmfc var byte
dtmfd var byte

ac1 var byte
ac2 var byte
ac3 var byte
ac4 var byte
ka1 var byte
ka2 var byte
ka3 var byte
ka4 var byte
bcl var byte
SIFRE  VAR WORD
ACMA   VAR WORD
KAPAMA VAR WORD
bcl=0 
PAUSE 250

basla:
dtmfa=0
dtmfb=0
dtmfc=0
dtmfd=0

dtmfal:

read 0,ac1
read 4,ka1
memo=1                     '// hafıza ledi
if kapat=1 then led=0
while std=0:wend
dtmfa=0   


DTMFA=q4*8+q3*4+q2*2+q1  'birinci hane alındı

dtmf_bekl:

while std=1:wend
if d1=0 then gosub acma_kayit
if d2=0 then gosub kapama_kayit

dtmfak:
read 1,ac2
read 5,ka2
WHILE STD=0:WEND
dtmfb=0
DTMFb=q4*8+q3*4+q2*2+q1  'ikinci hane alındı

dtmf_bek:
While STD=1:wend

if d1=0 then gosub acma_kayit
if d2=0 then gosub kapama_kayit

dtmfakla:
read 2,ac3
read 6,ka3
While std=0:wend
dtmfc=0
DTMFc=q4*8+q3*4+q2*2+q1  'ücüncü hane alındı

dtmf_b:
While std=1:WEND
if d1=0 then gosub acma_kayit
if d2=0 then gosub kapama_kayit

ACMA=ac3*100+ac2*10+ac1
KAPAMA=ka3*100+ka2*10+ka1
SIFRE=dtmfc*100+dtmfb*10+dtmfa

dtmfakl:
read 3,ac4
read 7,ka4
while std=1:wend
dtmfd=0     
DTMFD=Q4*8+Q3*4+Q2*2+Q1   'DÖRDÜNCÜ HANE ALINDI

dtmf_bet:
if std=1 then dtmf_bet
if d1=0 then gosub acma_kayit
if d2=0 then gosub kapama_kayit

IF SIFRE=ACMA THEN LED=1
IF SIFRE=KAPAMA THEN LED=0

goto basla

acma_kayit:
memo=0
ac1=dtmfa
ac2=dtmfb
ac3=dtmfc
ac4=dtmfd
write 0,ac1,AC2,AC3,AC4
memo=1
pause 10
memo=0
return
                       
kapama_kayit:
memo=0
ka1=dtmfa
ka2=dtmfb
ka3=dtmfc
ka4=dtmfd

write 4,ka1,KA2,KA3,KA4
memo=1
pause 10
memo=0
return
end 


togier

Çok teşekkürler
Şuan denedim abi çalışıyo ama yine 3 haneli açma yine 3 haneli kapama şifresi ile çalışıyo.Abi benim demek istediğim mesala 6 haneli açama şifresi girilebilmesi  6 hanelide kapama şifresi girilebilmesi mesala ben 3 haneli şifre bile girsem o üç haneli şifreyle açılcak 5 hanelide kapama şifresi girdimmide kapancak bi sınır olcak onun dışına çıkmıcak onun içinde istediği gibi açma şifre hanelerinin açma yada kapama  hanelerinin uzunluklarıyla oynayabilicez iyşallah bu sefer anlatabilmişimdir abi.5 haneli açma olur 4 hanelide kapama olur veya 2 haneli açama olur  3 haneli kapma olur yani açam ve kapama şifreleri serbest olucak abi.

Şuan ve önceki programlarda illa 3 tane açma illa 3 tane kapama gerekiyo  şuan senin verdiğindede illa 4 açma 4 kapama gerekiyo abi.

Abi çok mu zor bunu yapmak c de çok uğraştım yapamadım bende pic basic te hazır kodlarla yapmaya çalışlıyom 2 haftadır bunla uğraşıyom abi ömrümü yedi inşallah değer .

ete

Acık söyleyeyim ne istediğini yine anlamadim.
Anlatması bu kadar zor ise yapması herhalde daha zordur.
Net rakamlar kullanarak yeniden açıklarsan belki anlarım.
Lutfen ne istediğini daha iyi anlat.
Ete

togier

Abi 1233456789abdc#*  ister 16 haneli açma olucak 123456 veya 123 bunları eeprom yazacaz ama bi kısıtlama olmucak 16 haneli açma dtmf girebilicez ister 4 haneli dtmf girebilcez ister 1 haneli  açma dtmf girebilicez kapama içinde geçerli abi yani illa yazılımda illa 3 hane açma illa 3 hane kapama olmucak yani abi sınır 16 hane olsun  16 haneli açma 16 haneli kapama olmucak illa abi 5 haneli açma 2 hanelide kapama gibi.

Kısacası abi eeprom kaç haneli dtmf yazıldıysa o kadar haneyle açılcak kapama içinde geçerli abi. Yazılımda bütüne   bakmıcak ne varsa kayıtlı dtmf karşılaştırcak açcak yada kapıcak .

ete

Kısır bir programdan süper yazılım özellikleri isteyeceksin yani.
Simdi sesli dusunelim.
-epromda 16 adres kullanacaksin sifre kayit edeceksin.
- ilave 16 adrese de kapatma şifresi kayit edeceksin.
Peki hafızada 16 karekterim açma şifresi var iken 5 hanlık sifre ile nasil açma yapacağız. ?
Ayni sekilde 2 veya 3 hane ile nasil kapatma yapacağız. ?
Kısaca açma yada kapatma için kullanacağımız sifre hane sayısının ne oldugunu nereden öğreneceğiz. ?
Otomatik olmasi için iki yol var. Birincisi sifre kayit edilirken hane sayısından bir sonraki adrese255 yazarak şifrenin bittiği islemciye anlatılır. Yada sifre kaydı esnasında hane sayısında baska bir adrese kayit edilerek işlem yaptırılır.
Baska yolu varmıdır bilemem.
Ete

togier

abi pic basic çözcem sayenizde abi 16 haneyi ölesine söyledim sadece en fazla 6 hane girebilme olsun. Şu andaki programda bütüne bakıyo
misal

komut:
if ac1=dtmfa&ac2=dtmfb&ac3=dtmfc&ac4=dtmfd then led=1
if ka1=dtmfa&ka2=dtmfb&ka3=dtmfc&ka4=dtmfd then led=0

illa bunların hepsini görecek öle açaçak
yani abi şifre kaydetme sınırımız 6 hane olsun  açma ve kapama için biz ister 4 haneli açtırcaz ister 2 haneli ister 6 haneli  kapama içinde aynı. 

"a10ad" açma "22" kapma bunları eeprom yazdırdıkmı açıp kapıcak.
"aaa"açma "a2345 " kapama
Şimdi kafamda biraz oluşmaya başladı ama bunu yazılıma dökemiyorum bi türlü bi türlü hakim olamadım şu yazılım dillerine .

ete

Epromda kayıtlı şifre 123456 şeklinde olsun.
Şimdi bizde önce 1 girdik şifrenin ilk hanesi ile girilen eşit. Bu şifre doğrumudur demek oluyor.
Yada 12 girdik. Şifrenin ilk iki haneside 12 olduğuna göre şifre doğrumu kabul edilecek.?
Kısaca yine istediğini tam olarak anlatamadın. Tahminlerimi söyleyeyim;

- Eproma sifreyşöyle kayıt edersem  1,2,3,4,$FF  bu şifrenin 1234 mü olduğunu belirleyecek.? Cevap evet ise girilen şifre 1234 şeklini alıncaya kadar beklenecek ve sonunda doğruluğu onaylanacaktır.

- Yada eproma  1,2,3,$FF şeklinde kayıt yaparsam bu şifrenin 123 olduğunumu gösterecek?
Kısaca şifrenin kaç hane olacağına nasıl ve kim karar verecek?.
Başından beri bunu ben sana soruyorum ama sen her defasında başka cevaplar veriyorsun.

Ete



Powered by EzPortal