protezdiyot
Üye
- Katılım
- 18 May 2007
- Mesajlar
- 96
- Puanları
- 1
- Yaş
- 39
Herkese merhaba; Bir deneme programı yazıyorum.Bir butonla start stop olarakta adlandırabilirsiniz. aşağıda örneğini verdiğim programda butona bir kere bastım ilk program çalışacak.Ama çalışmaya devam edecek sürekli.Ne zaman ikinci defa butona basarsam o zaman birinci program duracak 2. program çalışacak.3. defa basarsam da program komple duracak.nasıl yapabilirim??
/******************************************************
Uygulama Adı : Yürüyen Işık
PIC PROG/DEKA : Port B jumper'ı LED konumunda olmalı
*******************************************************/
#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fusesXT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları
#use delay(clock=4000000) // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor
int i,x,led; //i ve led isminde tam sayı tipinde 8 bitlik değişkenler tanıtılıyor.
/********* ANA PROGRAM FONKSİYONU********/
void main ()
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
setup_adc(ADC_OFF); // ADC birimi devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor
output_b(0x00); // B portu çıkışları sıfırlanıyor
while(1)
{
x==0;
led=1;//led değişkeni değeri 1 oluyor
if (input (pin_a0))
{
delay_ms(25);
x++;
if (x==3)
{x=0;
}while(input(pin_a0))
{if (x==1)
{
for(i=0;i<=7;i++) // for döngüsü oluşturuluyor
{
output_b(led); // led değişkeni değeri B portuna gönder
led=led<<1; // led değişkeni değerini 1 bit sola kaydır
delay_ms(100); // 100 msn'lik gecikme veriliyor
}
led=0x80; //led değişkenine değer yükleniyor
output_b(led); //B portuna 0b10000000 bilgisi gönderiliyor
delay_ms(100); // 100 msn'lik gecikme veriliyor
for(i=0;i<=6;i++) // for döngüsü oluşturuluyor
{
led=led>>1; // led değişkeni değerini 1 bit sağa kaydır
output_b(led); // led değişkeni değeri B portuna gönder
delay_ms(100); // 100 msn'lik gecikme veriliyor
}}}
if(x=2)
{ for(i=0;i<=7;i++) // for döngüsü oluşturuluyor
{
output_b(led); // led değişkeni değeri B portuna gönder
led=led<<2; // led değişkeni değerini 1 bit sola kaydır
delay_ms(100); // 100 msn'lik gecikme veriliyor
}
led=0x80; //led değişkenine değer yükleniyor
output_b(led); //B portuna 0b10000000 bilgisi gönderiliyor
delay_ms(100); // 100 msn'lik gecikme veriliyor
for(i=0;i<=6;i++) // for döngüsü oluşturuluyor
{
led=led>>2; // led değişkeni değerini 1 bit sağa kaydır
output_b(led); // led değişkeni değeri B portuna gönder
delay_ms(100); // 100 msn'lik gecikme veriliyor
} }
}}}
/******************************************************
Uygulama Adı : Yürüyen Işık
PIC PROG/DEKA : Port B jumper'ı LED konumunda olmalı
*******************************************************/
#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fusesXT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları
#use delay(clock=4000000) // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor
int i,x,led; //i ve led isminde tam sayı tipinde 8 bitlik değişkenler tanıtılıyor.
/********* ANA PROGRAM FONKSİYONU********/
void main ()
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
setup_adc(ADC_OFF); // ADC birimi devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor
output_b(0x00); // B portu çıkışları sıfırlanıyor
while(1)
{
x==0;
led=1;//led değişkeni değeri 1 oluyor
if (input (pin_a0))
{
delay_ms(25);
x++;
if (x==3)
{x=0;
}while(input(pin_a0))
{if (x==1)
{
for(i=0;i<=7;i++) // for döngüsü oluşturuluyor
{
output_b(led); // led değişkeni değeri B portuna gönder
led=led<<1; // led değişkeni değerini 1 bit sola kaydır
delay_ms(100); // 100 msn'lik gecikme veriliyor
}
led=0x80; //led değişkenine değer yükleniyor
output_b(led); //B portuna 0b10000000 bilgisi gönderiliyor
delay_ms(100); // 100 msn'lik gecikme veriliyor
for(i=0;i<=6;i++) // for döngüsü oluşturuluyor
{
led=led>>1; // led değişkeni değerini 1 bit sağa kaydır
output_b(led); // led değişkeni değeri B portuna gönder
delay_ms(100); // 100 msn'lik gecikme veriliyor
}}}
if(x=2)
{ for(i=0;i<=7;i++) // for döngüsü oluşturuluyor
{
output_b(led); // led değişkeni değeri B portuna gönder
led=led<<2; // led değişkeni değerini 1 bit sola kaydır
delay_ms(100); // 100 msn'lik gecikme veriliyor
}
led=0x80; //led değişkenine değer yükleniyor
output_b(led); //B portuna 0b10000000 bilgisi gönderiliyor
delay_ms(100); // 100 msn'lik gecikme veriliyor
for(i=0;i<=6;i++) // for döngüsü oluşturuluyor
{
led=led>>2; // led değişkeni değerini 1 bit sağa kaydır
output_b(led); // led değişkeni değeri B portuna gönder
delay_ms(100); // 100 msn'lik gecikme veriliyor
} }
}}}