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

📄 呼死你.lst

📁 基于单片机的短信报警机
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0014)  OCR1BH = 0x0B;
    02E8 E08B      LDI	R24,0xB
    02E9 BD89      OUT	0x29,R24
(0015)  OCR1BL = 0x40;
    02EA E480      LDI	R24,0x40
    02EB BD88      OUT	0x28,R24
(0016)  ICR1H  = 0x0B;
    02EC E08B      LDI	R24,0xB
    02ED BD87      OUT	0x27,R24
(0017)  ICR1L  = 0x40;
    02EE E480      LDI	R24,0x40
    02EF BD86      OUT	0x26,R24
(0018)  TCCR1A = 0x00;
    02F0 BC2F      OUT	0x2F,R2
(0019)  TCCR1B = 0x04; //start Timer
    02F1 E084      LDI	R24,4
    02F2 BD8E      OUT	0x2E,R24
    02F3 9508      RET
_timer1_ovf_isr:
    02F4 938A      ST	R24,-Y
    02F5 B78F      IN	R24,0x3F
    02F6 938A      ST	R24,-Y
(0020) }
(0021) 
(0022) #pragma interrupt_handler timer1_ovf_isr:9
(0023) void timer1_ovf_isr(void)
(0024) {
(0025)  //TIMER1 has overflowed
(0026)  TCNT1H = 0xF4; //reload counter high value
    02F7 EF84      LDI	R24,0xF4
    02F8 BD8D      OUT	0x2D,R24
(0027)  TCNT1L = 0xC0; //reload counter low value
    02F9 EC80      LDI	R24,0xC0
    02FA BD8C      OUT	0x2C,R24
(0028)  Time.Bz = TRUE; //定时标志置1
    02FB E081      LDI	R24,1
    02FC 93800096  STS	0x96,R24
    02FE 9189      LD	R24,Y+
    02FF BF8F      OUT	0x3F,R24
    0300 9189      LD	R24,Y+
    0301 9518      RETI
(0029) }
(0030) /**************************************************
(0031) *原型:void time1_task(void)
(0032) *功能:20ms中断到置time_s为1
(0033) *说明:利用定时中断去执行任务
(0034) *参数:无
(0035) *返回:无
(0036) **************************************************/
(0037) void Time1Task(void)
(0038)  {
(0039) 	 Time.Bz = FALSE;			//毫秒定时标志清0
_Time1Task:
    0302 2422      CLR	R2
    0303 92200096  STS	0x96,R2
(0040) 	 
(0041) 	 Time.Sec--;
    0305 9180008F  LDS	R24,Time
    0307 5081      SUBI	R24,1
    0308 9380008F  STS	Time,R24
(0042) 	   //LED闪烁
(0043)      LEDCOUNT = LED();
    030A DD5D      RCALL	_LED
    030B 9300008D  STS	LEDCOUNT,R16
(0044) 	 
(0045) 	 if(Time.Mec ++ == 400)//1分钟定时450*120ms
    030D 90200094  LDS	R2,0x94
    030F 90300095  LDS	R3,0x95
    0311 01C1      MOVW	R24,R2
    0312 9601      ADIW	R24,1
    0313 93900095  STS	0x95,R25
    0315 93800094  STS	0x94,R24
    0317 01C1      MOVW	R24,R2
    0318 3980      CPI	R24,0x90
    0319 E0E1      LDI	R30,1
    031A 079E      CPC	R25,R30
    031B F561      BNE	0x0348
(0046) 	  			{
(0047) 				 Time.Mec = NULL;//毫秒计数清
    031C 2422      CLR	R2
    031D 2433      CLR	R3
    031E 92300095  STS	0x95,R3
    0320 92200094  STS	0x94,R2
(0048) 				 if(Time.Min++ == Time.Atd)//如果定时到
    0322 90200092  LDS	R2,Time+3
    0324 90300093  LDS	R3,0x93
    0326 01C1      MOVW	R24,R2
    0327 9601      ADIW	R24,1
    0328 93900093  STS	0x93,R25
    032A 93800092  STS	Time+3,R24
    032C 90400090  LDS	R4,Time+1
    032E 90500091  LDS	R5,Time+2
    0330 1424      CP	R2,R4
    0331 0435      CPC	R3,R5
    0332 F4A9      BNE	0x0348
(0049) 				 			 {
(0050) 							    Time.Min = NULL;//分钟定时清0
    0333 2422      CLR	R2
    0334 2433      CLR	R3
    0335 92300093  STS	0x93,R3
    0337 92200092  STS	Time+3,R2
(0051) 								if((!Busybz)&&(WorkCount>RTEL))//如果在未拔号状态
    0339 90200183  LDS	R2,Busybz
    033B 2022      TST	R2
    033C F459      BNE	0x0348
    033D E082      LDI	R24,2
    033E 90200184  LDS	R2,WorkCount
    0340 1582      CP	R24,R2
    0341 F430      BCC	0x0348
(0052) 							  			   {
(0053) 										     WorkCount = CALLTEL;
    0342 E083      LDI	R24,3
    0343 93800184  STS	WorkCount,R24
(0054) 											 DealTxUartBz = TRUE;//如果未读到电话本,红灯亮
    0345 E081      LDI	R24,1
    0346 9380017E  STS	DealTxUartBz,R24
(0055) 							  			   }
(0056) 							  }
(0057) 				 }
(0058) 	  if(!Time.Sec)//定时到
    0348 9020008F  LDS	R2,Time
    034A 2022      TST	R2
    034B F451      BNE	0x0356
(0059) 				{
(0060) 				
(0061) 				 Time.Sec = timesec; //2秒定时
    034C E184      LDI	R24,0x14
    034D 9380008F  STS	Time,R24
(0062) 				 if(WorkCount < NULLACK)  
    034F 91800184  LDS	R24,WorkCount
    0351 3087      CPI	R24,7
    0352 F418      BCC	0x0356
(0063) 				 				DealTxUartBz = TRUE;//如果未读到电话本,红灯亮
    0353 E081      LDI	R24,1
    0354 9380017E  STS	DealTxUartBz,R24
(0064) 			
(0065) 				 }
    0356 9508      RET
FILE: D:\MEGA8\西门子3508\3508呼死你\main.c
(0001) #include <iom8v.h>
(0002) #include <macros.h>
(0003) #include <eeprom.h>
(0004) #include "uart.h"
(0005) #include "define.h"
(0006) #include "led.h"
(0007) 
(0008) #include "uartnews.h"
(0009) #include "timetask.h"
(0010) 
(0011) /* 工程名称:        呼死你
(0012)  * 日期:   	    06-04-26
(0013)  * 最后修改日期:   06-04-26
(0014)  * 芯片类型:		ATmega 8L
(0015)  * 晶体:			7.3728MHZ
(0016)  * 熔丝位:         8F9F
(0017)  * 锁定位:			00E8
(0018)  * 看门狗:         安全极别2-常开	2.1秒溢出  
(0019)  * 版本:			
(0020)  * 测试说明:       06-04-26测试
(0021) 
(0022) 	   
(0023) /**************************************************
(0024) *原型:void open(void)
(0025) *功能:判断是初次上电,触发开机
(0026) *参数:无
(0027) *返回:无
(0028) *日期:04-12-7
(0029) **************************************************/
(0030) //定义开机脚
(0031) #define OPENBIT  7
(0032) #define RESTKEY	 3
(0033) void open(void)
(0034) {
(0035)    SET_BIT(PORTD,OPENBIT);
_open:
    0357 9A97      SBI	0x12,7
(0036)   
(0037)    delay_ms(2000);
    0358 ED00      LDI	R16,0xD0
    0359 E017      LDI	R17,7
    035A DCF6      RCALL	_delay_ms
(0038) 
(0039)    CLR_BIT(PORTD,OPENBIT);   //开平触低 
    035B 9897      CBI	0x12,7
    035C 9508      RET
(0040) }
(0041) /**************************************************
(0042) *原型:void port_init(void)
(0043) *功能:端口初始化
(0044) *参数:无
(0045) *返回:无
(0046) **************************************************/
(0047) void port_init(void)
(0048) {
(0049)     PORTC = 0X0F;    //PC0-PC38870输入,与按键共用,
_port_init:
    035D E08F      LDI	R24,0xF
    035E BB85      OUT	0x15,R24
(0050) 	DDRC = 0X20;
    035F E280      LDI	R24,0x20
    0360 BB84      OUT	0x14,R24
(0051) 	
(0052) 	PORTB = 0X00;
    0361 2422      CLR	R2
    0362 BA28      OUT	0x18,R2
(0053) 	DDRB = 0X3F;    //PB0-PB2,PB5输出控制,PB3话筒开关,PB4提示声,PB5警声
    0363 E38F      LDI	R24,0x3F
    0364 BB87      OUT	0x17,R24
(0054) 	
(0055) 	DDRD = 0XF6;    //PD0,PD2-AUDIO,PD3输入
    0365 EF86      LDI	R24,0xF6
    0366 BB81      OUT	0x11,R24
(0056) 	PORTD = NULL;  
    0367 BA22      OUT	0x12,R2
(0057) 	
(0058) 	RED_LED;//红灯亮
    0368 9A94      SBI	0x12,4
    0369 9508      RET
(0059) }
(0060) /**************************************************
(0061) *原型:void watchdog_init(void)
(0062) *功能:dog初始化
(0063) *参数:无
(0064) *返回:无
(0065) **************************************************/
(0066) void watchdog_init(void)
(0067) {
(0068)  WDR(); //清dog
_watchdog_init:
    036A 95A8      WDR
(0069)  WDTCR = ( (1<<WDCE) | (1<<WDE) );
    036B E188      LDI	R24,0x18
    036C BD81      OUT	0x21,R24
(0070)  WDTCR = 0x0F; //2.1秒复位
    036D E08F      LDI	R24,0xF
    036E BD81      OUT	0x21,R24
    036F 9508      RET
(0071) }
(0072) /**************************************************
(0073) *原型:void watchdog_task(void)
(0074) *功能:判断是否dog复位,如不是触发手机开机
(0075) *参数:无
(0076) *返回:无
(0077) **************************************************/
(0078) void watchdog_task(void)
(0079) {
(0080)  if(!GET_BIT(MCUCSR , WDRF))//是否dog复位
_watchdog_task:
    0370 B624      IN	R2,0x34
    0371 FC23      SBRC	R2,3
    0372 C001      RJMP	0x0374
(0081)  			 open(); 	
    0373 DFE3      RCALL	_open
    0374 9508      RET
(0082)  }				 
(0083) 
(0084) /**************************************************
(0085) *原型:void init_devices(void)
(0086) *功能:初始化
(0087) *参数:无
(0088) *返回:无
(0089) **************************************************/
(0090) void init_devices(void)
(0091) {   
(0092)     watchdog_init(); //设置WDT
_init_devices:
    0375 DFF4      RCALL	_watchdog_init
(0093)     port_init();     //I/O口定义    
    0376 DFE6      RCALL	_port_init
(0094) 	timer1_init();  
    0377 DF66      RCALL	_timer1_init
(0095) 	InitUART( 23 );   //19.2 to 7.3728M
    0378 E107      LDI	R16,0x17
    0379 DD56      RCALL	_InitUART
(0096) 	Time.Sec = timesec;//定时器赋初值
    037A E184      LDI	R24,0x14
    037B 9380008F  STS	Time,R24
(0097) 	TIMSK = 0X04;//开T1定时
    037D E084      LDI	R24,4
    037E BF89      OUT	0x39,R24
(0098) 	_SEI();	
    037F 9478      BSET	7
    0380 9508      RET
(0099)  }
(0100) /*******************************************/
(0101) void main( void )
(0102) 	{
(0103) 	 delay_ms(100);
_main:
    0381 E604      LDI	R16,0x64
    0382 E010      LDI	R17,0
    0383 DCCD      RCALL	_delay_ms
(0104) 	 init_devices();          //系统初始化
    0384 DFF0      RCALL	_init_devices
(0105)      watchdog_task();         //判 断是否WDT溢出
    0385 DFEA      RCALL	_watchdog_task
(0106)     
(0107) 	 WorkCount = LINE;
    0386 2422      CLR	R2
    0387 92200184  STS	WorkCount,R2
    0389 C012      RJMP	0x039C
(0108) 
(0109) 	 while ( 1 )
(0110) 		{ 
(0111) 		 WDR();
    038A 95A8      WDR
(0112) 		 if(Time.Bz) 		
    038B 90200096  LDS	R2,0x96
    038D 2022      TST	R2
    038E F009      BEQ	0x0390
(0113) 		 			 		 Time1Task();
    038F DF72      RCALL	_Time1Task
(0114) 		 if(DealTxUartBz)     //处理发送缓冲区
    0390 9020017E  LDS	R2,DealTxUartBz
    0392 2022      TST	R2
    0393 F009      BEQ	0x0395
(0115) 		 			         DealTx();
    0394 DEF0      RCALL	_DealTx
(0116) 		 if(DealRxUartBz)	 //处理串口接收缓冲区 
    0395 9020017F  LDS	R2,DealRxUartBz
    0397 2022      TST	R2
    0398 F019      BEQ	0x039C
(0117) 		 					 DealRxBuf(UART_RXHEAD);
FILE: <library>
    0399 91000180  LDS	R16,UART_RXHEAD
    039B DE72      RCALL	_DealRxBuf
    039C CFED      RJMP	0x038A
    039D 9508      RET
empy16s:
    039E 920A      ST	R0,-Y
    039F 921A      ST	R1,-Y
    03A0 938A      ST	R24,-Y
    03A1 939A      ST	R25,-Y
    03A2 9F02      MUL	R16,R18
    03A3 01C0      MOVW	R24,R0
    03A4 9F12      MUL	R17,R18
    03A5 0D90      ADD	R25,R0
    03A6 9F03      MUL	R16,R19
    03A7 0D90      ADD	R25,R0
    03A8 018C      MOVW	R16,R24
    03A9 9199      LD	R25,Y+
    03AA 9189      LD	R24,Y+
    03AB 9019      LD	R1,Y+
    03AC 9009      LD	R0,Y+
    03AD 9508      RET
pop_gset2:
    03AE E0E2      LDI	R30,2
    03AF C010      RJMP	pop
pop_gset3:
    03B0 E0E4      LDI	R30,4
    03B1 C00E      RJMP	pop
pop_gset5:
    03B2 27EE      CLR	R30
    03B3 C00C      RJMP	pop
push_gset5:
    03B4 92FA      ST	R15,-Y
    03B5 92EA      ST	R14,-Y
push_gset4:
    03B6 92DA      ST	R13,-Y
    03B7 92CA      ST	R12,-Y
push_gset3:
    03B8 92BA      ST	R11,-Y
    03B9 92AA      ST	R10,-Y
push_gset2:
    03BA 937A      ST	R23,-Y
    03BB 936A      ST	R22,-Y
push_gset1:
    03BC 935A      ST	R21,-Y
    03BD 934A      ST	R20,-Y
    03BE 9508      RET
pop_gset1:
    03BF E0E1      LDI	R30,1
pop:
    03C0 9149      LD	R20,Y+
    03C1 9159      LD	R21,Y+
    03C2 FDE0      SBRC	R30,0
    03C3 9508      RET
    03C4 9169      LD	R22,Y+
    03C5 9179      LD	R23,Y+
    03C6 FDE1      SBRC	R30,1
    03C7 9508      RET
    03C8 90A9      LD	R10,Y+
    03C9 90B9      LD	R11,Y+
    03CA FDE2      SBRC	R30,2
    03CB 9508      RET
    03CC 90C9      LD	R12,Y+
    03CD 90D9      LD	R13,Y+
    03CE FDE3      SBRC	R30,3
    03CF 9508      RET
    03D0 90E9      LD	R14,Y+
    03D1 90F9      LD	R15,Y+
    03D2 9508      RET

⌨️ 快捷键说明

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