pic zaman ile çalışacak?

ahmetozken

Üye
Katılım
9 Eki 2007
Mesajlar
82
Puanları
1
picin ra0 ucuna sinyal geldiği andan itibaren rb1 ve rb2 numaralı uclardaki ledlerin sıra ile yanmasını istiorum ve 15 dakka geçtikten sonrada bütün ledlerin sönmesini bunun için assembly dilinde hangi komutlar kullanmam gerekli.pic16f84a kullanıorum.yardımcı olursanız sevinirim
 
Asm dilinde topu topu 35 komut var.Hepsi kullanılacaktır.
Bu çalışma için Picbasic en uygunu.
 
peki pic basic ile nasıl yazılabilir?altı üstü bir komut aldıgında 15 dakka çalışıp durmasını istiyorum assembly dili bu kadarını bile yapamayacak kadar kullanışsız bir dilmi
 
#include <16f84a.h> // pic tanıtılıyor
#fuses xt,nowdt,noprotect,nobrownout,nolvp,noput,nowrt,nodebug,nocpd
#use delay(clock=4000000)

#use fast_io(a)// giriş,çıkış atanıyor
#use fast_io(b)// giriş,çıkış atanıyor

void main()
{


setup_psp(psp_disabled);
setup_spi(spi_ss_disabled);
setup_timer_1(t1_disabled);
setup_timer_2(t2_disabled,0,1);
setup_CCP1(CcP_OFF);
setup_ccp2(ccp_off);


set_tris_a(0x01); // giriş,çıkış ayarlanıyor ra0 giriş, diğerleri çıkış
set_tris_b(0x00); //giriş,çıkış ayarlanıyor tümü çıkış

while(1) //sonsuz döngüye giriliyor
{
if(pin_a0) // ra0 pini yoklanıyor
{
output_high(pin_b0);// b0 ledi yakılıyor
output_high(pin_b1); // b1 ledi yakılıyor
delay_ms(900000000);// 15 dk bekleme=15*60*1000000 micro saniye
output_low(pin_b0);//b0 ledi sönüyor
output_low(pin_b1);//b0 ledi sönüyor
}
}
}
 
delay_ms(900000000);// 15 dk bekleme=15*60*1000000 micro saniye
--------------------------------------------------------------------------------------
ms mili saniye diye biliyorum bir de bu kadar büyük gecikme çalışmayabilir. onu da gecikmeyi döngüye sokarak halledebilirsin
 
peki pic basic ile nasıl yazılabilir?altı üstü bir komut aldıgında 15 dakka çalışıp durmasını istiyorum assembly dili bu kadarını bile yapamayacak kadar kullanışsız bir dilmi

pic assembly kullanışsız değil. hatta c gibi dillerden daha hızlı çalışmayı sağlıyor ve tasarrufu da sağlıyor aslında. ancak alt düzey diller arasında olduğu için kullanmak zor. ama güzel bir dil.

pic assembly ile 15 dakika gecikmeyi sağlayabilmek için çok fazla iç içe döngü kullanmak gerekirdi. bundan dolayı yazımı uzun sürebilir.

ancak c ile delay_ms() şeklinde gecikme kolaylıkla sağlanabilir.
delay_ms(100000); gibi yazılıp for döngüsüne sokulursa da olur eğer yukarıda verilenler çalışmazsa.
 
Assembly dili ile yazım zahmetli, pic basic ile çok kolay.
Ve programı sonradan kontrol etmeniz kolaylaşıyor.
Fakat ben iki pic i içlerindeki USART modülleri ile haberleştirmek istediğimde
USART modülüne DATA nın gelip gelmediğini kontrol etmem gerekiyordu
ve zaman çok önemliydi.
Bu durumda ASM kullanmam zorunlu oldu.(Sadece ilgili kısım için)
Dolayısı ile 2-3 milisaniye sürecek bir işi 3-4 mikrosaniyede hallettim.
Yazacağınız programda A.o portu kontrol edilecek,şart sağlanıyor ise
B portları sıra ile yakıp söndürülecek.
Bu yakıp söndürme döngüsü, 15 dakikalık zaman döngüsünün içerisinde olmalı!
Daha değişik çözümlerde olabilir.
 

Forum istatistikleri

Konular
129,720
Mesajlar
929,241
Kullanıcılar
452,437
Son üye
omes14

Yeni konular

Geri
Üst