Bir program

Başlatan salim ALTIN, 20 Mayıs 2004, 11:20:45

salim ALTIN

Merhaba.
Bir arkadaş C ile program yazmıştı fakat çalışmıyor bir problemi var. Bu program pic16f84a ile  3 adet girişe bağlı birer buton dan aldığı input ile 6 adet roleyi on-off yapıyor. fakat girişlerin bir tanesi 4 adet roleyi aynı anda on -off yapıyor. Butona bir defa basınca sistem on oluyor. Butona basılı tuttuğunda herhangi bir değişiklik olmamalı,parmağını kaldırıp tekrar basınca sisten yeni girişi kabul edecek. birde giriş gecikmsi olmalıydı. Ben C den anlamıyorum. program aşağıdaki şekli ile doğru çalışmıyor. Yardımcı olabilecek varmı.?
#define XTAL_FREQ 4MHZ

#include "pic.h"
#include "delay.c"

static bit buton0   @ ((unsigned)&PORTA*8+0);    // buton0   
static bit buton1   @ ((unsigned)&PORTA*8+1);    // buton1
static bit buton2   @ ((unsigned)&PORTA*8+2);    // buton0


static bit RELAY0   @ ((unsigned)&PORTB*8+0);    // 0.ROLE
static bit RELAY1   @ ((unsigned)&PORTB*8+1);    // 1.ROLE
static bit RELAY2   @ ((unsigned)&PORTB*8+2);    // 2.ROLE
static bit RELAY3   @ ((unsigned)&PORTB*8+3);    // 3.ROLE
static bit RELAY4   @ ((unsigned)&PORTB*8+4);    // 4.ROLE
static bit RELAY5   @ ((unsigned)&PORTB*8+5);    // 5.ROLE

unsigned char cnt;
unsigned char icnt;
unsigned char keypress;
bit btnstate0;
bit btnstate1;
bit btnstate2;
   main(){

      TRISB=0x00;
      TRISA=0xFF;
      PORTB=0x00;
      btnstate0=0;
      btnstate1=0;
      btnstate2=0;
      cnt=0;
      icnt=0;
      DelayMs(10);



      while(1){

         TRISB=0x00;
         TRISA=0xFF;
         DelayMs(10);
//------------------------------------------------------         
         if(buton0==1){
            icnt=0;
            for(cnt=0;cnt<=20;++cnt) {
               if(buton0==1){
                  DelayMs(5);
                  icnt++;
               }
            }
            if(icnt>18){
               keypress=1;
               while(keypress==1){
                  keypress=buton0;
               }
               if(btnstate0==0){
                  btnstate0=1;                  
               }
               else btnstate0=0;
   
            }
         
         }   
//------------------------------------------------------      
      
         if(buton1==1){
            icnt=0;
            for(cnt=0;cnt<=20;++cnt) {
               if(buton1==1){
                  DelayMs(5);
                  icnt++;
               }
            }
            if(icnt>18){
               keypress=1;
               while(keypress==1){
                  keypress=buton1;
               }
               if(btnstate1==0){
                  btnstate1=1;
                  break;
               }
               else btnstate1=0;
               
            }         
         }   
//------------------------------------------------------
         if(buton2==1){
            icnt=0;
            for(cnt=0;cnt<=20;++cnt) {
               if(buton2==1){
                  DelayMs(5);
                  icnt++;
               }
            }
            if(icnt>18){
               keypress=1;
               while(keypress==1){
                  keypress=buton2;
               }
               if(btnstate2==0){
                  btnstate2=1;
                  break;
               }
               else btnstate2=0;

               
            }         
         }   
//------------------------------------------------------
         if(btnstate0==1){
            RELAY3=1;
         }
         if(btnstate0==0){
            RELAY3=0;
         }
//------------------------------------------------------
         if(btnstate1==1){
            RELAY1=1;
            RELAY2=1;
            RELAY4=1;
            RELAY5=1;
         }
         if(btnstate1==0){
            RELAY1=0;
            RELAY2=0;
            RELAY4=0;
            RELAY5=0;

         }
//------------------------------------------------------
         if(btnstate2==1){
            RELAY0=1;
         }
         if(btnstate2==0){
            RELAY0=0;
         }
//------------------------------------------------------




      }
   }
İnsanlar 3 guruba ayrılırlar. 1- Birşeyler yapıp üretmeye çalışan küçük bir gurup. 2- Birşeyler yapanları hayranlıkla ve takdirle izleyen büyük bir gurup. 3- Hiç birşeyden haberi olmadan yaşayan devasa yığınlar....

salim ALTIN

