📄 sim340.s
字号:
.module sim340.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\sim340_e\sim340.c
.dbfunc e sim340_init _sim340_init fI
; pBuf -> R16,R17
.even
_sim340_init::
.dbline -1
.dbline 5
;
; #include "sim340.h"
; // 初始化
; int sim340_init(char pBuf[])
; {
.dbline 6
; pBuf[0] = 'A';
ldi R24,65
movw R30,R16
std z+0,R24
.dbline 7
; pBuf[1] = 'T';
ldi R24,84
std z+1,R24
.dbline 8
; pBuf[2] = 'E';
ldi R24,69
movw R30,R16
std z+2,R24
.dbline 9
; pBuf[3] = '0';
ldi R24,48
movw R30,R16
std z+3,R24
.dbline 10
; pBuf[4] = 13;
ldi R24,13
movw R30,R16
std z+4,R24
.dbline 12
;
; return 5;
ldi R16,5
ldi R17,0
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r pBuf 16 pc
.dbend
.dbfunc e readcsca _readcsca fI
; pBuf -> R16,R17
.even
_readcsca::
.dbline -1
.dbline 16
; }
; //读取短信中心地址
; int readcsca(char pBuf[])
; {
.dbline 17
; pBuf[0] = 'A';
ldi R24,65
movw R30,R16
std z+0,R24
.dbline 18
; pBuf[1] = 'T';
ldi R24,84
std z+1,R24
.dbline 19
; pBuf[2] = '+';
ldi R24,43
movw R30,R16
std z+2,R24
.dbline 20
; pBuf[3] = 'C';
ldi R24,67
movw R30,R16
std z+3,R24
.dbline 21
; pBuf[4] = 'S';
ldi R24,83
movw R30,R16
std z+4,R24
.dbline 22
; pBuf[5] = 'C';
ldi R24,67
movw R30,R16
std z+5,R24
.dbline 23
; pBuf[6] = 'A';
ldi R24,65
movw R30,R16
std z+6,R24
.dbline 24
; pBuf[7] = '?';
ldi R24,63
movw R30,R16
std z+7,R24
.dbline 25
; pBuf[8] =13;
ldi R24,13
movw R30,R16
std z+8,R24
.dbline 26
; return 9;
ldi R16,9
ldi R17,0
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbsym r pBuf 16 pc
.dbend
.dbfunc e setCsca _setCsca fI
; pBuf -> R16,R17
.even
_setCsca::
.dbline -1
.dbline 30
; }
; // 设置短信中心地址
; int setCsca(char pBuf[])
; {
.dbline 31
; pBuf[0] = 'A';
ldi R24,65
movw R30,R16
std z+0,R24
.dbline 32
; pBuf[1] = 'T';
ldi R24,84
std z+1,R24
.dbline 33
; pBuf[2] = '+';
ldi R24,43
movw R30,R16
std z+2,R24
.dbline 34
; pBuf[3] = 'C';
ldi R24,67
movw R30,R16
std z+3,R24
.dbline 35
; pBuf[4] = 'S';
ldi R24,83
movw R30,R16
std z+4,R24
.dbline 36
; pBuf[5] = 'C';
ldi R24,67
movw R30,R16
std z+5,R24
.dbline 37
; pBuf[6] = 'A';
ldi R24,65
movw R30,R16
std z+6,R24
.dbline 38
; pBuf[7] = '=';
ldi R24,61
movw R30,R16
std z+7,R24
.dbline 39
; pBuf[8] = '+';
ldi R24,43
movw R30,R16
std z+8,R24
.dbline 40
; pBuf[9] = '8';
ldi R24,56
movw R30,R16
std z+9,R24
.dbline 41
; pBuf[10] = '6';
ldi R24,54
movw R30,R16
std z+10,R24
.dbline 42
; pBuf[11] = '1';
ldi R24,49
movw R30,R16
std z+11,R24
.dbline 43
; pBuf[12] = '3';
ldi R24,51
movw R30,R16
std z+12,R24
.dbline 44
; pBuf[13] = '8';
ldi R24,56
movw R30,R16
std z+13,R24
.dbline 45
; pBuf[14] = '0';
ldi R24,48
movw R30,R16
std z+14,R24
.dbline 46
; pBuf[15] = '0';
movw R30,R16
std z+15,R24
.dbline 47
; pBuf[16] = '5';
ldi R24,53
movw R30,R16
std z+16,R24
.dbline 48
; pBuf[17] = '1';
ldi R24,49
movw R30,R16
std z+17,R24
.dbline 49
; pBuf[18] = '9';
ldi R24,57
movw R30,R16
std z+18,R24
.dbline 50
; pBuf[19] = '5';
ldi R24,53
movw R30,R16
std z+19,R24
.dbline 51
; pBuf[20] = '0';
ldi R24,48
movw R30,R16
std z+20,R24
.dbline 52
; pBuf[21] = '0';
movw R30,R16
std z+21,R24
.dbline 53
; pBuf[22] = ',';
ldi R24,44
movw R30,R16
std z+22,R24
.dbline 54
; pBuf[23] = '1';
ldi R24,49
movw R30,R16
std z+23,R24
.dbline 55
; pBuf[24] = '4';
ldi R24,52
movw R30,R16
std z+24,R24
.dbline 56
; pBuf[25] = '9';
ldi R24,57
movw R30,R16
std z+25,R24
.dbline 57
; pBuf[26] = 13;
ldi R24,13
movw R30,R16
std z+26,R24
.dbline 59
;
; return 27;
ldi R16,27
ldi R17,0
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbsym r pBuf 16 pc
.dbend
.dbfunc e setCmgf _setCmgf fI
; pBuf -> R16,R17
.even
_setCmgf::
.dbline -1
.dbline 63
; }
; //设置短消息格式
; int setCmgf(char pBuf[])
; {
.dbline 64
; pBuf[0] = 'A';
ldi R24,65
movw R30,R16
std z+0,R24
.dbline 65
; pBuf[1] = 'T';
ldi R24,84
std z+1,R24
.dbline 66
; pBuf[2] = '+';
ldi R24,43
movw R30,R16
std z+2,R24
.dbline 67
; pBuf[3] = 'C';
ldi R24,67
movw R30,R16
std z+3,R24
.dbline 68
; pBuf[4] = 'M';
ldi R24,77
movw R30,R16
std z+4,R24
.dbline 69
; pBuf[5] = 'G';
ldi R24,71
movw R30,R16
std z+5,R24
.dbline 70
; pBuf[6] = 'F';
ldi R24,70
movw R30,R16
std z+6,R24
.dbline 71
; pBuf[7] = '=';
ldi R24,61
movw R30,R16
std z+7,R24
.dbline 72
; pBuf[8] = '0';
ldi R24,48
movw R30,R16
std z+8,R24
.dbline 73
; pBuf[9] = 13;
ldi R24,13
movw R30,R16
std z+9,R24
.dbline 75
;
; return 10;
ldi R16,10
ldi R17,0
.dbline -2
L4:
.dbline 0 ; func end
ret
.dbsym r pBuf 16 pc
.dbend
.dbfunc e diandao _diandao fV
; j -> R20,R21
; i -> R22,R23
; sca_len_temp -> R10,R11
; Pdst -> R12,R13
; Psrc -> R14,R15
.even
_diandao::
xcall push_gset5
movw R12,R18
movw R14,R16
ldd R10,y+10
ldd R11,y+11
.dbline -1
.dbline 115
; }
; /*
; //删除短消息
; int deleteSms(char pBuf[],short int index)
; {
; pBuf[0] = 'A';
; pBuf[1] = 'T';
; pBuf[2] = '+';
; pBuf[3] = 'C';
; pBuf[4] = 'M';
; pBuf[5] = 'G';
; pBuf[6] = 'D';
; pBuf[7] = '=';
; pBuf[8] = (char)((index >> 8) & 0xff + 0x30);
; pBuf[9] = (char)(index & 0xff + 0x30);
; pBuf[10] = 13;
;
; return 11;
; }*/
; //接收短消息
; /*
; int revSms(char pBuf[],char pOut[])
; {
; pBuf[0] = 'A';
; pBuf[1] = 'T';
; pBuf[2] = '+';
; pBuf[3] = 'C';
; pBuf[4] = 'M';
; pBuf[5] = 'G';
; pBuf[6] = 'R';
; pBuf[7] = '=';
; pBuf[8] = (char)((index >> 8) & 0xff + 0x30);
; pBuf[9] = (char)(index & 0xff + 0x30);
; pBuf[10] = 13;
;
; return 11;
; }*/
; //把电话号码转换为PDU格式
; void diandao(char *Psrc,char *Pdst,int sca_len_temp)
; {
.dbline 116
; int i,j=4;
ldi R20,4
ldi R21,0
.dbline 117
; for(i=0;i<sca_len_temp/2;i++)
clr R22
clr R23
xjmp L9
L6:
.dbline 118
.dbline 119
movw R2,R20
subi R20,255 ; offset = 1
sbci R21,255
ldi R16,2
ldi R17,0
movw R18,R22
xcall empy16s
movw R30,R16
add R30,R14
adc R31,R15
ldd R4,z+1
movw R30,R2
add R30,R12
adc R31,R13
std z+0,R4
.dbline 120
movw R2,R20
subi R20,255 ; offset = 1
sbci R21,255
ldi R16,2
ldi R17,0
movw R18,R22
xcall empy16s
movw R30,R16
add R30,R14
adc R31,R15
ldd R4,z+0
movw R30,R2
add R30,R12
adc R31,R13
std z+0,R4
.dbline 121
L7:
.dbline 117
subi R22,255 ; offset = 1
sbci R23,255
L9:
.dbline 117
ldi R18,2
ldi R19,0
movw R16,R10
xcall div16s
cp R22,R16
cpc R23,R17
brge X0
xjmp L6
X0:
.dbline -2
L5:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r j 20 I
.dbsym r i 22 I
.dbsym r sca_len_temp 10 I
.dbsym r Pdst 12 pc
.dbsym r Psrc 14 pc
.dbend
.area lit(rom, con, rel)
L11:
.byte 48,56
.byte 57,49
.word 0,0,0,0,0
.byte 0,0,0,0
L12:
.byte 49,49
.byte 48,48
.byte 48,'D
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\sim340_e\sim340.c
.dbfunc e SendMsm _SendMsm fV
; Len -> y+578
; pBuf -> y+378
; nContent_Len -> y+376
; chrInfo -> y+370
; nLen_temp -> y+368
; strHead_temp -> y+354
; nTempLen -> y+352
; chrTemp -> y+252
; strHead -> y+234
; n -> y+232
; phoneTemp -> y+212
; nOff -> y+210
; nTemp -> y+110
; nOffset -> y+108
; chrTmp -> y+8
; i -> y+6
; sca_len -> R20,R21
; sca -> y+605
; pOut2 -> R22,R23
; pOut1 -> R10,R11
; nTXLen2 -> R12,R13
; nTXLen1 -> R14,R15
; nLen -> y+595
; pData -> y+593
; phonelen -> y+591
; pPhone -> y+589
.even
_SendMsm::
xcall push_arg4
xcall push_gset5
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,63
sbiw R28,12 ; offset = 579
movw R30,R28
subi R30,171 ; addi 597
sbci R31,253
ldd R14,z+0
ldd R15,z+1
movw R30,R28
subi R30,169 ; addi 599
sbci R31,253
ldd R12,z+0
ldd R13,z+1
movw R30,R28
subi R30,167 ; addi 601
sbci R31,253
ldd R10,z+0
ldd R11,z+1
movw R30,R28
subi R30,165 ; addi 603
sbci R31,253
ldd R22,z+0
ldd R23,z+1
movw R30,R28
subi R30,161 ; addi 607
sbci R31,253
ldd R20,z+0
ldd R21,z+1
.dbline -1
.dbline 126
; {
; Pdst[j++]=Psrc[2*i+1];
; Pdst[j++]=Psrc[2*i];
; }
; }
; //发送短消息
; void SendMsm(char pPhone[],int phonelen,char pData[],int nLen,int *nTXLen1,
; int *nTXLen2,char pOut1[],char pOut2[],char sca[],int sca_len)
; {
.dbline 127
; char strHead[18] = {'0','8','9','1'};
ldi R24,<L11
ldi R25,>L11
movw R30,R28
subi R30,22 ; offset = 234
sbci R31,255
ldi R16,18
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
.dbline 128
; char chrInfo[6] = {'1','1','0','0','0','D'}; //基本参数、消息基准值、目标地址个数
ldi R24,<L12
ldi R25,>L12
movw R30,R28
subi R30,142 ; offset = 370
sbci R31,254
ldi R16,6
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
.dbline 143
; int nLen_temp;
; int nContent_Len;
; int nTempLen;
; int nOff;
; int nOffset;
; char chrTemp[100];
; char chrTmp[100]; //暂时存放电话号码
; char pBuf[200];
; char phoneTemp[20]; //转变后的电话号码
; char nTemp[100];
; char Len[1];
; int i;
; int n;
; char strHead_temp[14];
; diandao(sca,strHead_temp,sca_len);
std y+1,R21
std y+0,R20
movw R18,R28
subi R18,158 ; offset = 354
sbci R19,254
movw R30,R28
subi R30,163 ; addi 605
sbci R31,253
ldd R16,z+0
ldd R17,z+1
xcall _diandao
.dbline 144
; for(i=0;i<sca_len;i++)
clr R2
clr R3
std y+7,R3
std y+6,R2
xjmp L16
L13:
.dbline 145
.dbline 146
movw R24,R28
subi R24,158 ; offset = 354
sbci R25,254
ldd R30,y+6
ldd R31,y+7
add R30,R24
adc R31,R25
ldd R2,z+0
movw R24,R28
subi R24,18 ; offset = 238
sbci R25,255
ldd R30,y+6
ldd R31,y+7
add R30,R24
adc R31,R25
std z+0,R2
.dbline 147
L14:
.dbline 144
ldd R24,y+6
ldd R25,y+7
adiw R24,1
std y+7,R25
std y+6,R24
L16:
.dbline 144
ldd R2,y+6
ldd R3,y+7
cp R2,R20
cpc R3,R21
brlt L13
.dbline 148
; {
; strHead[i+4]=strHead_temp[i];
; }
; nOff = 0;
clr R2
clr R3
movw R30,R28
subi R30,46 ; addi 210
sbci R31,255
std z+1,R3
std z+0,R2
.dbline 149
; nOffset = 0;
movw R30,R28
subi R30,148 ; addi 108
sbci R31,255
std z+1,R3
std z+0,R2
.dbline 150
; for(i = 0;i < phonelen;i++)
std y+7,R3
std y+6,R2
xjmp L21
L18:
.dbline 151
.dbline 152
ldd R30,y+6
ldd R31,y+7
movw R26,R28
subi R26,179 ; addi 589
sbci R27,253
ld R0,x+
ld R1,x
add R30,R0
adc R31,R1
ldd R2,z+0
movw R24,R28
adiw R24,8
ldd R30,y+6
ldd R31,y+7
add R30,R24
adc R31,R25
std z+0,R2
.dbline 153
L19:
.dbline 150
ldd R24,y+6
ldd R25,y+7
adiw R24,1
std y+7,R25
std y+6,R24
L21:
.dbline 150
ldd R2,y+6
ldd R3,y+7
movw R30,R28
subi R30,177 ; addi 591
sbci R31,253
ldd R0,z+0
ldd R1,z+1
cp R2,R0
cpc R3,R1
brlt L18
.dbline 154
; {
; chrTmp[i] = pPhone[i]; //暂时存放电话号码
; }
; chrTmp[phonelen] = 'F';
movw R24,R28
adiw R24,8
movw R30,R0
add R30,R24
adc R31,R25
ldi R24,70
std z+0,R24
.dbline 155
; phonelen += 1;
movw R24,R0
adiw R24,1
movw R30,R28
subi R30,177 ; addi 591
sbci R31,253
std z+1,R25
std z+0,R24
.dbline 157
; // 将电话号码按照规范的顺序作成
; n = 0;
clr R2
clr R3
movw R30,R28
subi R30,24 ; addi 232
sbci R31,255
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -