[report] Atmega 128를 어셈블리(assembly)를 이용해 miss.exe로 Timer를 두어 LED on/off를 시킴.
- 최초 등록일
- 2015.12.30
- 최종 저작일
- 2015.09
- 15페이지/ MS 워드
- 가격 3,000원
소개글
0개~3개의 RGB를 번갈아 가면서 킨다.
TIMER 인터럽트를 사용하여 1초간격으로 점멸시킨다.
파일에는 소스코드와 디버깅 디스커션이 포함되어있다.
목차
1. LED
2. LED 켜기
3. Timer/Counter0를 이용하여 1초 간격으로 LED 켜기
본문내용
RED LED와 Yellow LED는 ‘ON’ 시키고, Green LED는 ‘OFF시키는 프로그램 이다. 0번핀부터 순서대로 YELLOW GREEN RED임으로 해당 비트에 0이 들어가면 꺼지게 하는 기본 로직을 염두해 두는게 중요하다.우선 PORTA를 output 모드로 활성시키려면 DDRA에 0xFF값을 대입하여 OUTPUT모드로 설정하고,키고싶은 LED에 알맞게 그 값을 PORTA에 16진수 형태로 대입하면 된다. DEBUGGING 하면서 알았던 점은 PORTA가 셋팅되고 바로 PINA가 설정되는게 아니었다.다음 명령어가 수행이 되어가 그때 PINA가 설정되어 출력하는데는 우리가 느끼진 못하지만 아주 미세한 시간차는 존재 할 수 있다. MISS에서 실행시 맨뒤 상수는 프로그램 실행 시간으로, 5.5초동안 실행하면 계속 Y_R이 출력되어 코드에 end label과 그 label을 반복 시킴으로 불필요하게 출력값을 계속 출력시키진 않았다.하지만 LED는 계속 켜져있음을 예상 할 수 있다.
<중 략>
1번문제와 동일하게 다양한 LED를 키는 것을 시험해보는 과제 였는데 차이점은 LED가 켜지고 꺼질 때 마다 delay가 발생해야 한다는 점이었다. Delay는 앞서 주어진 코드를 써서 표현했는데,다 실행시 3마이크로초가 나왔다.문제에서는 300마이크로 초를 원했었기에 딜레이 문장을 반복시켜야 한다는 점을 추측 해 볼 수 있다.반복시킬때 다른 레지스터에 임의의 값을 집어넣고 한번 반복마다 그 dec 명령어로 그 값이 하나씩 줄고, 그 값을 항상 0과 비교하여 같으면 delay를 끝내는 로직이다.실제로 반복문을 실행하면서 생기는 cycle이 있어 정확이 300마이크로 초를 만들어내진 못했지만 거의 근접하게 구현하였다. DEBUGGING 하면서는 300마이크로초가 진행되는 것을 F11로 계속 누르기에는 시간이 너무 많이 소요 되어 cirl+F10 (run to cursor)을 사용해 delay바로 다음 문장으로 옮겨 실제로 300마이크로초가 딜레이 되는 것을 확인
참고 자료
없음