Mesajda smiley olarak gözüken yerler şöyle:
if(icnt>1 8 ){

Birde delay programı var:
/*
*   Delay functions
*   See delay.h for details
*
*   Make sure this code is compiled with full optimization!!!
*/

#include   "delay.h"

void
DelayMs(unsigned char cnt)
{
#if   XTAL_FREQ <= 2MHZ
   do {
      DelayUs(996);
   } while(--cnt);
#endif

#if    XTAL_FREQ > 2MHZ   
   unsigned char   i;
   do {
      i = 4;
      do {
         DelayUs(250);
      } while(--i);
   } while(--cnt);
#endif
}
İnsanlar 3 guruba ayrılırlar. 1- Birşeyler yapıp üretmeye çalışan küçük bir gurup. 2- Birşeyler yapanları hayranlıkla ve takdirle izleyen büyük bir gurup. 3- Hiç birşeyden haberi olmadan yaşayan devasa yığınlar....

salim ALTIN

smiley gözükmesin diye 18 yazısının arasını açmam gerekti. orası 18 yani
İnsanlar 3 guruba ayrılırlar. 1- Birşeyler yapıp üretmeye çalışan küçük bir gurup. 2- Birşeyler yapanları hayranlıkla ve takdirle izleyen büyük bir gurup. 3- Hiç birşeyden haberi olmadan yaşayan devasa yığınlar....

byka

Arkadaslar bir mesajın içine ''code'' yazmak için ''kod görüntüleme''--Code-- özelligini kullanın



#define XTAL_FREQ 4MHZ

#include "pic.h"
#include "delay.c"

static bit buton0	@ ((unsigned)&PORTA*8+0);	 // buton0	
static bit buton1	@ ((unsigned)&PORTA*8+1);	 // buton1
static bit buton2	@ ((unsigned)&PORTA*8+2);	 // buton0


static bit RELAY0	@ ((unsigned)&PORTB*8+0);	 // 0.ROLE
static bit RELAY1	@ ((unsigned)&PORTB*8+1);	 // 1.ROLE
static bit RELAY2	@ ((unsigned)&PORTB*8+2);	 // 2.ROLE
static bit RELAY3	@ ((unsigned)&PORTB*8+3);	 // 3.ROLE
static bit RELAY4	@ ((unsigned)&PORTB*8+4);	 // 4.ROLE
static bit RELAY5	@ ((unsigned)&PORTB*8+5);	 // 5.ROLE

unsigned char cnt;
unsigned char icnt;
unsigned char keypress;
bit btnstate0;
bit btnstate1;
bit btnstate2;
	main(){

		TRISB=0x00;
		TRISA=0xFF;
		PORTB=0x00;
		btnstate0=0;
		btnstate1=0;
		btnstate2=0;
		cnt=0;
		icnt=0;
		DelayMs(10);



		while(1){

			TRISB=0x00;
			TRISA=0xFF;
			DelayMs(10);
//------------------------------------------------------			
			if(buton0==1){
				icnt=0;
				for(cnt=0;cnt<=20;++cnt) {
					if(buton0==1){
						DelayMs(5);
						icnt++;
					}
				}
				if(icnt>18){
					keypress=1;
					while(keypress==1){
						keypress=buton0;
					}
					if(btnstate0==0){
						btnstate0=1;						
					}
					else btnstate0=0;
	
				}
			
			}	
//------------------------------------------------------		
		
			if(buton1==1){
				icnt=0;
				for(cnt=0;cnt<=20;++cnt) {
					if(buton1==1){
						DelayMs(5);
						icnt++;
					}
				}
				if(icnt>18){
					keypress=1;
					while(keypress==1){
						keypress=buton1;
					}
					if(btnstate1==0){
						btnstate1=1;
						break;
					}
					else btnstate1=0;
					
				}			
			}	
//------------------------------------------------------
			if(buton2==1){
				icnt=0;
				for(cnt=0;cnt<=20;++cnt) {
					if(buton2==1){
						DelayMs(5);
						icnt++;
					}
				}
				if(icnt>18){
					keypress=1;
					while(keypress==1){
						keypress=buton2;
					}
					if(btnstate2==0){
						btnstate2=1;
						break;
					}
					else btnstate2=0;

					
				}			
			}	
//------------------------------------------------------
			if(btnstate0==1){
				RELAY3=1;
			}
			if(btnstate0==0){
				RELAY3=0;
			}
//------------------------------------------------------
			if(btnstate1==1){
				RELAY1=1;
				RELAY2=1;
				RELAY4=1;
				RELAY5=1;
			}
			if(btnstate1==0){
				RELAY1=0;
				RELAY2=0;
				RELAY4=0;
				RELAY5=0;

			}
//------------------------------------------------------
			if(btnstate2==1){
				RELAY0=1;
			}
			if(btnstate2==0){
				RELAY0=0;
			}
//------------------------------------------------------




		}
	}
DWIN LCD Satış Türkiye email:info@kamantek.com  web:http://www.kamantek.com/shop/index.php