اطلاعیه

Collapse
No announcement yet.

کمک در تشخیص خطا در کدویژن

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

    کمک در تشخیص خطا در کدویژن

    سلام خدمت اساتید.
    من برنامه ی ماشین حساب مهندسی رو که داخل کتاب مهندس الوندی هست عینا" توی کدویژن نوشتم.برنامه به این صورته که برنامه ی اسکن صفحه کلید به نام keypad.c به صورت فایل الحاقی به برنامه ی اصلی به نام calculator.c اضافه میشه و توی برنامه، keypad.h فراخوانی میشه
    اما بعد از فراخوانی،وقتی کامپایل میکنم حدود 15 تا خطا دارم که بیشتر اینطوری هستن:
    undifined PORTD
    undifined PIND
    undifined DDRDD
    undifined PORTC
    undifined PINC
    undifined DDRC
    و یکی دوتا خطای دیگه.توی نسخه های دیگه از کدویژن هم انجام دادم و خطا گرفتم.کد برنامه رو میذارم.لطفا اگر تونستید،کامپایلش کنید و مشکلو بهم بگید.مثل همیشه روی کمکتون حساب میکنم.ممنون

    کد برنامه اصلی calculator.c:
    کد:
    # define pp 3.14159327
    # define SIN PINC.0
    # define COS PINC.1
    # define TAN PINC.2
    # define LOG PINC.3
    # define SHIFT PINC.4
    #include <mega16a.h>
    #include <delay.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    #asm
      .equ _lcd_port=0x1B
      #endasm
    #include <lcd.h>
    #include "keypad.h"
    float number1 =0;
    float number2 =0;
    float result=0.0;
    static char last_key;
    unsigned char mmz=0,count=0,num_dis=0;
    char *save_str="";
    void display(){
    char lcd_buf[32];
    sprintf(lcd_buf,"%f",number1);
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_puts(lcd_buf);
    delay_ms(500);
    }
    void config_number(float f_number){
    static float division[]={1,10,100,1000,10000,100000,1000000};
    f_number=(f_number/division[mmz]);
    result=f_number;
    }
    void sin_DRG(){
    number1 = atof(save_str);
    *save_str=NULL;
    config_number(number1);
    number1=result;
    number1=(number1*pp)/180;
    number1=sin(number1);
    num_dis=1;
    count=0;
    mmz=0;
    last_key='+';
    display();
    while(SHIFT==1 && SIN==0) {};
    }
    void arcsin_DRG(){
    number1 = atof(save_str);
    *save_str=NULL;
    config_number(number1);
    number1=result;
    number1=asin(number1);
    number1=(number1*180)/pp;
    display();
    num_dis=1;
    count=0;
    mmz=0;
    last_key='+';
    while(SHIFT==0 && SIN==0) {};
    }
    void cos_DRG(){
    number1 = atof(save_str);
    *save_str=NULL;
    config_number(number1);
    number1=result;
    number1=(number1*pp)/180;
    number1=cos(number1);
    num_dis=1;
    count=0;
    mmz=0;
    last_key='+';
    display();
    while(SHIFT==1 && COS==0) {};
    }
    void arccos_DRG(){
    number1 = atof(save_str);
    *save_str=NULL;
    config_number(number1);
    number1=result;
    number1=acos(number1);
    number1=(number1*180)/pp;
    num_dis=1;
    count=0;
    mmz=0;
    last_key='+';
    display();
    while(SHIFT==0 && COS==0) {};
    }
    //
    void tan_DRG(){
    number1 = atof(save_str);
    *save_str=NULL;
    config_number(number1);
    number1=result;
    number1=(number1*pp)/180;
    number1=tan(number1);
    number1=number1+0.0001;
    num_dis=1;
    count=0;
    mmz=0;
    last_key='+';
    display();
    while(SHIFT==1 && TAN==0) {};
    }
    //
    void arctan_DRG(){
    number1 = atof(save_str);
    *save_str=NULL;
    config_number(number1);
    number1=result;
    number1=atan(number1);
    number1=(number1*180)/pp;
    number1=number1+0.0001;
    num_dis=1;
    count=0;
    mmz=0;
    last_key='+';
    display();
    while(SHIFT==1 && TAN==0) {};
    }
    //
    void log_10(){
    number1 = atof(save_str);
    *save_str=NULL;
    config_number(number1);
    number1=result;
    number1=log10(number1);
    num_dis=1;
    count=0;
    mmz=0;
    last_key='+';
    display();
    while(LOG==0) {};
    }
    signed char test_key (char key){
    if ((key == '.')|| ((key >= '0') && (key <= '9')))return 1;
    else return 0;
    }
    //
    void ack_opretion(char opretion){
    signed char res = 0;
    switch (opretion){
    case '+' : number1 += number2;break;
    case '-' : number1 -= number2;break;
    case '*' : number1 *= number2;break;
    case '%' :
    if (number2 != 0) number1 /= number2;
    else {res = 2;break;}
    }if (res == 0){
    if ((number1>=-999999999)&&(number1<=999999999)) display();
    else {
    lcd_gotoxy(0,0);
    lcd_putsf("error number");
    delay_ms(1000);
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_putchar('0');
    lcd_gotoxy(0,0);
    }
    }
    if (res == 2){
    lcd_clear();
    lcd_putsf("*ERROR*");
    }
    }
    //
    void calculator(){
    unsigned char key=0;
    char *helper="";
    signed char data_in;
    number1=0;
    number2=0;
    last_key=0;
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_putsf("0");
    data_in=0;
    lcd_gotoxy(0,0);
    for (;;){
    start:
    key = keypad();
    if (test_key(key)){
    if(num_dis==1){
    lcd_clear();
    num_dis=0;
    }
    if (data_in != 9){
    data_in++;
    if((key=='.')&&(count!=1)){
    count=1;
    data_in--;
    lcd_putchar(key);
    goto start;
    }
    if(key=='.'){
    data_in--;
    goto start;
    }
    lcd_putchar(key);
    if(count==1) mmz++;
    helper=0;
    key&=0x0f;
    itoa(key,helper);
    strcat(save_str,helper);
    }
    }
    else{
    if(data_in != 0){
    if (last_key == 0){
    number1=atof(save_str);
    *save_str=NULL;
    config_number(number1);
    number1=result;
    count=0;
    mmz=0;
    num_dis=1;
    }
    else{
    number2=atof(save_str);
    *save_str=NULL;
    config_number(number2);
    number2=result;
    count=0;
    mmz=0;
    num_dis=1;
    }
    }
    data_in=0;
    if (last_key != 0) ack_opration(last_key);
    if (key != '=') last_key = key;
    else last_key = 0;
    }
    }
    }
    void main(){
    setting();
    calculator();
    }
    کد keypad.h:
    کد:
    unsigned char keypad();
    void setting();
    کد keypad.c:
    کد:
    #define c1 PIND.4
    #define c2 PIND.5
    #define c3 PIND.6
    #define c4 PIND.7
    #define SIN PINC.0
    #define COS PINC.1
    #define TAN PINC.2
    #define LOG PINC.3
    #define SHIFT PINC.4
    flash char row[]={~1,~2,~4,~8};
    flash char data_key[]={
    '7','8','9','%',
    '4','5','6','*',
    '1','2','3','-',
    '.','0','=','+'};
    unsigned char ac,table;
    unsigned int r;
    //
    unsigned char keypad(){
    while (1){
    for (r=0;r<4;r++){
    ac=4;
    PORTD =row[r];
    DDRD=0x0f;
    if (c1==0) ac=0;
    if (c2==0) ac=1;
    if (c3==0) ac=2;
    if (c4==0) ac=3;
    //
    if (LOG==0) log_10();
    if (SHIFT==1 && SIN==0) sin_DRG();
    if (SHIFT==1 && COS==0) cos_DRG();
    if (SHIFT==1 && TAN==0) tan_DRG();
    if (SHIFT==0 && SIN==0) arcsin_DRG();
    if (SHIFT==0 && COS==0) arccos_DRG();
    if (SHIFT==0 && TAN==0) arctan_DRG();
    if (!(ac==4)){
    table=data_key[(r*4)+ac];
    while (c1==0){}
    while (c2==0){}
    while (c3==0){}
    while (c4==0){}
    delay_ms(20);
    while (c1==0){}
    while (c2==0){}
    while (c3==0){}
    while (c4==0){}
    delay_ms(20);
    return table;
    }
    }
    };
    }
    //
    void setting(){
    PORTD=0xff;
    DDRD=0x0f;
    PORTC=0xFF;
    DDRC=0x00;
    lcd_init(16);
    }

    #2
    پاسخ : کمک در تشخیص خطا در کدویژن

    باسلام از چه ورژنی از کدویژن استفاده میکنید؟
    شاید اگر در اینجا a را حذف کنید درست بشه
    #include <mega16a.h>

    دیدگاه


      #3
      پاسخ : کمک در تشخیص خطا در کدویژن

      با زوار موافقم

      دیدگاه


        #4
        پاسخ : کمک در تشخیص خطا در کدویژن

        برداشتم نشد.شما کدوم نسخه رو پیشنهاد می کنید؟

        دیدگاه


          #5
          پاسخ : کمک در تشخیص خطا در کدویژن

          داداش من برنامت رو تو کدویژن گذاشتم ارور نداد! مشکل کرکه!

          دیدگاه


            #6
            پاسخ : کمک در تشخیص خطا در کدویژن

            دمت گرم.از کدوم نسخه استفاده میکنی؟لینکی چیزی ازش نداری؟
            میگم نکنه مشکل از الحاق کردن من باشه؟واسه الحاق کردن باید فایل سورس کیپد که با پسوند .c در مسیر پروژه ذخیره شده به سورس ماشین حساب اضافه بشه.درسته؟

            دیدگاه


              #7
              پاسخ : کمک در تشخیص خطا در کدویژن

              CodeVisionAVR V2.05.3
              نه متاسفانه لینکی ندارم! چون بصورت دی وی دی از یکی از دوستان گرفتم!
              حجمش زیاده وگرنه برات پ می کردم!

              فقط کافیه فایل هدر کیپد رو با پسوند h در مسیر پروژه بذاری و در برنامه اصلی اینکلودش کنی!

              :job: :job:

              دیدگاه


                #8
                پاسخ : کمک در تشخیص خطا در کدویژن

                محض اطلاع دوستان
                یه سری برنامه های کتاب الوندی کار نمیکنه .
                نمونش ساعت باds1307
                الگوریتم شمسی میلادی و میلادی شمسیش درسته ولی ارتباطش با قطعه غلطه .
                اِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
                کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

                دیدگاه

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