Thông báo

Collapse
No announcement yet.

Hàm delay dùng ngắt không hoạt động???????

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Hàm delay dùng ngắt không hoạt động???????

    chào các bác em có viết 1 đoạn code dùng ngắt để delay nhưng nó không hoạt động. em có post đoạn code lên đây mong các bác xem giúp em với:
    /************************************************** ***
    This program was produced by the
    CodeWizardAVR V2.05.0 Professional
    Automatic Program Generator
    © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 5/10/2011
    Author : NeVaDa
    Company :
    Comments:


    Chip type : ATmega16
    Program type : Application
    AVR Core Clock frequency: 8.000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 256
    ************************************************** ***/

    #include <mega16.h>

    // Declare your global variables here
    unsigned char count;
    void delay_100us(unsigned long x);


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

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

    // 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=0xFF
    // OC0 output: Disconnected
    TCCR0=0x02; // prescale= clk/8
    TCNT0=0x9B; // innitial =155
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=0xFFFF
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 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: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // USART initialization
    // USART disabled
    UCSRB=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // ADC initialization
    // ADC disabled
    ADCSRA=0x00;

    // SPI initialization
    // SPI disabled
    SPCR=0x00;

    // TWI initialization
    // TWI disabled
    TWCR=0x00;

    while (1)
    {
    // Place your code here
    PORTA.0=1;
    delay_100us(1000); //tre 100ms
    PORTA.0=0;
    delay_100us(1000);

    }
    }
    void delay_100us(unsigned long x)
    {
    TCCR0=0x02; // prescale= clk/8
    TCNT0=0x9B; // innitial =155
    while(count!=x);
    TCCR0=0x00;
    count=0;
    }

    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    // Place your code here
    count++;
    TCCR0=0x02;
    TCNT0=0x9B;

    }
    Never forget who you are!

  • #2
    bạn thêm dòng #asm("sei") vào trc while(1).

    Comment


    • #3
      cảm ơn bạn đây là đoạn code mình copy của bạn. nhưng mình vẫn không hiểu chỗ "#asm("sei")" có phải là cho phép ngắt toàn cục không? và sau chỗ while(count!=x) lại set TCCR0=0x00.
      cảm ơn nhiều!
      Never forget who you are!

      Comment


      • #4
        hàm delay dùng ngắt mình viết thì chạy tồi nhưng mà tại sao khi vào trong lệnh "case" mình gọi hàm delay dùng ngắt nó lại không chạy nhỉ??? ai biết chỉ giúp cái
        cảm ơn nhiều!!!!
        Never forget who you are!

        Comment


        • #5
          ai biết chỉ mình giúp với khi mình vào trong lệnh "case" gọi hàm delay dùng ngắt thì nó không chạy mà cứ đứng im không chạy gì cả vi dụ như đoạn code này chẳng hạn:
          case 9:
          {
          PORTD.0 = 0x01;
          delay_ms_(10);
          PORTD.0 = 0x00;
          //PORTD.0 = 0x01;
          delay_ms_(10);
          PORTD.0 = 0x00;
          break;
          }
          ai biết chỉ mình với.
          cảm ơn nhiều!
          Never forget who you are!

          Comment

          Về tác giả

          Collapse

          nhquangdt3k5 Tìm hiểu thêm về nhquangdt3k5

          Bài viết mới nhất

          Collapse

          Đang tải...
          X