;----------------------------------------------------------; ; Melody Generator (C)ChaN, 2005 .include "tn45def.inc" ;This is included in "Atmel AVR Studio" .include "avr.inc" .include "mg.inc" .def _0 = r15 .def _Sreg = r14 .def _Zreg = r12 .def _Yreg = r10 .def _TmrH = r9 .def _TmrL = r8 .def _TmrS = r7 .equ N_NOTE = 6 ;----------------------------------------------------------; ; Work Area .dseg .org RAMTOP NoteIdx:.byte 1 ; Note rotation index Notes: .byte (2+3+1+1+1+1)*N_NOTE .equ ns_freq = 0 ;Angular Speed .equ ns_rptr = 2 ;Wave table read pointer (16.8 fraction) .equ ns_lvl = 5 ;Level .equ ns_wrap = 6 ;Loop Flag .equ ns_loop = 7 ;Loop Count .equ ns_lp = 8 ;Level Pointer .equ nsize = 9 ;size of this structure ;----------------------------------------------------------; ; Program Code .cseg ; Interrupt Vectors (ATtiny45) rjmp reset ; Reset rjmp 0 ; INT0 rjmp 0 ; PCINT0 rjmp 0 ; TC1_COMA rjmp 0 ; TC1_OVF rjmp 0 ; TC0_OVF rjmp 0 ; EE_RDY rjmp 0 ; ANA_COMP rjmp 0 ; ADC rjmp 0 ; TC1_COMB rjmp isr_tc0_coma ; TC0_COMA ; rjmp 0 ; TC0_COMB ; rjmp 0 ; WDT ; rjmp 0 ; USI_START ; rjmp 0 ; USI_OVF ;--------------------------------------------------------------------; ; Program Code reset: clr _0 ldiw X, RAMTOP ;Clear RAM ldi AL, 0 ;AL = 0 st X+, _0 ; X address of RAM = _0 dec AL ; AL = AL-1 brne PC-2 ;循环256次? ; outi OSCCAL, 172 ;Adjust OSCCAL if needed. outi PORTB, 0b001101 ;Initalize Port B outi DDRB, 0b010010 ;/ outi PLLCSR, 0b00000110 ;Initialize TC1 in 250 kHz fast PWM mode. outi TCCR1, 0b01100001 ;Connect TC1 to OC1A outi GTCCR, 0b01100000 ;Connect TC1 to OC1B outi OCR0A, 62 ;Initalize TC0 in 32 kHz interval timer. outi TCCR0A, 0b00000010 outi TCCR0B, 0b00000010 outi TIMSK, (1<