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

📄 detectaphone.lst

📁 一个关于窃听器源代码(使用PROTEUS串口例子)
💻 LST
📖 第 1 页 / 共 4 页
字号:
__text_start:
__start:
    00DA E5CF      LDI	R28,0x5F
    00DB E0D4      LDI	R29,4
    00DC BFCD      OUT	0x3D,R28
    00DD BFDE      OUT	0x3E,R29
    00DE 51C0      SUBI	R28,0x10
    00DF 40D0      SBCI	R29,0
    00E0 EA0A      LDI	R16,0xAA
    00E1 8308      STD	Y+0,R16
    00E2 2400      CLR	R0
    00E3 EAE5      LDI	R30,0xA5
    00E4 E0F0      LDI	R31,0
    00E5 E011      LDI	R17,1
    00E6 3DE7      CPI	R30,0xD7
    00E7 07F1      CPC	R31,R17
    00E8 F011      BEQ	0x00EB
    00E9 9201      ST	R0,Z+
    00EA CFFB      RJMP	0x00E6
    00EB 8300      STD	Z+0,R16
    00EC E6EF      LDI	R30,0x6F
    00ED E0F1      LDI	R31,1
    00EE E6A0      LDI	R26,0x60
    00EF E0B0      LDI	R27,0
    00F0 E011      LDI	R17,1
    00F1 3BE4      CPI	R30,0xB4
    00F2 07F1      CPC	R31,R17
    00F3 F021      BEQ	0x00F8
    00F4 95C8      LPM
    00F5 9631      ADIW	R30,1
    00F6 920D      ST	R0,X+
    00F7 CFF9      RJMP	0x00F1
    00F8 D3DE      RCALL	_main
_exit:
    00F9 CFFF      RJMP	_exit
_uart0_rx_isr:
  j                    --> R16
  i                    --> R16
    00FA 922A      ST	R2,-Y
    00FB 923A      ST	R3,-Y
    00FC 930A      ST	R16,-Y
    00FD 938A      ST	R24,-Y
    00FE 939A      ST	R25,-Y
    00FF 93EA      ST	R30,-Y
    0100 93FA      ST	R31,-Y
    0101 B62F      IN	R2,0x3F
    0102 922A      ST	R2,-Y
FILE: D:\MyProject\SMS-MC55\Code\窃听器delay\main.c
(0001) ////////////////////////////////////////////////////////////////////////////////
(0002) // ICC-AVR application builder : 2006-6-25 下午 06:02:39
(0003) // Target : M8
(0004) // Crystal: 3.6864Mhz
(0005) // Author:  Anwarye
(0006) // Title:   Detcetaphone
(0007) ////////////////////////////////////////////////////////////////////////////////
(0008) 
(0009) #include <iom8v.h>
(0010) #include <macros.h>
(0011) #include "var.h"
(0012) 
(0013) #define XTAL == 3.6864M
(0014) 
(0015) ////////////////////////////////////////////////////////////////////////////////
(0016) #pragma interrupt_handler uart0_rx_isr:12
(0017) void uart0_rx_isr(void)
(0018) {
(0019)     unsigned char i,j;
(0020)     if(UDR == 0x0A)
    0103 B18C      IN	R24,0x0C
    0104 308A      CPI	R24,0xA
    0105 F409      BNE	0x0107
(0021)     { 
(0022)        return;		 // 收到0x0A直接丢弃
    0106 C07A      RJMP	0x0181
(0023)     }
(0024) 	
(0025) 	i = RxIndex;
    0107 910000C6  LDS	R16,RxIndex
(0026) 	j = RxIndex-1;
    0109 910000C6  LDS	R16,RxIndex
    010B 5001      SUBI	R16,1
(0027)     if((RxBuf[0] == 0x30) && (RxBuf[1] == 0x0D))
    010C 918000C7  LDS	R24,RxBuf
    010E 3380      CPI	R24,0x30
    010F F499      BNE	0x0123
    0110 918000C8  LDS	R24,RxBuf+1
    0112 308D      CPI	R24,0xD
    0113 F479      BNE	0x0123
(0028)     {
(0029)         RxIndexTail = RxIndex;              // 保存接收缓冲指针尾
    0114 902000C6  LDS	R2,RxIndex
    0116 9220006C  STS	RxIndexTail,R2
(0030)         RxIndex = 0;	  		 			// 接收缓冲指针归零
    0118 2422      CLR	R2
    0119 922000C6  STS	RxIndex,R2
(0031) 	    RxStatus = 1;						// 接收完成标志置位
    011B E081      LDI	R24,1
    011C 9380006D  STS	RxStatus,R24
(0032) 		OkFlag = 1;
    011E 9380006F  STS	OkFlag,R24
(0033) 		error = 0;
    0120 92200076  STS	error,R2
(0034) 		return; 
    0122 C05E      RJMP	0x0181
(0035) 	}
(0036)     if((RxBuf[0] == 0x32) && (RxBuf[1] == 0x0D))  // 收到来电信号,来电标志置位
    0123 918000C7  LDS	R24,RxBuf
    0125 3382      CPI	R24,0x32
    0126 F479      BNE	0x0136
    0127 918000C8  LDS	R24,RxBuf+1
    0129 308D      CPI	R24,0xD
    012A F459      BNE	0x0136
(0037)     {
(0038)         CallInFlag = 1;	                    // 置电话呼入标志
    012B E081      LDI	R24,1
    012C 93800070  STS	CallInFlag,R24
(0039) 	    RxIndex = 0;
    012E 2422      CLR	R2
    012F 922000C6  STS	RxIndex,R2
(0040) 		RxStatus = 1;
    0131 9380006D  STS	RxStatus,R24
(0041) 		OkFlag = 1;
    0133 9380006F  STS	OkFlag,R24
(0042) 		return;  
    0135 C04B      RJMP	0x0181
(0043)     }
(0044)     else if((RxBuf[0] == 0x33) && (RxBuf[1] == 0x0D))  // 被叫号码忙 或者挂机 主叫挂机
    0136 918000C7  LDS	R24,RxBuf
    0138 3383      CPI	R24,0x33
    0139 F479      BNE	0x0149
    013A 918000C8  LDS	R24,RxBuf+1
    013C 308D      CPI	R24,0xD
    013D F459      BNE	0x0149
(0045)     {
(0046)         BusyFlag = 1;	                               // 置电话呼入标志
    013E E081      LDI	R24,1
    013F 93800072  STS	BusyFlag,R24
(0047) 	    RxIndex = 0;
    0141 2422      CLR	R2
    0142 922000C6  STS	RxIndex,R2
(0048) 		RxStatus = 1;
    0144 9380006D  STS	RxStatus,R24
(0049) 		OkFlag = 1;
    0146 9380006F  STS	OkFlag,R24
(0050) 		return;  
    0148 C038      RJMP	0x0181
(0051)     }      
(0052)     else if((RxBuf[0] == 0x37) && (RxBuf[1] == 0x0D))  // 收到来电信号,来电标志置位
    0149 918000C7  LDS	R24,RxBuf
    014B 3387      CPI	R24,0x37
    014C F479      BNE	0x015C
    014D 918000C8  LDS	R24,RxBuf+1
    014F 308D      CPI	R24,0xD
    0150 F459      BNE	0x015C
(0053)     {
(0054)         NoCarrierFlag = 1;	                           // 置电话呼入标志  NO CARRIER
    0151 E081      LDI	R24,1
    0152 93800071  STS	NoCarrierFlag,R24
(0055) 	    RxIndex = 0;
    0154 2422      CLR	R2
    0155 922000C6  STS	RxIndex,R2
(0056) 		RxStatus = 1;
    0157 9380006D  STS	RxStatus,R24
(0057) 		OkFlag = 1;
    0159 9380006F  STS	OkFlag,R24
(0058) 		return;
    015B C025      RJMP	0x0181
(0059)     }
(0060)     else if((RxBuf[0] == 0x34) && (RxBuf[1] == 0x0D))  // 收到来电信号,来电标志置位
    015C 918000C7  LDS	R24,RxBuf
    015E 3384      CPI	R24,0x34
    015F F479      BNE	0x016F
    0160 918000C8  LDS	R24,RxBuf+1
    0162 308D      CPI	R24,0xD
    0163 F459      BNE	0x016F
(0061)     {
(0062) 	    RxIndex = 0;
    0164 2422      CLR	R2
    0165 922000C6  STS	RxIndex,R2
(0063) 		RxStatus = 1;
    0167 E081      LDI	R24,1
    0168 9380006D  STS	RxStatus,R24
(0064) 		OkFlag = 1;
    016A 9380006F  STS	OkFlag,R24
(0065) 		error = 1;
    016C 93800076  STS	error,R24
(0066) 		return;	
    016E C012      RJMP	0x0181
(0067) 	}
(0068) 	else 
(0069)     {
(0070)     
(0071)     RxBuf[RxIndex++] = UDR;                 // 继续接收数据放入接收缓冲
    016F 902000C6  LDS	R2,RxIndex
    0171 2433      CLR	R3
    0172 2D82      MOV	R24,R2
    0173 5F8F      SUBI	R24,0xFF
    0174 938000C6  STS	RxIndex,R24
    0176 EC87      LDI	R24,0xC7
    0177 E090      LDI	R25,0
    0178 2DE2      MOV	R30,R2
    0179 27FF      CLR	R31
    017A 0FE8      ADD	R30,R24
    017B 1FF9      ADC	R31,R25
    017C B02C      IN	R2,0x0C
    017D 8220      STD	Z+0,R2
(0072) 	RxStatus = 0;                         // 串口接收中
    017E 2422      CLR	R2
    017F 9220006D  STS	RxStatus,R2
(0073) //	return;		  		  	   		      // 结束接收,直接跳出
(0074) 	}
    0181 9029      LD	R2,Y+
    0182 BE2F      OUT	0x3F,R2
    0183 91F9      LD	R31,Y+
    0184 91E9      LD	R30,Y+
    0185 9199      LD	R25,Y+
    0186 9189      LD	R24,Y+
    0187 9109      LD	R16,Y+
    0188 9039      LD	R3,Y+
    0189 9029      LD	R2,Y+
    018A 9518      RETI
_uart0_tx_isr:
    018B 922A      ST	R2,-Y
    018C 938A      ST	R24,-Y
    018D 939A      ST	R25,-Y
    018E 93EA      ST	R30,-Y
    018F 93FA      ST	R31,-Y
    0190 B62F      IN	R2,0x3F
    0191 922A      ST	R2,-Y
(0075) }
(0076) 
(0077) ////////////////////////////////////////////////////////////////////////////////
(0078) #pragma interrupt_handler uart0_tx_isr:14
(0079) void uart0_tx_isr(void)
(0080) {
(0081)     
(0082)     if(!TxStatus)                                   // 本帧数据未发完,则继续发送  
    0192 9020006E  LDS	R2,TxStatus
    0194 2022      TST	R2
    0195 F449      BNE	0x019F
(0083) 	{
(0084) 	    //while ( !(UCSRA & (1<<UDRE)) );             // 等待UDR空
(0085) 	    UDR = TxBuf[TxIndex];		
    0196 EA86      LDI	R24,0xA6
    0197 E090      LDI	R25,0
    0198 91E000A5  LDS	R30,TxIndex
    019A 27FF      CLR	R31
    019B 0FE8      ADD	R30,R24
    019C 1FF9      ADC	R31,R25
    019D 8020      LDD	R2,Z+0
    019E B82C      OUT	0x0C,R2
(0086) 	}
(0087) 	if((TxBuf[TxIndex] == 0x0D) || (TxBuf[TxIndex] == 0x1A))  // 本帧数据发送结束
    019F EA86      LDI	R24,0xA6
    01A0 E090      LDI	R25,0
    01A1 91E000A5  LDS	R30,TxIndex
    01A3 27FF      CLR	R31
    01A4 0FE8      ADD	R30,R24
    01A5 1FF9      ADC	R31,R25
    01A6 8180      LDD	R24,Z+0
    01A7 308D      CPI	R24,0xD
    01A8 F051      BEQ	0x01B3
    01A9 EA86      LDI	R24,0xA6
    01AA E090      LDI	R25,0
    01AB 91E000A5  LDS	R30,TxIndex
    01AD 27FF      CLR	R31
    01AE 0FE8      ADD	R30,R24
    01AF 1FF9      ADC	R31,R25
    01B0 8180      LDD	R24,Z+0
    01B1 318A      CPI	R24,0x1A
    01B2 F441      BNE	0x01BB
(0088) 	{
(0089) 		TxStatus = 1;                          // 发送完成状态标志置位
    01B3 E081      LDI	R24,1
    01B4 9380006E  STS	TxStatus,R24
(0090) 		TxIndex = 0;                           // 发送缓冲区指针归零
    01B6 2422      CLR	R2
    01B7 922000A5  STS	TxIndex,R2
(0091) 		UCSRB &= ~((1<<TXCIE));//|(1<<TXEN));  // 关发送中断
    01B9 9856      CBI	0x0A,6
(0092) 		return;
    01BA C005      RJMP	0x01C0
(0093) 	}
(0094) 	TxIndex++;                              
    01BB 918000A5  LDS	R24,TxIndex
    01BD 5F8F      SUBI	R24,0xFF
    01BE 938000A5  STS	TxIndex,R24
    01C0 9029      LD	R2,Y+
    01C1 BE2F      OUT	0x3F,R2
    01C2 91F9      LD	R31,Y+
    01C3 91E9      LD	R30,Y+
    01C4 9199      LD	R25,Y+
    01C5 9189      LD	R24,Y+
    01C6 9029      LD	R2,Y+
    01C7 9518      RETI
(0095) }
(0096) unsigned char CheckRx(void)
(0097) {
(0098)     unsigned char i,j;
(0099) 	i = RxIndex;
_CheckRx:
  j                    --> R18
  i                    --> R16
    01C8 910000C6  LDS	R16,RxIndex
(0100) 	j = RxIndex - 1;
    01CA 912000C6  LDS	R18,RxIndex
    01CC 5021      SUBI	R18,1
(0101)     if(( RxBuf[j] == 0x30) && (RxBuf[i] == 0x0D))
    01CD EC87      LDI	R24,0xC7
    01CE E090      LDI	R25,0
    01CF 2FE2      MOV	R30,R18
    01D0 27FF      CLR	R31
    01D1 0FE8      ADD	R30,R24
    01D2 1FF9      ADC	R31,R25
    01D3 8180      LDD	R24,Z+0
    01D4 3380      CPI	R24,0x30
    01D5 F471      BNE	0x01E4
    01D6 EC87      LDI	R24,0xC7
    01D7 E090      LDI	R25,0
    01D8 2FE0      MOV	R30,R16
    01D9 27FF      CLR	R31
    01DA 0FE8      ADD	R30,R24
    01DB 1FF9      ADC	R31,R25
    01DC 8180      LDD	R24,Z+0
    01DD 308D      CPI	R24,0xD
    01DE F429      BNE	0x01E4
(0102) 	{
(0103) 	    RxIndex = 0;
    01DF 2422      CLR	R2
    01E0 922000C6  STS	RxIndex,R2
(0104) 		return (1);
    01E2 E001      LDI	R16,1
    01E3 C001      RJMP	0x01E5
(0105) 	}
(0106) 	else
(0107) 	{
(0108) 	    return (0);
    01E4 2700      CLR	R16
    01E5 9508      RET
(0109) 	}
(0110) }
(0111) /*-----------------------------------------------------------------------*/
(0112) ///////////////////////////  清除接收缓冲  ////////////////////////////////
(0113) /*-----------------------------------------------------------------------*/
(0114) void ClearRxBuf(void)
(0115) {
(0116)     unsigned char i;
(0117) 	for(i=0;i<128;i++)
_ClearRxBuf:
  i                    --> R16
    01E6 2700      CLR	R16
    01E7 C009      RJMP	0x01F1
(0118) 	{
(0119) 	    RxBuf[i] = 0;
    01E8 EC87      LDI	R24,0xC7
    01E9 E090      LDI	R25,0
    01EA 2FE0      MOV	R30,R16
    01EB 27FF      CLR	R31
    01EC 0FE8      ADD	R30,R24
    01ED 1FF9      ADC	R31,R25
    01EE 2422      CLR	R2
    01EF 8220      STD	Z+0,R2
    01F0 9503      INC	R16
    01F1 3800      CPI	R16,0x80
    01F2 F3A8      BCS	0x01E8
    01F3 9508      RET
(0120) 	}
(0121) }
(0122) /*-----------------------------------------------------------------------*/
(0123) ///////////////////////////  串口发送使能  ////////////////////////////////
(0124) /*-----------------------------------------------------------------------*/
(0125) void TxEnable(void)
(0126) {
(0127)     //RxIndex = 0;
(0128)     UDR = TxBuf[0];                            // 发送缓冲头送入串口发送寄存器,激活开始发送
_TxEnable:
    01F4 902000A6  LDS	R2,TxBuf
    01F6 B82C      OUT	0x0C,R2
(0129) 	UCSRB |= ((1<<TXCIE));//|(1<<TXEN));
    01F7 9A56      SBI	0x0A,6
    01F8 9508      RET
_Put_AT_command:
  count                --> R20
  atlen                --> R22
  atc                  --> R10
    01F9 D357      RCALL	push_gset3
    01FA 2F62      MOV	R22,R18
    01FB 0158      MOVW	R10,R16
(0130) }
(0131) /*-----------------------------------------------------------------------*/
(0132) /////////////////////////////  发送AT命令 /////////////////////////////////
(0133) /*-----------------------------------------------------------------------*/
(0134) void Put_AT_command(const unsigned char *atc, unsigned char atlen)
(0135) {
(0136)     unsigned char count;
(0137) 	
(0138) 	for(count = 0;count < atlen;count++)      // AT命令窜移入发送缓冲
    01FC 2744      CLR	R20
    01FD C00D      RJMP	0x020B
(0139) 	{
(0140) 	    TxBuf[count] = atc[count];
    01FE 2FE4      MOV	R30,R20
    01FF 27FF      CLR	R31
    0200 0DEA      ADD	R30,R10
    0201 1DFB      ADC	R31,R11
    0202 91E4      LPM	R30,0(Z)
    0203 EA86      LDI	R24,0xA6
    0204 E090      LDI	R25,0
    0205 2FA4      MOV	R26,R20
    0206 27BB      CLR	R27
    0207 0FA8      ADD	R26,R24
    0208 1FB9      ADC	R27,R25
    0209 93EC      ST	R30,0(X)
    020A 9543      INC	R20
    020B 1746      CP	R20,R22
    020C F388      BCS	0x01FE
(0141) 	}
(0142) 	
(0143) 	TxBuf[atlen] = 0x0D;                      // 发送缓冲窜结尾加“回车”
    020D EA86      LDI	R24,0xA6
    020E E090      LDI	R25,0
    020F 2FE6      MOV	R30,R22
    0210 27FF      CLR	R31
    0211 0FE8      ADD	R30,R24
    0212 1FF9      ADC	R31,R25
    0213 E08D      LDI	R24,0xD
    0214 8380      STD	Z+0,R24
(0144) 	TxBuf[atlen + 1] = 0x00;                  // 发送缓冲窜结束符号
    0215 EA87      LDI	R24,0xA7
    0216 E090      LDI	R25,0
    0217 2FE6      MOV	R30,R22
    0218 27FF      CLR	R31
    0219 0FE8      ADD	R30,R24
    021A 1FF9      ADC	R31,R25
    021B 2422      CLR	R2
    021C 8220      STD	Z+0,R2
(0145) 
(0146) 	OkFlag = 0;
    021D 9220006F  STS	OkFlag,R2
(0147)     TxStatus = 0;
    021F 9220006E  STS	TxStatus,R2
(0148) 	TxIndex = 1;                              // 发送指针偏移1
    0221 E081      LDI	R24,1
    0222 938000A5  STS	TxIndex,R24
(0149) 	TxEnable();                               // 激活发送
    0224 DFCF      RCALL	_TxEnable
(0150)     while(!TxStatus);                         // 等代发送结束,发送缓冲指针为零则可以发送
    0225 9020006E  LDS	R2,TxStatus
    0227 2022      TST	R2
    0228 F3E1      BEQ	0x0225
(0151) 	DelayMs(20);
    0229 E104      LDI	R16,0x14
    022A E010      LDI	R17,0
    022B D2B1      RCALL	_DelayMs
(0152) 	while(!OkFlag);                           // 收到模块返回OK,命令结束
    022C 9020006F  LDS	R2,OkFlag
    022E 2022      TST	R2
    022F F3E1      BEQ	0x022C
(0153) 	OkFlag = 0;

⌨️ 快捷键说明

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