📄 bi2.lis
字号:
019E ; while (time>1);
019E 81E0 ldi R24,1
01A0 90E0 ldi R25,0
01A2 8017 cp R24,R16
01A4 9107 cpc R25,R17
01A6 CCF3 brlt L58
01A8 .dbline -2
01A8 L57:
01A8 .dbline 0 ; func end
01A8 0895 ret
01AA .dbsym r time 16 I
01AA .dbend
01AA .dbfunc e delay_ms _delay_ms fV
01AA ; time -> R20,R21
.even
01AA _delay_ms::
01AA 0E940000 xcall push_gset1
01AE A801 movw R20,R16
01B0 .dbline -1
01B0 .dbline 344
01B0 ; }
01B0 ;
01B0 ; void delay_ms(unsigned int time)
01B0 ; {//毫秒级延时程序
01B0 05C0 xjmp L63
01B2 L62:
01B2 .dbline 346
01B2 .dbline 347
01B2 08EE ldi R16,1000
01B4 13E0 ldi R17,3
01B6 F1DF xcall _delay_us
01B8 .dbline 348
01B8 4150 subi R20,1
01BA 5040 sbci R21,0
01BC .dbline 349
01BC L63:
01BC .dbline 345
01BC ; while(time!=0)
01BC 4030 cpi R20,0
01BE 4507 cpc R20,R21
01C0 C1F7 brne L62
01C2 X0:
01C2 .dbline -2
01C2 L61:
01C2 0E940000 xcall pop_gset1
01C6 .dbline 0 ; func end
01C6 0895 ret
01C8 .dbsym r time 20 i
01C8 .dbend
.area vector(rom, abs)
.org 32
0020 0C94E400 jmp _timer1_ovf_isr
.area text(rom, con, rel)
01C8 .dbfile E:\temp\avr\bi2\bi2.c
01C8 .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
01C8 _timer1_ovf_isr::
01C8 2A92 st -y,R2
01CA 3A92 st -y,R3
01CC 8A93 st -y,R24
01CE 2FB6 in R2,0x3f
01D0 2A92 st -y,R2
01D2 .dbline -1
01D2 .dbline 354
01D2 ; {
01D2 ; delay_us(1000);
01D2 ; time--;
01D2 ; }
01D2 ; }
01D2 ;
01D2 ; #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
01D2 ; void timer1_ovf_isr(void)
01D2 ; {
01D2 .dbline 355
01D2 ; TCNT1=toneconst;
01D2 20900000 lds R2,_toneconst
01D6 30900100 lds R3,_toneconst+1
01DA 3DBC out 0x2d,R3
01DC 2CBC out 0x2c,R2
01DE .dbline 356
01DE ; PORTC^=1;
01DE 81E0 ldi R24,1
01E0 25B2 in R2,0x15
01E2 2826 eor R2,R24
01E4 25BA out 0x15,R2
01E6 .dbline -2
01E6 L65:
01E6 2990 ld R2,y+
01E8 2FBE out 0x3f,R2
01EA 8991 ld R24,y+
01EC 3990 ld R3,y+
01EE 2990 ld R2,y+
01F0 .dbline 0 ; func end
01F0 1895 reti
01F2 .dbend
01F2 .dbfunc e music _music fV
01F2 ; sound_add -> R20,R21
01F2 ; temp1 -> R22
01F2 ; temp -> R10
.even
01F2 _music::
01F2 0E940000 xcall push_gset3
01F6 2297 sbiw R28,2
01F8 .dbline -1
01F8 .dbline 359
01F8 ; }
01F8 ; void music(void)
01F8 ; {
01F8 .dbline 361
01F8 ; unsigned char temp,temp1;
01F8 ; unsigned int sound_add=0;
01F8 4427 clr R20
01FA 5527 clr R21
01FC .dbline 362
01FC ; TCCR1A = 0x00;
01FC 2224 clr R2
01FE 2FBC out 0x2f,R2
0200 .dbline 363
0200 ; TCCR1B =(1<<CS11);//8分频
0200 82E0 ldi R24,2
0202 8EBD out 0x2e,R24
0204 .dbline 364
0204 ; temp1 = sound[sound_add];
0204 80E0 ldi R24,<_sound
0206 90E0 ldi R25,>_sound
0208 FA01 movw R30,R20
020A E80F add R30,R24
020C F91F adc R31,R25
020E 6491 lpm R22,Z
0210 38C0 xjmp L68
0212 L67:
0212 .dbline 366
0212 ; while(temp1!=0)
0212 ; {disp_temp(0,0,1);
0212 .dbline 366
0212 81E0 ldi R24,1
0214 90E0 ldi R25,0
0216 9983 std y+1,R25
0218 8883 std y+0,R24
021A 2227 clr R18
021C 3327 clr R19
021E 0027 clr R16
0220 1127 clr R17
0222 60D1 xcall _disp_temp
0224 .dbline 367
0224 ; temp=temp1;
0224 A62E mov R10,R22
0226 .dbline 368
0226 ; temp&=0x0f;
0226 8A2D mov R24,R10
0228 8F70 andi R24,15
022A A82E mov R10,R24
022C .dbline 370
022C ;
022C ; if(temp!=0)
022C 8823 tst R24
022E A1F0 breq L70
0230 .dbline 371
0230 ; {
0230 .dbline 372
0230 ; TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
0230 89B7 in R24,0x39
0232 8460 ori R24,4
0234 89BF out 0x39,R24
0236 .dbline 373
0236 ; temp--;
0236 AA94 dec R10
0238 .dbline 374
0238 ; toneconst=TONETABLE[temp];
0238 82E0 ldi R24,2
023A 8A9D mul R24,R10
023C F001 movw R30,R0
023E 80E0 ldi R24,<_TONETABLE
0240 90E0 ldi R25,>_TONETABLE
0242 E80F add R30,R24
0244 F91F adc R31,R25
0246 0590 lpm R0,Z+
0248 1490 lpm R1,Z
024A F001 movw R30,R0
024C F0930100 sts _toneconst+1,R31
0250 E0930000 sts _toneconst,R30
0254 .dbline 375
0254 ; TCNT1=toneconst;
0254 FDBD out 0x2d,R31
0256 ECBD out 0x2c,R30
0258 .dbline 376
0258 ; }
0258 L70:
0258 .dbline 377
0258 A62E mov R10,R22
025A .dbline 378
025A 8A2D mov R24,R10
025C 8295 swap R24
025E 8F70 andi R24,#0x0F
0260 .dbline 379
0260 8F70 andi R24,15
0262 A82E mov R10,R24
0264 .dbline 380
0264 81E8 ldi R24,129
0266 8A9D mul R24,R10
0268 8001 movw R16,R0
026A 9FDF xcall _delay_ms
026C .dbline 381
026C 89B7 in R24,0x39
026E 8B7F andi R24,251
0270 89BF out 0x39,R24
0272 .dbline 382
0272 4F5F subi R20,255 ; offset = 1
0274 5F4F sbci R21,255
0276 .dbline 383
0276 80E0 ldi R24,<_sound
0278 90E0 ldi R25,>_sound
027A FA01 movw R30,R20
027C E80F add R30,R24
027E F91F adc R31,R25
0280 6491 lpm R22,Z
0282 .dbline 384
0282 L68:
0282 .dbline 365
0282 6623 tst R22
0284 09F0 breq X1
0286 C5CF xjmp L67
0288 X1:
0288 .dbline -2
0288 L66:
0288 2296 adiw R28,2
028A 0E940000 xcall pop_gset3
028E .dbline 0 ; func end
028E 0895 ret
0290 .dbsym r sound_add 20 i
0290 .dbsym r temp1 22 c
0290 .dbsym r temp 10 c
0290 .dbend
0290 .dbfunc e timer2_init _timer2_init fV
.even
0290 _timer2_init::
0290 .dbline -1
0290 .dbline 394
0290 ; temp=temp1;
0290 ; temp>>=4;
0290 ; temp&=0x0f;
0290 ; delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
0290 ; TIMSK&=~(1<<TOIE1);
0290 ; sound_add++;
0290 ; temp1 = sound[sound_add];
0290 ; }
0290 ; // delay_ms(1000);
0290 ;
0290 ; }
0290 ; #define delaytime 300
0290 ;
0290 ; //TIMER2 initialisation - prescale:256
0290 ; // desired value: 1Sec
0290 ; // actual value: 1.000Sec (0.0%)
0290 ; void timer2_init(void)
0290 ; {
0290 .dbline 395
0290 ; TCCR2 = 0x00; //stop
0290 2224 clr R2
0292 25BC out 0x25,R2
0294 .dbline 396
0294 ; ASSR |= (1<<AS2); //set async mode
0294 82B5 in R24,0x22
0296 8860 ori R24,8
0298 82BD out 0x22,R24
029A .dbline 397
029A ; TCNT2 = 0x80; //setup
029A 80E8 ldi R24,128
029C 84BD out 0x24,R24
029E .dbline 398
029E ; TCCR2 |= (1<<CS22)|(1<<CS21); //start
029E 85B5 in R24,0x25
02A0 8660 ori R24,6
02A2 85BD out 0x25,R24
02A4 .dbline -2
02A4 L72:
02A4 .dbline 0 ; func end
02A4 0895 ret
02A6 .dbend
.area vector(rom, abs)
.org 16
0010 0C945301 jmp _timer2_ovf_isr
.area text(rom, con, rel)
02A6 .dbfile E:\temp\avr\bi2\bi2.c
02A6 .dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
.even
02A6 _timer2_ovf_isr::
02A6 2A92 st -y,R2
02A8 8A93 st -y,R24
02AA 2FB6 in R2,0x3f
02AC 2A92 st -y,R2
02AE .dbline -1
02AE .dbline 403
02AE ; }
02AE ;
02AE ; #pragma interrupt_handler timer2_ovf_isr:iv_TIMER2_OVF
02AE ; void timer2_ovf_isr(void)
02AE ; {
02AE .dbline 404
02AE ; TCNT2 = 0x80; //reload counter value
02AE 80E8 ldi R24,128
02B0 84BD out 0x24,R24
02B2 .dbline 405
02B2 ; PORTB^=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -