BASIC4MCU | 질문게시판 | Timer Interrupt 프로그램 질문
페이지 정보
작성자 master 작성일2018-07-02 10:16 조회8,953회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=2225
본문
1. Timer Interrupt를 사용하여 1/100 초 단위로 표시되는Stopwatch 구현1-1. 시간은 UART Interrupt를 사용하여 터미널에 표시1-2. 표시 시간은 분(2자리):초(2자리):0.01초(00 ~ 99)1-3. INT0에 연결된 button에 의해 start/stop 제어Interrupt 사용1-4. INT1에 연결된 button에 의해 stop 상태일 때만 시간 00:00:00으로 리셋 이상의 동작을 수행하는 프로그램을 작성해주세요 무슨소리 인지 하나도 모르겠습니다.//1. FND 구동 소스를 첨부하셔야합니다. (학교에서 배운 기본 예제)2. 컴파일러 및 mcu 디바이스가 뭔지 적어야합니다.3. 일부 mcu는 클럭까지 적어야합니다.//
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-05-29 오후 1:14:15// by Ok-Hyun Park//#include <avr/io.h>#include <avr/interrupt.h>#define F_CPU 16000000UL // 16 MHz#include <util/delay.h>//#define COM1 (PORTF&=~0x80)#define COM2 (PORTF&=~0x40)#define COM3 (PORTF&=~0x20)#define COM4 (PORTF&=~0x10)//volatile char seg_pat[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//volatile char run=0,ms=0,ms10=0,sec=0;//ISR(INT0_vect){ run^=0x01; } // run/stopISR(INT1_vect){ if(!run)ms=ms10=sec=0; } // reset//ISR(TIMER0_COMP_vect){ //1msstatic cnt=0;PORTF|=0xF0; // FND common off//if(run){if(++ms>9){ ms=0;if(++ms10>99){ ms10=0; if(++sec>99)sec=0; }}}// displayswitch(cnt){case 0: PORTB=seg_pat[sec /10]; COM1; break;case 1: PORTB=seg_pat[sec %10]; COM2; break;case 2: PORTB=seg_pat[ms10/10]; COM3; break;case 3: PORTB=seg_pat[ms10%10]; COM4; break;}if(++cnt>3)cnt=0;}//int main(){DDRB=0xFF; // ULN2803 7-segment a~g, high activeDDRF=0xF0; // TR21 7-segment common anode, low activeTCCR0=0x0C; OCR0=249; TIMSK=2; // 16000000/64/(1+249),1msEICRA=0xAA; EIMSK=0x03;SREG=0x80;while(1){}}
ATmega128 16MHz 예제입니다.참고해서 만들어보세요 (mcu가 다르면 큰 도움이 안되겠지만..)
댓글 0
조회수 8,953등록된 댓글이 없습니다.