.include "m8def.inc"
.def temp = r16
.org 0x0000 ; 전원 투임시 리셋 벡터 영역 $0000,$0001
rjmp reset ; reset 란 영역으로 이동
.org 0x0100 ; 프로그램 시작 어드레스 지정
reset:
ldi temp,0XDF
out spl,temp ; 인터럽트나 서버루틴 이용시 스텍값을 임시 저장하는 어드레스
; ram 영역중에 위치 하므로 s-ram 사용시 같은 영역 조심
io_set:
sbi ddrc,5 ; port-c 의 5번 ( m8 에서는 28-28번핀 )을 출력 포트로 지정
cbi ddrd,4 ; port-d 의 4번째 (28-6번핀)을 입력 핀으로 설정
LDI TEMP,0B00011111
OUT WDTCR,TEMP ; 워치독 기능 활성화 ( cpu 다운시 스스로 복귀 사용)
main:
wdr
in temp,pind ; port-d 를 읽어 들인
bst temp,4 ; port-d 의 4번째핀을 SREG의 T비트로 복사
brts led_on ; T비트가 High 이면 led_on 으로 분기
led_off:
cbi portc,5 ; port-c 의 5번재 (28번핀)을 클리어 LED OFF
rjmp main ; 초기로 점프
led_on:
sbi portc,5 ; port-c의 5번째 (28핀)을 High 상태로 만듬 LED ON
rjmp main ; 초기로 돌아가서 스위치 다시 읽어들임
************************************************
*) 직전 올린글 에서 밝혔듯이 모든 프로그램에 공통적인 부분이 자주
사용되므로 정확히 이해를 하고 넘어 가십시요
*) 시중에 나와있는 모든 책종류가 실제동작 되는 메인 루틴외는 올려져
있는경우가 거의 업기에 초보자분들이 많은 고생과 시행착오를 하는
이유 이기도 합니다
*) 하드웨어나 프로그램또한 기초적인부분이 제대로 되어있지 않으면
어느정도 이후에는 발전이 업기에 참고 하시길 바랍니다