اطلاعیه

Collapse
No announcement yet.

مشکل در کار با تایمر در pic18f452

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

    مشکل در کار با تایمر در pic18f452

    سلام . من این کد ساده را نوشتم تا ببینم برنامه به روتین وفقه تایمر منتقل میشود یا نه .. ولی هر کاری کردم دیدم روتین وقفه اجرا نمیشود . چرا؟
    # include <18f452.h>
    # use delay ( clock = 10000000)
    #INT_RTCC
    #INT_TIMER0
    void Timer0_isr()
    {
    output_high (PIN_D2);


    }




    int8 pulse;

    main()
    {
    set_tris_d (0x0);
    pulse=0;
    while (true)
    {
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2|RTCC_8_BIT) ;

    interrupt_active(INT_TIMER0);
    set_timer0(0);

    if (get_timer0()==0)
    {

    if (pulse==1)
    {
    set_timer0(60);
    pulse=0;
    output_high (PIN_D1);

    }
    else
    {
    set_timer0(50);
    pulse=1;
    output_low (PIN_D1);
    }




    }


    }

    اگر برنامه حتی یک بار هم که شده به روتین وقفه منتقل شود ، باید پایه d2 روشن شود . ولی این کار اتفاق نمی افتد . چرا ؟
    در ضمن در قسمت main ، برنامه را از help نرم افزار کپی کرده ام و در داخل برنامه نوشته که هر 102 میکرو ثانیه ، تایمر oveflow میشه ... ولی وقتی اجرا میکنم ، میبینم حدود هر ثانیه یک بار پایه d1 تغییر وضعیت میده ... چرا؟
    سوال سوم ... اصلا اگه بخوام تابع روتین وقفه را بنویسم ، اسم خود تابع را چطور باید پیدا کنم ؟ این void Timer0_isr() را از فایل آقای یک نفر پیدا کردم . ولی در help خود نرم افزار ccs چیزی پیدا نشد ... help ccs خیلی بد است ... و آدم را دق مرگ میکند !!!!
    دلا خوبـــان دل خونيــــن پســـندند
    دلا خون شو که خوبان اين پسندند
    متاع کفر و دين بيآ‌مشتري نيست
    گروهــــي آن گروهي اين پســـندند

    #2
    پاسخ : مشکل در کار با تایمر در pic18f452

    سلام .
    تو برنامت یه چند تا مشکل بود .
    کد زیر رو کامپایل کن ببین چی میشه :
    # include <18f452.h>
    # use delay ( clock = 10000000)

    #INT_TIMER0
    void Timer0_isr()
    {
    output_high (PIN_D2);


    }




    int8 pulse;

    main()
    {
    set_tris_d (0x0);
    pulse=0;
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2|RTCC_8_BIT) ;
    enable_interrupts(INT_TIMER0);
    enable_interrupts(GLOBAL);

    while (true)
    {
    set_timer0(0);
    if (!get_timer0())
    {

    if (pulse==1)
    {
    set_timer0(60);
    pulse=0;
    output_high (PIN_D1);

    }
    else
    {
    set_timer0(50);
    pulse=1;
    output_low (PIN_D1);
    }




    }


    }

    دیدگاه

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