اطلاعیه

Collapse
No announcement yet.

**|| تایمر و کانتر هنگام کار با MMC و SD-CARD || **

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

    **|| تایمر و کانتر هنگام کار با MMC و SD-CARD || **


    با سلام خدمت تمامی دوستان

    من در حال یادگیری و کار با یک MMC هستم

    من دو تا INTERRUPT هم نوشتم واسه خواندن روی MMC و نوشتن روی آن

    کدش را نوشتم و یک SAMPLE کد هم دیدم که تونستم با اون برنامه را به درستی RUN کنم

    ولی مشکل ااصلی من بخش تایمر و کانتر اون بود که چرا باید در MAIN برنامه از کانتر و تایمر استفاده کنه

    چون زمانی که بخش تایمر و کانترش را به صورت کامنت میکنم کلا دیگه برنامه تعطیل میشه

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

    منتظر راهنمایی هاتون هستم

    کد:
    #include <mega32.h>
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <delay.h>
    #include <spi.h>
    #include <lcd.h>
    
    
    #include "mmc_lib.h"
    #define CS PORTB.0
    
    char str[1];
    unsigned char buf_mmc[512];
    unsigned char gholi_mmc[512];
    
    
    unsigned long sector_num;
    unsigned int i,j;
    
    #asm 
      .equ __lcd_port=0x15;
    #endasm  
    
    // External Interrupt 0 service routine
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
     #asm ("cli")
     PORTA.0=0;
     PORTB=0Xff;
     mmc_init();
      for(i=0;i<512;i++)
      {
      buf_mmc[i]=i;
      }
      CS=0; 
      
      mmc_read(sector_num,buf_mmc);
      CS=1; 
      for  (j=0;j<85;j++)
      {
        delay_ms(100);
        itoa(buf_mmc [i+5*j],str); 
         lcd_gotoxy(3*i,0);
         lcd_puts(str);
        }  
        delay_ms(500);
    
        lcd_clear();
        lcd_gotoxy(0,0);
      }
      PORTA.0=1;
      #asm("sei")
      }   
        
    
    // External Interrupt 1 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {  
      #asm("cli");
      PORTA.0=0;
      PORTB=0xff;
       mmc_init();
        for(i=0;i<512;i++)
        {            
         buf_mmc[i]=i;
          }      
      CS=0;
     mmc_write(sector_num,buf_mmc);  
       lcd_clear();
       lcd_gotoxy(0,0);  
      //lcd_putchar(gholi_mmc[1]);
      itoa(gholi_mmc[1],str); 
         lcd_puts(str);
          delay_ms(500);
    
      CS=1;
      delay_ms(500);
      PORTA.0=1;
      #asm("sei")
      }
    
    
     
      
    void main(void)
    {
    
    PORTA=0xff;
    DDRA=0xff;
    /////////
    PORTB=0xFF;
    DDRB=0XB1;
    
    PORTC=0X00;
    DDRC=0X00;
    PORTD=0XFF;
    DDRD=0X00;
    TCCR0=0X00;
    TCNT0=0X00;
    OCR0=0X00;
    
    TCCR1A=0X00;
    TCCR1B=0X00;
    TCNT1H=0X00;
    TCNT1L=0X00;
    ICR1H=0X00;
    ICR1L=0X00;
    OCR1AH=0X00;
    OCR1AL=0X00;
    OCR1BH=0X00;
    OCR1BL=0X00;
    
    ASSR=0X00;
    TCCR2=0X00;
    TCNT2=0X00;
    OCR2=0X00;
    
    GICR|=0xC0;
    MCUCR=0X0A;
    MCUCSR=0X00;
    GIFR=0XC0;
    
    TIMSK=0X00;
    
    ACSR=0X80;
    SFIOR=0X00;
    
    SPCR=0X50;
    SPSR=0X00;
    
    
    lcd_init(16);
    lcd_gotoxy(0,0);
    lcd_putsf("mmc read/write");
    #asm("sei")
    sector_num=50;
    while(1);
    }

    #2
    پاسخ : **|| تایمر و کانتر هنگام کار با MMC و SD-CARD || **

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

    من در حال یادگیری و کار با یک MMC هستم

    من دو تا INTERRUPT هم نوشتم واسه خواندن روی MMC و نوشتن روی آن

    کدش را نوشتم و یک SAMPLE کد هم دیدم که تونستم با اون برنامه را به درستی RUN کنم

    ولی مشکل ااصلی من بخش تایمر و کانتر اون بود که چرا باید در MAIN برنامه از کانتر و تایمر استفاده کنه

    چون زمانی که بخش تایمر و کانترش را به صورت کامنت میکنم کلا دیگه برنامه تعطیل میشه

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

    منتظر راهنمایی هاتون هستم

    کد:
    #include <mega32.h>
    #include <math.h>
    }
    چرا از اینراپت استفاده کردی ؟
    کامپایلت چیه ؟ اگه میخوای از تابع آماده استفاده کنی که هیچی معمولا تابع تو کامپایلر ها هست که فرمت 16 رو ساپورت میکنه و اگه میخوای خودت تابع برای خودن و نوشتن توی MMC بنویسی که قضیه اش خیلی پیچیده است و باید بری سراغ دیتا شیت MMC و کامند های init و read و write رو دار آری ولی نکته ای که من نمیفهمم اینه که من هم به روش اول و هم به روش دوم از MMC خوندم و توش نوشتم ولی از اینتراپت استفاده نکردم!!!!!! :read:

    دیدگاه


      #3
      پاسخ : **|| تایمر و کانتر هنگام کار با MMC و SD-CARD || **

      نوشته اصلی توسط mahdi-firoozi
      چرا از اینراپت استفاده کردی ؟
      کامپایلت چیه ؟ اگه میخوای از تابع آماده استفاده کنی که هیچی معمولا تابع تو کامپایلر ها هست که فرمت 16 رو ساپورت میکنه و اگه میخوای خودت تابع برای خودن و نوشتن توی MMC بنویسی که قضیه اش خیلی پیچیده است و باید بری سراغ دیتا شیت MMC و کامند های init و read و write رو دار آری ولی نکته ای که من نمیفهمم اینه که من هم به روش اول و هم به روش دوم از MMC خوندم و توش نوشتم ولی از اینتراپت استفاده نکردم!!!!!! :read:
      من میخواستم دو تا دکمه داشتم که یکی از آنها عمل خواندن و دیگری عمل نوشتن روی MMC را داشته باشه

      و اتفاقا اگر نگاه کنید من از همین 23 تا تابع Init و Read و Write استفاده کردم

      ولی مجبور شدم که بخش Main برنامه را کپی یک برنامه پروژه مشابه انجام بدم

      حالا سوال من دقیقا همینه چرا برنامه من بدون این داستان تایمر کانتر کار نمیکنه ؟

      اصلا قضیه اش با این اینتراپت ها دقیقا چیه ؟

      با تشکر از همه دوستان که در بحث شرکت میکنند

      این هم عکس پروژه در پروتئوس


      http://s1.picofile.com/file/7320168060/Untitled.gif

      دیدگاه


        #4
        پاسخ : **|| تایمر و کانتر هنگام کار با MMC و SD-CARD || **

        کماکان منتظر راهنمایی دوستان هستیم........... :rolleyes:

        دیدگاه


          #5
          پاسخ : **|| تایمر و کانتر هنگام کار با MMC و SD-CARD || **


          کماکان منتظر راهنمایی دوستان هستیم........... :rolleyes:

          دیدگاه


            #6
            پاسخ : **|| تایمر و کانتر هنگام کار با MMC و SD-CARD || **

            سلام
            تو برنامه های اس دی و ام ام دی باید هر ده میلی ثانیه تابع
            disc_timerproc
            اجرا شه و اگه نشه برنامه تو حلقه بی نهایت میفته.دلیل استفاده از تایمر همینه

            دیدگاه


              #7
              پاسخ : **|| تایمر و کانتر هنگام کار با MMC و SD-CARD || **

              دوستان لطف کنید این چند خط و مقادیرش رو برام توضیح بدین.

              TCCR1A=0xA3;
              TCCR1B=0x09;
              ICR1H=0x03;
              ICR1L=0xFF;
              OCR1AH=0x00;
              OCR1AL=0x00;
              OCR1BH=0x00;
              OCR1BL=0x00;

              TCCR0=0x0A;
              TCNT0=0x00;
              OCR0=0xFF;

              TIMSK=0x02;

              DDRA=0x00;
              PORTA=0xFF;
              DDRC=0x00;
              PORTC=0xFF;
              DDRD=0x3E;
              PORTD=0xC8;
              خـــــــــــــــــــــــــــــــــــــــــــداجون،
              هواي اين دوستاي ما رو داشته باش...

              دیدگاه

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