📄 测试.lst
字号:
663 9508 RET
_RD_DevID:
664 92AA ST R10,-Y
(0237) }
(0238) /**************************************************************************
(0239) * 函数原型: void RdStatus(void);
(0240) * 功 能: 读取ID
(0241) **************************************************************************/
(0242) uchar RD_DevID(void){
(0243) ISD_SendData(RD_DEVID);
665 E109 LDI R16,0x19
666 E010 LDI R17,0
667 DF20 RCALL _ISD_SendData
(0244) ISD_SendData(0x00);
668 2700 CLR R16
669 2711 CLR R17
66A DF1D RCALL _ISD_SendData
(0245) ISD_SendData(0x00);
66B 2700 CLR R16
66C 2711 CLR R17
66D DF1A RCALL _ISD_SendData
(0246) SS_1;
66E 9AC4 SBI 0x18,4
(0247) delay_ms(10); //延迟10ms
66F E00A LDI R16,0xA
670 E010 LDI R17,0
671 DD1E RCALL _delay_ms
(0248) SR0_L=ISD_SendData(RD_DEVID);
672 E109 LDI R16,0x19
673 E010 LDI R17,0
674 DF13 RCALL _ISD_SendData
675 9300 00D9 STS SR0_L,R16
(0249) SR0_H=ISD_SendData(0x00);
677 2700 CLR R16
678 2711 CLR R17
679 DF0E RCALL _ISD_SendData
67A 9300 00D8 STS SR0_H,R16
(0250) ID=ISD_SendData(0x00);
67C 2700 CLR R16
67D 2711 CLR R17
67E DF09 RCALL _ISD_SendData
67F 2EA0 MOV R10,R16
680 92A0 00D6 STS ID,R10
(0251) SS_1;
682 9AC4 SBI 0x18,4
(0252) delay_ms(10);
683 E00A LDI R16,0xA
684 E010 LDI R17,0
685 DD0A RCALL _delay_ms
(0253) return(ID);
686 9100 00D6 LDS R16,ID
688 90A9 LD R10,Y+
689 9508 RET
_RdAPC:
68A 92AA ST R10,-Y
(0254) }
(0255)
(0256) /**************************************************************************
(0257) * 函数原型: void RD_APC(void);
(0258) * 功 能: 读取APC
(0259) **************************************************************************/
(0260) void RdAPC(void){
(0261) ISD_SendData(RD_APC);
68B E504 LDI R16,0x54
68C E010 LDI R17,0
68D DEFA RCALL _ISD_SendData
(0262) ISD_SendData(0x00);
68E 2700 CLR R16
68F 2711 CLR R17
690 DEF7 RCALL _ISD_SendData
(0263) ISD_SendData(0x00);
691 2700 CLR R16
692 2711 CLR R17
693 DEF4 RCALL _ISD_SendData
(0264) ISD_SendData(0x00);
694 2700 CLR R16
695 2711 CLR R17
696 DEF1 RCALL _ISD_SendData
(0265) SS_1;
697 9AC4 SBI 0x18,4
(0266) delay_ms(10); //延迟10ms
698 E00A LDI R16,0xA
699 E010 LDI R17,0
69A DCF5 RCALL _delay_ms
(0267)
(0268) SR0_L=ISD_SendData(RD_APC); //SR0低位
69B E504 LDI R16,0x54
69C E010 LDI R17,0
69D DEEA RCALL _ISD_SendData
69E 9300 00D9 STS SR0_L,R16
(0269) SR0_H=ISD_SendData(0x00); //SR0高位
6A0 2700 CLR R16
6A1 2711 CLR R17
6A2 DEE5 RCALL _ISD_SendData
6A3 9300 00D8 STS SR0_H,R16
(0270) APCL=ISD_SendData(0x00); //APC低位
6A5 2700 CLR R16
6A6 2711 CLR R17
6A7 DEE0 RCALL _ISD_SendData
6A8 2EA0 MOV R10,R16
6A9 92A0 00D4 STS APCL,R10
(0271) APCH=ISD_SendData(0x00); //APC高位
6AB 2700 CLR R16
6AC 2711 CLR R17
6AD DEDA RCALL _ISD_SendData
6AE 2EA0 MOV R10,R16
6AF 92A0 00D5 STS APCH,R10
(0272) SS_1;
6B1 9AC4 SBI 0x18,4
(0273) delay_ms(10); //延迟10ms
6B2 E00A LDI R16,0xA
6B3 E010 LDI R17,0
6B4 DCDB RCALL _delay_ms
6B5 90A9 LD R10,Y+
6B6 9508 RET
_ISD_WR_APC2:
voiceValue --> R10
6B7 92AA ST R10,-Y
6B8 2EA0 MOV R10,R16
(0274) }
(0275)
(0276) /**************************************************************************
(0277) * 函数原型: void ISD_WR_APC2(uchar voiceValue);
(0278) * 功 能: 设置APC2
(0279) **************************************************************************/
(0280) void ISD_WR_APC2(uchar voiceValue){
(0281) ISD_SendData(WR_APC2);
6B9 E705 LDI R16,0x75
6BA E010 LDI R17,0
6BB DECC RCALL _ISD_SendData
(0282) ISD_SendData(0x60|voiceValue); //0xa8声音最大,0xaf声音最小
6BC 2D0A MOV R16,R10
6BD 2711 CLR R17
6BE 6600 ORI R16,0x60
6BF DEC8 RCALL _ISD_SendData
(0283) ISD_SendData(0x0d); //开的是外部扬声器
6C0 E00D LDI R16,0xD
6C1 E010 LDI R17,0
6C2 DEC5 RCALL _ISD_SendData
(0284) //D11=1,在SETPLAY模式下,执行到EOM自动结束。或者在连续两个SET_PLAY命令后,
(0285) //执行到第一个EOM自动跳到第二段开始
(0286) SS_1;
6C3 9AC4 SBI 0x18,4
(0287) delay_ms(10); //延迟10ms
6C4 E00A LDI R16,0xA
6C5 E010 LDI R17,0
6C6 DCC9 RCALL _delay_ms
(0288) ISD_WR_NVCFG(); //永久写入寄存器
6C7 DF3F RCALL _ISD_WR_NVCFG
6C8 90A9 LD R10,Y+
6C9 9508 RET
_SetERASE:
Add_ED_L --> R12
Add_ED_H --> R10
Add_ST_L --> R20
Add_ST_H --> R14
Add_ED --> Y,+4
Add_ST --> Y,+2
cNum --> R10
6CA 940E 09A5 CALL push_xgset30FC
6CC 2EA0 MOV R10,R16
6CD 9726 SBIW R28,6
(0289) }
(0290)
(0291) /**************************************************************************
(0292) * 函数原型: void SetERASE(uchar cNum);
(0293) * 功 能: 定点删除,容易破坏存储结构(CMA),所以不用
(0294) **************************************************************************/
(0295)
(0296) void SetERASE(uchar cNum){
(0297)
(0298) uint Add_ST,Add_ED;
(0299) uchar Add_ST_H, Add_ST_L, Add_ED_H, Add_ED_L;
(0300)
(0301) GetToneAdd(cNum, &Add_ST, &Add_ED);
6CE 01CE MOVW R24,R28
6CF 9604 ADIW R24,4
6D0 8399 STD Y+1,R25
6D1 8388 STD Y+0,R24
6D2 019E MOVW R18,R28
6D3 5F2E SUBI R18,0xFE
6D4 4F3F SBCI R19,0xFF
6D5 2D0A MOV R16,R10
6D6 DEBC RCALL _GetToneAdd
(0302)
(0303) Add_ST_L=(uchar)(Add_ST&0xff);
6D7 814A LDD R20,Y+2
6D8 7050 ANDI R21,0
(0304) Add_ST_H=(uchar)(Add_ST>>8);
6D9 80EA LDD R14,Y+2
6DA 80FB LDD R15,Y+3
6DB 2CEF MOV R14,R15
6DC 24FF CLR R15
(0305) Add_ED_L=(uchar)(Add_ED&0xff);
6DD 818C LDD R24,Y+4
6DE 819D LDD R25,Y+5
6DF 7090 ANDI R25,0
6E0 2EC8 MOV R12,R24
(0306) Add_ED_H=(uchar)(Add_ED>>8);
6E1 80AC LDD R10,Y+4
6E2 80BD LDD R11,Y+5
6E3 2CAB MOV R10,R11
6E4 24BB CLR R11
(0307)
(0308) ISD_SendData(SET_ERASE);
6E5 E902 LDI R16,0x92
6E6 E010 LDI R17,0
6E7 DEA0 RCALL _ISD_SendData
(0309) ISD_SendData(0x00);
6E8 2700 CLR R16
6E9 2711 CLR R17
6EA DE9D RCALL _ISD_SendData
(0310) ISD_SendData(Add_ST_L); //S7:S0 开始地址
6EB 2F04 MOV R16,R20
6EC 2711 CLR R17
6ED DE9A RCALL _ISD_SendData
(0311) ISD_SendData(Add_ST_H); //S10:S8
6EE 2D0E MOV R16,R14
6EF 2711 CLR R17
6F0 DE97 RCALL _ISD_SendData
(0312) ISD_SendData(Add_ED_L); //E7:E0 结束地址
6F1 2D0C MOV R16,R12
6F2 2711 CLR R17
6F3 DE94 RCALL _ISD_SendData
(0313) ISD_SendData(Add_ED_H); //E10:E8
6F4 2D0A MOV R16,R10
6F5 2711 CLR R17
6F6 DE91 RCALL _ISD_SendData
(0314) ISD_SendData(0x00);
6F7 2700 CLR R16
6F8 2711 CLR R17
6F9 DE8E RCALL _ISD_SendData
(0315) SS_1;
6FA 9AC4 SBI 0x18,4
(0316) delay_ms(120);
6FB E708 LDI R16,0x78
6FC E010 LDI R17,0
6FD DC92 RCALL _delay_ms
(0317) do{
(0318) RdStatus();
6FE DF29 RCALL _RdStatus
(0319) // }while((SR0_L&0x01)||((SR1&0x08))); //if(SR0_L^0==1){system Err}<CMD_Err==1>
(0320) }while((SR0_L&0x11)&&(!(SR1&0x01))); //if(SR0_L^0==1){system Err}<CMD_Err==1>
6FF 9180 00D9 LDS R24,SR0_L
701 7181 ANDI R24,0x11
702 F021 BEQ 0x0707
703 9020 00D7 LDS R2,SR1
705 FE20 SBRS R2,0
706 CFF7 RJMP 0x06FE
707 9626 ADIW R28,6
708 940C 098F JMP pop_xgset30FC
_SetPLAY:
Add_ED_L --> R12
Add_ED_H --> R10
Add_ST_L --> R20
Add_ST_H --> R14
Add_ED --> Y,+4
Add_ST --> Y,+2
cNum --> R10
70A 940E 09A5 CALL push_xgset30FC
70C 2EA0 MOV R10,R16
70D 9726 SBIW R28,6
(0321) }
(0322)
(0323) /**************************************************************************
(0324) * 函数原型: void SetPLAY(uchar cNum);
(0325) * 功 能: 定点播放
(0326) **************************************************************************/
(0327) void SetPLAY(uchar cNum)
(0328) {
(0329) uint Add_ST,Add_ED;
(0330) uchar Add_ST_H, Add_ST_L, Add_ED_H, Add_ED_L;
(0331)
(0332) do{
(0333) RdStatus();
70E DF19 RCALL _RdStatus
(0334) }while(SR0_L&0x01);
70F 9020 00D9 LDS R2,SR0_L
711 FC20 SBRC R2,0
712 CFFB RJMP 0x070E
(0335) //if(SR0_L^0==1){system Err}<CMD_Err==1>
(0336)
(0337) ClrInt();//清除中断
713 DEE8 RCALL _ClrInt
(0338) do{
(0339) RdStatus();
714 DF13 RCALL _RdStatus
(0340) }while(!(SR1&0x01));
715 9020 00D7 LDS R2,SR1
717 FE20 SBRS R2,0
718 CFFB RJMP 0x0714
(0341)
(0342) GetToneAdd(cNum, &Add_ST, &Add_ED);//取得播放地址
719 01CE MOVW R24,R28
71A 9604 ADIW R24,4
71B 8399 STD Y+1,R25
71C 8388 STD Y+0,R24
71D 019E MOVW R18,R28
71E 5F2E SUBI R18,0xFE
71F 4F3F SBCI R19,0xFF
720 2D0A MOV R16,R10
721 DE71 RCALL _GetToneAdd
(0343)
(0344) Add_ST_L=(uchar)(Add_ST&0x00ff); //开始播放的地址
722 814A LDD R20,Y+2
723 7050 ANDI R21,0
(0345) Add_ST_H=(uchar)((Add_ST>>8)&0x00ff);
724 818A LDD R24,Y+2
725 819B LDD R25,Y+3
726 2F89 MOV R24,R25
727 2799 CLR R25
728 7090 ANDI R25,0
729 2EE8 MOV R14,R24
(0346) Add_ED_L=(uchar)(Add_ED&0x00ff); //播放结束地址
72A 818C LDD R24,Y+4
72B 819D LDD R25,Y+5
72C 7090 ANDI R25,0
72D 2EC8 MOV R12,R24
(0347) Add_ED_H=(uchar)((Add_ED>>8)&0x00ff);
72E 818C LDD R24,Y+4
72F 819D LDD R25,Y+5
730 2F89 MOV R24,R25
731 2799 CLR R25
732 7090 ANDI R25,0
733 2EA8 MOV R10,R24
(0348)
(0349) ISD_SendData(SET_PLAY);
734 E900 LDI R16,0x90
735 E010 LDI R17,0
736 DE51 RCALL _ISD_SendData
(0350) ISD_SendData(0x00);
737 2700 CLR R16
738 2711 CLR R17
739 DE4E RCALL _ISD_SendData
(0351) ISD_SendData(Add_ST_L); //S7:S0 开始地址
73A 2F04 MOV R16,R20
73B 2711 CLR R17
73C DE4B RCALL _ISD_SendData
(0352) ISD_SendData(Add_ST_H); //S10:S8
73D 2D0E MOV R16,R14
73E 2711 CLR R17
73F DE48 RCALL _ISD_SendData
(0353) ISD_SendData(Add_ED_L); //E7:E0 结束地址
740 2D0C MOV R16,R12
741 2711 CLR R17
742 DE45 RCALL _ISD_SendData
(0354) ISD_SendData(Add_ED_H); //E10:E8
743 2D0A MOV R16,R10
744 2711 CLR R17
745 DE42 RCALL _ISD_SendData
(0355) ISD_SendData(0x00);
746 2700 CLR R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -