اطلاعیه

Collapse
No announcement yet.

شمارنده پالس به صورت صعودی و نزولی

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

    شمارنده پالس به صورت صعودی و نزولی

    سلام دوستان من یک شمارنده پالس با کانتر0 درست کردم که بصورت صعودی میشماره وقتی PINB.1==1شود حالا می خوام بصورت عکس هم بشماره وقتی PINB.1==0می شود حالا مشکا من اینه چطوری؟


    کد:
    #include <mega8.h>
     #include <ctype.h>
    // Standard Input/Output functions
    #include <stdio.h>
    #include <delay.h>
     unsigned int a; 
     unsigned int state = 0 ;
     int b,c,d,set;
    unsigned int k=0;
    bit e;
    // Timer 0 overflow interrupt service routine
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
     
     a++ ; 
    }
    
    // Declare your global variables here
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // 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
    // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // 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: T0 pin Rising Edge
    TCCR0=0x07;
    TCNT0=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
    MCUCR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x01;
    
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: Off
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x67;
    
    // 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;
    
    // Global enable interrupts
    #asm("sei")
    
     
    while (1)
       { 
       
           
    // ************* Increment Mode *************
    
       if(PINB.1==1)
       {    
          
          b=TCNT0+a*256; 
          
          
       
         
         
       }  
    
       }
    
    }

    #2
    پاسخ : شمارنده پالس به صورت صعودی و نزولی

    کسی جوابو نمی دونه

    دیدگاه


      #3
      پاسخ : شمارنده پالس به صورت صعودی و نزولی

      سلام

      اگه فزض کنیم pinb.1 رو به عنوان جهت کانتر انتخاب کرده باشین کافیه تو زیر برنامه اینتراپت کانتر اینجوری بنویسید

      کد:
      if (PINB.1==1) 
      	a++;
      else
      	a--;

      دیدگاه


        #4
        پاسخ : شمارنده پالس به صورت صعودی و نزولی

        نه نمیشه که می خوام مقدار TCNT0وقتی پین 0 شد مقدارش با هر پالس کم بشه در حالی که زیاد میشه

        دیدگاه


          #5
          پاسخ : شمارنده پالس به صورت صعودی و نزولی

          نوشته اصلی توسط بنیامین خلیلی
          نه نمیشه که می خوام مقدار TCNT0وقتی پین 0 شد مقدارش با هر پالس کم بشه در حالی که زیاد میشه
          تا اونجا که من یاد گرفتم کانترها حالت بالا شمار داره منتها با این روش که میگم میتونید حالت up- down رو بصورت نرم افزاری پیاده کنید

          فرض کنیم همون pinb.1 جهت رو مشخص بکنه. در این حالت تو زیر برنامه وقفه باید اینجوری بنویسید

          کد:
          If Pinb.1 = 0 Then
            If Tcnt0 > 2 Then
             Tcnt0 = Tcnt0 - 2
            End If
          End If

          دیدگاه


            #6
            پاسخ : شمارنده پالس به صورت صعودی و نزولی

            امکان داره یه کم بیشتر توضیح بدی

            این تو میگی>>

            1) اگه کلید فعال بود: مثلا پالس های 1 رو شمارش کنه ---- و اگه کلید غیر فعال بود پالس های 0 رو شمارش کنه

            2) اگه کلید فعال بود: مثلا پالس های 1 رو شمارش کنه ---- و اگه کلید غیر فعال بود پالس های 1 رو شمارش کنه با این تفاوت که اگه مقدار پالس (توسط حالتی که کلید فعاله) به 500 رسیده باشد....حالا با غیر فعال شدن کلید..پالس دونه دونه از 500 بیاد سمت صفر؟؟؟؟؟؟؟

            کدومش منظورته؟؟؟؟
            اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

            اگه دوس دارید سریع به جواب برسید :
            1) قبل از پرسیدن سوال، بسرچید.
            2) سوالاتون رو با جزئیات کامل مطرح کنید.

            دیدگاه


              #7
              پاسخ : شمارنده پالس به صورت صعودی و نزولی

              نشستم یکساعت مردانه فکر کردم فهمیدم درستش کردم ممنون

              دیدگاه

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