📄 sl3010_2.lst
字号:
0248 3088 CPI R24,0x8
0249 F320 BCS 0x022E
(0096) }
(0097)
(0098) pa = 0x80;
024A E880 LDI R24,0x80
024B 938000E0 STS _pa,R24
(0099) for(timers=0;timers<8;timers++)
024D 2422 CLR R2
024E 922000DF STS _timers,R2
0250 C018 RJMP 0x0269
(0100) {
(0101) PORTA=~pa;
0251 902000E0 LDS R2,_pa
0253 9420 COM R2
0254 BA2B OUT 0x1B,R2
(0102) delay_ms(led_delayms/2);
0255 910000D6 LDS R16,0xD6
0257 911000D7 LDS R17,0xD7
0259 9516 LSR R17
025A 9507 ROR R16
025B DE34 RCALL _delay_ms
(0103) pa=pa|(pa>>1);
025C 902000E0 LDS R2,_pa
025E 9426 LSR R2
025F 903000E0 LDS R3,_pa
0261 2832 OR R3,R2
0262 923000E0 STS _pa,R3
0264 918000DF LDS R24,_timers
0266 5F8F SUBI R24,0xFF
0267 938000DF STS _timers,R24
0269 918000DF LDS R24,_timers
026B 3088 CPI R24,0x8
026C F320 BCS 0x0251
(0104) }
(0105)
(0106) pa = 0xfe;
026D EF8E LDI R24,0xFE
026E 938000E0 STS _pa,R24
(0107) for(timers=0;timers<8;timers++)
0270 2422 CLR R2
0271 922000DF STS _timers,R2
0273 C018 RJMP 0x028C
(0108) {
(0109) PORTA=~pa;
0274 902000E0 LDS R2,_pa
0276 9420 COM R2
0277 BA2B OUT 0x1B,R2
(0110) delay_ms(led_delayms/2);
0278 910000D6 LDS R16,0xD6
027A 911000D7 LDS R17,0xD7
027C 9516 LSR R17
027D 9507 ROR R16
027E DE11 RCALL _delay_ms
(0111) pa=pa & (pa<<1);
027F 902000E0 LDS R2,_pa
0281 0C22 LSL R2
0282 903000E0 LDS R3,_pa
0284 2032 AND R3,R2
0285 923000E0 STS _pa,R3
0287 918000DF LDS R24,_timers
0289 5F8F SUBI R24,0xFF
028A 938000DF STS _timers,R24
028C 918000DF LDS R24,_timers
028E 3088 CPI R24,0x8
028F F320 BCS 0x0274
(0112) }
(0113)
(0114) pa = 0x03;
0290 E083 LDI R24,3
0291 938000E0 STS _pa,R24
(0115) for(timers=0;timers<4;timers++)
0293 2422 CLR R2
0294 922000DF STS _timers,R2
0296 C016 RJMP 0x02AD
(0116) {
(0117) PORTA=~pa;
0297 902000E0 LDS R2,_pa
0299 9420 COM R2
029A BA2B OUT 0x1B,R2
(0118) delay_ms(led_delayms/2);
029B 910000D6 LDS R16,0xD6
029D 911000D7 LDS R17,0xD7
029F 9516 LSR R17
02A0 9507 ROR R16
02A1 DDEE RCALL _delay_ms
(0119) pa=pa<<2;
02A2 902000E0 LDS R2,_pa
02A4 0C22 LSL R2
02A5 0C22 LSL R2
02A6 922000E0 STS _pa,R2
02A8 918000DF LDS R24,_timers
02AA 5F8F SUBI R24,0xFF
02AB 938000DF STS _timers,R24
02AD 918000DF LDS R24,_timers
02AF 3084 CPI R24,4
02B0 F330 BCS 0x0297
(0120) }
(0121)
(0122) pa = 0xc0;
02B1 EC80 LDI R24,0xC0
02B2 938000E0 STS _pa,R24
(0123) for(timers=0;timers<4;timers++)
02B4 2422 CLR R2
02B5 922000DF STS _timers,R2
02B7 C016 RJMP 0x02CE
(0124) {
(0125) PORTA=~pa;
02B8 902000E0 LDS R2,_pa
02BA 9420 COM R2
02BB BA2B OUT 0x1B,R2
(0126) delay_ms(led_delayms/2);
02BC 910000D6 LDS R16,0xD6
02BE 911000D7 LDS R17,0xD7
02C0 9516 LSR R17
02C1 9507 ROR R16
02C2 DDCD RCALL _delay_ms
(0127) pa=pa>>2;
02C3 902000E0 LDS R2,_pa
02C5 9426 LSR R2
02C6 9426 LSR R2
02C7 922000E0 STS _pa,R2
02C9 918000DF LDS R24,_timers
02CB 5F8F SUBI R24,0xFF
02CC 938000DF STS _timers,R24
02CE 918000DF LDS R24,_timers
02D0 3084 CPI R24,4
02D1 F330 BCS 0x02B8
(0128) }
(0129)
(0130) pa = 0x03;
02D2 E083 LDI R24,3
02D3 938000E0 STS _pa,R24
(0131) for(timers=0;timers<4;timers++)
02D5 2422 CLR R2
02D6 922000DF STS _timers,R2
02D8 C019 RJMP 0x02F2
(0132) {
(0133) PORTA=~pa;
02D9 902000E0 LDS R2,_pa
02DB 9420 COM R2
02DC BA2B OUT 0x1B,R2
(0134) delay_ms(led_delayms/2);
02DD 910000D6 LDS R16,0xD6
02DF 911000D7 LDS R17,0xD7
02E1 9516 LSR R17
02E2 9507 ROR R16
02E3 DDAC RCALL _delay_ms
(0135) pa=pa | (pa<<2);
02E4 902000E0 LDS R2,_pa
02E6 0C22 LSL R2
02E7 0C22 LSL R2
02E8 903000E0 LDS R3,_pa
02EA 2832 OR R3,R2
02EB 923000E0 STS _pa,R3
02ED 918000DF LDS R24,_timers
02EF 5F8F SUBI R24,0xFF
02F0 938000DF STS _timers,R24
02F2 918000DF LDS R24,_timers
02F4 3084 CPI R24,4
02F5 F318 BCS 0x02D9
(0136) }
(0137)
(0138) pa = 0x3f;
02F6 E38F LDI R24,0x3F
02F7 938000E0 STS _pa,R24
(0139) for(timers=0;timers<4;timers++)
02F9 2422 CLR R2
02FA 922000DF STS _timers,R2
02FC C019 RJMP 0x0316
(0140) {
(0141) PORTA=~pa;
02FD 902000E0 LDS R2,_pa
02FF 9420 COM R2
0300 BA2B OUT 0x1B,R2
(0142) delay_ms(led_delayms/2);
0301 910000D6 LDS R16,0xD6
0303 911000D7 LDS R17,0xD7
0305 9516 LSR R17
0306 9507 ROR R16
0307 DD88 RCALL _delay_ms
(0143) pa=pa & (pa>>2);
0308 902000E0 LDS R2,_pa
030A 9426 LSR R2
030B 9426 LSR R2
030C 903000E0 LDS R3,_pa
030E 2032 AND R3,R2
030F 923000E0 STS _pa,R3
0311 918000DF LDS R24,_timers
0313 5F8F SUBI R24,0xFF
0314 938000DF STS _timers,R24
0316 918000DF LDS R24,_timers
0318 3084 CPI R24,4
0319 F318 BCS 0x02FD
(0144) }
(0145)
(0146) pa = 0xc0;
031A EC80 LDI R24,0xC0
031B 938000E0 STS _pa,R24
(0147) for(timers=0;timers<4;timers++)
031D 2422 CLR R2
031E 922000DF STS _timers,R2
0320 C019 RJMP 0x033A
(0148) {
(0149) PORTA=~pa;
0321 902000E0 LDS R2,_pa
0323 9420 COM R2
0324 BA2B OUT 0x1B,R2
(0150) delay_ms(led_delayms/2);
0325 910000D6 LDS R16,0xD6
0327 911000D7 LDS R17,0xD7
0329 9516 LSR R17
032A 9507 ROR R16
032B DD64 RCALL _delay_ms
(0151) pa=pa | (pa>>2);
032C 902000E0 LDS R2,_pa
032E 9426 LSR R2
032F 9426 LSR R2
0330 903000E0 LDS R3,_pa
0332 2832 OR R3,R2
0333 923000E0 STS _pa,R3
0335 918000DF LDS R24,_timers
0337 5F8F SUBI R24,0xFF
0338 938000DF STS _timers,R24
033A 918000DF LDS R24,_timers
033C 3084 CPI R24,4
033D F318 BCS 0x0321
(0152) }
(0153)
(0154) pa = 0xfc;
033E EF8C LDI R24,0xFC
033F 938000E0 STS _pa,R24
(0155) for(timers=0;timers<4;timers++)
0341 2422 CLR R2
0342 922000DF STS _timers,R2
0344 C019 RJMP 0x035E
(0156) {
(0157) PORTA=~pa;
0345 902000E0 LDS R2,_pa
0347 9420 COM R2
0348 BA2B OUT 0x1B,R2
(0158) delay_ms(led_delayms/2);
0349 910000D6 LDS R16,0xD6
034B 911000D7 LDS R17,0xD7
034D 9516 LSR R17
034E 9507 ROR R16
034F DD40 RCALL _delay_ms
(0159) pa=pa & (pa<<2);
0350 902000E0 LDS R2,_pa
0352 0C22 LSL R2
0353 0C22 LSL R2
0354 903000E0 LDS R3,_pa
0356 2032 AND R3,R2
0357 923000E0 STS _pa,R3
0359 918000DF LDS R24,_timers
035B 5F8F SUBI R24,0xFF
035C 938000DF STS _timers,R24
035E 918000DF LDS R24,_timers
0360 3084 CPI R24,4
0361 F318 BCS 0x0345
(0160) }
(0161)
(0162) for(timers=0;;timers++)
0362 2422 CLR R2
0363 922000DF STS _timers,R2
(0163) {
(0164) pa = led_data[timers];
0365 E680 LDI R24,0x60
0366 E090 LDI R25,0
0367 91E000DF LDS R30,_timers
0369 27FF CLR R31
036A 0FE8 ADD R30,R24
036B 1FF9 ADC R31,R25
036C 8020 LDD R2,Z+0
036D 922000E0 STS _pa,R2
(0165) if(pa == 0x0a){break;}
036F 2D82 MOV R24,R2
0370 308A CPI R24,0xA
0371 F409 BNE 0x0373
0372 C010 RJMP 0x0383
(0166) PORTA = pa;
0373 902000E0 LDS R2,_pa
0375 BA2B OUT 0x1B,R2
(0167) delay_ms(led_delayms/2);
0376 910000D6 LDS R16,0xD6
0378 911000D7 LDS R17,0xD7
037A 9516 LSR R17
037B 9507 ROR R16
037C DD13 RCALL _delay_ms
037D 918000DF LDS R24,_timers
037F 5F8F SUBI R24,0xFF
0380 938000DF STS _timers,R24
0382 CFE2 RJMP 0x0365
(0168) }
(0169)
(0170) pa = 0x55;
0383 E585 LDI R24,0x55
0384 938000E0 STS _pa,R24
(0171) for(timers=0;timers<16;timers++)
0386 2422 CLR R2
0387 922000DF STS _timers,R2
0389 C012 RJMP 0x039C
(0172) {//8 LED 流水灯
(0173) PORTA=pa;
038A 902000E0 LDS R2,_pa
038C BA2B OUT 0x1B,R2
(0174) delay_ms(led_delayms);
038D 910000D6 LDS R16,0xD6
038F 911000D7 LDS R17,0xD7
0391 DCFE RCALL _delay_ms
(0175) pa=~pa;
0392 902000E0 LDS R2,_pa
0394 9420 COM R2
0395 922000E0 STS _pa,R2
0397 918000DF LDS R24,_timers
0399 5F8F SUBI R24,0xFF
039A 938000DF STS _timers,R24
039C 918000DF LDS R24,_timers
039E 3180 CPI R24,0x10
039F F350 BCS 0x038A
(0176) }
(0177)
(0178) led_delayms = led_delayms - 200;
03A0 918000D6 LDS R24,0xD6
03A2 919000D7 LDS R25,0xD7
03A4 5C88 SUBI R24,0xC8
03A5 4090 SBCI R25,0
03A6 939000D7 STS 0xD7,R25
03A8 938000D6 STS 0xD6,R24
(0179) if(led_delayms == 200)
03AA 3C88 CPI R24,0xC8
03AB E0E0 LDI R30,0
03AC 079E CPC R25,R30
03AD F431 BNE 0x03B4
(0180) {
(0181) led_delayms = 800;
03AE E280 LDI R24,0x20
03AF E093 LDI R25,3
03B0 939000D7 STS 0xD7,R25
03B2 938000D6 STS 0xD6,R24
03B4 CDF1 RJMP 0x01A6
(0182) }
(0183) }
(0184) }
03B5 9508 RET
_timer1_ovf_isr:
03B6 922A ST R2,-Y
03B7 923A ST R3,-Y
03B8 938A ST R24,-Y
03B9 B62F IN R2,0x3F
03BA 922A ST R2,-Y
(0185)
(0186) /*******************************************/
(0187) /* 电子音乐演示程序 */
(0188) /*******************************************/
(0189) // 在 icc avr 所在目录的 <include>文件夹中有 "sl3010.c" 文件
(0190) //使用说明:音乐输出端口:PORTC.0,音乐数据存放
(0191) //于AT90S8515 的EEPROM存贮器中。
(0192) // 可以用并口下载软件写入新的音乐文件
(0193) //PA口为音乐灯,当不同的音乐节奏,点亮不同的灯。
(0194)
(0195)
(0196) /* 音乐数据 */
(0197) /* 四分之一拍为0x10, 二分之一拍为0x20, 一拍为0x40*/
(0198) /* 低1-1 2-2 3-3 4-4 5-5 6-6 7-7 */
(0199) /* 中1-8 2-9 3-A 4-B 5-C 6-D 7-E */
(0200) /* 高1-F*/
(0201) #pragma data:eeprom
(0202) unsigned char sound[]={ 0x2a,0x2a,0x4a,0x2a,0x2a,0x4a,0x2a,0x2c,0x28,0x29,
(0203) 0x4a,0x4a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,
(0204) 0x2a,0x29,0x29,0x28,0x49,0x4c,0x2a,0x2a,0x4a,0x2a,
(0205) 0x2a,0x4a,0x2a,0x2c,0x28,0x29,0x4a,0x4a,0x2b,0x2b,
(0206) 0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2c,0x2c,0x2b,0x29,
(0207) 0x48,0x48,
(0208)
(0209) 0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,0x46,0x46,
(0210) 0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,0x4a,0x4a,
(0211) 0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,0x2a,0x28,
(0212) 0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,0x46,0x46,
(0213) 0x46,0x46,0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,
(0214) 0x46,0x46,0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,
(0215) 0x4a,0x4a,0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,
(0216) 0x2a,0x28,0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,
(0217) 0x46,0x46,0x46,0x46,0x00
(0218) };
(0219) #pragma data:data
(0220) /* 音阶表 */
(0221) const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
(0222) RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
(0223) /* 音阶重装常数 */
(0224) unsigned int toneconst;
(0225)
(0226) #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
(0227) void timer1_ovf_isr(void)
(0228) {
(0229) TCNT1=toneconst;
03BB 902000DD LDS R2,_toneconst
03BD 903000DE LDS R3,_toneconst+1
03BF BC3D OUT 0x2D,R3
03C0 BC2C OUT 0x2C,R2
(0230) PORTC^=1;
03C1 E081 LDI R24,1
03C2 B225 IN R2,0x15
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -