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

20160311_박진한_업무일지_펌웨어 분석

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

























LED가 왔다 갔다 하면서 켜진다.

#define DDRA  (*((volatile unsigned char*)0x21))
#define PORTA  (*((volatile unsigned char*)0x22))
#define PINA  (*((volatile unsigned char*)0x20))



int main(void)
{
    
  
volatile unsigned int uiCnt;
  
volatile unsigned int uiLoop;
  
  DDRA 
= 0XFF;
  
  
while(1)
  {
    PORTA 
= ~(0x01); //1111 1110
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
= ~(0x02); //1111 1101
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
= ~(0x04); //1111 1011
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);  
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
= ~(0x08); //1111 0111
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);  
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
= ~(0x10); //1110 1111 
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
= ~(0x20); //1101 1111
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
= ~(0x40); //1011 1111
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
= ~(0x80); // 0111 1111
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
=  0xBF; // 1011 1111
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
=  0xDF; // 1101 1111
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);  
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
=  0xEF; // 1110 1111
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);  
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
=  0xF7// 1111 0111
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
=  0xFB; // 1111 1011
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
=  0xFD; // 1111 1101
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    PORTA 
=  0xFE; // 1111 1110
    for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
  }
  
  
return 0;
}


else 구문 사용

#include <stdio.h>

int main()
{
  
int iNum;
  
  printf(
"숫자를 입력하시오\n");
  scanf(
"%d"&iNum);
  
  
if(100<iNum)
  {
    printf(
"100보다 큰수입니다.\n");
  }
    
    
else
    {
      printf(
"100 보다 작다.\n");
    }
  
  
return 0;
}




간편하게 바꾼 식

#define DDRA  (*((volatile unsigned char*)0x21))
#define PORTA  (*((volatile unsigned char*)0x22))
#define PINA  (*((volatile unsigned char*)0x20))


int main(void)
{
  
volatile unsigned int uiCnt;
  
volatile unsigned int uiLoop;
  
  DDRA 
= 0XFF;
  
  
int iDir;
  
unsigned int uiPos;  

  iDir 
= 1;
  uiPos 
= 0
  
  
while(1)
  {
    
if(1 == iDir)
    {  
      PORTA
= ~(1 << uiPos); //순방향
    }
    
      
    
else
    {
      PORTA 
= ~(0x0080 >> uiPos); // 역방향
    }
  
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
for(uiLoop = 0; uiLoop < 60000; ++uiLoop);
    
    uiPos 
= uiPos+1;  
    
    
if(7 < uiPos)
    {
      iDir 
= iDir * -1;
      uiPos 
= 0;
    }
  }

  
return 0;
}





728x90