본문 바로가기

ATMEGA

1칸?씩 쉬프트시키면서 불켜기


#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)
{
 //(*(volatile unsigned char*)0x61)=0xFF;
  DDRF=0xFF;
// (*(volatile unsigned char*)0x62)=0xFF;
  
  
  for(;;)// 무한루프
  {
   unsigned int j=0b00000001,k;
   asm("nop");
  
   for(k=0;k<8;k++)
    {
    j=1<<k;//비트연산 쉬프트
    PORTF = ~j;// 값을 뒤집어 넣는다. 0일때 불켜지는자리이다.
    Delayms(500);
    
    PORTF = 0b11111111;// 불 끄 기?
    Delayms(500);
    
   
    }
   
   return 1; 
  }
  
}