본문 바로가기

ATMEGA

10월 14일 ATMEGA

#include <avr/io.h>

int main()
{
  
  DDRF=0xFF;   //F포트의 IO핀을 출력용으로 설정
  PORTF=0x00;  //F포트의 IO핀 출력값 초기화
               //F포트의 IO핀은 54~61번에 해당
  for(;;)
  {
  asm("NOP");   //동기화를 위한 NOP 명령
  PORTF=PINC;   //PINC에 버튼 입력값 저장
  }             //PORTF는 LED 출력값 저장
                //버튼 입력값을 LED 출력값으로 대입
  return 1;
 }

응용 실습 예제
1.앞의 예제를 수정하여, LED가 모두 켜진 상태에서 버튼을 누를 경우 각 버튼에 해당하는 LED가 OFF되도록 하시오
#include <stdio.h>

int main()
{
  DDRC = 0x00;

  DDRE = 0xFF;
  PORTE = 0xFF;

  volatile unsigned char i = 0;
  volatile unsigned char a = 0;
  

  for(;;)
  {
    asm("NOP");
    i = 0;

    a = ~PINC;
    while(a>=1)
    {
      a/=2;
      i++;
    }

    PORTE = i;

  }

  return 1:
}

2.버튼 누를 때마다 LED 켜지는데 이전 LED ON 상태도 그래도 유지하기. LED 모두 켜지면 LED all OFF 한다.


#include <avr/io.h>

int main(void)
{
  //volatile unsigned char i;
  //volatile unsigned int j;
  volatile unsigned int k;
  volatile unsigned int a;
  DDRF=0xFF;
  

  PORTF=0xff;
  
  for(;;)
  {
    asm("NOP");
    
    
    PORTF=PORTF&PINC;
    if(PORTF==0x00)
    {  
      
      for(a=1;a<15;a++)
      {  
        
        for(k=1;k<60000;k++);
      
      }
      
      PORTF=0xFF;
      
      
      
      
    }
  
  }


FND 실습 예제

#include <avr/io.h>

int main()
{
  DDRC = 0x00;

  DDRE = 0xFF;
  PORTE = 0xFF;

  volatile unsigned char i = 0;
  volatile unsigned char a = 0;
  

  for(;;)
  {
    asm("NOP");
    i = 0;

    a = ~PINC;
    while(a>=1)
    {
      a/=2;
      i++;
    }
    i=i|(i<<4);
    PORTE = i;

  }

  return 1;
}




#include <avr/io.h>

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

  volatile unsigned int i = 0;
  volatile unsigned int j = 0;
  

  for(i=0;i<256;i++)
  {
    PORTE=i;
    for(j=0;j<60000;j++);
    for(j=0;j<60000;j++);

  
  
  
  
  
  
  }

  return 1;
}


'ATMEGA' 카테고리의 다른 글

10월 21일 ATMEGA  (0) 2010.10.21
10월 19일 ATMEGA  (0) 2010.10.19
10월 18일 ATMEGA  (0) 2010.10.18
10월 13일 ATMEGA  (0) 2010.10.13
10월 12일 ATMEGA  (0) 2010.10.12