📄 sound.lis
字号:
003C 8FBF out 0x3f,R24
003E 9991 ld R25,y+
0040 8991 ld R24,y+
0042 1895 reti
0044 .dbfunc s timer1 _timer1 fI
.even
0044 _timer1::
0044 2A92 st -y,R2
0046 8A93 st -y,R24
0048 2FB6 in R2,0x3f
004A 2A92 st -y,R2
004C .dbline 64{
; /**************************************************
; T1中断程序,根据SOUND函数输出一定频率的方波
; **************************************************/
; void timer1(void)
; {
004C .dbline 65
; PORTC^=0x01;
004C 81E0 ldi R24,1
004E 25B2 in R2,0x15
0050 2826 eor R2,R24
0052 25BA out 0x15,R2
0054 .dbline 66}
; }
0054 L3:
0054 2990 ld R2,y+
0056 2FBE out 0x3f,R2
0058 8991 ld R24,y+
005A 2990 ld R2,y+
005C 1895 reti
005E .dbfunc s sound _sound fI
; y -> R10,R11
; x -> R12,R13
.even
005E _sound::
005E 00D0 rcall push_gset4
0060 A22E mov R10,R18
0062 B32E mov R11,R19
0064 C02E mov R12,R16
0066 D12E mov R13,R17
0068 .dbline 73{
; /*****************************************************
; SOUND程序,输出频率为 x HZ的方波,延时 y MS
; x:100~20000 HZ, 0表示不发声
; y:0~65536 MS
; *****************************************************/
; void sound(unsigned int x,unsigned int y)
; {
0068 .dbline 74
; SEI();
0068 7894 sei
006A .dbline 75
; delay=0;
006A 2224 clr R2
006C 3324 clr R3
006E 30920100 sts _delay+1,R3
0072 20920000 sts _delay,R2
0076 .dbline 76
; if (x!=0)
0076 CC20 tst R12
0078 11F4 brne X0
007A DD20 tst R13
007C 31F1 breq L5
007E X0:
007E .dbline 77
; {
007E .dbline 78
; x=4000000/x;
007E 2C2C mov R2,R12
0080 3D2C mov R3,R13
0082 4424 clr R4
0084 5524 clr R5
0086 00E0 ldi R16,<L7
0088 10E0 ldi R17,>L7
008A 00D0 rcall lpm32
008C 5A92 st -y,R5
008E 4A92 st -y,R4
0090 3A92 st -y,R3
0092 2A92 st -y,R2
0094 00D0 rcall div32s
0096 C02E mov R12,R16
0098 D12E mov R13,R17
009A .dbline 79
; OCR1A=x;
009A D0924B00 sts 74+1,R13
009E C0924A00 sts 74,R12
00A2 .dbline 80
; TCNT1=0x00;
00A2 2224 clr R2
00A4 3324 clr R3
00A6 30924D00 sts 76+1,R3
00AA 20924C00 sts 76,R2
00AE .dbline 81
; TIMSK|=0x40;
00AE 89B7 in R24,0x39
00B0 8064 ori R24,64
00B2 89BF out 0x39,R24
00B4 L8:
00B4 .dbline 83
00B4 L9:
00B4 .dbline 82
; while(delay<y)
00B4 30900100 lds R3,_delay+1
00B8 20900000 lds R2,_delay
00BC 2A14 cp R2,R10
00BE 3B04 cpc R3,R11
00C0 C8F3 brlo L8
00C2 .dbline 84
; ;
; TIMSK&=0xbf;
00C2 89B7 in R24,0x39
00C4 8F7B andi R24,191
00C6 89BF out 0x39,R24
00C8 .dbline 85
; }
00C8 0AC0 rjmp L6
00CA L5:
00CA .dbline 87
; else
; {
00CA .dbline 88
; TIMSK&=0xbf;
00CA 89B7 in R24,0x39
00CC 8F7B andi R24,191
00CE 89BF out 0x39,R24
00D0 L11:
00D0 .dbline 90
00D0 L12:
00D0 .dbline 89
; while(delay<y)
00D0 30900100 lds R3,_delay+1
00D4 20900000 lds R2,_delay
00D8 2A14 cp R2,R10
00DA 3B04 cpc R3,R11
00DC C8F3 brlo L11
00DE .dbline 91
; ;
; }
00DE L6:
00DE .dbline 92
; CLI();
00DE F894 cli
00E0 .dbline 94}
;
; }
00E0 L4:
00E0 00D0 rcall pop_gset4
00E2 0895 ret
00E4 .dbsym r y 10 i
00E4 .dbsym r x 12 i
00E4 .dbfunc s main _main fI
; i -> R20
.even
00E4 _main::
00E4 .dbline 99{
; /*******************************
; 主程序
; *******************************/
; void main(void)
; {
00E4 .dbline 100
; unsigned char i=0;
00E4 4427 clr R20
00E6 .dbline 101
; music_init();
00E6 8CDF rcall _music_init
00E8 29C0 rjmp L16
00EA X1:
00EA .dbline 103
; while(1)
; {
00EA L18:
00EA .dbline 105
00EA .dbline 106
00EA 22E0 ldi R18,2
00EC 30E0 ldi R19,0
00EE 042F mov R16,R20
00F0 1127 clr R17
00F2 00D0 rcall lsl16
00F4 202E mov R2,R16
00F6 312E mov R3,R17
00F8 80E0 ldi R24,<_music_data+2
00FA 90E0 ldi R25,>_music_data+2
00FC 080F add R16,R24
00FE 191F adc R17,R25
0100 00D0 rcall lpm16
0102 202F mov R18,R16
0104 312F mov R19,R17
0106 80E0 ldi R24,<_music_data
0108 90E0 ldi R25,>_music_data
010A 022D mov R16,R2
010C 132D mov R17,R3
010E 080F add R16,R24
0110 191F adc R17,R25
0112 00D0 rcall lpm16
0114 A4DF rcall _sound
0116 .dbline 107
0116 4395 inc R20
0118 .dbline 108
0118 L19:
0118 .dbline 104
0118 22E0 ldi R18,2
011A 30E0 ldi R19,0
011C 042F mov R16,R20
011E 1127 clr R17
0120 00D0 rcall lsl16
0122 202E mov R2,R16
0124 312E mov R3,R17
0126 80E0 ldi R24,<_music_data+2
0128 90E0 ldi R25,>_music_data+2
012A 280E add R2,R24
012C 391E adc R3,R25
012E 022D mov R16,R2
0130 132D mov R17,R3
0132 00D0 rcall lpm16
0134 0030 cpi R16,0
0136 0107 cpc R16,R17
0138 C1F6 brne L18
013A .dbline 109
013A 4427 clr R20
013C .dbline 110
013C L16:
013C .dbline 102
013C EDCF rjmp L19
013E X2:
013E .dbline 111}
; while(music_data[i][1]!=0)
; {
; sound(music_data[i][0],music_data[i][1]);
; i++;
; }
; i=0;
; }
; }
013E L14:
013E 0895 ret
0140 .dbsym r i 20 c
.area lit(rom, con, rel)
00E8 L7:
00E8 00093D00 .word 2304,61
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -