BASIC4MCU | 질문게시판 | avr 소스에 대해 질문드립니다
페이지 정보
작성자 하기 작성일2019-11-29 01:21 조회6,904회 댓글0건본문
안녕하세요. mcu를 처음 공부하는 학생입니다.
책에 나와있는 예제를 프로테우스에서 구현해보려고 하는데요.
책이 굉장히 예전에 나온 거라 그런지 소스가 atmel studio7에서는 실행이 안 되는 것 같습니다.
atmel studio7에서 실행이 되게 수정을 하고 싶은데 방법을 전혀 모르겠어요ㅠㅠ
답변해주시면 굉장히 감사할 것 같습니다...
회로도 :
#include
#include
#include
unsigned char FND[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
volatile unsigned char min, sec; // 초와 분을 저장하는 변수
SIGNAL(SIG_OVERFLOW1) //타이머1 인터럽트 서비스 루틴(14.7456MHz -> 1초)
{
TCNT1H=0xc7; //타이머 1 시정수 초기화
TCNT1L=0xc0;
sec++; //초 증가
if(sec==60) { //60초면 분을 하나 증가시킴
sec=0; //초=0
min++; //분 증가
if(min==60) { //60분이면 1시간
min=0; //분=0
}
}
wdt_reset(); //워치독 타이머 리셋, asm("WDR");
}
void delay(unsigned long i)
{
while(i--);
}
int main(void)
{
unsigned char F_index;
DDRC=0xff; //포트C 출력으로 선언, 세그먼트 용
DDRB=0xf0; //포트B 상위 4비트 출력으로 선언. TR on/off용
sec=min=0; //초 버퍼, 분 버퍼 초기값
TCNT1H=0xc7;
TCNT1L=0xc0;
TIMSK=0x04; //타이머 1 오버플로우 인터럽트 인에이블
SREG=0x80;
TCCR1A=0x00; //타이머 모드
TCCR1B=0x05; //1024 분주
wdt_enable(7); //워치독 타이머 동작 on
//asm("WDR"); WDTCR=0x0f; -> 1.8초
do { //1의 자리 초 디스플레이
F_index=sec%10; //sec의 값을 10으로 나눈 나머지 값을 F_index에 저장
PORTB=0xef; //TR0만 On
PORTC=FND[F_index];
delay(20000); //일정 시간 디스플레이
//10의 자리 초 디스플레이
F_index=sec/10; //sec의 값을 10으로 나눠서 목 값을 F_index에 저장
PORTB=0xdf; //TR1만 On
PORTC=FND[F_index];
delay(20000); //일정 시간 디스플레이
}
//1의 자리 분 디스플레이
F_index=min%10; //min의 값을 10으로 나눈 나머지 값을 F_index에 저장
PORTB=0xbf; //TR2만 On
PORTC=FND[F_index] & 0x7f; //분의 1의 자리와 point
delay(20000);
//10의 자리 분 디스플레이
F_index=min/10; //min의 값을 10으로 나눠서 몫 값을 F_index에 저장
PORTB=0x7f; //TR3만 On
PORTC=FND[F_index];
delay(20000); //일정 시간 디스플레이
sei();
}while(1);
//인터럽트 대기, 무한루프
}
![]()
소스 첫부분이 글을 쓰고 나면 자꾸 지워지네요
댓글 0
조회수 6,904등록된 댓글이 없습니다.