اطلاعیه

Collapse
No announcement yet.

مشکل در تایمر 1 در ccs

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

    مشکل در تایمر 1 در ccs

    سلام.
    از دوستان کسی می دونه ایراد این کد که برای آزمایش تایمر1 و وقفه آن در ccs نوشتم چیه؟
    نمی دونم چرا عمل نمی کنه. من می خوام توسط یک کریستال اکسترنال 32.768kHZ که به پایه های t1oso و t1osi متصل کردم زمان دقیق یک ثانیه رو داشته باشم :angry:
    #include <18f452.h>
    #fuses HS
    #use delay(Clock=20000000)
    #include <math.h>
    #include <stdio.h>
    #define LCD_ENABLE_PIN PIN_d3
    #define LCD_RS_PIN PIN_d1
    #define LCD_RW_PIN PIN_d2
    #include <lcd.c>
    #int_TIMER1
    void TIMER1_isr(void)
    {
    int8 s,m,h;


    s=s+1;
    if(s==60){
    s=0;
    m=m+1;
    }
    if(m==60){
    m=0;
    h=h+1;
    }
    lcd_gotoxy(1,2);
    printf(lcd_putc," "
    lcd_gotoxy(1,2);
    printf(lcd_putc,"%u:%u:%u",h,m,s);

    }

    //-----------------------------------------------------------

    void main()
    {

    lcd_init();
    setup_timer_1(T1_EXTERNAL | T1_DIV_BY_1 | T1_CLK_OUT);
    enable_interrupts(INT_TIMER1);
    enable_interrupts(GLOBAL);

    while(true){
    set_timer1(32768);
    }
    }

    #2
    پاسخ : مشکل در تایمر 1 در ccs

    سلام.من CCS کار نکردم؛ولی میشه بپرسم چه ایرادی داره مگه؟ چطور تستش کردین؟ کجاش کار نمیکنه؟

    دیدگاه


      #3
      پاسخ : مشکل در تایمر 1 در ccs

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

      دیدگاه


        #4
        پاسخ : مشکل در تایمر 1 در ccs

        سلام دوست عزیزم
        باید بگم منم همین مشکلو داشتم اما مشکل اصلیم این بود که با پروتیوس میخواستم تستش کنم.عملی تستش کردم جواب گرفتم نمیدونم چرا تو پروتیوس جواب نمیداد
        اگه خواستید تا برنامشو بذارم واستون

        دیدگاه


          #5
          پاسخ : مشکل در تایمر 1 در ccs

          سلام.
          دیگه کلا ناامید شده بودم که کسی جواب بده.ممنون :wow: :wow: :wow: :wow: :wow:
          چون وقفه اش اصلا رخ نمیده.من متنی رو داخل وقفه اش گذاشتم که رو lcd چاپ شه ولی نمیشه.
          در ضمن من هم تو پروتوس چک کردم نشد.
          این یه قسمت از یه برنامه خیلی بزگتره که بعضی چیزهاش منوط به راه افتادن تایمر1 با کریستال ساعت هستش.برای زمان دقیق.

          دیدگاه


            #6
            پاسخ : مشکل در تایمر 1 در ccs

            آقای mohammadttl از شما هم ممنون میشم اگه اون برنامتون رو بزارید.

            دیدگاه


              #7
              پاسخ : مشکل در تایمر 1 در ccs

              دوست عزیز شمإ إومدی متغیرهإتو دإخل زیر برنإمه وقفه تعریف کردی و بعد یه ثإنیه دإری یکی إضإفه میکنی.خوب بإیدم کإر نکنه دإدإشم.إون متغیر هإ رو إز حإلت local به حإلت global ببر إنشإلله مشکلت حل میشه عزیز

              دیدگاه


                #8
                پاسخ : مشکل در تایمر 1 در ccs

                ضمن تشکر ، 1-باید بگم دوست عزیز من از متغیر ها در همون زیر برنامه وقفه دارم استفاده می کنم.
                2-برنامه رو که داشتم انتقال می دادم بخش های اضافه اش رو حذف کردم ، مثل همون بخشی که متغیر های گلوبال داشت و در تنه اصلی از مقادیر زمان استفاده می شد.
                3- من برنامه بالا رو با کلاک داخلی که راه می اندازم وقفه رخ می ده و زیر برنامه هم اجرا می شه.ولی کلاک اکسترنال که می شه دیگه هیچی!!!!!!!!!!؟؟؟؟؟؟؟؟؟
                این هم همون برنامه ولی با متغیر های گلوبال:


                #include <18f452.h>
                #fuses HS
                #use delay(Clock=20000000)
                #include <math.h>
                #include <stdio.h>
                #define LCD_ENABLE_PIN PIN_d3
                #define LCD_RS_PIN PIN_d1
                #define LCD_RW_PIN PIN_d2
                #include <lcd.c>
                int16 time[3]={0,0,0};
                #int_TIMER1
                void TIMER1_isr(void)
                {
                int8 s=0,m,h;
                time[0]=time[0]+1;
                if(time[1]==60){
                time[0]=0;
                time[1]=time[1]+1;
                }
                if(time[1]==60){
                time[1]=0;
                time[2]=time[2]+1;
                }
                s=time[0];
                m=time[1];
                h=time[2];
                lcd_gotoxy(1,1);
                printf(lcd_putc," "
                lcd_gotoxy(7,1);
                printf(lcd_putc,"%u:%u:%u",h,m,s);

                }

                void main()
                {

                lcd_init();
                enable_interrupts(GLOBAL);
                enable_interrupts(INT_TIMER1);
                setup_timer_1(T1_EXTERNAL | T1_DIV_BY_1 | T1_CLK_OUT);

                while(1){
                set_timer1(32768);
                //...
                }
                }

                دیدگاه

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