📄 测试.s
字号:
xcall _ISD_SendData
.dbline 132
; SS_1;
sbi 0x18,4
.dbline 133
; delay_ms(50);
ldi R16,50
ldi R17,0
xcall _delay_ms
.dbline -2
L114:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ISD_Reset _ISD_Reset fV
.even
_ISD_Reset::
.dbline -1
.dbline 139
; }
; /**************************************************************************
; * 函数原型: void ISD_Reset(void);
; * 功 能: 复位
; **************************************************************************/
; void ISD_Reset(void){
.dbline 140
; ISD_SendData(RESET);
ldi R16,19
ldi R17,0
xcall _ISD_SendData
.dbline 141
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 142
; SS_1;
sbi 0x18,4
.dbline 143
; delay_ms(50);
ldi R16,50
ldi R17,0
xcall _delay_ms
.dbline -2
L115:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ISD_PD _ISD_PD fV
.even
_ISD_PD::
.dbline -1
.dbline 151
; }
;
; /**************************************************************************
; * 函数原型: void ISD_PD(void);
; * 功 能: 掉电
; **************************************************************************/
;
; void ISD_PD(void){
.dbline 152
; ISD_SendData(PD);
ldi R16,23
ldi R17,0
xcall _ISD_SendData
.dbline 153
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 154
; SS_1;
sbi 0x18,4
.dbline -2
L116:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ClrInt _ClrInt fV
.even
_ClrInt::
.dbline -1
.dbline 161
; }
;
; /**************************************************************************
; * 函数原型: void ClrInt(void);
; * 功 能: 清除中断
; **************************************************************************/
; void ClrInt(void){
.dbline 162
; ISD_SendData(CLI_INT);
ldi R16,20
ldi R17,0
xcall _ISD_SendData
.dbline 163
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 164
; SS_1;
sbi 0x18,4
.dbline 165
; delay_ms(10); //延迟10ms
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline -2
L117:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ISD_WR_NVCFG _ISD_WR_NVCFG fV
.even
_ISD_WR_NVCFG::
.dbline -1
.dbline 172
; }
; /**************************************************************************
; * 函数原型: void ISD_WR_NVCFG(void);
; * 功 能: 永久写入寄存器
; **************************************************************************/
; void ISD_WR_NVCFG(void)
; {
.dbline 173
; ISD_SendData(WR_NVCFG);
ldi R16,86
ldi R17,0
xcall _ISD_SendData
.dbline 174
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 175
; SS_1;
sbi 0x18,4
.dbline 176
; delay_ms(10); //延迟10ms
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline -2
L118:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ISD_ERASE _ISD_ERASE fV
.even
_ISD_ERASE::
.dbline -1
.dbline 183
; }
;
; /**************************************************************************
; * 函数原型: ERASE(void);
; * 功 能: 擦除当前曲目
; **************************************************************************/
; void ISD_ERASE(void){
.dbline 184
; ISD_SendData(ERASE);
ldi R16,82
ldi R17,0
xcall _ISD_SendData
.dbline 185
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 186
; SS_1;
sbi 0x18,4
.dbline 187
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline -2
L119:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Erase_All _Erase_All fV
.even
_Erase_All::
.dbline -1
.dbline 194
; }
;
; /**************************************************************************
; * 函数原型: void Erase_All(void);
; * 功 能: 全部删除
; **************************************************************************/
; void Erase_All(void){
.dbline 195
; ISD_SendData(G_ERASE);
ldi R16,83
ldi R17,0
xcall _ISD_SendData
.dbline 196
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 197
; SS_1;
sbi 0x18,4
.dbline 198
; delay_ms(100); //延迟10ms
ldi R16,100
ldi R17,0
xcall _delay_ms
.dbline -2
L120:
.dbline 0 ; func end
ret
.dbend
.dbfunc e RdStatus _RdStatus fV
.even
_RdStatus::
st -y,R10
.dbline -1
.dbline 205
; }
;
; /**************************************************************************
; * 函数原型: void RdStatus(void);
; * 功 能: 读取状态
; **************************************************************************/
; void RdStatus(void){
.dbline 206
; ISD_SendData(RD_STATUS);
ldi R16,21
ldi R17,0
xcall _ISD_SendData
.dbline 207
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 208
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 209
; SS_1;
sbi 0x18,4
.dbline 210
; delay_ms(10); //延迟10ms
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 211
; SR0_L =ISD_SendData(RD_STATUS); //SR0低位
ldi R16,21
ldi R17,0
xcall _ISD_SendData
sts _SR0_L,R16
.dbline 212
; SR0_H =ISD_SendData(0x00); //SRO高位
clr R16
clr R17
xcall _ISD_SendData
sts _SR0_H,R16
.dbline 213
; SR1 =ISD_SendData(0x00); //SR1
clr R16
clr R17
xcall _ISD_SendData
mov R10,R16
sts _SR1,R10
.dbline 214
; SS_1;
sbi 0x18,4
.dbline 215
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline -2
L121:
.dbline 0 ; func end
ld R10,y+
ret
.dbend
.dbfunc e ISD_REC _ISD_REC fV
.even
_ISD_REC::
.dbline -1
.dbline 222
; }
;
; /**************************************************************************
; * 函数原型: void REC(void);
; * 功 能: 录音
; **************************************************************************/
; void ISD_REC(void){
.dbline 223
; ISD_PU();
xcall _ISD_PU
.dbline 224
; Erase_All();
xcall _Erase_All
L123:
.dbline 225
; do{
.dbline 226
; RdStatus();
xcall _RdStatus
.dbline 227
; }while(SR0_L&0x01);//检查CMD_ERR
L124:
.dbline 227
lds R2,_SR0_L
sbrc R2,0
rjmp L123
X47:
.dbline 228
; ClrInt();//清除中断
xcall _ClrInt
L126:
.dbline 229
; do{
.dbline 230
; RdStatus();
xcall _RdStatus
.dbline 231
; }while(!(SR1&0x01));//检查RDY
L127:
.dbline 231
lds R2,_SR1
sbrs R2,0
rjmp L126
X48:
.dbline 233
;
; ISD_SendData(REC);
ldi R16,81
ldi R17,0
xcall _ISD_SendData
.dbline 234
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 235
; SS_1;
sbi 0x18,4
.dbline 236
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline -2
L122:
.dbline 0 ; func end
ret
.dbend
.dbfunc e RD_DevID _RD_DevID fc
.even
_RD_DevID::
st -y,R10
.dbline -1
.dbline 242
; }
; /**************************************************************************
; * 函数原型: void RdStatus(void);
; * 功 能: 读取ID
; **************************************************************************/
; uchar RD_DevID(void){
.dbline 243
; ISD_SendData(RD_DEVID);
ldi R16,25
ldi R17,0
xcall _ISD_SendData
.dbline 244
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 245
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 246
; SS_1;
sbi 0x18,4
.dbline 247
; delay_ms(10); //延迟10ms
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 248
; SR0_L=ISD_SendData(RD_DEVID);
ldi R16,25
ldi R17,0
xcall _ISD_SendData
sts _SR0_L,R16
.dbline 249
; SR0_H=ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
sts _SR0_H,R16
.dbline 250
; ID=ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
mov R10,R16
sts _ID,R10
.dbline 251
; SS_1;
sbi 0x18,4
.dbline 252
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 253
; return(ID);
lds R16,_ID
.dbline -2
L129:
.dbline 0 ; func end
ld R10,y+
ret
.dbend
.dbfunc e RdAPC _RdAPC fV
.even
_RdAPC::
st -y,R10
.dbline -1
.dbline 260
; }
;
; /**************************************************************************
; * 函数原型: void RD_APC(void);
; * 功 能: 读取APC
; **************************************************************************/
; void RdAPC(void){
.dbline 261
; ISD_SendData(RD_APC);
ldi R16,84
ldi R17,0
xcall _ISD_SendData
.dbline 262
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 263
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 264
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 265
; SS_1;
sbi 0x18,4
.dbline 266
; delay_ms(10); //延迟10ms
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 268
;
; SR0_L=ISD_SendData(RD_APC); //SR0低位
ldi R16,84
ldi R17,0
xcall _ISD_SendData
sts _SR0_L,R16
.dbline 269
; SR0_H=ISD_SendData(0x00); //SR0高位
clr R16
clr R17
xcall _ISD_SendData
sts _SR0_H,R16
.dbline 270
; APCL=ISD_SendData(0x00); //APC低位
clr R16
clr R17
xcall _ISD_SendData
mov R10,R16
sts _APCL,R10
.dbline 271
; APCH=ISD_SendData(0x00); //APC高位
clr R16
clr R17
xcall _ISD_SendData
mov R10,R16
sts _APCH,R10
.dbline 272
; SS_1;
sbi 0x18,4
.dbline 273
; delay_ms(10); //延迟10ms
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline -2
L130:
.dbline 0 ; func end
ld R10,y+
ret
.dbend
.dbfunc e ISD_WR_APC2 _ISD_WR_APC2 fV
; voiceValue -> R10
.even
_ISD_WR_APC2::
st -y,R10
mov R10,R16
.dbline -1
.dbline 280
; }
;
; /**************************************************************************
; * 函数原型: void ISD_WR_APC2(uchar voiceValue);
; * 功 能: 设置APC2
; **************************************************************************/
; void ISD_WR_APC2(uchar voiceValue){
.dbline 281
; ISD_SendData(WR_APC2);
ldi R16,117
ldi R17,0
xcall _ISD_SendData
.dbline 282
; ISD_SendData(0x60|voiceValue); //0xa8声音最大,0xaf声音最小
mov R16,R10
clr R17
ori R16,96
xcall _ISD_SendData
.dbline 283
; ISD_SendData(0x0d); //开的是外部扬声器
ldi R16,13
ldi R17,0
xcall _ISD_SendData
.dbline 286
; //D11=1,在SETPLAY模式下,执行到EOM自动结束。或者在连续两个SET_PLAY命令后,
; //执行到第一个EOM自动跳到第二段开始
; SS_1;
sbi 0x18,4
.dbline 287
; delay_ms(10); //延迟10ms
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 288
; ISD_WR_NVCFG(); //永久写入寄存器
xcall _ISD_WR_NVCFG
.dbline -2
L131:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r voiceValue 10 c
.dbend
.dbfunc e SetERASE _SetERASE fV
; 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
.even
_SetERASE::
xcall push_xgset30FC
mov R10,R16
sbiw R28,6
.dbline -1
.dbline 296
; }
;
; /**************************************************************************
; * 函数原型: void SetERASE(uchar cNum);
; * 功 能: 定点删除,容易破坏存储结构(CMA),所以不用
; **************************************************************************/
;
; void SetERASE(uchar cNum){
.dbline 301
;
; uint Add_ST,Add_ED;
; uchar Add_ST_H, Add_ST_L, Add_ED_H, Add_ED_L;
;
; GetToneAdd(cNum, &Add_ST, &Add_ED);
movw R24,R28
adiw R24,4
std y+1,R25
std y+0,R24
movw R18,R28
subi R18,254 ; offset = 2
sbci R19,255
mov R16,R10
xcall _GetToneAdd
.dbline 303
;
; Add_ST_L=(uchar)(Add_ST&0xff);
ldd R20,y+2
andi R21,0
.dbline 304
; Add_ST_H=(uchar)(Add_ST>>8);
ldd R14,y+2
ldd R15,y+3
mov R14,R15
clr R15
.dbline 305
; Add_ED_L=(uchar)(Add_ED&0xff);
ldd R24,y+4
ldd R25,y+5
andi R25,0
mov R12,R24
.dbline 306
; Add_ED_H=(uchar)(Add_ED>>8);
ldd R10,y+4
ldd R11,y+5
mov R10,R11
clr R11
.dbline 308
;
; ISD_SendData(SET_ERASE);
ldi R16,146
ldi R17,0
xcall _ISD_SendData
.dbline 309
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 310
; ISD_SendData(Add_ST_L); //S7:S0 开始地址
mov R16,R20
clr R17
xcall _ISD_SendData
.dbline 311
; ISD_SendData(Add_ST_H); //S10:S8
mov R16,R14
clr R17
xcall _ISD_SendData
.dbline 312
; ISD_SendData(Add_ED_L); //E7:E0 结束地址
mov R16,R12
clr R17
xcall _ISD_SendData
.dbline 313
; ISD_SendData(Add_ED_H); //E10:E8
mov R16,R10
clr R17
xcall _ISD_SendData
.dbline 314
; ISD_SendData(0x00);
clr R16
clr R17
xcall _ISD_SendData
.dbline 315
; SS_1;
sbi 0x18,4
.dbline 316
; delay_ms(120);
ldi R16,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -