📄 音乐.lis
字号:
003E ; //端口初始化
003E ; void port_init(void)
003E ; {
003E .dbline 76
003E ; PORTA = 0x00;//设置端口方向、数据
003E 2224 clr R2
0040 2BBA out 0x1b,R2
0042 .dbline 77
0042 ; DDRA = 0x03;
0042 83E0 ldi R24,3
0044 8ABB out 0x1a,R24
0046 .dbline 78
0046 ; PORTB = 0x00;
0046 28BA out 0x18,R2
0048 .dbline 79
0048 ; DDRB = 0x00;
0048 27BA out 0x17,R2
004A .dbline 80
004A ; PORTC = 0x00;
004A 25BA out 0x15,R2
004C .dbline 81
004C ; DDRC = 0x00;
004C 24BA out 0x14,R2
004E .dbline 82
004E ; PORTD = 0x00;
004E 22BA out 0x12,R2
0050 .dbline 83
0050 ; DDRD = 0x00;
0050 21BA out 0x11,R2
0052 .dbline -2
0052 L13:
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbend
0054 .dbfunc e timer0_init _timer0_init fV
.even
0054 _timer0_init::
0054 .dbline -1
0054 .dbline 89
0054 ; }
0054 ;
0054 ;
0054 ; //定时器T0初始化
0054 ; void timer0_init(void)
0054 ; {
0054 .dbline 90
0054 ; TCCR0 = 0x00;//停止定时器
0054 2224 clr R2
0056 23BE out 0x33,R2
0058 .dbline 91
0058 ; TCNT0 = 0xFF;//初始值
0058 8FEF ldi R24,255
005A 82BF out 0x32,R24
005C .dbline 92
005C ; OCR0 = 0xFE;//匹配值
005C 8EEF ldi R24,254
005E 8CBF out 0x3c,R24
0060 .dbline 93
0060 ; TIMSK |= 0x00;//溢出中断不允许
0060 29B6 in R2,0x39
0062 29BE out 0x39,R2
0064 .dbline 94
0064 ; TCCR0 = 0x02;//启动定时器
0064 82E0 ldi R24,2
0066 83BF out 0x33,R24
0068 .dbline -2
0068 L14:
0068 .dbline 0 ; func end
0068 0895 ret
006A .dbend
006A .dbfunc e init_devices _init_devices fV
.even
006A _init_devices::
006A .dbline -1
006A .dbline 98
006A ; }
006A ;
006A ; void init_devices(void)
006A ; {
006A .dbline 99
006A ; CLI(); //禁止所有中断
006A F894 cli
006C .dbline 100
006C ; MCUCR = 0x00;//外部中断触发方式
006C 2224 clr R2
006E 25BE out 0x35,R2
0070 .dbline 101
0070 ; MCUCSR = 0x80;//禁止JTAG
0070 80E8 ldi R24,128
0072 84BF out 0x34,R24
0074 .dbline 102
0074 ; GICR = 0x00;//外部中断使能
0074 2BBE out 0x3b,R2
0076 .dbline 103
0076 ; port_init();
0076 E3DF xcall _port_init
0078 .dbline 104
0078 ; timer0_init();
0078 EDDF xcall _timer0_init
007A .dbline 105
007A ; SEI();//开全局中断
007A 7894 sei
007C .dbline -2
007C L15:
007C .dbline 0 ; func end
007C 0895 ret
007E .dbend
.area vector(rom, abs)
.org 36
0024 0C943F00 jmp _timer0_ovf_isr
.area text(rom, con, rel)
007E .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\音乐\音乐.c
007E .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
007E _timer0_ovf_isr::
007E 2A92 st -y,R2
0080 3A92 st -y,R3
0082 8A93 st -y,R24
0084 2FB6 in R2,0x3f
0086 2A92 st -y,R2
0088 .dbline -1
0088 .dbline 110
0088 ; }
0088 ; //T0溢出中断服务程序
0088 ; #pragma interrupt_handler timer0_ovf_isr:10
0088 ; void timer0_ovf_isr(void)
0088 ; {
0088 .dbline 111
0088 ; TCNT0=toneconst;
0088 20900000 lds R2,_toneconst
008C 30900100 lds R3,_toneconst+1
0090 22BE out 0x32,R2
0092 .dbline 112
0092 ; PORTA^=BIT(PA0);
0092 81E0 ldi R24,1
0094 2BB2 in R2,0x1b
0096 2826 eor R2,R24
0098 2BBA out 0x1b,R2
009A .dbline -2
009A L16:
009A 2990 ld R2,y+
009C 2FBE out 0x3f,R2
009E 8991 ld R24,y+
00A0 3990 ld R3,y+
00A2 2990 ld R2,y+
00A4 .dbline 0 ; func end
00A4 1895 reti
00A6 .dbend
00A6 .dbfunc e music _music fV
00A6 ; sound_add -> R20,R21
00A6 ; temp1 -> R22
00A6 ; temp -> R10
.even
00A6 _music::
00A6 0E940000 xcall push_gset3
00AA .dbline -1
00AA .dbline 115
00AA ; }
00AA ; void music(void)
00AA ; {
00AA .dbline 116
00AA ; unsigned char temp=0,temp1=0;
00AA AA24 clr R10
00AC .dbline 116
00AC 6627 clr R22
00AE .dbline 117
00AE ; unsigned int sound_add=0;
00AE 4427 clr R20
00B0 5527 clr R21
00B2 .dbline 118
00B2 ; temp1=sound[sound_add];
00B2 80E0 ldi R24,<_sound
00B4 90E0 ldi R25,>_sound
00B6 FA01 movw R30,R20
00B8 E80F add R30,R24
00BA F91F adc R31,R25
00BC 6491 lpm R22,Z
00BE 2DC0 xjmp L19
00C0 L18:
00C0 .dbline 120
00C0 ; while(temp1!=0)
00C0 ; {
00C0 .dbline 121
00C0 ; temp=temp1;
00C0 A62E mov R10,R22
00C2 .dbline 122
00C2 ; temp&=0x0f;
00C2 8A2D mov R24,R10
00C4 8F70 andi R24,15
00C6 A82E mov R10,R24
00C8 .dbline 123
00C8 ; if(temp!=0)
00C8 8823 tst R24
00CA 99F0 breq L21
00CC .dbline 124
00CC ; {
00CC .dbline 125
00CC ; TIMSK|=(1<<TOIE0);//根据SOUNDTABLE中数据的低四位选择音调频率
00CC 89B7 in R24,0x39
00CE 8160 ori R24,1
00D0 89BF out 0x39,R24
00D2 .dbline 126
00D2 ; temp--;
00D2 AA94 dec R10
00D4 .dbline 127
00D4 ; toneconst=TONETABLE[temp];
00D4 82E0 ldi R24,2
00D6 8A9D mul R24,R10
00D8 F001 movw R30,R0
00DA 80E0 ldi R24,<_TONETABLE
00DC 90E0 ldi R25,>_TONETABLE
00DE E80F add R30,R24
00E0 F91F adc R31,R25
00E2 0590 lpm R0,Z+
00E4 1490 lpm R1,Z
00E6 F001 movw R30,R0
00E8 F0930100 sts _toneconst+1,R31
00EC E0930000 sts _toneconst,R30
00F0 .dbline 128
00F0 ; TCNT0=toneconst;
00F0 E2BF out 0x32,R30
00F2 .dbline 129
00F2 ; }
00F2 L21:
00F2 .dbline 130
00F2 A62E mov R10,R22
00F4 .dbline 131
00F4 8A2D mov R24,R10
00F6 8295 swap R24
00F8 8F70 andi R24,#0x0F
00FA .dbline 132
00FA 8F70 andi R24,15
00FC A82E mov R10,R24
00FE .dbline 133
00FE 082F mov R16,R24
0100 1127 clr R17
0102 87DF xcall _DelayMS
0104 .dbline 134
0104 89B7 in R24,0x39
0106 8E7F andi R24,254
0108 89BF out 0x39,R24
010A .dbline 135
010A 4F5F subi R20,255 ; offset = 1
010C 5F4F sbci R21,255
010E .dbline 136
010E 80E0 ldi R24,<_sound
0110 90E0 ldi R25,>_sound
0112 FA01 movw R30,R20
0114 E80F add R30,R24
0116 F91F adc R31,R25
0118 6491 lpm R22,Z
011A .dbline 138
011A L19:
011A .dbline 119
011A 6623 tst R22
011C 89F6 brne L18
011E .dbline -2
011E L17:
011E 0E940000 xcall pop_gset3
0122 .dbline 0 ; func end
0122 0895 ret
0124 .dbsym r sound_add 20 i
0124 .dbsym r temp1 22 c
0124 .dbsym r temp 10 c
0124 .dbend
0124 .dbfunc e main _main fV
.even
0124 _main::
0124 .dbline -1
0124 .dbline 147
0124 ; temp=temp1;
0124 ; temp>>=4;
0124 ; temp&=0x0f;
0124 ; DelayMS(temp);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
0124 ; TIMSK&=~(1<<TOIE0);
0124 ; sound_add++;
0124 ; temp1=sound[sound_add];
0124 ;
0124 ; }
0124 ; }
0124 ;
0124 ;
0124 ;
0124 ;
0124 ;
0124 ; //主函数
0124 ; void main(void)
0124 ; {
0124 .dbline 148
0124 ; init_devices();
0124 A2DF xcall _init_devices
0126 01C0 xjmp L25
0128 L24:
0128 .dbline 151
0128 .dbline 152
0128 BEDF xcall _music
012A .dbline 153
012A L25:
012A .dbline 150
012A FECF xjmp L24
012C X1:
012C .dbline -2
012C L23:
012C .dbline 0 ; func end
012C 0895 ret
012E .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\音乐\音乐.c
0000 _toneconst::
0000 .blkb 2
0002 .dbsym e toneconst _toneconst i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -