본문 바로가기

ATMEGA

/*99~0까지 순차적으로 숫자를 1씩 감소하면서 FND에 표시 하기*/

#include<avr/io.h>

void Delay_us(unsigned int time_us)  /* time delay for us */
{
register unsigned char i;

  for(i = 0; i < time_us; i++)   // 4 cycle +
    { asm volatile(" PUSH  R0 ");  // 2 cycle +
      asm volatile(" POP   R0 ");  // 2 cycle +
      asm volatile(" PUSH  R0 ");  // 2 cycle +
      asm volatile(" POP   R0 ");  // 2 cycle +
      asm volatile(" PUSH  R0 ");  // 2 cycle +
      asm volatile(" POP   R0 ");  // 2 cycle = 16 cycle = 1 us for 16MHz
    }
}

void Delayms(unsigned int time_ms)  /* time delay for ms */
{ register unsigned int i;

  for(i = 0; i < time_ms; i++)
    { Delay_us(250);
      Delay_us(250);
      Delay_us(250);
      Delay_us(250);
    }
}

int main(void)
{
 DDRE=0xFF;
 PORTE=0xFF;

 //DDRF=0xFF;
 //PORTF=0xFF;

 volatile unsigned char b=0;
 volatile unsigned char a=0;


 for(;;)
 {
  asm("NOP");
    
  //PORTF = PINC;
  for(a=9;a>0;a--)
   {  
   for(b=9;b>0;b--)
    {
    PORTE =a<<4 | b;// 예 0001==>>    0001 0001
    Delayms(500);
    }
   }
 }
 return 1;
}