اطلاعیه

Collapse
No announcement yet.

ارور برنامه avr

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

    #16
    پاسخ : ارور برنامه avr

    نوشته اصلی توسط mohsen74 نمایش پست ها
    مهندس تغییراتی تو کد بصورت دستی دادم که فقط یک ارور می گیره اونم مربوط به همون atol هست در مورد این دستور تو کتاب جابرالوندی استفاده کرده تو یه برنامه تو صفحه 224 که جلوش توضیح داده :
    کد:
    num=atol(str_num)
    این کد برا تبدیل رشته کاراکتری تنظیم شده به عدد صحیحه .
    تابع رو برا گرفتن رشته صفر و یک های درون آرایه a می خوام که درون رجیستر پورت c نشون داده بشه وبعدش بر اساس وزن بیتی که داره اندیکس یک مقدار درون آرایه out رو به خروجی پورت a ببره راهی بنظرتون می رسه؟
    کد:
    #include 
    #define zero PORTB.0
    #define one PORTB.1
    #define mode PORTB.2
    unsigned char out[15]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
    int a[4];
    int i=0;
    void enter (int c[],unsigned char b[]){
    int x;
    x = atoi(c);
    PORTC = x;
    PORTA = b[x];
    }
    
    
    void main(void)
    {
     PORTB = 0xFF;
     DDRB = 0x00;
     PORTA = 0x00;
     DDRA = 0xFF;
     PORTC = 0x00;
     DDRC = 0xFF;
    
    
    while (1)
          {
                if (zero==0){
                   if (i < 3){
                       a[i]=0;
                       i++;
                       }
                   if (i==3){
                       a[i]=0;
                       enter(a,out);
                       i = 0;
                    }
                   while (zero==0){};
                }
                if (one==0) {
                   if (i < 3){
                       a[i]=1;
                       i++;
                   }
                   if (i==3){
                       a[i]=1;
                       enter(a,out);
                       i = 0;
                   }
                   while (one==0){};
                }
    
    
          }
    }
    من کدتون رو بررسی کردم واینجوری فهمیدم که قرار دو کلید با اسم zero و one وجود داشته باشه که چهار مقدار صفر یا یک گرفته بگه که این عدد چهاربیتی شامل صفر و یک چه مقداری داره و بر اساس اون تصمیم بگیره! خوب کاری نداره شما جای اون تابعatoi یا هرچیز دیگه ای میتونید از تابع زیر استفاده کنید:
    int f(int *array){
    int r = 0;
    r = array[0] + array[1]*2 + array[2]*4 + array[3]*8;
    return r;
    }

    کافیه بجای
    x = atoi(c);

    بنویسید :
    x = f(c);

    اگر ارزش عددی مورد نظر شما با چیزی که من در نظر گرفتم برعکس هم هستن، میتونید جای 0، 1، 2 و 3 رو با 3، 2، 1 و 0 در بدنه تابع عوض کنید.
    جدیدترین ویرایش توسط hossein.m98; ۰۷:۵۴ ۱۳۹۸/۰۸/۰۲.

    دیدگاه


      #17
      پاسخ : ارور برنامه avr

      واقعاً دست خوش مهندس ولی هنوز تستش نکردم الان کاری پیش اومد ولی تا فردا جوابشو می دم ممنون

      دیدگاه


        #18
        پاسخ : ارور برنامه avr

        سلام
        وقتی شما آرایه تون از نوع فلش هست باید به تابع هم ورودی از نوع فلش بدید
        این قسمت رو تصحیح کردم
        flash unsigned char out[15]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
        int a[4];
        int i=0;
        void enter (int a[],flash unsigned char *b){
        int x;
        x = atol(a);
        PORTC = x;
        PORTA = b[x];
        }
        اللهم صل علی محمد و ال محمد و عجل فرجهم
        پیامبر اکرم(ص):زکات علم نشر آن است.
        در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

        دیدگاه

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