اطلاعیه

Collapse
No announcement yet.

مشکل در کدنویسی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در کدنویسی

    سلام دوستان

    یه کدی نوشتم برای رقص نور کلید هایی رو هم برای تغییر سرعت قرار دادم اما به درسی کار نمیکنه کدش رو قرار میدم دوستان عیب کارمو بهم بگن

    کد:
    #include <mega32.h>
    #include <delay.h>
    #define xtal 1000000
    
    int m=300;
    int time();
    void main(void)
    {
    
    PORTA=0x07;
    DDRA=0xF8;
    
    
    PORTB=0x00;
    DDRB=0xFF;
    
    PORTC=0x00;
    DDRC=0xFF;
    
    PORTD=0x00;
    DDRD=0xFF;
       
    while (1)
       {  
        m=time();
        
        
        
        // bekhshe red
        
        PORTD=0Xff;
        PORTC.4=1;
        PORTC.5=1;
        delay_ms (m);
        PORTA.5=0; 
        //
        delay_ms (m); 
        PORTD.0=0; 
        delay_ms (m);
        PORTD.5=0; 
        delay_ms (m); 
        PORTD.1=0; 
        delay_ms (m);
        PORTD.6=0; 
        delay_ms (m);
        PORTD.2=0; 
        delay_ms (m);
        PORTD.7=0; 
        delay_ms (m);
        PORTD.3=0; 
        delay_ms (m);
        PORTC.4=0;
        delay_ms (m);
        PORTD.4=0; 
        delay_ms (m); 
        PORTC.5=0;
        delay_ms (m);  
        //
        PORTA.5=1;
        //
        // bekhshe green 
        PORTB=0Xff; 
        PORTC.2=1;
        PORTC.3=1;
        delay_ms (m);
        PORTB.0=0; 
        delay_ms (m);
        PORTB.4=0; 
        delay_ms (m); 
        PORTB.1=0; 
        delay_ms (m);
        PORTB.5=0; 
        delay_ms (m);
        PORTB.2=0; 
        delay_ms (m);
        PORTB.6=0; 
        delay_ms (m);
        PORTB.3=0; 
        delay_ms (m); 
        PORTB.7=0; 
        delay_ms (m);  
        PORTC.2=0; 
        delay_ms (m); 
        PORTC.3=0; 
        delay_ms (m); 
       
       } ;
    }
    int time()
    {
      if(PINA.0)
       m=m+30;
      else if(PINA.1)     
      {
        m=m-30;
        if(m<=0)
          m=30;  
      } 
      else if(PINA.2)
        m=-1;
              
      return m;  
    }

    #2
    پاسخ : مشکل در کدنویسی

    سلام
    به نظر من عیب برنامه شما علاوه بر نوع خوندن کلید در روتین برنامه اس یعنی اگر مقدار m شما زیاد بشه باید کل برنامه جرا بشه که چند ثانیه ای طول می کشه بعد در کسری از ثانیه کلید چک میشه و از خوندن کلید رد میشه و دوباره چند ثانیه بعد دوباره کلید چک میشه .....
    موقع اجرای برنامه شما انگار کلید 1بار کار می کنه 100 بار کار نمیکنه چون شما باید دقیقا زمانی که میکرو کلید رو چک میکنه کلید فشار بدید در غیر این صورت میکرو متوجه فشار دان کلید نمیشه
    یا باید کلید ها با اینتراپت خارجی باشه(اگه برد رو نزدید)و یا باید با timer در ثانیه چند بار (حدودا 20 بار در ثانیه)کلید ها رو چک کنید(اگر برد طراحی و چاپ شده)

    دیدگاه


      #3
      پاسخ : مشکل در کدنویسی

      برد زده شده سیم کشی هاش هم انجام شده اگر بتونید تو کدنویسیش راهنماییم کنید که درست بشه با همین شرایطی که داره ممنون میشم

      دیدگاه


        #4
        پاسخ : مشکل در کدنویسی

        دوستمون درست میگن. بهتره بجای delay از وقفه تایمر برای تولید زمان استفاده کنی که کامپایلر روی delay های زیادی که گذاشتید گیر نکنه و بتونه کارشو انجام بده.
        www.gam-co.blogsky.com

        دیدگاه


          #5
          پاسخ : مشکل در کدنویسی

          نکته اول اینه که مدار بسته شده و نکته دوم هم این هست که بنده کار با تایمر کانتر ها رو در زبان سی بلد نیستم

          دیدگاه


            #6
            پاسخ : مشکل در کدنویسی

            کد:
            #include <mega32.h>
            #include <delay.h>
            #define xtal 1000000
            
            unsigned int m=300;
            int time();
            interrupt [TIM0_OVF] void timer0_ovf_isr(void)
            {  #asm ("cli")//az kar andakhtan vaghfe
               m=time();//chek kardan dokme ha
               while(PINA.0==0 || PINA.1==0 || PINA.2==0);//sabr ta zamani ke dokme raha beshe
               #asm ("sei")//faal kardan vaghfe
            }
            void main(void)
            {
            //regisser haye timer 1//prescale 8
            TCCR0=0x02;
            TIMSK=0x01;
            #asm("sei")//faal kardan vaghfe
            PORTA=0x07;
            DDRA=0xF8;
            
            
            PORTB=0x00;
            DDRB=0xFF;
            
            PORTC=0x00;
            DDRC=0xFF;
            
            PORTD=0x00;
            DDRD=0xFF;
            
            while (1)
               {
                // bekhshe red
            
                PORTD=0Xff;
                PORTC.4=1;
                PORTC.5=1;
                delay_ms (m);
                PORTA.5=0;
                //
                delay_ms (m);
                PORTD.0=0;
                delay_ms (m);
                PORTD.5=0;
                delay_ms (m);
                PORTD.1=0;
                delay_ms (m);
                PORTD.6=0;
                delay_ms (m);
                PORTD.2=0;
                delay_ms (m);
                PORTD.7=0;
                delay_ms (m);
                PORTD.3=0;
                delay_ms (m);
                PORTC.4=0;
                delay_ms (m);
                PORTD.4=0;
                delay_ms (m);
                PORTC.5=0;
                delay_ms (m);
                //
                PORTA.5=1;
                //
                // bekhshe green
                PORTB=0Xff;
                PORTC.2=1;
                PORTC.3=1;
                delay_ms (m);
                PORTB.0=0;
                delay_ms (m);
                PORTB.4=0;
                delay_ms (m);
                PORTB.1=0;
                delay_ms (m);
                PORTB.5=0;
                delay_ms (m);
                PORTB.2=0;
                delay_ms (m);
                PORTB.6=0;
                delay_ms (m);
                PORTB.3=0;
                delay_ms (m);
                PORTB.7=0;
                delay_ms (m);
                PORTC.2=0;
                delay_ms (m);
                PORTC.3=0;
                delay_ms (m);
            
               } ;
            }
            int time()
            {
              if(~PINA.0)//eslah shod
               m=m+30;
              else if(~PINA.1)//eslah shod
              {
                m=m-30;
                if(m<=0)
                  m=30;
              }
              else if(~PINA.2)//eslah shod
                m=-1; //chera manfi yek?????????????????????????
            
              return m;
            }
            آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

            دیدگاه


              #7
              پاسخ : مشکل در کدنویسی

              از لطفتون بی نهایت ممنون میرم تست کنم

              دیدگاه

              لطفا صبر کنید...
              X