اطلاعیه

Collapse
No announcement yet.

کمک برای برنامه نویسی

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

    کمک برای برنامه نویسی

    سلام.
    کسی میتونه این برنامه رو برام توضیح بده من تسلط کافی روی این برنامه ندارم.

    #include <mega32.h>
    #include <stdio.h>
    #include <delay.h>
    #include "font.h"
    #include "ENG font.c"

    #define LED_LEFT PORTA
    #define LED_RIGHT PORTB
    //================================================== ====
    //================================================== ====
    unsigned int Angle;
    unsigned int One_Degree_OCR_Value;
    unsigned int Pixel_Num,Pixel_Count;
    unsigned int Code_Table[400];
    flash unsigned char Statement[]="somaie zameni";
    //================================================== ====
    //================================================== ====
    void InitDevice()
    {
    DDRA=0xFF;
    DDRB=0xFF;
    PORTD=0x04;

    GICR|=0x40;
    MCUCR=0x03;
    MCUCSR=0x00;
    GIFR=0x40;

    TCCR1B=0x03;
    TIMSK=0x10;
    LED_RIGHT=0xFF;
    LED_LEFT=0xFF;
    #asm("sei"
    }
    //================================================== ====
    //================================================== ====
    interrupt [TIM1_COMPA] void timer1_compa_isr(void)
    {
    unsigned int n;

    if(Angle==180)
    Pixel_Count=0;
    if(Angle<180)
    {
    if(Pixel_Count<Pixel_Num)
    {
    LED_RIGHT=~Code_Table[Pixel_Count];
    n=Pixel_Count+180;
    if(n<Pixel_Num)
    LED_LEFT=~Code_Table[n];
    Pixel_Count++;
    }
    else
    LED_RIGHT=0xFF;
    }
    else
    {
    if(Pixel_Count<Pixel_Num)
    {
    LED_LEFT=~Code_Table[Pixel_Count];
    n=Pixel_Count+180;
    if(n<Pixel_Num)
    LED_LEFT=~Code_Table[n];
    Pixel_Count++;
    }
    else
    LED_LEFT=0xFF;
    }
    OCR1A+=One_Degree_OCR_Value;
    Angle++;

    }
    //================================================== ====
    //================================================== ====
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    One_Degree_OCR_Value=TCNT1/360;
    OCR1A=One_Degree_OCR_Value;
    TCNT1=0;
    Angle=0;
    Pixel_Count=0;
    }
    //================================================== ====
    //================================================== ====
    void main()
    {
    unsigned char i=0,j,map,width,ch;
    unsigned int offset;

    do
    {
    ch=Statement[i];
    map=Eng_Font.mapping_table[ch];
    offset=Eng_Font.offset_table[map];
    width=Eng_Font.width_table[map];
    for(j=0;j<width;j++)
    {
    Code_Table[Pixel_Count]=Eng_Font.font_table[offset];
    Code_Table[Pixel_Count]=(Code_Table[Pixel_Count]<<8)+Eng_Font.font_table[offset+1];
    Code_Table[Pixel_Count]>>=4;
    Pixel_Count++;
    offset+=2;
    }
    }while(Statement[++i]!='\0'
    Pixel_Num=Pixel_Count;
    Pixel_Count=0;

    InitDevice();
    while(1)
    {
    }
    }

    #2
    پاسخ : کمک برای برنامه نویسی

    سلام دوستان،
    یه برنامه دارم برای ATMega 32 که توسط winavr یا eclipse نوشته شده، حالا می خوام برای ATTiny 13 استفاده کنم. برنامه اش طولانی نیست. کسی می تونه برام تغییرات لازم رو بده. فرکانس Attiny 13 رو برابر 9.6 MHz داخلی در نظر گرفتم. برنامه با ATMega 32 درست کار می کنه.

    کد:
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/pgmspace.h>
    
    #include "sin.h"
    
    
    void InitPWM()
    {
    
    
    
      TCCR0|=(1<<WGM00)|(1<<WGM01)|(1<<COM01)|(1<<CS00);
    
    
    
      DDRB|=(1<<PB3);
    }
    
    void main()
    {
      uint8_t i;
    
      InitPWM();
    
      while(1)
      {
    
       uint8_t delay,n;
    
       for(delay=1;delay<=50;delay++)
       {
         for(n=0;n<(51-delay);n++)
         {
          for(i=0;i<=254;i++)
          {
            OCR0=pgm_read_byte_near(sine+i);
            _delay_loop_2(delay);
    
          }
         }
       }
       for(delay=50;delay>=2;delay--)
       {
         for(n=0;n<(51-delay);n++)
         {
          for(i=0;i<=254;i++)
          {
            OCR0=pgm_read_byte_near(sine+i);
            _delay_loop_2(delay);
          }
         }
       }
    
      }
    }
    این برنامه پخش آهنگ از طریق میکرو هست.
    ممنون

    دیدگاه


      #3
      پاسخ : کمک برای برنامه نویسی

      نوشته اصلی توسط vahhab
      سلام دوستان،
      یه برنامه دارم برای ATMega 32 که توسط winavr یا eclipse نوشته شده، حالا می خوام برای ATTiny 13 استفاده کنم. برنامه اش طولانی نیست. کسی می تونه برام تغییرات لازم رو بده. فرکانس Attiny 13 رو برابر 9.6 MHz داخلی در نظر گرفتم. برنامه با ATMega 32 درست کار می کنه.

      کد:
      #include <avr/io.h>
      #include <util/delay.h>
      #include <avr/pgmspace.h>
      
      #include "sin.h"
      
      
      void InitPWM()
      {
      
      
      
        TCCR0|=(1<<WGM00)|(1<<WGM01)|(1<<COM01)|(1<<CS00);
      
      
      
        DDRB|=(1<<PB3);
      }
      
      void main()
      {
        uint8_t i;
      
        InitPWM();
      
        while(1)
        {
      
         uint8_t delay,n;
      
         for(delay=1;delay<=50;delay++)
         {
           for(n=0;n<(51-delay);n++)
           {
            for(i=0;i<=254;i++)
            {
              OCR0=pgm_read_byte_near(sine+i);
              _delay_loop_2(delay);
      
            }
           }
         }
         for(delay=50;delay>=2;delay--)
         {
           for(n=0;n<(51-delay);n++)
           {
            for(i=0;i<=254;i++)
            {
              OCR0=pgm_read_byte_near(sine+i);
              _delay_loop_2(delay);
            }
           }
         }
      
        }
      }
      این برنامه پخش آهنگ از طریق میکرو هست.
      ممنون
      من قبلا اینو راه اندازی کردم. کافیه ریجستر TCCRX رو توی دیتا شیت پیدا کنی(من نمی دونم اصلا این میکرو چند تا تایمر داره). بعد تنظیمش کنی. شماره OCRX رو هم یادت باشه تغییر دی.

      دیدگاه

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