C언어_펌웨어_주사위 인터럽트 사용.

2015. 4. 17. 12:31·[Programming] Language/C

#include <stdlib.h>
#include <time.h>
#include "smart.h"

void ito7seg_cal(unsigned int tmp);
unsigned char bitcal(unsigned char c1, unsigned char c2, unsigned char c3, unsigned char c4, unsigned char c5, unsigned char c6, unsigned char c7);

//unsigned char cRand;

void __vector_1(void)__attribute__((signal,used,externally_visible));//int0의 벡터 번호 1

void __vector_1(void)// 처리할 루트를 넣어준다. 끼어드는 조건이 만족하면 실행된다.
{  
  //cRand = (rand()%6 + 1);

  ito7seg_cal(rand()%6 + 1);
  
  EIFR = 0x01;  //반환 값. 그쪽 인터럽트를 사용했다라는 뜻의 반환.
}

int main(void)
{
  unsigned char cFlag = 0;   //확실히 하기 위한 flag 변수 선언

  DDRD = 0xFE;  //인터럽트 핀. 펌웨어 쪽에서는 사용하지 않는 핀들을 전부 출력으로 설정해 준다.

  SREG &= 0x7F;  /*0111 1111, &= 이 의미는 형태 sreg 0x7F 가 앤드 형태로 들어가 있으니 다른 어떤 값이 들어오면 &시켜버린다. 즉 지금의 형태는 모든 인터럽트를 사용 안하겠다가 된다.
      */

  DDRC = 0xFF;  //7세그먼트 쪽 입/출력 핀을 전부 출력으로

  EIMSK = 0x01;  //인터럽트 핀(0) 하나 사용

  EICRA = 0x02;  //falling edge 사용
  
  //SREG |= 0x80;  //현재 인터럽트를 쓰지 않고 main 함수 while문에서 다 끝내려 한다

  while(1)
  {
    if(PIND == 1 && cFlag == 0)
    {
      ito7seg_cal(8);  // 스위치를 누르고 있는 동안 8 출력
      
      cFlag = 1;
    }
    else if(PIND == 0 && cFlag == 1)
    {
      ito7seg_cal(rand() % 6 + 1);

      cFlag = 0;
    }
  
  }

  return 0;
}

void ito7seg_cal(unsigned int tmp)//7세그먼트의 카운트 형태 함수 정의
{
  switch(tmp)
  {
    case 0 : 
      PORTC = bitcal(0,0,0,0,0,0,1);
      break;
    case 1 :
      PORTC = bitcal(1,0,0,1,1,1,1);
      break;
    case 2 :
      PORTC = bitcal(0,0,1,0,0,1,0);
      break;
    case 3 :
      PORTC = bitcal(0,0,0,0,1,1,0);
      break;
    case 4 :
      PORTC = bitcal(1,0,0,1,1,0,0);
      break;
    case 5 :
      PORTC = bitcal(0,1,0,0,1,0,0);
      break;
    case 6 :
      PORTC = bitcal(0,1,0,0,0,0,0);
      break;
    case 7 :
      PORTC = bitcal(0,0,0,1,1,0,1);
      break;
    case 8 :
      PORTC = bitcal(0,0,0,0,0,0,0);
      break;
    case 9 :
      PORTC = bitcal(0,0,0,0,1,0,0);
      break;
  }
}

unsigned char bitcal(unsigned char c1, unsigned char c2, unsigned char c3, unsigned char c4, unsigned char c5, unsigned char c6, unsigned char c7)
{

  //return ( ( !c1 << 0 ) |( !c2 << 1 ) |( !c3 << 2 ) |( !c4 << 3 ) |( !c5 << 4 ) |( !c6 << 5 ) |( !c7 << 6 )  );
  
  return ( ( c1 << 0 ) |( c2 << 1 ) |( c3 << 2 ) |( c4 << 3 ) |( c5 << 4 ) |( c6 << 5 ) |( c7 << 6 )  );
}

'[Programming] Language > C' 카테고리의 다른 글

C언어_교환법칙, (2,3)차원 배열, 더블 포인터의 이해  (0) 2015.04.17
C언어_구조체 메모리 최적화(전처리어 pragma 사용법),구조체 활용, 공용체 사용법  (0) 2015.04.17
C언어_구조체의 활용(배열 통째로 옮기기, 구조체 메모리 저장 형태)  (0) 2015.04.17
C언어_펌웨어_인터럽트 사용법  (0) 2015.04.17
C언어_펌웨어_int0 count dn , int4 count up  (0) 2015.04.17
'[Programming] Language/C' 카테고리의 다른 글
  • C언어_구조체 메모리 최적화(전처리어 pragma 사용법),구조체 활용, 공용체 사용법
  • C언어_구조체의 활용(배열 통째로 옮기기, 구조체 메모리 저장 형태)
  • C언어_펌웨어_인터럽트 사용법
  • C언어_펌웨어_int0 count dn , int4 count up
쭌의 숲 속 도서관
쭌의 숲 속 도서관
  • 쭌의 숲 속 도서관
    쭌의 숲 속 도서관
    쭌의 숲 속 도서관
  • 전체
    오늘
    어제
    • 분류 전체보기 (84)
      • [Programming] Language (13)
        • C (10)
        • JavaScript (2)
        • JavaScript (WEB) (0)
        • TypeScript (0)
        • 기술 면접 (1)
        • Python (0)
      • [Programming] Framework (1)
        • Nest.js (1)
        • Svelte (0)
      • [Cloud] Amazon Cloud (0)
        • AWS-SDK (0)
        • Architecture (0)
        • Lambda (0)
        • IoT Core (0)
        • RDS (0)
      • Language (1)
        • English (1)
      • OS (7)
        • Window (7)
        • Linux (0)
      • Certificate (3)
        • 네트워크 관리사 2급 (2)
        • [기본] AWS Certified Cloud Pr.. (1)
        • [준전문가] AWS Certified Soluti.. (0)
      • 유용한 사이트 (3)
      • 이벤트 및 행사소식 (0)
      • ETC (23)
        • 프로그램 (5)
        • 운동 (8)
        • IT (2)
        • 생활 (2)
        • 쇼핑몰 (3)
        • 제품 후기 (3)
        • 여행 (0)
        • 맛집 (0)
      • TEMP (33)
        • 내용 정리중인 글들.. (33)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • WoWCat
  • 공지사항

  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
쭌의 숲 속 도서관
C언어_펌웨어_주사위 인터럽트 사용.
상단으로

티스토리툴바