اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام دوستان....من برای پروژم ی برنامه نوشتم که وضعیت یک پایه رو توی حافظه eeprom ذخیره میکنه تا اگه برق رفت و اومد توی همون حالت بمونه...در ضمن از طریق کلید و پورت سریال(کامپیوتر هم دسترسی دارم برای کنترل کردنش)یه مشکل خیلی عجیب ترم داشتم این بود که وقتی دوتی پایه مثلا A0 و A1 رو خروجی تعریف میکردم LED ها چشمک میزدن!!!و اصلا درست کار نمیکردن ولی وقتی مثلا A0 و D0 رو تعریف میکردم درست میشد!!!!در صورتی که هیچ ربطی نداره!!دوستان خواهش میکنم کمکم کنید....موقع بالا اومدن ی چشمک میزنه LED ها و بعدش همون حالت ذخیره شده توی EEPROM رو در بر میگیره....راهی هست که اون چشمکه زده نشه؟؟؟
    میکرو استفاده شده هم PIC16F877A هست.
    کد:
    char uart_rd;
    char uart_data_2;
    //int edge_1;
    //int edge_2;
    unsigned char edge_1,pstate=0 ,k,edge_2,kk;
    int butstate_1;
    int butstate_2;
    int last_butstate_1;
    int last_butstate_2;
    
    
    void main() {
     //ANSEL = 0;           // Configure AN pins as digital
     //ANSELH = 0;
      
     //TRISD.F2 = 0;
     //TRISD.F3 = 0;
     
    
     UART1_Init(9600);        // Initialize UART module at 9600 bps
     Delay_ms(200);         // Wait for UART module to stabilize
    
    
     TRISB2_bit = 0;             //output ports
     TRISB1_bit = 0;
    
     TRISD0_bit = 0;             //output ports
     TRISD1_bit = 0;
    
     TRISB4_bit = 1;                // set RB0 pin as input
     TRISB5_bit = 1;
    
    
     /*
     PORTA.F0 = 1;
     Delay_ms(50);
     PORTA.F0 = 0;
     Delay_ms(50);
     PORTA.F0 = 1;
     Delay_ms(50);
     PORTA.F0 = 0;
     Delay_ms(50);
     */
    
     pstate = 1;
    
    
     while (1) { 
     
        __asm CLRWDT;
     
        butstate_1 = PORTB.F4;
        butstate_2 = PORTB.F5;
        
    
        uart_rd = UART1_Read();   // read the received data,
    
      
      
      if( uart_rd == 'W')
      {
    
        {
          edge_1 = 10;
          //s_1=1;
        }
    
      }
      else if( uart_rd == 'w')
      {
         {
          edge_1 = 20;
          //r_1=1;
         }
      }
      
      
      if( uart_rd == 'C')
      {
        {
          edge_2 = 10;
          //ss_1=1;
        }
    
      }
      else if( uart_rd == 'c')
      {
         {
          edge_2 = 20;
          //rr_1=1;
         }
      }
      
    
    
    
      if( butstate_1 != last_butstate_1)
      {
       if(butstate_1 == 1)    // agar kilid 1 feshar dade shod....
        {
        
    
         
    
         edge_1 = 10;
         //s_2 = 1;
    
        }
        else if(butstate_1 == 0)
        {
    
    
         edge_1 = 20;
         //s_2 = 1;
    
        }
        
    
      }
      
      if( butstate_2 != last_butstate_2)
      {
       if(butstate_2 == 1)    // agar kilid 2 feshar dade shod....
        {
         edge_2 = 10;
         //ss_2 = 1;
        }
        else if(butstate_2 == 0)
        {
         edge_2 = 20;
         //rr_2 = 1;
        }
      }
    
    
    
      
       last_butstate_1 = butstate_1;
       last_butstate_2 = butstate_2;
    
    
      
      
      if(pstate == 1)
       {
        pstate = 0;
        k = EEPROM_Read(0x03);
        kk = EEPROM_Read(0x08);
        edge_1 = k;
        edge_2 = kk;
       }
      
    
       if(edge_1 == 10)
       {
       PORTB.F1 = 1;
       PORTD.F0 = 1;
       EEPROM_Write(0x03, 10);
       Delay_ms(150);
       }
       else if(edge_1 == 20)
       {
       PORTB.F1 = 0;
       PORTD.F0 = 0;
       EEPROM_Write(0x03, 20);
       Delay_ms(150);
       }
       
       if(edge_2 == 10)
       {
       PORTB.F2 = 1;
       PORTD.F1 = 1;
       EEPROM_Write(0x08, 10);
       Delay_ms(150);
       }
       else if(edge_2 == 20)
       {
       PORTB.F2 = 0;
       PORTD.F1 = 0;
       EEPROM_Write(0x08, 20);
       Delay_ms(150);
       
       }
       
     }
    }

    #2
    پاسخ : مشکل با mikroc و راه اندازی اولیه پورت ها

    //TRISD.F2 = 0;
    //TRISD.F3 = 0;
    سلام
    این دستور بالا برای چی نوشتید؟؟؟

    اگر منظورتون d.2 و d.3 هست باید این طوری باشه TRISD.TRISD2

    اول اسم رجیستر رو بنویسید و بعد اسم بیت مورد نظر

    صفحه 59 دیتاشیت رو یه نگاه کنید

    عامل کليدي تمام موفقيتها " عمل کردن" است

    دیدگاه


      #3
      پاسخ : مشکل با mikroc و راه اندازی اولیه پورت ها

      اسن استاندارد uc هست توی user manual خودش نوشته شده برای خروجی تعریف کردن اینگونه باید بنویسیم...

      دیدگاه

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