اطلاعیه

Collapse
No announcement yet.

راه اندازی تایمر ها+در خواست کمک

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    راه اندازی تایمر ها+در خواست کمک

    سلام
    من به یه مشکلی با استفاده از تایمر ها برخورد کردم که می خواستم نظر شما اساتید رو جویا بشم. من برای راه اندازی و استفاده از تایمر ها از این دستورات استفاده کردم. (کامپایلرم CCS 4.105 هست و ورژن پروتوس هم 7.6 سوریس پک 4)
    برای پیکربندی تایمرها setup_timer_X (mode)
    مقداردهی تایمر ها set_timerX(value) or set_rtcc (value)
    مقدار گیری از تایمر ها: value=get_timerX()
    محاسبه زمان: 4*(1/xtal) * Prescaler * ((256|| 65536)- set_timer0(value))

    با این معلومات این برنامه ی بسیار ساده رو نوشتم که تو اون ی به متغیر های on_time و off_time عدد می دم م خروجی رو روی پایه ی A.0 می بینم اما برنامه زمان ها اصلا درست کار نمی کنن.جالب تر اینکه من با استفاده از delay همون کاری که با تونستم زمان هایی که می خوام رو پیاده سازی کنم که برنامه ی اونم گذاشتم.
    میشه ببینین مشکل من کجاست و راه حلش چیه؟
    void main(){
    unsigned int16 a,b,on_time=0,off_time=0;
    on_time=30360;
    off_time=30360;
    set_tris_a(0x00);
    while(true){
    //time=4*prescaler*(1/xtal)*(65536-value)
    setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
    do{
    output_high (PIN_A0);
    set_timer1(on_time);
    a=get_timer1();
    }while(a==0);
    do{
    output_low (PIN_A0);
    set_timer1(off_time);
    b=get_timer1();
    }while(b==0);
    }
    }
    ================================
    اینم برنامه با delay
    void main(){
    unsigned int16 a,b,on_time=0,off_time=0;
    on_time=30360;
    off_time=30360;
    set_tris_a(0x00);
    while(true){
    //time=4*prescaler*(1/xtal)*(65536-value)
    while(true){
    output_high(PIN_A0);
    delay_ms(on_time);
    output_low(PIN_A0);
    delay_ms(off_time);
    }
    }
    ================================================== ========

    #2
    پاسخ : راه اندازی تایمر ها+در خواست کمک

    دستور SETUP_TIMER_1‎ رو از حلقه بیار بیرون.
    دستور set_timer1(on_time)‎ رو از اولین حلقه do بیار بیرون.
    دستور set_timer1(off_time)‎ رو هم از حلقه DO دوم بیار بیرون. درضمن فکر کنم شرط هردوتا حلقه آخری باید while(a!=0)‎ و while(b!=0)‎ باشه!

    دیدگاه


      #3
      پاسخ : راه اندازی تایمر ها+در خواست کمک

      با سلام
      دوست عزیز اولین کاری که باید بکنی اینکه :
      1. گفته های آقا محمد رو مو به مو انجام بده
      2. اگه میخوای نتیجه رو روی پورت A ببینی باید باید مبدل آنالوگ به دیجیتال رو غیر فعال بکنی. ولی بهتره که از پورت B استفاده بکنی.(البته فکر کنم مشکل شما تو این مورد باشه)
      3. فایل زیر رو دانلود کن امیدوارم که به دردت بخوره ولی من با تایمر0 این کار رو کردم و زمان هر تاخیر به اندازه 13107.2 میکروثانیه است.

      http://www.4shared.com/file/Pkz3XyEi/TIMER0.html

      موفق باشید

      دیدگاه

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