ATMEGA128을 이용한 교통신호 제어
- 최초 등록일
- 2015.06.25
- 최종 저작일
- 2014.07
- 5페이지/ 한컴오피스
- 가격 1,000원
소개글
타이머 관련 문제에서 가장 중요한 것은 초기값을 어떻게 설정하여야 하는지와 프리스켈을 얼마를 설정하여 시간을 측정하는가를 중요시 하며 이번 보고서를 사용하였다.
그리고 volatile 키워드를 적절하게 사용하여 매인함수와 인터럽트 함수에 동시에 사용되는 변수는 최적화에 의해 무시 되지 않게 잘 설정한다.
조건 1. 파랑에서 빨강이 되려면 노랑불이 3초동안 깜빡여야 한다.
조건 2. 장애인용 버튼이 눌러진다면 노랑불이 3초동안 깜빡이고 파랑으로 변한다. 아닐시 빨강에서 바로 파랑색이 되도록 한다.
를 잘 생각하고 이번 실습을 하여야 한다
ATMEGA128, AVRstudio, winavr
목차
1. 문제
2. 소스코드
3. 고찰
본문내용
#include <avr/io.h>
#include <avr/interrupt.h>
volatile unsigned char buzzer = 0;//인터럽트 안에서와 main 안에서 같이 사용되기에 volatile 키워드를 사용하여 무시되지 않도록한다.
unsigned char red_on = 0;//빨강불인지 확인하는 변수
unsigned char green_on=1;//파랑불인지 확인하는 변수
unsigned char yellow_on=0;//노랑불이 켜져야 하는지 확인하는 함수
unsigned char yellow_count = 0;//yellow_count는 깜빡여야 하기에 0.5를 측정하여 켜야하는지 말아야 하는지 정한다
unsigned char is_right = 1;//그린->레드 인지 레드->그린인지 확인하는 변수
int time_count = 0;//타임을 측정하는 변수 10ms 단위로 증가한다.
volatile unsigned char LED_DATA = 0x00;//PORTB의 출력값을 저장하는 변수
SIGNAL(SIG_INTERRUPT0);//인터럽트0를 쓴다고 선언
SIGNAL(SIG_OVERFLOW0);//오버플로우0를 쓴다고 선언
<중 략>
else if(yellow_on==1)//그린->빨강인 상황 장애인용 버져가 눌러졌을 경우 발동
{
if(time_count%50==0)yellow_count++;//0.5초를 측정하는 변수
if(yellow_count%2==1)//꺼졌다->켜졌다 반복할수 있게 조건문 사용
LED_DATA=0x04;
else LED_DATA=0x00;
if(yellow_count==7)//총 3초가 되었다면 모두 초기화하여 상황에 따라 파랑불을 켤지 빨강불을 켤지 정하는 조건문
{
time_count=0;
참고 자료
없음