اطلاعیه

Collapse
No announcement yet.

وقفه خارجی

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

    وقفه خارجی

    بسمه تعالی

    من می خوام زمانی که پایه اینتراپت صفر شد یکی از پایه های IC روشن بشه . در ضمن می خوام از سه تا اینتراپت استفاده کنم . این برنامه ای که نوشتم چه مشکلی داره . ممنون
    /************************************************** ***
    This program was produced by the
    CodeWizardAVR V1.25.5 Standard
    Automatic Program Generator
    © Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 2008/03/02
    Author : F4CG
    Company : F4CG
    Comments:


    Chip type : ATmega32L
    Program type : Application
    Clock frequency : 8.000000 MHz
    Memory model : Small
    External SRAM size : 0
    Data Stack size : 512
    ************************************************** ***/

    #include <mega32.h>

    // Declare your global variables here
    interrupt [EXT_INT0] void ext_int0_isr(void){
    //Place your code here


    PORTB.1=1;
    }
    //
    //External Interrupt 1 service routine
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    //Place your code here

    PORTB.2=1;

    }
    //
    // //External Interrupt 2 service routine
    interrupt [EXT_INT2] void ext_int2_isr(void)
    {
    //Place your code here

    PORTB.3=1;

    }
    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTA=0x00;
    DDRA=0x00;

    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTB=0x00;
    DDRB=0x00;

    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off

    GICR|=0xE0;
    MCUCR=0x0A;
    MCUCSR=0x00;
    GIFR=0xE0;
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    #asm("sei&quot
    while (1)
    {
    // Place your code here

    };
    }

    #2
    پاسخ : وقفه خارجی

    شما پینهای مورد نظر پورت B رو خروجی نکردی اگه توو قسمت Port B initialization این تغییر رو بدی مشکلت حل میشه: DDRB=0x0E;
    اگر ندانی کجا میروی هر راهی تو را باخود خواهد برد.

    دیدگاه


      #3
      پاسخ : وقفه خارجی

      مشکلم اینه که از اینتراپت خارج نمی شه

      دیدگاه


        #4
        پاسخ : وقفه خارجی

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

        دیدگاه


          #5
          پاسخ : وقفه خارجی

          نوشته اصلی توسط ourman
          از اینتراپت خارج میشه ولی چون شما بیت رو یک کردید اون تا زمانی که دوباره صفرش نکنید توو همون حالت میمونه و شما فکر میکنید که از اینتراپت خارج نشده پس باید بعد از یک کردن بیت یه تاخیر ایجاد بکنید و بعد از تاخیر دوباره بیت مورد نظر رو صفر کنید.
          نوشته اصلی توسط ourman
          شما پینهای مورد نظر پورت B رو خروجی نکردی اگه توو قسمت Port B initialization این تغییر رو بدی مشکلت حل میشه: DDRB=0x0E;
          این کارها رو اگه انجام بدین دیگه مشکلی پیش نمی آد.

          در قسمت وقفه این کد رو بنویس:
          PORTB.x=1;
          delay_ms(100);
          PORTB.x=0;

          دیدگاه


            #6
            پاسخ : وقفه خارجی

            دوستان من می خوام یه پالس pwm رو بخونم و duty cycle رو حساب کنم.اما برنامه درست کار نمی کنه؟(پالس 4khz هستش که از smt160 میاد)
            Config Int0 = Rising
            Config Int1 = Falling
            Enable Int0
            Enable Int1
            Stop Timer1
            Enable Interrupts
            On Int0 Int0_int
            On Int1 Int1_int
            Do
            B = Xl + Xf
            F = Xl / B
            F = F - 0.32
            Temp = F / 0.0047
            Lcdat 2 , 1 , Round(temp) ; "c "
            Loop
            End

            Int1_int:
            Stop Timer1
            Xl = Timer1
            Timer1 = 0
            Start Timer1
            Return

            Int0_int:
            Stop Timer1
            Xf = Timer1
            Timer1 = 0
            Start Timer1
            Return
            Be sure your sin will find you out

            دیدگاه

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