목차
문제 1. 알람이 울리는 동안 (즉, Alarm! 메시지가 문자LCD에 나타날 때) 동시에 LED가 켜지도록 프로그램을 수정하시오. 이때 LED가 켜지는 형태는 자유롭게 한다.
문제 2. 예비보고서의 프로그램은 외부 인터럽트 1을 누를 때 타이머 자체를 중지하도록 만들어져 있다. 이 프로그램을 수정하여 Alarm! 메시지가 뜰 때 외부 인터럽트 1을 누르면, 타이머는 그대로 동작하고 문자 LCD에 나타난 Alarm! 메시지만 없어지도록 하시오.
문제 3. 외부 인터럽트 1을 누르면 알람이 꺼졌다가 5초 후에 다시 울리도록 프로그램을 수정하시오. 이때 알람이 지속되는 시간은 10초로 한다.
※ 검토 및 고찰
문제 2. 예비보고서의 프로그램은 외부 인터럽트 1을 누를 때 타이머 자체를 중지하도록 만들어져 있다. 이 프로그램을 수정하여 Alarm! 메시지가 뜰 때 외부 인터럽트 1을 누르면, 타이머는 그대로 동작하고 문자 LCD에 나타난 Alarm! 메시지만 없어지도록 하시오.
문제 3. 외부 인터럽트 1을 누르면 알람이 꺼졌다가 5초 후에 다시 울리도록 프로그램을 수정하시오. 이때 알람이 지속되는 시간은 10초로 한다.
※ 검토 및 고찰
본문내용
;
EA= 1;
TR0= 1;
while(1)
{
sprintf(clock_string, "%02d:%02d:%02d", clock[0], clock[1], clock[2]);
Line1();
Put_String(clock_string);
if(is_alarm == 1)
{
Line2();
Put_String("alarm!");
}
else
{
Line2();
Put_String(" ");
}
if(pause == 1)
{
Line3();
Put_String("Pause!");
}
else
{
Line3();
Put_String("Running");
}
}
}
void Int1_ISR(void) interrupt 2
{
alarm_delay = 5;// 외부 인터럽트1 버튼을 누르면 alarm_delay가 5가 되도록한다. 알람이 5초 동안 꺼졌다가 다시 작동하게 된다.
}
void Timer0_Int_ISR(void) interrupt 1
{
++t0_ovf_count;
if(t0_ovf_count >= 114)
{
t0_ovf_count = 0;
if(++clock[2] >= 60)
{
clock[2] = 0;
if(++clock[1] >= 60)
{
clock[1] = 0;
if(++clock[0] >= 24)
{
clock[0] = 0;
}
}
}
if(is_alarm == 1)
{
--alarm_duration;
if(alarm_duration == 0)
{
is_alarm = 0;
}
}
if(alarm_clock[0] == clock[0] &&
alarm_clock[1] == clock[1] &&
alarm_clock[2] == clock[2])
{
is_alarm = 1;
alarm_duration = 10;
}
if(alarm_delay > 0)// alarm_delay가 0보다 크면 if문 안으로 들어간다.
이 if문은 1초마다 확인된다
{
is_alarm =0;// 알람메시지를 사라지게 한다
--alarm_delay; // alarm_dealy를 1씩 감소한다
if(alarm_delay == 0) // alarm_delay가 0이되면 if문 안으로 들어간다.
{
is_alarm =1; // 알람메시지를 뜨게 한다.
alarm_duration =10; // 알람 지속시간을 10초로 설정한다.
}
}
}
}
※ 검토 및 고찰
이번 실험은 우리가 일상생활에서 항상 접하는 알람시계의 동작에 대해 살펴보았다.
알람이 울릴 때 LED를 켜지게 함으로써 시각적인 효과도 나타나고, 알람이 울리는데 시끄러운 알람을 끄거나, 조금만 더 자고일어나기 위해 알람을 더 늦추는 등 이러한 기본적인 동작원리를 구현해볼 수 있는 시간이었다. 실험을 다 마치고 나서보니 3번 문제를 풀 때 내가 한 방법이 아닌 다른 방법이 있다는 것을 알았다. 바로 현재시간에 5초를 더하는 방법인데 이 방법은 문제가 발생하게 된다. 초 부분이
56, 57, 58, 59초 일 때 외부인터럽트1 버튼을 누르면 5초가 더해져서 61, 62, 63, 64초가 된다. 60초 주기로 반복되는 시계에서 이것들은 비정상적이 되므로, 56, 57, 58, 59초 일 때에 따른 조건문이 또 추가되어야 한다. 이것은 프로그램이 복잡해지거나 오류가 발생할 가능성이 생기므로 새로운 변수를 지정해서 알람이 지연되도록하는 방법을 택하였다. 어떠한 프로그램이든지 한 가지 방법만이 아닌 여러 가지 방법으로 접근할 수 있고 그 중에서 프로그램이 최대한 간단하고 효율적으로 동작하는 방법을 찾는 연습이 필요할 것 같다. 어떻게 하면 알람의 더 다양한 기능을 구현할 수 있을지 생각해보는 것도 좋을 것 같다.
EA= 1;
TR0= 1;
while(1)
{
sprintf(clock_string, "%02d:%02d:%02d", clock[0], clock[1], clock[2]);
Line1();
Put_String(clock_string);
if(is_alarm == 1)
{
Line2();
Put_String("alarm!");
}
else
{
Line2();
Put_String(" ");
}
if(pause == 1)
{
Line3();
Put_String("Pause!");
}
else
{
Line3();
Put_String("Running");
}
}
}
void Int1_ISR(void) interrupt 2
{
alarm_delay = 5;// 외부 인터럽트1 버튼을 누르면 alarm_delay가 5가 되도록한다. 알람이 5초 동안 꺼졌다가 다시 작동하게 된다.
}
void Timer0_Int_ISR(void) interrupt 1
{
++t0_ovf_count;
if(t0_ovf_count >= 114)
{
t0_ovf_count = 0;
if(++clock[2] >= 60)
{
clock[2] = 0;
if(++clock[1] >= 60)
{
clock[1] = 0;
if(++clock[0] >= 24)
{
clock[0] = 0;
}
}
}
if(is_alarm == 1)
{
--alarm_duration;
if(alarm_duration == 0)
{
is_alarm = 0;
}
}
if(alarm_clock[0] == clock[0] &&
alarm_clock[1] == clock[1] &&
alarm_clock[2] == clock[2])
{
is_alarm = 1;
alarm_duration = 10;
}
if(alarm_delay > 0)// alarm_delay가 0보다 크면 if문 안으로 들어간다.
이 if문은 1초마다 확인된다
{
is_alarm =0;// 알람메시지를 사라지게 한다
--alarm_delay; // alarm_dealy를 1씩 감소한다
if(alarm_delay == 0) // alarm_delay가 0이되면 if문 안으로 들어간다.
{
is_alarm =1; // 알람메시지를 뜨게 한다.
alarm_duration =10; // 알람 지속시간을 10초로 설정한다.
}
}
}
}
※ 검토 및 고찰
이번 실험은 우리가 일상생활에서 항상 접하는 알람시계의 동작에 대해 살펴보았다.
알람이 울릴 때 LED를 켜지게 함으로써 시각적인 효과도 나타나고, 알람이 울리는데 시끄러운 알람을 끄거나, 조금만 더 자고일어나기 위해 알람을 더 늦추는 등 이러한 기본적인 동작원리를 구현해볼 수 있는 시간이었다. 실험을 다 마치고 나서보니 3번 문제를 풀 때 내가 한 방법이 아닌 다른 방법이 있다는 것을 알았다. 바로 현재시간에 5초를 더하는 방법인데 이 방법은 문제가 발생하게 된다. 초 부분이
56, 57, 58, 59초 일 때 외부인터럽트1 버튼을 누르면 5초가 더해져서 61, 62, 63, 64초가 된다. 60초 주기로 반복되는 시계에서 이것들은 비정상적이 되므로, 56, 57, 58, 59초 일 때에 따른 조건문이 또 추가되어야 한다. 이것은 프로그램이 복잡해지거나 오류가 발생할 가능성이 생기므로 새로운 변수를 지정해서 알람이 지연되도록하는 방법을 택하였다. 어떠한 프로그램이든지 한 가지 방법만이 아닌 여러 가지 방법으로 접근할 수 있고 그 중에서 프로그램이 최대한 간단하고 효율적으로 동작하는 방법을 찾는 연습이 필요할 것 같다. 어떻게 하면 알람의 더 다양한 기능을 구현할 수 있을지 생각해보는 것도 좋을 것 같다.
키워드
추천자료
- 차세대 컴퓨터 - cpu의 한계로 인한 차세대 컴퓨터의 필요성
- [공과대]-마이크로 프로세스의 구성요소,레지스터,외부 핀기능
- RF를 이용한 장애물 피하는 모형자동차
- [정보처리]PC의 구성 요소(하드웨어) - 워드프로세서(문서실무)
- 프로세서의 발전과정과 기술장벽 및 극복방안
- [영화 속 나노기술 찾기]영화 속 나노기술 찾기
- 마이크로 채널
- AVR마이크로컨트롤러 연습문제
- 학사관리 시스템 데이터베이스 쿼리
- 7세그먼트 LED 응용 프로그램 [마컴 예비레포트]
- 마이크로웨이브[마이크로파]의 정리
- [기술, 반도체신소자기술, 첨단기술, 나노바이오기술]기술과 반도체신소자기술, 기술과 첨단...
- [자동화응용실험] 로봇(로보트 Robot)의 어원, 종류, 구성에 대한 조사
- 기계공학응용실험 - PLC의 활용 결과보고서
소개글