⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 音乐.lis

📁 AVR之ATMega16
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 + -