اطلاعیه

Collapse
No announcement yet.

مشکل عجیب در استفاده از تایمر یک

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

    مشکل عجیب در استفاده از تایمر یک

    سلام دوستان
    برای یه مگا 8 برنامه نوشتم و پورت B رو به عنوان ورودی با سطح منطقی یک تعریف کردم، در حالت عادی برنامه درست عمل می کنه ولی وقتی تو همون برنامه میخوام از تایمر یک استفاده کنم دیگه پورت B به عنوان ورودی فعال نمی شه. البته تو شبیه سازی پروتئوس درست جواب میده ولی در عمل نه. علت چیه؟!!
    اینم برنامه برای بررسی بیشتر:
    کد:
    #include<stdio.h>
    #include<delay.h>
    #include<mega8.h>
    
    
    void up(void)
    {
    PORTC.3=1;
    while((PINB&0x22)==0x00);
    PORTC.3=0;
    }
    
    void down(void)
    {
    PORTC.5=1;
    while((PINB&0x12)==0x00);
    PORTC.5=0;
    }
    // Timer 1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    
    TCNT1H=0xE0;
    TCNT1L=0xBF;
    PORTD.1^=1;
    PORTD.0=~PIND.1;
    
    }
    
    
    void main(void)
    {
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 15.625 kHz
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: On
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x03;
    TCNT1H=0xE0;
    TCNT1L=0xBF;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Global enable interrupts
    #asm("sei") 
    DDRB=0x00;
    PORTB=0xff;
    DDRC=0xff;
    PORTC=0x00;
    DDRD=0xFF;
    while (1)
       {
       // Timer(s)/Counter(s) Interrupt(s) initialization
       TIMSK=0x00;
       PORTD=0; //flasher off
       if((PINB&0x2E)==0x04)
            {
            delay_ms(100);
            if((PINB&0x2E)==0x04)
                {
                 TIMSK=0x04;
                 up();
                }        
            }
    
        else if((PINB&0x1E)==0x08)
            {
            delay_ms(100);
            if((PINB&0x1E)==0x08)
                {
                TIMSK=0x04;
                down();
                }
            }
       
    
       };
    }

    #2
    پاسخ : مشکل عجیب در استفاده از تایمر یک

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

    دیدگاه


      #3
      پاسخ : مشکل عجیب در استفاده از تایمر یک

      نوشته اصلی توسط saeiddiod
      سلاموقتی پورت B بعنوان ورودی معرفی بشه دیگه نمیتونه خروجی باشه جز اینکه بعنوان خروجی معرفیش کنی
      اشتباه تایپی بود همون ورودی هستش

      دیدگاه

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