اطلاعیه

Collapse
No announcement yet.

شمارنده پالس با اینتراپت

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

    شمارنده پالس با اینتراپت

    سلام دوستان

    من می خوام برنامه ای بنویسم که اگر کلید را فشار دادم فقط یک شماره بندازه با اینتراپت چه جوری باید بنویسم نمونه برنامه که با ifنوشتم را در اینجا قرار می دم لطفا راهنمایی کنید



    کد:
     while(1){
        
        
     if(PINB.0==0&&b==1&&PINB.1==1){ 
    
      delay_ms(6); 
            a=a+1; 
            
           b=0; 
             set=toascii(12);
        putchar(set);
          
      
           printf("Deept:%iCM", a);
           
           
      
    
     }  
     if(PINB.1==0&&b==1&&PINB.0==0){ 
          delay_ms(6);
     
          set=toascii(12);
        putchar(set);
           a=a-1; 
           b=0;
          if(a<=0){
           a=0;
          
          }
           printf("Deept:%iCM", a);
           
     
    
     
     }
    if(!(PINB.0==0)){
          b=1; 
           
       
    } 
    
    if(PINB.2==0){
           a=0;  
        
           
            printf("Deept:%iCM", a);  
            
            
        }
                                                                                                                                                                                                                                                             
       
     }

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

    نوشته اصلی توسط بنیامین خلیلی
    سلام دوستان

    من می خوام برنامه ای بنویسم که اگر کلید را فشار دادم فقط یک شماره بندازه با اینتراپت چه جوری باید بنویسم نمونه برنامه که با ifنوشتم را در اینجا قرار می دم لطفا راهنمایی کنید



    کد:
     while(1){
        
        
     if(PINB.0==0&&b==1&&PINB.1==1){ 
    
      delay_ms(6); 
            a=a+1; 
            
           b=0; 
             set=toascii(12);
        putchar(set);
          
      
           printf("Deept:%iCM", a);
           
           
      
    
     }  
     if(PINB.1==0&&b==1&&PINB.0==0){ 
          delay_ms(6);
     
          set=toascii(12);
        putchar(set);
           a=a-1; 
           b=0;
          if(a<=0){
           a=0;
          
          }
           printf("Deept:%iCM", a);
           
     
    
     
     }
    if(!(PINB.0==0)){
          b=1; 
           
       
    } 
    
    if(PINB.2==0){
           a=0;  
        
           
            printf("Deept:%iCM", a);  
            
            
        }
                                                                                                                                                                                                                                                             
       
     }
    سلام
    چند تا مشکل
    یک » کدی که گزاشتید قسمت اینتراپتش کجاست؟
    دو » چرا تو کدتون دو تا دکمه هست؟
    سه » چرا از ویزارد کد ویژن وقفه رو فعال نمیکنید و تو روتین وقفه یک متغیر رو زیاد و سپس پرینت نمیکنید؟؟

    head<=
    ...تشکر خدا...
    [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

    دیدگاه


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

      من نوشتم با اینتراپت چه جوری می تونم بنویسم نه نوشتم

      دوتا کلید برای برنامه ی دیگه هستش
      من می خوام وقتی پالس از یک به صفر اومد یک عدد بشماره مثلا 0 بود 1 بشه فقظ یک بار و دوباره به همین صورت

      دیدگاه


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

        نوشته اصلی توسط بنیامین خلیلی
        من نوشتم با اینتراپت چه جوری می تونم بنویسم نه نوشتم

        دوتا کلید برای برنامه ی دیگه هستش
        من می خوام وقتی پالس از یک به صفر اومد یک عدد بشماره مثلا 0 بود 1 بشه فقظ یک بار و دوباره به همین صورت
        آها ازون لحاظ خب من تو کد کمی توضیح نوشتم اصلا کار سختی نیست شما روتین وقفه رو فعال میکنید و هر کاری که میخواید بشه رو توش مینویسید دیگه ...
        ویزارد خودش همه کارارو میکنه
        من یک مقدار محکم کاری هم تو کد کردم بستگی به سیگنالتون که آیا واقعا کلیده یا خیر میتونید عوضش کنید
        کد:
        // In the Name of God //
        #include <mega8.h>
        #include <delay.h>
        #include <stdio.h>
        int i = 0;
        interrupt [EXT_INT0] void ext_int0_isr(void)
        {
          #asm("cli")
          i++;
          delay_ms(1); // software debounce--
          printf("i = %d",i);
          #asm("sei")
        }
        
        
        
        void main(void)
        {
        /////////////
        GICR|=0x40;// ---> generated by wizard
        MCUCR=0x02;//   can be set for rising 
        GIFR=0x40; //   or falling edge
        /////////////
        #asm("sei")
        
        while (1)
           {
           }
        }

        head<=
        ...تشکر خدا...
        [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

        دیدگاه


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

          خب الان من بخوام بگم اگر اینتراپت صفر بود این کارو انجام بده و اگر اینتراپت یک بود این کارو انجام بده چی؟ شرط استفاده کنم چی؟

          دیدگاه


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

            نوشته اصلی توسط بنیامین خلیلی
            خب الان من بخوام بگم اگر اینتراپت صفر بود این کارو انجام بده و اگر اینتراپت یک بود این کارو انجام بده چی؟ شرط استفاده کنم چی؟
            خب شما اینتراپت 1 رو هم فعال میکنید و تو روتینش مینویسید چیزی رو که میخواین D: !
            ببینید اینتراپت وقتی اتفاق میفته که اینتراپت اتفاق بیفته! (عجب جمله ای ...) شما وقفه یک رو هم بنویسید روتینش رو بعد تو کدش کاری که میخواید بشه رو بنویسید هر وقت وقفه 1 اتفاق بیفته میره تو 1 هروقت وقفه 0 اتفاق بیفته میره تو 0 دیگه مقایسه اش چیه این وسط رو نمیفهمم :پی

            head<=
            ...تشکر خدا...
            [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

            دیدگاه


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

              من می تونم از برنامه ی خودم برای سنسور اپتو کانتر استفاده کنم


              منظورم این برنامه هست
              چک کردن پین با این روش جواب گو هستش
              کانتر به b.0متصل هست
              کد:
              while(1){
                  
                  
               if(PINB.0==0&&b==1&&PINB.1==1){ 
              
                delay_ms(6); 
                      a=a+1; 
                      
                     b=0; 
                       set=toascii(12);
                  putchar(set);
                    
                
                     printf("Deept:%iCM", a);
                     
                     
                
              
               }  
               if(PINB.1==0&&b==1&&PINB.0==0){ 
                    delay_ms(6);
               
                    set=toascii(12);
                  putchar(set);
                     a=a-1; 
                     b=0;
                    if(a<=0){
                     a=0;
                    
                    }
                     printf("Deept:%iCM", a);
                     
               
              
               
               }
              if(!(PINB.0==0)){
                    b=1; 
                     
                 
              } 
              
              if(PINB.2==0){
                     a=0;  
                  
                     
                      printf("Deept:%iCM", a);  
                      
                      
                  }
                                                                                                                                                                                                                                                                       
                 
               }

              دیدگاه


                #8
                پاسخ : شمارنده پالس با اینتراپت

                دوستان هیچ نظری ندارند درباره سوال بالا

                دیدگاه

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