📄 music.lis
字号:
0046 25BA out 0x15,R2
0048 .dbline -2
0048 .dbline 60
0048 ; }
0048 L9:
0048 2990 ld R2,y+
004A 2FBE out 0x3f,R2
004C 8991 ld R24,y+
004E 3990 ld R3,y+
0050 2990 ld R2,y+
0052 .dbline 0 ; func end
0052 1895 reti
0054 .dbend
0054 .dbfunc e music _music fV
0054 ; sound_add -> R20,R21
0054 ; temp1 -> R22
0054 ; temp -> R10
.even
0054 _music::
0054 00D0 rcall push_gset3
0056 .dbline -1
0056 .dbline 62
0056 ; void music(void)
0056 ; {
0056 .dbline 64
0056 ; unsigned char temp,temp1;
0056 ; unsigned int sound_add=0;
0056 4427 clr R20
0058 5527 clr R21
005A .dbline 65
005A ; TCCR1A = 0x00;
005A 2224 clr R2
005C 2FBC out 0x2f,R2
005E .dbline 66
005E ; TCCR1B =(1<<CS11);//8分频
005E 82E0 ldi R24,2
0060 8EBD out 0x2e,R24
0062 .dbline 67
0062 ; temp1=EEPROMread((int)&sound[sound_add]);
0062 80E0 ldi R24,<_sound
0064 90E0 ldi R25,>_sound
0066 8A01 movw R16,R20
0068 080F add R16,R24
006A 191F adc R17,R25
006C 00D0 rcall _EEPROMread
006E 602F mov R22,R16
0070 30C0 rjmp L12
0072 L11:
0072 .dbline 69
0072 ; while(temp1!=0)
0072 ; {
0072 .dbline 70
0072 ; temp=temp1;
0072 A62E mov R10,R22
0074 .dbline 71
0074 ; temp&=0x0f;
0074 8A2D mov R24,R10
0076 8F70 andi R24,15
0078 A82E mov R10,R24
007A .dbline 72
007A ; if(temp!=0)
007A 8823 tst R24
007C A1F0 breq L14
007E .dbline 73
007E ; {
007E .dbline 74
007E ; TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
007E 89B7 in R24,0x39
0080 8460 ori R24,4
0082 89BF out 0x39,R24
0084 .dbline 75
0084 ; temp--;
0084 AA94 dec R10
0086 .dbline 76
0086 ; toneconst=TONETABLE[temp];
0086 82E0 ldi R24,2
0088 8A9D mul R24,R10
008A F001 movw R30,R0
008C 80E0 ldi R24,<_TONETABLE
008E 90E0 ldi R25,>_TONETABLE
0090 E80F add R30,R24
0092 F91F adc R31,R25
0094 0590 lpm R0,Z+
0096 1490 lpm R1,Z
0098 F001 movw R30,R0
009A F0930100 sts _toneconst+1,R31
009E E0930000 sts _toneconst,R30
00A2 .dbline 77
00A2 ; TCNT1=toneconst;
00A2 FDBD out 0x2d,R31
00A4 ECBD out 0x2c,R30
00A6 .dbline 78
00A6 ; }
00A6 L14:
00A6 .dbline 79
00A6 A62E mov R10,R22
00A8 .dbline 80
00A8 8A2D mov R24,R10
00AA 8295 swap R24
00AC 8F70 andi R24,#0x0F
00AE .dbline 81
00AE 8F70 andi R24,15
00B0 A82E mov R10,R24
00B2 .dbline 82
00B2 81E8 ldi R24,129
00B4 8A9D mul R24,R10
00B6 8001 movw R16,R0
00B8 ABDF rcall _delay_ms
00BA .dbline 83
00BA 89B7 in R24,0x39
00BC 8B7F andi R24,251
00BE 89BF out 0x39,R24
00C0 .dbline 84
00C0 4F5F subi R20,255 ; offset = 1
00C2 5F4F sbci R21,255
00C4 .dbline 85
00C4 80E0 ldi R24,<_sound
00C6 90E0 ldi R25,>_sound
00C8 8A01 movw R16,R20
00CA 080F add R16,R24
00CC 191F adc R17,R25
00CE 00D0 rcall _EEPROMread
00D0 602F mov R22,R16
00D2 .dbline 86
00D2 L12:
00D2 .dbline 68
00D2 6623 tst R22
00D4 71F6 brne L11
00D6 .dbline 87
00D6 ; temp=temp1;
00D6 ; temp>>=4;
00D6 ; temp&=0x0f;
00D6 ; delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
00D6 ; TIMSK&=~(1<<TOIE1);
00D6 ; sound_add++;
00D6 ; temp1=EEPROMread((int)&sound[sound_add]);
00D6 ; }
00D6 ; delay_ms(1000);
00D6 08EE ldi R16,1000
00D8 13E0 ldi R17,3
00DA 9ADF rcall _delay_ms
00DC .dbline -2
00DC .dbline 88
00DC ; }
00DC L10:
00DC 00D0 rcall pop_gset3
00DE .dbline 0 ; func end
00DE 0895 ret
00E0 .dbsym r sound_add 20 i
00E0 .dbsym r temp1 22 c
00E0 .dbsym r temp 10 c
00E0 .dbend
00E0 .dbfunc e main _main fV
.even
00E0 _main::
00E0 .dbline -1
00E0 .dbline 91
00E0 ; /* 主程序 */
00E0 ; void main(void)
00E0 ; {
00E0 .dbline 92
00E0 ; DDRC=0x01;
00E0 81E0 ldi R24,1
00E2 84BB out 0x14,R24
00E4 .dbline 93
00E4 ; PORTC=0xff;
00E4 8FEF ldi R24,255
00E6 85BB out 0x15,R24
00E8 .dbline 94
00E8 ; uart_init();
00E8 00D0 rcall _uart_init
00EA .dbline 95
00EA ; SEI();
00EA 7894 sei
00EC 01C0 rjmp L18
00EE L17:
00EE .dbline 97
00EE .dbline 98
00EE B2DF rcall _music
00F0 .dbline 99
00F0 L18:
00F0 .dbline 96
00F0 FECF rjmp L17
00F2 X1:
00F2 .dbline -2
00F2 .dbline 100
00F2 ; while(1)
00F2 ; {
00F2 ; music();
00F2 ; }
00F2 ; }
00F2 L16:
00F2 .dbline 0 ; func end
00F2 0895 ret
00F4 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\icc\iccavr\mega8\mega8\music\music.c
0000 _toneconst::
0000 .blkb 2
0002 .dbsym e toneconst _toneconst i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -