#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;
}
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
20160314_정우민_인터럽트 (0) | 2016.03.15 |
---|---|
20160311_오아람_업무일지_데이터시트,실습+펌웨어분석 (1) | 2016.03.15 |
2016-03-14.강정수.펌웨어분석(EICRA,EICRB) (1) | 2016.03.15 |
main.h (0) | 2016.03.15 |
2016.03.11 이종찬 업무일지 (3) | 2016.03.15 |
20160314_송민규_업무일지_펌웨어분석 (3) | 2016.03.15 |
미 정부 오픈소스 직접개발 &배포 (0) | 2016.03.15 |
20160311-조재찬-업무일지-펌웨어분석 (2) | 2016.03.15 |