일단 아트메가 128 C포트 와 D 포트를 씁니다

 

C포트는 8개에 LED가 있고 D포트는 적외선 센서 네개가 달려 있습니다.

 

하고자 하는 거

 

적외선 센서를 안 만질시.. LED 8개는 순차적으로 한칸씩 불이 켜지는걸 반복 합니다.

 

적외선 센서 네개 중 무언가를 만질시 LED가 전체 불이 들어 옵니다. 다시 떼면 월래 대로 돌아 오는걸 할려 합니다.

 

 

소스---------

 

 

#include <mega128.h>

typedef unsigned char byte;
byte cnt, cnt_ms, LED = 0xFE;

interrupt [EXT_INT0]
void ext_int0_isr(void)
{
SREG |=0x80;
PORTC = 0x00;
}

interrupt [EXT_INT2]
void ext_int2_isr(void)
{
SREG |=0x80;
PORTC =0x00;
}


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF]
void timer0_ovf_isr(void)
{
 
  TCNT0=0x83;
  if(++cnt>=50)
  {
        cnt = 0;
        cnt_ms++;
       
        if(cnt_ms>=100)
        {
           cnt_ms=0;
           LED = (LED << 1)+1;
           if(LED==0xFF) LED = 0xFE;
           PORTC = LED;
         }
         }
}


void main(void)
{
   PORTC=0xFF;
   DDRC=0xFF;
  
   PORTD=0xFF;
   DDRD=0x00; 
  
   ASSR=0x00;
   TCCR0=0x05;
   OCR0=0x00;
  
   EICRA=0x22;
   EIMSK=0x05;
   EIFR=0x05;
   TIMSK=0x01;
   SREG |=0x80;

 

----------

 

재가 초보다 보니 근접은 했는대 소스가 이해도 안가고..

 

소스 설명 해주실 수 있을지 부탁드립니다.

 

예를 들어  PORTC=0xFF;  ////// LED 8개가 다 꺼진 상태 라는 뜻 입니다.

 

이렇게 설명 해주셨으면 감사하겠습니다.