pıc 16f84 ile uzaktan kontrol devresi

Katılım
14 Eki 2011
Mesajlar
32
Puanları
1
selam arkadaşlar ben uzaktan kontrol devresi yaptım ancak devre c kado ile çalışıyor acaba pic basic pro ya çevirebilir misiniz??? acil lazım şimdiden teşekkürler... işte kod



  1. C Kodu
// 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 <pic.h>
#include <delay.c>

#define StD RB4
#define HAT_ROLE RA1
#define LED RA2
#define PALS RA0

// 4MHz osilator
__CONFIG(XT&WDTDIS&PWRTEN);
unsigned char kontrol=0;
unsigned int CX;
//----------------------------------------------------------
// Timer alt programi
// 15 saniye suresince tusa basilmadiysa hatti kapatmak icin
//----------------------------------------------------------
void interrupt kesme(void){

CX++;
if(CX>15000)kontrol=1;

T0IF=0; // bayragi temizle
TMR0=131;
}//----------------------------------------------------------

//----------------------------------------------------------
// ANA PROGRAM
//----------------------------------------------------------
main(void){

unsigned char i,komut,sifre[5],sayac;

//----------------------------------------------------------
// Port konfigurasyonu
//----------------------------------------------------------
TRISB=0x1F; // PORTB'nin RB5,6,7 pinleri cikis,digerleri giris
TRISA=0x01; // RA0 giris digerleri cikis
//----------------------------------------------------------

PORTB=0; // cihazlar enerjisiz
PORTA=0; // hat kapali, LED sonuk

//-------------------------------------------------------------
//Timer islemleri (kesme suresi=1ms)
//-------------------------------------------------------------
T0CS=0; // Dahili clock
PSA=0; // Prescaler TMR0 icin ayarli
PS0=0; PS1=1; PS2=0; // Oran 1:8
ei(); // butun kesmeler etkin
T0IE=0; //Baslangicta timer pasif
T0IF=0; // bayrak temizle
//-------------------------------------------------------------

// resetten sonra 1 saniye bekle
for(i=0;i<4;i++)DelayMs(250);

basla:

sayac=0; CX=0;

for(;;){ // zil sayisi belirleme dongusu

while(PALS==1);

sayac++;

if(sayac>50){ // Zil sayisi 2
HAT_ROLE=1; // Hatti ac

sifreoku:

for(i=0;i<5;i++){ // sifreyi al

//--------------------------------------
kontrol=0;
TMR0=131; //
T0IE=1; // TIMER ON

//--------------------------------------

while(StD==0){ // tusa basilmadi ise bekle
if(kontrol==1){ // sure>15s ise hatti kapat
HAT_ROLE=0; goto basla; // basa don
}
else {};
}

T0IE=0; CX=0; // Tusa basildi ise Timer'i durdur, CX'i sifirla
// Boylece yeni bir 15s'lik ek sure kazanilmis olur
sifre=PORTB&0x0F; // sifreyi oku

while(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.
LED=1; // sifre dogru ise LED'i yak
for(;;){
while(StD==0); // cihazlar icin komut bekle
komut=PORTB&0x0F;
if(komut==1)RB5=1; // cihaz 1 ON
if(komut==2)RB6=1;
if(komut==3)RB7=1;
if(komut==4)RB5=0; // cihaz 1 OFF
if(komut==5)RB6=0;
if(komut==6)RB7=0;
if(komut==12){ // # tusuna basildi ise hatti kapat
HAT_ROLE=0; LED=0; goto basla;
// Cihazlarin ON/OFF durumlari degismeden kalir.
}
} //--------------------------------------
}
else{
goto sifreoku; //sifre yanlis ise tekrar sifre okumaya git
}
}
else{ // sayac<50 ise
while(PALS==0);
}
} // for dongusu
 
lütfen yardımcı olur musunuz c kodu bilmediğim için bunu istiyorum sizlerden devrenin mantığını anlamak istiyorum şu an devreye sadece bakıyorum mantığını çözmek istiyorum
 

Forum istatistikleri

Konular
127,960
Mesajlar
913,921
Kullanıcılar
449,609
Son üye
cherrywine

Yeni konular

Geri
Üst