⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sim340.s

📁 本实例实现GSM模块的发送短消息
💻 S
📖 第 1 页 / 共 4 页
字号:
	.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 + -