질문게시판 > 답변 : atmega128 인터럽트 질문

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

답변 : atmega128 인터럽트 질문

페이지 정보

작성자 master 작성일18-06-11 17:06 조회8,022회 댓글2건

본문

 

// DateTime : 2018-06-11 오후 5:09:24
// by Ok-Hyun Park
// 헤더
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <avr/io.h>
#include <avr/interrupt.h>
//
volatile enum{Direction_L,               Direction_R                }Direction=Direction_R;
volatile enum{Star_L2,      Star_L1,     Star_C0Star_R1,  Star_R2 }Star=Star_L2;
volatile enum{State_Display,State_Success,State_Failure,State_Finish}State=State_Display;
//
volatile char s[50];
volatile int  Level=1,Score=0,time=0,ms4=0,ms4_2=0,ms100=0,Key_input=0;
//--------------------------------------------------------------------------
int my_getchar(void){ while(!(UCSR0A&0x80)); return UDR0; }
void tx_string(char*s){ while(*s)my_putchar(*s++); }
//
int my_putchar(char data){
  if(data=='\n'){ while((UCSR0A&0x20)==0); UDR0='\r'; }
  while((UCSR0A&0x20)==0);
  UDR0=data;
  return(0);
}
//--------------------------------------------------------------------------
SIGNAL(SIG_OUTPUT_COMPARE0){ // 4ms
  if(++ms4==25){ ms4=0;      // 100ms
    if(ms100<200)++ms100else State=State_Finish;
    //
    if(State==State_Display){
      switch(Star){ // 100ms 마다 출력
        case Star_L2time=ms100sprintf(s,"\n★□□□□%03d",time); tx_string("str"); break;
        case Star_L1time=ms100sprintf(s,"\n□★□□□%03d",time); tx_string("str"); break;
        case Star_C0time=ms100sprintf(s,"\n□□★□□%03d",time); tx_string("str"); break;
        case Star_R1time=ms100sprintf(s,"\n□□□★□%03d",time); tx_string("str"); break;
        case Star_R2time=ms100sprintf(s,"\n□□□□★%03d",time); tx_string("str"); break;
      }
    }
  }
  //
  if(State==State_Display){
    if(++ms4_2==(250-50*(Level-1))){ ms4_2=0;                                        // Level1: 1.0초마다...Level5: 0.2초마다 상태 변환
      if(Direction==Direction_R){ if(++Star>4){ Star=0Direction=Direction_L; } }   // 방향이 좌에서 우라면...
      elseif(Star==Star_L2){ Star=Star_L1Direction=Direction_R; } else Star--; } // 방향이 우에서 좌라면...
    }
  }
  else ms4_2=0;
}
//
SIGNAL(SIG_UART0_RECV){
  Key_input=my_getchar();
  if(State==State_Display){
    if(Star==Star_C0)State=State_Successelse State=State_Failure;
  }
  //if(Key_input_==82||Key_input_==114)State=State_Finish;
}
//---------------------------------------------------------------------------------------
int main(void){
  PORTG=0xFF;  DDRG=0xFF;
  UCSR0B=0x98UBRR0L=0x33;
  UCSR1B=0x98UBRR1L=0x33;       // Baud Rate: 19200
  TCCR0=0x0E;  OCR0=249TIMSK=2// Compare Match interrupt: Enable
  tx_string("\n강화를 시작합니다\n강화 시작!!\n");
  ms4=ms4_2=0;
  while(1){
    switch(State){
      case State_Display:{ break; }
      case State_Success:{
        sprintf(s,"\n\nSUCCESS\nSCORE: %02d\n",++Score); tx_string("str"); 
        if(Level<5)Level++;
        Direction=Direction_RStar=Star_L2ms4=ms4_2=0State=State_Display;
        break;
      }
      case State_Failure:{
        sprintf(s,"\n\nFailure\nSCORE: %02d\n",Score); tx_string("str"); 
        Direction=Direction_RStar=Star_L2ms4=ms4_2=0State=State_Display;
        break;
      }
      case State_Finish:{
        sprintf(s,"\n\nFinish\nFinal score: %02d\nRE START: Go!",Score); tx_string("str"); 
        Level=0Score=0Direction=Direction_RStar=Star_L2ms4=ms4_2=ms100=0State=State_Display;
        break;
      }
    }
  }
  return 0;
}

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 2

조회수 : 8,022

초코우유먹자님의 댓글

초코우유먹자 작성일

수정감사합니다 printf 조건에서 쓰지않고 해야했으므로 문자열로 썻씁니다
수정하신코드는 타이머인터럽트내에서 if문을 통해 제가원하는 출력을 만들어주신거맞나요? 제가 아직 초보라서ㅜ 어거지로 tx interrupt을 쓰자고 하면 어떤걸 쓰면 좋을까요 ㅜ

master님의 댓글

master 댓글의 댓글작성일

tx 인터럽트를 사용해서는 만들지 못할텐데요?

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 라즈베리파이4 신형 선택문제 댓글[1] maximum  22-06-26
질문 음전압 ADC 댓글[2] 412904  22-06-26
질문 아두이노 센서값 출력 질문입니다! 댓글[1] 아궁2  22-06-24
질문 ATmega128, ATmega28 RS232통신 첨부파일Moon4201  22-06-24
답변 답변 : ATmega128, ATmega28 RS232… 댓글[1] master  22-06-25
질문 서보모터, 온습도센서 코드 질문 댓글[2] 첨부파일kshdlfaldfh  22-06-22
답변 답변 : 서보모터, 온습도센서 코드 질문 댓글[15] master  22-06-22
질문 steppermulti5 질문 응애  22-06-21
답변 답변 : steppermulti5 질문 댓글[1] master  22-06-22
질문 atmega128 avr usart 질문 snoflak  22-06-21
답변 답변 : atmega128 avr usart 질문 댓글[5] master  22-06-21
질문 사용자 정의 함수 변환 하는 방법 댓글[2] 첨부파일da0800  22-06-21
질문 atmega128 댓글[1] 양의노래  22-06-20
질문 아두이노 동시동작 재질문 댓글[9] 첨부파일죠르디  22-06-20
질문 초음파센서로 dc모터 제어하기 댓글[1] 첨부파일난쟁2  22-06-20
질문 아두이노 동시동작 댓글[7] 죠르디  22-06-19
질문 ATMEGA128 UART,FND 연동 질문 JMOD  22-06-19
답변 답변 : ATMEGA128 UART,FND 연동 질문 댓글[1] master  22-06-20
질문 atmeg128 질문이요 댓글[1] 첨부파일공대생er  22-06-18
질문 atmega128 초음파 센서로 신호등 시간초 늘리기 서동씨  22-06-18
답변 답변 : atmega128 초음파 센서로 신호등 시간초… 댓글[1] master  22-06-18
질문 atmega128 댓글[2] 망경이  22-06-18
질문 앱인벤터 이용해서 수동 자동 할라고하는데 ..잘안됩니다… 댓글[1] 따랑해영  22-06-18
답변 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 ..… 댓글[1] 첨부파일따랑해영  22-06-19
답변 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 .… 첨부파일따랑해영  22-06-19
질문 서보모터와 초음파센서 댓글[1] 브링미히어  22-06-17
질문 LCD 도와주세요 ㅜㅠㅠㅠ 댓글[2] 첨부파일dentist22  22-06-17
질문 안녕하세요 atmega128 질문드리고 싶습니다. (자… 댓글[3] dlcldl  22-06-17
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전