Telefonla uzaktan cihaz kontrolu biltektübitak nisan 2008 CCSC için.

xman

Üye
Katılım
9 Eki 2008
Mesajlar
32
Puanları
1
Yaş
39
Kod:
// Telefonla uzaktan cihaz kontrolu projesine ait PIC16F84A programi
// CM8870'in Q1-Q4 cikislari PIC16F84A'nin RB0-RB3 pinlerine baglidir.
// StD ucu RB4'e baglidir. Hat acma rolesi RA1'e baglidir.
// Sifre onay LED'i RA2'ye baglidir.
// Zil calma sayisi icin pals devresi RA1'e baglidir.
// Kontrol edilecek cihazlar sirasiyla RB5,RB6,RB7'ye baglidir.
#include <16f84.h>
#use delay(clock=4000000) 
#fuses XT,NOWDT
unsigned char kontrol=0;
unsigned int ECN;
//---------------------------------------------------------
// Timer alt programi
// 15 saniye suresince tusa basilmadiysa hatti kapatmak icin
//----------------------------------------------------------
void interrupt_kesme(void)
{
set_timer0(231);
ECN++;
if(ECN>15)kontrol=1;
}
//----------------------------------------------------------
// ANA PROGRAM
//----------------------------------------------------------
unsigned char i,komut,sifre[5],sayac;
void main()
{
//----------------------------------------------------------
// Port konfigurasyonu
//----------------------------------------------------------
SET_TRIS_B(0x1F); // PORTB'nin RB5,6,7 pinleri cikis,digerleri giris  
SET_TRIS_A(0x01); // RA0 giris digerleri cikis
//----------------------------------------------------------
output_b(0x00); // cihazlar enerjisiz
output_a(0x00); // hat kapali, LED sonuk
//-------------------------------------------------------------
//Timer islemleri (kesme suresi=1ms)
//-------------------------------------------------------------
SETUP_TIMER_0(RTCC_INTERNAL|RTCC_DIV_256);
// resetten sonra 1 saniye bekle

for(i=0;i<4;i++)DELAY_MS(250);

basla:

sayac=0; ECN=0;
 
for(;;)
{ // zil sayisi belirleme dongusu
while(input(pin_A0==1));

sayac++;
   if(sayac>150)
   { // Zil sayisi 6
      output_high(pin_a1); // Hatti ac

sifreoku:      
      for(i=0;i<5;i++)
      { // sifreyi al
      //--------------------------------------
      kontrol=0;
      SET_TIMER0(231);
      ENABLE_INTERRUPTS(INT_TIMER0);
      ENABLE_INTERRUPTS(INT_RTCC); 
      ENABLE_INTERRUPTS(GLOBAL);
      //--------------------------------------
         while(input(pin_b4==0));
         {   // tusa basilmadi ise bekle
            if(kontrol==1)
            { // sure>15s ise hatti kapat
            output_low(pin_a1); 
            goto basla; // basa don
            }
            else {};
         }     
      sifre[i]=output_b(0x0F); // sifreyi oku
      while(input(pin_b4==1));//(StD==1)); // tus basili ise bekle
      }
      //--------------------------------------
      // sifrenin son hanesi * olmalidir      
      //--------Sifre konrol------------------
      if(sifre[0]==1 && sifre[1]==2 && sifre[2]==3 && sifre[3]==4 && sifre[4]==11)
      {
      // 11 degeri tus takimindaki * tusuna karsilik gelir.
      output_high(pin_a2); // sifre dogru ise LED'i yak
         
         for(;;)
         {
           while(input(pin_b4==0));//(StD==0); // cihazlar icin komut beklerb4
                     
            komut=output_b(0x0F); 
   
            if(komut==1)
            output_high(pin_b5); // cihaz 1 ON
            if(komut==2)
            output_high(pin_b6);
            if(komut==3)
            output_high(pin_b7);
            if(komut==4)// cihaz 1 OFF
            output_low(pin_b5);
            if(komut==5)
            output_low(pin_b6);
            if(komut==6)
            output_low(pin_b7);
            if(komut==12)
            { // # tusuna basildi ise hatti kapat
               output_low(pin_a1); //hat
               output_low(pin_a2);//led 
               goto basla;
            // Cihazlarin ON/OFF durumlari degismeden kalir.
            }
         }            
      }      
      else
      {
      goto sifreoku; //sifre yanlis ise tekrar sifre okumaya git
      }
   }
   else{  // sayac<150 ise
   while(input(pin_A0==0));
   }
} // for dongusu
}
 
güzel paylaşım, devresini varsa paylaşır mısın? deneme fırsatımız olur.
 

Forum istatistikleri

Konular
127,952
Mesajlar
913,885
Kullanıcılar
449,600
Son üye
psychedelic

Yeni konular

Geri
Üst