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

📄 呼死你.lst

📁 基于单片机的短信报警机
💻 LST
📖 第 1 页 / 共 4 页
字号:
    01DA 9029      LD	R2,Y+
    01DB BE2F      OUT	0x3F,R2
    01DC 91F9      LD	R31,Y+
    01DD 91E9      LD	R30,Y+
    01DE 9199      LD	R25,Y+
    01DF 9189      LD	R24,Y+
    01E0 9129      LD	R18,Y+
    01E1 9109      LD	R16,Y+
    01E2 9029      LD	R2,Y+
    01E3 9518      RETI
_QueryState:
  count                --> R20
  addrssend            --> R22
    01E4 D1D5      RCALL	push_gset2
    01E5 2F60      MOV	R22,R16
    01E6 9721      SBIW	R28,1
(0175)   }
(0176) /*************************************************
(0177) *原型:void QueryState(void)
(0178) *功能:根据*ECAV的内容判断通话是否成功
(0179) *说明:无
(0180) *参数:uchar addrssend
(0181) *返回:无
(0182) **************************************************/	
(0183) void QueryState(uchar addrssend)
(0184) {
(0185)  uchar count;
(0186)  
(0187)     if(count=Bj_rx(addrssend,',',0))
    01E7 2422      CLR	R2
    01E8 8228      STD	Y+0,R2
    01E9 E22C      LDI	R18,0x2C
    01EA 2F06      MOV	R16,R22
    01EB DF10      RCALL	_Bj_rx
    01EC 2F40      MOV	R20,R16
    01ED 2344      TST	R20
    01EE F0C9      BEQ	0x0208
(0188) 		    { 
(0189) 		     count = count = Bj_rx(addrssend,',',++count);
    01EF 2F84      MOV	R24,R20
    01F0 5F8F      SUBI	R24,0xFF
    01F1 2E28      MOV	R2,R24
    01F2 8228      STD	Y+0,R2
    01F3 E22C      LDI	R18,0x2C
    01F4 2F06      MOV	R16,R22
    01F5 DF06      RCALL	_Bj_rx
    01F6 2F40      MOV	R20,R16
(0190) 			 count ++;
    01F7 9543      INC	R20
(0191) 		     if(Uart.Buf[count] == '0')
    01F8 E987      LDI	R24,0x97
    01F9 E090      LDI	R25,0
    01FA 2FE4      MOV	R30,R20
    01FB 27FF      CLR	R31
    01FC 0FE8      ADD	R30,R24
    01FD 1FF9      ADC	R31,R25
    01FE 8180      LDD	R24,Z+0
    01FF 3380      CPI	R24,0x30
    0200 F451      BNE	0x020B
(0192) 			  				{//接听马上挂机
(0193) 							 WorkCount = RINGOFF;
    0201 E085      LDI	R24,5
    0202 93800184  STS	WorkCount,R24
(0194) 							 Time.Sec = 1;
    0204 E081      LDI	R24,1
    0205 9380008F  STS	Time,R24
(0195) 							}
(0196) 		     }
    0207 C003      RJMP	0x020B
(0197) 	else  //发送挂机命令
(0198) 	        {  
(0199) 			  WorkCount = RINGOFF;//				   
    0208 E085      LDI	R24,5
    0209 93800184  STS	WorkCount,R24
(0200)   		   }	 			
    020B 9621      ADIW	R28,1
    020C D1A1      RCALL	pop_gset2
    020D 9508      RET
_DealRxBuf:
  count                --> R22
  addrss               --> R20
    020E D1A9      RCALL	push_gset3
    020F 2F40      MOV	R20,R16
    0210 9721      SBIW	R28,1
(0201)    }
(0202) /*************************************************
(0203) *原型:void Deal_rx(void)
(0204) *功能:处理接收到的数据
(0205) *说明:无
(0206) *参数:uchar addrss-双音计数
(0207) *返回:无
(0208) **************************************************/
(0209) void DealRxBuf(uchar addrss)
(0210) {
(0211)    unsigned char count = NULL;
    0211 2766      CLR	R22
(0212) 
(0213)    CLR_BIT(UCSRB,RXCIE);//关接收
    0212 9857      CBI	0x0A,7
(0214)    
(0215)    switch(WorkCount)//任务指示器
    0213 90A00184  LDS	R10,WorkCount
    0215 24BB      CLR	R11
    0216 20AA      TST	R10
    0217 F411      BNE	0x021A
    0218 20BB      TST	R11
    0219 F0D1      BEQ	0x0234
    021A 01C5      MOVW	R24,R10
    021B 3081      CPI	R24,1
    021C E0E0      LDI	R30,0
    021D 079E      CPC	R25,R30
    021E F0A9      BEQ	0x0234
    021F 3082      CPI	R24,2
    0220 E0E0      LDI	R30,0
    0221 079E      CPC	R25,R30
    0222 F0B9      BEQ	0x023A
    0223 3083      CPI	R24,3
    0224 E0E0      LDI	R30,0
    0225 079E      CPC	R25,R30
    0226 F129      BEQ	0x024C
    0227 3084      CPI	R24,4
    0228 E0E0      LDI	R30,0
    0229 079E      CPC	R25,R30
    022A F159      BEQ	0x0256
    022B 3085      CPI	R24,5
    022C E0E0      LDI	R30,0
    022D 079E      CPC	R25,R30
    022E F159      BEQ	0x025A
    022F 3086      CPI	R24,6
    0230 E0E0      LDI	R30,0
    0231 079E      CPC	R25,R30
    0232 F101      BEQ	0x0253
    0233 C048      RJMP	0x027C
(0216)  	    {
(0217) 		 case LINE:    
(0218) 		 case SETUPTEL: 
(0219) 		 	         WorkCount++;
    0234 91800184  LDS	R24,WorkCount
    0236 5F8F      SUBI	R24,0xFF
    0237 93800184  STS	WorkCount,R24
(0220) 					 break;			
    0239 C042      RJMP	0x027C
(0221) 		 case RTEL:
(0222) 		      //在数组从COUNT开始到ADDRSS内查找一个字符,无找到返回0
(0223) 		      if(count=Bj_rx(addrss,'"',count))
    023A 8368      STD	Y+0,R22
    023B E222      LDI	R18,0x22
    023C 2F04      MOV	R16,R20
    023D DEBE      RCALL	_Bj_rx
    023E 2F60      MOV	R22,R16
    023F 2366      TST	R22
    0240 F409      BNE	0x0242
    0241 C03A      RJMP	0x027C
(0224) 						{ 
(0225) 			   		     Save_tel(count,TelBuf); //读出电话本与定时时间
    0242 E52F      LDI	R18,0x5F
    0243 E031      LDI	R19,1
    0244 DEFE      RCALL	_Save_tel
(0226) 						 WorkCount = CALLTEL;//有读到电话本马上去拔号处理
    0245 E083      LDI	R24,3
    0246 93800184  STS	WorkCount,R24
(0227) 						  DealTxUartBz = TRUE;//如果未读到电话本,红灯亮
    0248 E081      LDI	R24,1
    0249 9380017E  STS	DealTxUartBz,R24
(0228) 						 }
(0229) 			   break;
    024B C030      RJMP	0x027C
(0230) 		 case CALLTEL://拔号成功,接着查询状态
(0231) 		 	    WorkCount = QUERY;
    024C E086      LDI	R24,6
    024D 93800184  STS	WorkCount,R24
(0232) 				Time.Sec = timesec;//2000ms
    024F E184      LDI	R24,0x14
    0250 9380008F  STS	Time,R24
(0233) 			   break;
    0252 C029      RJMP	0x027C
(0234) 		 case QUERY://根据回应分析状态
(0235) 		 	    QueryState(addrss);
    0253 2F04      MOV	R16,R20
    0254 DF8F      RCALL	_QueryState
(0236) 			    break;
    0255 C026      RJMP	0x027C
(0237) 	     case GET://有来电接听挂断
(0238) 		 	    WorkCount = RINGOFF;
    0256 E085      LDI	R24,5
    0257 93800184  STS	WorkCount,R24
(0239) 				break;
    0259 C022      RJMP	0x027C
(0240) 		 case RINGOFF://发挂机命令成功
(0241) 		 	    Time.Mec = Time.Min = NULL;
    025A 2422      CLR	R2
    025B 2433      CLR	R3
    025C 92300093  STS	0x93,R3
    025E 92200092  STS	Time+3,R2
    0260 92300095  STS	0x95,R3
    0262 92200094  STS	0x94,R2
(0242) 				
(0243) 				Time.Sec = time3sec;//定时3秒
    0264 E18E      LDI	R24,0x1E
    0265 9380008F  STS	Time,R24
(0244) 		 	    if(!Time.Atd)//如果无定时,直接拔打下一个
    0267 90200090  LDS	R2,Time+1
    0269 90300091  LDS	R3,Time+2
    026B 2022      TST	R2
    026C F449      BNE	0x0276
    026D 2033      TST	R3
    026E F439      BNE	0x0276
(0245) 		 	   	       	{
(0246) 						 Time.Sec = timesec;
    026F E184      LDI	R24,0x14
    0270 9380008F  STS	Time,R24
(0247) 						 WorkCount = CALLTEL;
    0272 E083      LDI	R24,3
    0273 93800184  STS	WorkCount,R24
(0248) 						 }
    0275 C003      RJMP	0x0279
(0249) 				else //否则定时未到,等待定时到再拔号
(0250) 					    {
(0251) 						 WorkCount = NULLACK;
    0276 E087      LDI	R24,7
    0277 93800184  STS	WorkCount,R24
(0252) 						 }
(0253) 				Busybz = FALSE;
    0279 2422      CLR	R2
    027A 92200183  STS	Busybz,R2
(0254) 			    break;	
(0255) 		}
(0256)    UART_RXHEAD = NULL;    //接收器指向头
    027C 2422      CLR	R2
    027D 92200180  STS	UART_RXHEAD,R2
(0257)    DealRxUartBz = FALSE;  //串口接收处理标志清0
    027F 9220017F  STS	DealRxUartBz,R2
(0258)    SET_BIT(UCSRB,RXCIE);  //开接收
    0281 9A57      SBI	0x0A,7
    0282 9621      ADIW	R28,1
    0283 D12C      RCALL	pop_gset3
    0284 9508      RET
_DealTx:
    0285 D136      RCALL	push_gset1
(0259)    }
(0260) /**************************************************
(0261) *原型:void InitUART(void)
(0262) *功能:初始化UART,接收中断开,接收/发送口开
(0263) *参数:速率为19.2k,8位数据+1位STOP位,bandrate
(0264) *返回:无
(0265) **************************************************/
(0266) void DealTx(void)
(0267) {
(0268)  switch(WorkCount)
    0286 91400184  LDS	R20,WorkCount
    0288 2755      CLR	R21
    0289 3040      CPI	R20,0
    028A 0745      CPC	R20,R21
    028B F0D9      BEQ	0x02A7
    028C 3041      CPI	R20,1
    028D E0E0      LDI	R30,0
    028E 075E      CPC	R21,R30
    028F F0D9      BEQ	0x02AB
    0290 3042      CPI	R20,2
    0291 E0E0      LDI	R30,0
    0292 075E      CPC	R21,R30
    0293 F0D9      BEQ	0x02AF
    0294 3043      CPI	R20,3
    0295 E0E0      LDI	R30,0
    0296 075E      CPC	R21,R30
    0297 F0D9      BEQ	0x02B3
    0298 3044      CPI	R20,4
    0299 E0E0      LDI	R30,0
    029A 075E      CPC	R21,R30
    029B F409      BNE	0x029D
    029C C033      RJMP	0x02D0
    029D 3045      CPI	R20,5
    029E E0E0      LDI	R30,0
    029F 075E      CPC	R21,R30
    02A0 F409      BNE	0x02A2
    02A1 C032      RJMP	0x02D4
    02A2 3046      CPI	R20,6
    02A3 E0E0      LDI	R30,0
    02A4 075E      CPC	R21,R30
    02A5 F119      BEQ	0x02C9
    02A6 C030      RJMP	0x02D7
(0269)  				  {
(0270) 				   case LINE://建立连接
(0271) 						  puts("ATE0");
    02A7 E807      LDI	R16,0x87
    02A8 E010      LDI	R17,0
    02A9 DE30      RCALL	_puts
(0272) 						  break;
    02AA C02C      RJMP	0x02D7
(0273) 			
(0274) 				   case SETUPTEL:
(0275) 				   		  puts("AT+CPBS=\"SM\"");
    02AB E70A      LDI	R16,0x7A
    02AC E010      LDI	R17,0
    02AD DE2C      RCALL	_puts
(0276) 						  break;
    02AE C028      RJMP	0x02D7
(0277) 				 
(0278) 				   case RTEL://查找电话本
(0279) 				      
(0280) 				   		  puts("AT+CPBR=1");
    02AF E700      LDI	R16,0x70
    02B0 E010      LDI	R17,0
    02B1 DE28      RCALL	_puts
(0281) 						  break;
    02B2 C024      RJMP	0x02D7
(0282) 						  
(0283) 				   case CALLTEL://在报警时发拔号命令
(0284) 				   		 //拔号定时重新清0
(0285) 						  puts("ATH");
    02B3 E60C      LDI	R16,0x6C
    02B4 E010      LDI	R17,0
    02B5 DE24      RCALL	_puts
(0286) 						  delay_ms(1500);
    02B6 ED0C      LDI	R16,0xDC
    02B7 E015      LDI	R17,5
    02B8 DD98      RCALL	_delay_ms
(0287) 						  DealRxUartBz =FALSE;
    02B9 2422      CLR	R2
    02BA 9220017F  STS	DealRxUartBz,R2
(0288) 						  WorkCount = CALLTEL;
    02BC E083      LDI	R24,3
    02BD 93800184  STS	WorkCount,R24
(0289) 						  Time.Sec = time3sec;//定时3秒
    02BF E18E      LDI	R24,0x1E
    02C0 9380008F  STS	Time,R24
(0290) 						  puts(TelBuf);
    02C2 E50F      LDI	R16,0x5F
    02C3 E011      LDI	R17,1
    02C4 DE15      RCALL	_puts
(0291) 						  Busybz = TRUE;//忙标志置1
    02C5 E081      LDI	R24,1
    02C6 93800183  STS	Busybz,R24
(0292) 						  break;
    02C8 C00E      RJMP	0x02D7
(0293) 						  
(0294) 				  case QUERY://查询拔号状态
(0295) 				  	      puts("AT+CLCC");
    02C9 E604      LDI	R16,0x64
    02CA E010      LDI	R17,0
    02CB DE0E      RCALL	_puts
(0296) 						  Time.Sec = timesec;
    02CC E184      LDI	R24,0x14
    02CD 9380008F  STS	Time,R24
(0297) 						  break;
    02CF C007      RJMP	0x02D7
(0298) 				  case GET://接听
(0299) 				   		  puts("ATA");//发送摘机命令
    02D0 E600      LDI	R16,0x60
    02D1 E010      LDI	R17,0
    02D2 DE07      RCALL	_puts
(0300) 						  break;   
    02D3 C003      RJMP	0x02D7
(0301) 				   case RINGOFF://挂机 
(0302) 				   		  puts("ATH");
    02D4 E60C      LDI	R16,0x6C
    02D5 E010      LDI	R17,0
    02D6 DE03      RCALL	_puts
(0303) 						  break;
(0304) 				}
(0305) 
(0306)  DealTxUartBz = FALSE;   //已发送完,把发送标志清0
    02D7 2422      CLR	R2
    02D8 9220017E  STS	DealTxUartBz,R2
(0307)  UART_RXHEAD = NULL;
    02DA 92200180  STS	UART_RXHEAD,R2
    02DC D0E2      RCALL	pop_gset1
    02DD 9508      RET
FILE: D:\MEGA8\西门子3508\3508呼死你\timetask.h
(0001) 
(0002) 
(0003) //TIMER1 initialize - prescale:256
(0004) // WGM: 0) Normal, TOP=0xFFFF
(0005) // desired value: 100mSec
(0006) // actual value: 100.000mSec (0.0%)
(0007) void timer1_init(void)
(0008) {
(0009)  TCCR1B = 0x00; //stop
_timer1_init:
    02DE 2422      CLR	R2
    02DF BC2E      OUT	0x2E,R2
(0010)  TCNT1H = 0xF4; //setup
    02E0 EF84      LDI	R24,0xF4
    02E1 BD8D      OUT	0x2D,R24
(0011)  TCNT1L = 0xC0;
    02E2 EC80      LDI	R24,0xC0
    02E3 BD8C      OUT	0x2C,R24
(0012)  OCR1AH = 0x0B;
    02E4 E08B      LDI	R24,0xB
    02E5 BD8B      OUT	0x2B,R24
(0013)  OCR1AL = 0x40;
    02E6 E480      LDI	R24,0x40
    02E7 BD8A      OUT	0x2A,R24

⌨️ 快捷键说明

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