일단 아트메가 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개가 다 꺼진 상태 라는 뜻 입니다.
이렇게 설명 해주셨으면 감사하겠습니다.
이거 왠지 우송대 냄새 나는데 ?