본문 바로가기
코스웨어/16년 스마트컨트롤러

main.c

by 알 수 없는 사용자 2016. 3. 15.
728x90
반응형

#include "main.h"

volatile unsigned int uiState;

int main(void)
{
 volatile unsigned int uiCnt;  //타이머. 변수선언 다음은 DDRA를 출력으로 바꿔줘야함
 volatile unsigned int uiloop;
 uiCnt = 0;
 Init();

 uiState = 1;

 while(1)
 {
  PORTA = ((uiCnt/10)<<4)|(uiCnt%10);  //세그먼트에 3 0을 출력, 3이라는 수를 왼쪽으로 4칸 밀어라.|34를 10으로 나눈 나머지(4)를 첫자리부터 출력.
  for(uiloop = 0; uiloop < 45000; ++uiloop); //세미콜론을 닫으므로써 지역문이 된다.
  for(uiloop = 0; uiloop < 50000; ++uiloop);

  if(1==uiState)
  {
   ++uiCnt;
  }

  if(uiCnt > 99)  //세그먼트에서 앞자리가 9를 넘어가면 지워지는 이유는 uiCnt가 100을 넘어갔을 때이다. 그래서 if문으로 재정의.
  {
   uiCnt = 0;
  }
 }

 return 0;
}

void Init(void)
{
 INT_Init();
 Port_Init();
}

void Port_Init(void)
{
 DDRA = 0xff;
 PORTA = 0x00; //모든 포트 출력을 0으로 바꾼다. 그러므로 판때기에는 00이 출력
}

void INT_Init(void)
{
 EICRA=(3<<ISC0)|(3<<ISC1);  //ISC0==INT0, 상승엣지이므로 3을 쓴다.
 EIMSK=(1<<INT0)|(1<<INT1); //==EIMSK=1;<- 이건 or 쓰기 전에만. INT0만 열고 나머지문은 다 닫는다.만약 다른것도 열고 싶으면 (1<<INT0) | (1<<INT3);이렇게 쓴다.
 SREG=SREG|(1<<7); //어셈블리보다 코드보다 느리다.SREG=SREG | (1<<7)==sei(); 이건 전체 인터럽트 켜는 것.
}

void __vector_1(void)
{
 volatile unsigned int uiCnt;
 for(uiCnt = 0; 30000>uiCnt ; ++uiCnt);
 uiState = 1;
}

void __vector_2(void)
{
 volatile unsigned int uiCnt;
 for(uiCnt = 0; 30000>uiCnt ; ++uiCnt);
 uiState = 0;
}

728x90