아래 소스를 atmega8로 변경좀 해주세요
.include "m8def.inc"로 변경해도 안됩니다. 다른 부분도 변경해야 하나요?
그리고 외부 크리스탈 사용하려면 따로설정해야 하나요?
설정해야 한다면 그것도 일러 주십시요
내부 크리스탈은 1MHz라는데 그래서 외부 16MHz를 달아서 사용하려고 하는데 크리스탈만 달면 되는지...
avr이제 막 입문한 초보입니다.
선배님들 바쁘시지만 부탁좀 드릴게요 꼭 어셈블리어로 하고 싶습니다.
부탁 드리는김에 하나 더 부탁드릴게요~!
아래 소스중 주석이 없는곳에 주석도 부탁드릴게요
염치불구하고 부탁드립니다.
출처:http://cafe.naver.com/allcyber/1025
;==============================================================
.include "4433def.inc"
.def bi = R16
.def bj = R17
.def GV_bi = R18
.def GT_t0 = R19
.equ C_LEDBit = 1
;======================================
.cseg
.ORG 0x000
RJMP START
;interrupt vector table.
.ORG 0x006 ; Timer/Counter0 인터럽트의 물리 번지를 나타낸다.
RJMP TIMER0_OVF ; Timer/Counter0 인터럽트가 걸렸을 때 분기하는 번지.
START:
;우선 system 값들을 초기화 한다.
ldi bi,low(RAMEND) ;램의 마지막 번지를 스텍포인터로 지정
out SPL, bi
sbi DDRB,C_LEDBit ;B Port bit 1의 방향을 출력으로 설정한다.
;Timer 0 초기화
ldi bi,0x05 ;타이머 분주비 설정 -> clk*8 => (1/8M)*1024=128us
out TCCR0,bi
ldi bi,(256-100) ;counter value 128us*100=12.8ms
out TCNT0,bi
ldi bi,0x02 ;Timer 0 interrupt를 구동시킨다.
out TIMSK,bi
sei ;모든 인터럽트를 enable 시킨다.
;일반변수 초기화
ldi GT_t0, 0 ;타이머 인터럽트가 걸린 횟수를 세는 변수를 0으로 클리어한다.
MAIN:
cpi GT_t0, 20 ; 타이머 인터럽트가 20번 걸렸는지 검사. 256ms
brne MAIN
ldi GT_t0, 0 ; 타이머 인터럽트 횟수를 처음부터 셀수있도록…
;실제 점멸 데이터를 만들어 LED port에 출력한다.
inc bi
mov bj, bi
ror bj
brcc MJMP_1
sbi PORTB,C_LEDBit
rjmp MJMP_2
MJMP_1:
cbi PORTB,C_LEDBit
MJMP_2:
rjmp MAIN ;MAIN loop를 돈다.
;======================================
TIMER0_OVF: ;타이머 0 인터럽트가 걸리면 이곳으로 분기한다.
ldi GV_bi,(256-100) ;타이머 값을 리로드한다. 타이머 0는 켑쳐모드가 없다.
out TCNT0,GV_bi
inc GT_t0 ; 타이머 인터럽트가 걸린 횟수를 센다.
Reti ;인터럽트를 빠져나간다.
;======================================