اطلاعیه

Collapse
No announcement yet.

مشکل با c

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

    مشکل با c

    با سلام
    من یه برنامه با c نوشتم البته چون با c خیلی وارد نیستم نمیدونم اشکال از برنامه هست یا از سخت افزار. مشکل هم اینجاست
    که من یه متغیر به نام e تعریف کردم و با وقفه خارجی، 1 واحد به e اضافه میشه و تو حلقه while نوشتم اگه e یک
    بود پرت c.0 یک بشه اما پرت c یک نمیشه. فایل برنامه و فایل پروتئوس را چه جوری بزارم که ببینید

    #2
    پاسخ : مشکل با c

    منم خیلی دنبالش بودم c منم ضغیفه اما کاری از دستمون بر بیاد دریغ نمی کنیم

    کد:
    #include <lcd.h>
    #include <stdlib.h>
    unsigned long counter=0;
    unsigned char str_count[8];
    
    // External Interrupt 2 service routine
    interrupt [EXT_INT2] void ext_int2_isr(void)
    {
    counter++;
    lcd_gotoxy(0,0);
    lcd_putsf("count:");
    lcd_gotoxy(0,1);
    ltoa(counter,str_count);
    lcd_puts(str_count);
    }
    void main(void)
    {
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: On
    // INT2 Mode: Falling Edge
    GICR|=0x20;
    MCUCR=0x00;
    MCUCSR=0x00;
    GIFR=0x20;
    while (1)
       {
       // Place your code here
    
       };
    }

    این فقط یکی اضافه میکنه تو توو تابع وقفه بزن portc.0=1; همین
    رجیسترهای دیگتم متناسب با کارت بنویس ورودی خروجیا

    برو حالشو ببر

    دیدگاه


      #3
      پاسخ : مشکل با c

      نوشته اصلی توسط ALIME
      منم خیلی دنبالش بودم c منم ضغیفه اما کاری از دستمون بر بیاد دریغ نمی کنیم

      کد:
      #include <lcd.h>
      #include <stdlib.h>
      unsigned long counter=0;
      unsigned char str_count[8];
      
      // External Interrupt 2 service routine
      interrupt [EXT_INT2] void ext_int2_isr(void)
      {
      counter++;
      lcd_gotoxy(0,0);
      lcd_putsf("count:");
      lcd_gotoxy(0,1);
      ltoa(counter,str_count);
      lcd_puts(str_count);
      }
      void main(void)
      {
      // External Interrupt(s) initialization
      // INT0: Off
      // INT1: Off
      // INT2: On
      // INT2 Mode: Falling Edge
      GICR|=0x20;
      MCUCR=0x00;
      MCUCSR=0x00;
      GIFR=0x20;
      while (1)
         {
         // Place your code here
      
         };
      }

      این فقط یکی اضافه میکنه تو توو تابع وقفه بزن portc.0=1; همین
      رجیسترهای دیگتم متناسب با کارت بنویس ورودی خروجیا

      برو حالشو ببر
      شما برنامتون را چطوری به این صورت اینجا قرار دادین تا منم برنامه خودم را بزارم ببینید

      دیدگاه


        #4
        پاسخ : مشکل با c

        از گزینه کد استفاد کنید
        در ضمن فیوز بیت جی تگ رو که غیر فعال میکنید؟

        دیدگاه


          #5
          پاسخ : مشکل با c

          نوشته اصلی توسط علی علی پور ریکنده
          از گزینه کد استفاد کنید
          در ضمن فیوز بیت جی تگ رو که غیر فعال میکنید؟
          کد:
          #include <mega32.h>
          #include <delay.h>
          volatile char e=0;   
          void main(){
          bit a,b,c,d;
          DDRA=0xff;
          DDRB=0x00;
          DDRC=0xff; 
          PORTB=0xff;
          PORTC=0xff;
          PORTC=0;
          MCUCR=0b00000011;
          GICR=0b01000000;
          GIFR=0b01000000;
          while(1){
          a=PINB.0;
          b=PINB.1;
          c=PINB.2;                                                         
          d=PINB.3;
          PORTA.0=((~a&~b&c&~d)|(a&~b&~c&~d));
          PORTA.1=((~a&b&c&~d)|(a&~b&c&~d));
          PORTA.2=(~a&b&~c&~d);
          PORTA.3=((a&~b&~c&~d)|(a&b&c&~d)|(~a&~b&c&~d));
          PORTA.4=((a&~c&~d)|(a&~b&~c)|(a&c&~d)|(~a&~b&c&~d));
          PORTA.5=((b&~c&~d)|(a&~c&~d)|(a&b&c&~d));
          PORTA.6=((~a&~b&~c&~d)|(a&~b&~c&~d)|(a&b&c&~d));
          if(e==1){PORTC.0=1;
          PORTC.1=0;
          PORTC.2=0;
          }
          if(e==2){ PORTC.1=1;
          PORTC.0=0;
          PORTC.2=0;
          }
          if(e==3){ PORTC.2=1;
          PORTC.0=0;
          PORTC.1=0;
          }
          }
          }
          interrupt [EXT_INT0] void int0(){
          ++e;
          }

          این برنامه.
          رااجع به اون فیوز بیت هم که گفتین چیزی نمی دونم.کجا باید غیر فعالش کنم؟

          اشکال این برنامه اینه که قسمت وقفه کار نمی کنه.یعنی به e یه واحد اضافه نمیشه.

          دیدگاه


            #6
            پاسخ : مشکل با c

            نوشته اصلی توسط electroactive

            رااجع به اون فیوز بیت هم که گفتین چیزی نمی دونم.کجا باید غیر فعالش کنم؟

            اشکال این برنامه اینه که قسمت وقفه کار نمی کنه.یعنی به e یه واحد اضافه نمیشه.
            پورت c روش jtag هست واسه همین نمیشه اون رو بعنوان خروجی استفاده کرد تو همون صفحه که پروگرام می کنید میکرو تون رو ، پایین سمت راست فیوز بیت ها رو گذاشته و هر کدومش رو میشه علامتگذاری کرد شما فیوز بیت jtag رو باید تیک بزنید و بعد از منوی program گزینه fusebits رو بزنید
            Don't hesitate to ask any question ..

            دیدگاه


              #7
              پاسخ : مشکل با c

              نوشته اصلی توسط syavash_kasraeee
              پورت c روش jtag هست واسه همین نمیشه اون رو بعنوان خروجی استفاده کرد تو همون صفحه که پروگرام می کنید میکرو تون رو ، پایین سمت راست فیوز بیت ها رو گذاشته و هر کدومش رو میشه علامتگذاری کرد شما فیوز بیت jtag رو باید تیک بزنید و بعد از منوی program گزینه fusebits رو بزنید
              ولی مشکل این نیست چون من به طور دستی eرا تو برنامه یک کردم و پرت c.0 یک شد اما از طریق وقفه این اتفاق نمیفنه.

              دیدگاه


                #8
                پاسخ : مشکل با c

                احتمالا وقفه ها رو بطور عمومی فعال نکردین. وقفه پیش میاد اما نمیتونه اجرا بشه. قبل از while خط زیر رو بذارین:

                #asm("sei&quot

                دیدگاه


                  #9
                  پاسخ : مشکل با c

                  نوشته اصلی توسط reza_agha
                  احتمالا وقفه ها رو بطور عمومی فعال نکردین. وقفه پیش میاد اما نمیتونه اجرا بشه. قبل از while خط زیر رو بذارین:

                  #asm("sei&quot
                  برنامه را گذاشتم. بی زحمت یه نگاه بندازین ببینید مشکلی داره؟

                  دیدگاه


                    #10
                    پاسخ : مشکل با c

                    همون موردی رو که عرض کردم قبل از while بذارین. قاعدتا باید مشکلتون حل شه.

                    دیدگاه

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