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

📄 sim340.s

📁 本实例实现GSM模块的发送短消息
💻 S
📖 第 1 页 / 共 4 页
字号:
;     	    {    	        
;     	        nLen_temp -= 25;
;     	        nOffset += 25;
;     	        copy(chrTemp,0,in,nOffset,nLen_temp);
;     	    }
;     	    else return -1;
;         }
;         //取得电话号码
;         int nPhone_Len = 0;
;         if(nLen_temp >= 18)
;         {
;             copy(Phone,0,chrTemp,0,18);
;             phone_len = (int)(Phone[1] - 48);
;             copy(chrPhone,0,Phone,4,14);
;         }
;         else return -1; 
;         //获得电话号码的正确顺序 
;         copy(Phone,0,chrPhone,0,14);
;         n = 0;
;         for(i = 0;i < 7;i++)
;         {
;     	    chrPhone[n++] = Phone[2 * i + 1];
;     	    chrPhone[n++] = Phone[2 * i];
;         }
;         
;         if(nLen_temp >= 20)
;         {            	    	            
;             nLen_temp -= 20;
;     	    nOffset += 20;
;     	    copy(chrTemp,0,in,nOffset,nLen_temp);
;         }
;         else return -1; 
;         if(nLen_temp >= 16)
;         {            
;             nLen_temp -= 16;
;     	    nOffset += 16;
;     	    copy(chrTemp,0,in,nOffset,nLen_temp);
;         }	
;         else return -1; 
;         // 取出内容的长度
;         nContent_Len = 0;
;         if(nLen_temp >= 2)
;         {
;             if((strTemp[1] >= 48) && (strTemp[1] <= 57))
;                 nContent_Len = (strTemp[0] - 48) * 16 + (strTemp[1] - 48);
;             else if(strTemp[1] >= 65 && strTemp[1] <= 70)	
;                 nContent_Len = (strTemp[0] - 48) * 16 + (strTemp[1] - 55);
;             else if(strTemp[1] >= 97 && strTemp[1] <= 102)	
;                 nContent_Len = (strTemp[0] - 48) * 16 + (strTemp[1] - 87);   
;         }
;         else return -1; 
;         if(strTemp.length() >= 2)
;         {
;             nLen_temp -= 2;
;     	    nOffset += 2;
;     	    copy(chrTemp,0,in,nOffset,nLen_temp);
;         }
;         else return -1;
;         
;         CharToByte(strTemp,content,nLen_temp);
;         nLen_temp /= 2;
;         n = Decode(content,chrMessage,nLen_temp);
;     }
;     return n;
;     
; }*/
; int FindERROR(char in[],int nLen)
; {
	.dbline 461
;     int nOffset,i;
;     nOffset = -1;if(nLen < 5) return nOffset;
	ldi R20,-1
	ldi R21,-1
	.dbline 461
	cpi R18,5
	ldi R30,0
	cpc R19,R30
	brge L72
	.dbline 461
	movw R16,R20
	xjmp L71
L72:
	.dbline 462
;     for(i = 0;i < nLen;i++)
	clr R22
	clr R23
	xjmp L77
L74:
	.dbline 463
;     {
	.dbline 464
;     	if((in[i] == 'R') && (in[i - 1] == 'O') && (in[i - 2] == 'R') 
	movw R30,R22
	add R30,R16
	adc R31,R17
	ldd R24,z+0
	cpi R24,82
	brne L78
	movw R30,R22
	sbiw R30,1
	add R30,R16
	adc R31,R17
	ldd R24,z+0
	cpi R24,79
	brne L78
	movw R30,R22
	sbiw R30,2
	add R30,R16
	adc R31,R17
	ldd R24,z+0
	cpi R24,82
	brne L78
	movw R30,R22
	sbiw R30,3
	add R30,R16
	adc R31,R17
	ldd R24,z+0
	cpi R24,82
	brne L78
	movw R30,R22
	sbiw R30,4
	add R30,R16
	adc R31,R17
	ldd R24,z+0
	cpi R24,69
	brne L78
	.dbline 466
;     	   && (in[i - 3] == 'R') && (in[i - 4] == 'E')) 
;     	{
	.dbline 467
;     	    nOffset = i - 4;
	movw R20,R22
	subi R20,4
	sbci R21,0
	.dbline 468
;     	    break;
	xjmp L76
L78:
	.dbline 470
L75:
	.dbline 462
	subi R22,255  ; offset = 1
	sbci R23,255
L77:
	.dbline 462
	cp R22,R18
	cpc R23,R19
	brge X5
	xjmp L74
X5:
L76:
	.dbline 471
;     	}    	
;     }
;     return nOffset;
	movw R16,R20
	.dbline -2
L71:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r nOffset 20 I
	.dbsym r i 22 I
	.dbsym r nLen 18 I
	.dbsym r in 16 pc
	.dbend
	.dbfunc e FindCMGR _FindCMGR fI
;        nOffset -> R20,R21
;              i -> R22,R23
;           nLen -> R18,R19
;             in -> R16,R17
	.even
_FindCMGR::
	xcall push_gset2
	.dbline -1
	.dbline 474
; }
; int FindCMGR(char in[],int nLen)
; {
	.dbline 476
;     int nOffset,i;
;     nOffset = -1;
	ldi R20,-1
	ldi R21,-1
	.dbline 477
;     if(nLen < 5) return nOffset;
	cpi R18,5
	ldi R30,0
	cpc R19,R30
	brge L81
	.dbline 477
	movw R16,R20
	xjmp L80
L81:
	.dbline 478
;     for(i = 0;i < nLen;i++)
	clr R22
	clr R23
	xjmp L86
L83:
	.dbline 479
;     {
	.dbline 480
;     	if((in[i] == 'R') && (in[i - 1] == 'G') && (in[i - 2] == 'M') 
	movw R30,R22
	add R30,R16
	adc R31,R17
	ldd R24,z+0
	cpi R24,82
	brne L87
	movw R30,R22
	sbiw R30,1
	add R30,R16
	adc R31,R17
	ldd R24,z+0
	cpi R24,71
	brne L87
	movw R30,R22
	sbiw R30,2
	add R30,R16
	adc R31,R17
	ldd R24,z+0
	cpi R24,77
	brne L87
	movw R30,R22
	sbiw R30,3
	add R30,R16
	adc R31,R17
	ldd R24,z+0
	cpi R24,67
	brne L87
	movw R30,R22
	sbiw R30,4
	add R30,R16
	adc R31,R17
	ldd R24,z+0
	cpi R24,43
	brne L87
	.dbline 482
;     	   && (in[i - 3] == 'C') && (in[i - 4] == '+')) 
;     	{
	.dbline 483
;     	    nOffset = i - 4;
	movw R20,R22
	subi R20,4
	sbci R21,0
	.dbline 484
;     	    break;
	xjmp L85
L87:
	.dbline 486
L84:
	.dbline 478
	subi R22,255  ; offset = 1
	sbci R23,255
L86:
	.dbline 478
	cp R22,R18
	cpc R23,R19
	brge X6
	xjmp L83
X6:
L85:
	.dbline 487
;     	}    	
;     }
;     return nOffset;
	movw R16,R20
	.dbline -2
L80:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r nOffset 20 I
	.dbsym r i 22 I
	.dbsym r nLen 18 I
	.dbsym r in 16 pc
	.dbend
	.dbfunc e FindOK _FindOK fI
;        nOffset -> R20,R21
;              i -> R22,R23
;           nLen -> R18,R19
;             in -> R16,R17
	.even
_FindOK::
	xcall push_gset2
	.dbline -1
	.dbline 490
; }
; int FindOK(char in[],int nLen)
; {
	.dbline 492
;     int nOffset,i;
;     nOffset = -1;
	ldi R20,-1
	ldi R21,-1
	.dbline 493
;     if(nLen < 2) return nOffset;
	cpi R18,2
	ldi R30,0
	cpc R19,R30
	brge L90
	.dbline 493
	movw R16,R20
	xjmp L89
L90:
	.dbline 494
;     for(i = 0;i < nLen;i++)
	clr R22
	clr R23
	xjmp L95
L92:
	.dbline 495
;     {
	.dbline 496
;     	if((in[i] == 'K') && (in[i - 1] == 'K')) 
	movw R30,R22
	add R30,R16
	adc R31,R17
	ldd R24,z+0
	cpi R24,75
	brne L96
	movw R30,R22
	sbiw R30,1
	add R30,R16
	adc R31,R17
	ldd R24,z+0
	cpi R24,75
	brne L96
	.dbline 497
;     	{
	.dbline 498
;     	    nOffset = i - 1;
	movw R20,R22
	subi R20,1
	sbci R21,0
	.dbline 499
;     	    break;
	xjmp L94
L96:
	.dbline 501
L93:
	.dbline 494
	subi R22,255  ; offset = 1
	sbci R23,255
L95:
	.dbline 494
	cp R22,R18
	cpc R23,R19
	brlt L92
L94:
	.dbline 502
;     	}    	
;     }
;     return nOffset;
	movw R16,R20
	.dbline -2
L89:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r nOffset 20 I
	.dbsym r i 22 I
	.dbsym r nLen 18 I
	.dbsym r in 16 pc
	.dbend
	.dbfunc e CharToByte _CharToByte fV
;              i -> R20,R21
;         chrLow -> R22
;          chrHi -> R10
;           nLen -> R12,R13
;            out -> R14,R15
;             in -> R6,R7
	.even
_CharToByte::
	xcall push_gset5
	movw R14,R18
	movw R6,R16
	ldd R12,y+10
	ldd R13,y+11
	.dbline -1
	.dbline 505
; }
; void CharToByte(char in[],char out[],int nLen)
; {
	.dbline 508
;     char chrHi,chrLow;
;     int i;
;     for(i = 0;i < nLen / 2;i++)
	clr R20
	clr R21
	xjmp L102
L99:
	.dbline 509
;     {
	.dbline 510
;         chrHi = in[2 * i];			
	ldi R16,2
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R30,R16
	add R30,R6
	adc R31,R7
	ldd R10,z+0
	.dbline 511
;         if(chrHi >= 48 && chrHi <= 57)
	mov R24,R10
	cpi R24,48
	brlo L103
	ldi R24,57
	cp R24,R10
	brlo L103
	.dbline 512
;             chrHi = (char)(chrHi - 48);
	mov R24,R10
	clr R25
	sbiw R24,48
	mov R10,R24
	xjmp L104
L103:
	.dbline 513
;         else if(chrHi >= 65 && chrHi <= 70)	
	mov R24,R10
	cpi R24,65
	brlo L105
	ldi R24,70
	cp R24,R10
	brlo L105
	.dbline 514
;             chrHi = (char)(chrHi - 55);
	mov R24,R10
	clr R25
	sbiw R24,55
	mov R10,R24
	xjmp L106
L105:
	.dbline 515
;         else if(chrHi >= 97 && chrHi <= 102)	
	mov R24,R10
	cpi R24,97
	brlo L107
	ldi R24,102
	cp R24,R10
	brlo L107
	.dbline 516
;             chrHi = (char)(chrHi - 87); 
	mov R24,R10
	clr R25
	subi R24,87
	sbci R25,0
	mov R10,R24
L107:
L106:
L104:
	.dbline 518
; 		
;         chrLow = in[2 * i + 1];
	ldi R16,2
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R30,R16
	add R30,R6
	adc R31,R7
	ldd R22,z+1
	.dbline 519
;         if(chrLow >= 48 && chrLow <= 57)
	cpi R22,48
	brlo L109
	ldi R24,57
	cp R24,R22
	brlo L109
	.dbline 520
;             chrLow = (char)(chrLow - 48);
	clr R23
	subi R22,48
	sbci R23,0
	xjmp L110
L109:
	.dbline 521
;         else if(chrLow >= 65 && chrLow <= 70)	
	cpi R22,65
	brlo L111
	ldi R24,70
	cp R24,R22
	brlo L111
	.dbline 522
;             chrLow = (char)(chrLow - 55);
	clr R23
	subi R22,55
	sbci R23,0
	xjmp L112
L111:
	.dbline 523
;         else if(chrLow >= 97 && chrLow <= 102)	
	cpi R22,97
	brlo L113
	ldi R24,102
	cp R24,R22
	brlo L113
	.dbline 524
;             chrLow = (char)(chrLow - 87);
	clr R23
	subi R22,87
	sbci R23,0
L113:
L112:
L110:
	.dbline 526
	ldi R24,16
	mul R24,R10
	movw R2,R0
	mov R4,R22
	clr R5
	add R2,R4
	adc R3,R5
	movw R30,R20
	add R30,R14
	adc R31,R15
	std z+0,R2
	.dbline 527
L100:
	.dbline 508
	subi R20,255  ; offset = 1
	sbci R21,255
L102:
	.dbline 508
	ldi R18,2
	ldi R19,0
	movw R16,R12
	xcall div16s
	cp R20,R16
	cpc R21,R17
	brge X7
	xjmp L99
X7:
	.dbline 529
;         
;         out[i] = (char)(chrHi * 16 + chrLow);
;     }
; 
;     return;
	.dbline -2
L98:
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r i 20 I
	.dbsym r chrLow 22 c
	.dbsym r chrHi 10 c
	.dbsym r nLen 12 I
	.dbsym r out 14 pc
	.dbsym r in 6 pc
	.dbend
	.dbfunc e Decode _Decode fI
;           nDst -> R20,R21
;           nSrc -> R22,R23
;          nLeft -> R10
;          nByte -> R12,R13
;           nLen -> R14,R15
;            out -> R4,R5
;             in -> R6,R7
	.even
_Decode::
	xcall push_gset5
	movw R4,R18
	movw R6,R16
	ldd R14,y+10
	ldd R15,y+11
	.dbline -1
	.dbline 532
; }
; int Decode(char in[],char out[],int nLen)
; {
	.dbline 539
;     int nSrc;        // 源字符串的计数值
;     int nDst;        // 目标解码串的计数值
;     int nByte;       // 当前正在处理的组内字节的序号,范围是0-6
;     char nLeft;    // 上一字节残余的数据
;     
;     // 计数值初始化
;     nSrc = 0;
	clr R22
	clr R23
	.dbline 540
;     nDst = 0;
	clr R20
	clr R21
	.dbline 543
;     
;     // 组内字节序号和残余数据初始化
;     nByte = 0;
	clr R12
	clr R13
	.dbline 544
;     nLeft = 0;
	clr R10
	xjmp L117
L116:
	.dbline 550
;     
;     // 将源数据每7个字节分为一组,解压缩成8个字节
;     // 循环该处理过程,直至源数据被处理完
;     // 如果分组不到7字节,也能正确处理
;     while(nSrc<nLen)
;     {
	.dbline 552
;         // 将源字节右边部分与残余数据相加,去掉最高位,得到一个目标解码字节
;         *in = ((*in << nByte) | nLeft) & 0x7f;
	movw R30,R6
	ldd R16,z+0
	clr R17
	movw R18,R12
	xcall lsl16
	movw R24,R16
	mov R2,R10
	clr R3
	or R24,R2
	or R25,R3
	andi R24,127
	andi R25,0
	movw R30,R6
	std z+0,R24
	.dbline 554
;         // 将该字节剩下的左边部分,作为残余数据保存起来
;         nLeft = *in >> (7-nByte);
	ldi R18,7
	ldi R19,0
	sub R18,R12
	sbc R19,R13
	ldd R16,z+0
	clr R17
	xcall asr16
	mov R10,R16
	.dbline 557
;     
;         // 修改目标串的指针和计数值
;         out++;
	movw R24,R4
	adiw R24,1
	movw R4,R24
	.dbline 558
;         nDst++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 561
;     
;         // 修改字节计数值
;         nByte++;
	movw R24,R12
	adiw R24,1
	movw R12,R24
	.dbline 564
;     
;         // 到了一组的最后一个字节
;         if(nByte == 7)
	cpi R24,7
	ldi R30,0
	cpc R25,R30
	brne L119
	.dbline 565
;         {
	.dbline 567
;             // 额外得到一个目标解码字节
;             *out = nLeft;
	movw R30,R4
	std z+0,R10
	.dbline 570
;     
;             // 修改目标串的指针和计数值
;             out++;
	movw R24,R30
	adiw R24,1
	movw R4,R24
	.dbline 571
;             nDst++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 574
;     
;             // 组内字节序号和残余数据初始化
;             nByte = 0;
	clr R12
	clr R13
	.dbline 575
;             nLeft = 0;
	clr R10
	.dbline 576
;         }
L119:
	.dbline 579
	movw R24,R6
	adiw R24,1
	movw R6,R24
	.dbline 580
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 581
L117:
	.dbline 549
	cp R22,R14
	cpc R23,R15
	brge X8
	xjmp L116
X8:
	.dbline 583
;     
;         // 修改源串的指针和计数值
;         in++;
;         nSrc++;
;     }
;     
;     *out = 0;
	clr R2
	movw R30,R4
	std z+0,R2
	.dbline 586
;     
;     // 返回目标串长度
;     return nDst;
	movw R16,R20
	.dbline -2
L115:
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r nDst 20 I
	.dbsym r nSrc 22 I
	.dbsym r nLeft 10 c
	.dbsym r nByte 12 I
	.dbsym r nLen 14 I
	.dbsym r out 4 pc
	.dbsym r in 6 pc
	.dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -