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

📄 呼死你.lst

📁 基于单片机的短信报警机
💻 LST
📖 第 1 页 / 共 4 页
字号:
__start:
__text_start:
    0029 E5CF      LDI	R28,0x5F
    002A E0D4      LDI	R29,4
    002B BFCD      OUT	0x3D,R28
    002C BFDE      OUT	0x3E,R29
    002D 51C0      SUBI	R28,0x10
    002E 40D0      SBCI	R29,0
    002F EA0A      LDI	R16,0xAA
    0030 8308      STD	Y+0,R16
    0031 2400      CLR	R0
    0032 E8EC      LDI	R30,0x8C
    0033 E0F0      LDI	R31,0
    0034 E011      LDI	R17,1
    0035 38E5      CPI	R30,0x85
    0036 07F1      CPC	R31,R17
    0037 F011      BEQ	0x003A
    0038 9201      ST	R0,Z+
    0039 CFFB      RJMP	0x0035
    003A 8300      STD	Z+0,R16
    003B E2E6      LDI	R30,0x26
    003C E0F0      LDI	R31,0
    003D E6A0      LDI	R26,0x60
    003E E0B0      LDI	R27,0
    003F E010      LDI	R17,0
    0040 35E2      CPI	R30,0x52
    0041 07F1      CPC	R31,R17
    0042 F021      BEQ	0x0047
    0043 95C8      LPM
    0044 9631      ADIW	R30,1
    0045 920D      ST	R0,X+
    0046 CFF9      RJMP	0x0040
    0047 D339      RCALL	_main
_exit:
    0048 CFFF      RJMP	_exit
FILE: D:\MEGA8\西门子3508\3508呼死你\define.h
(0001) 
(0002) #define NULL 0
(0003) #define FALSE 0
(0004) #define TRUE 1
(0005) //定义接收缓冲区的长度
(0006) #define UARTRXLEN 200
(0007) #define TELLEN	  30
(0008) //时间长度不超过4位(0-9999)分钟
(0009) //命令编号
(0010) #define LINE     0
(0011) //
(0012) #define SETUPTEL 1
(0013) #define RTEL	 2
(0014) 
(0015) #define CALLTEL	 3
(0016) 
(0017) #define GET		 4
(0018) #define RINGOFF  5
(0019) #define QUERY	 6
(0020) #define NULLACK	 7
(0021) //------------------------
(0022) #define SET_BIT(X,Y) (X|=(1<<Y))
(0023) #define CLR_BIT(X,Y) (X&=~(1<<Y))
(0024) #define GET_BIT(X,Y) (X&(1<<Y))
(0025) #define XOR_BIT(X,Y) (X^=(1<<Y))
(0026) 
(0027) //定时
(0028) #define timesec 20      //2s
(0029) 
(0030) #define time3sec 30
(0031) 
(0032) #define LEDON SET_BIT(PORTB,5)
(0033) #define LEDOFF CLR_BIT(PORTB,5)
(0034) 
(0035) /* Static Variables */
(0036) typedef unsigned char uchar;
(0037) typedef unsigned int uint;
(0038) 
(0039) unsigned char WorkCount;						//工作指示
(0040) static unsigned char Busybz;
(0041) unsigned char *pir;	   							//指针
(0042) static unsigned char UART_RXHEAD;				//接收计数器
(0043) static unsigned char DealRxUartBz;				//串口接收处理标志
(0044) static unsigned char DealTxUartBz;	  		    //串口发送标志
(0045) 
(0046) static unsigned char TelBuf[TELLEN+1];		    //电话本缓冲区
(0047) 
(0048) //
(0049) union
(0050) 	 {
(0051) 	   uchar Buf[UARTRXLEN];    		    //定义接收缓冲区
(0052) 	   struct
(0053) 			 	   {
(0054) 				    uchar sd[100];
(0055) 					uchar Temp[100];
(0056) 				   }ch;
(0057) 	 }Uart;
(0058) //时间定时器
(0059) struct 
(0060) {
(0061)     unsigned char Sec;  			     //分钟计数器  
(0062) 	unsigned int Atd;				 //拔号定时0-9999分钟,0为不定时
(0063) 	unsigned int Min;				 //分钟
(0064) 	unsigned int Mec;				 //分
(0065) 	uchar Bz;          			   	 //毫秒定时到标志置1
(0066)  }Time;
(0067) 
(0068)    																		
(0069) 
(0070) void delay_us(int time)
(0071) 	 {     
(0072)   	  do
(0073) 	  	{
(0074) 		 time--;
_delay_us:
  time                 --> R16
    0049 5001      SUBI	R16,1
    004A 4010      SBCI	R17,0
(0075) 		}	
(0076)   	  while (time>1);
    004B E081      LDI	R24,1
    004C E090      LDI	R25,0
    004D 1780      CP	R24,R16
    004E 0791      CPC	R25,R17
    004F F3CC      BLT	0x0049
    0050 9508      RET
_delay_ms:
  time                 --> R20
    0051 D36A      RCALL	push_gset1
    0052 01A8      MOVW	R20,R16
(0077) 	 }	  
(0078) /*	  	 毫秒级延时程序	*/	 
(0079) void delay_ms(unsigned int time)
(0080) 	 {
    0053 C006      RJMP	0x005A
(0081) 	  while(time!=NULL)
(0082) 	  	  {	
(0083) 		   WDR();	
    0054 95A8      WDR
(0084) 		   delay_us(825);
    0055 E309      LDI	R16,0x39
    0056 E013      LDI	R17,3
    0057 DFF1      RCALL	_delay_us
(0085) 		   time--;
    0058 5041      SUBI	R20,1
    0059 4050      SBCI	R21,0
    005A 3040      CPI	R20,0
    005B 0745      CPC	R20,R21
    005C F7B9      BNE	0x0054
    005D D361      RCALL	pop_gset1
    005E 9508      RET
FILE: D:\MEGA8\西门子3508\3508呼死你\led.h
(0001) //灯控制
(0002) #define RBIT 4
(0003) #define GBIT 5
(0004) #define RED_LED SET_BIT(PORTD,RBIT)
(0005) #define GREEN_LED SET_BIT(PORTD,GBIT)
(0006) #define CLOSE_LED {CLR_BIT(PORTD,RBIT);CLR_BIT(PORTD,GBIT);}
(0007) 
(0008) static unsigned char raybz;                     //灯指示
(0009) static unsigned char LEDCOUNT;					//灯任务器
(0010) /*********************************************
(0011) *原型:void ray_led(void)
(0012) *功能:灯指示,
(0013) *参数:无
(0014) *返回:
(0015) **********************************************/
(0016) void ray_led(void)
(0017) {
(0018)  raybz = TRUE;
_ray_led:
    005F E081      LDI	R24,1
    0060 9380008E  STS	raybz,R24
(0019)  CLOSE_LED;
    0062 9894      CBI	0x12,4
    0063 9895      CBI	0x12,5
(0020)  LEDCOUNT=6;
    0064 E086      LDI	R24,6
    0065 9380008D  STS	LEDCOUNT,R24
    0067 9508      RET
(0021)  }
(0022) /*********************************************
(0023) *原型:unsigned char LED(void)
(0024) *功能:灯指示,根据各种状态指示灯工作,500ms闪烁一次
(0025) *参数:无
(0026) *返回:LEDCOUNT
(0027) **********************************************/
(0028) unsigned char LED(void)
(0029) {
(0030)  static unsigned char led1;
(0031)  switch(LEDCOUNT)
_LED:
    0068 9100008D  LDS	R16,LEDCOUNT
    006A 2711      CLR	R17
    006B 3000      CPI	R16,0
    006C 0701      CPC	R16,R17
    006D F0E9      BEQ	0x008B
    006E 3001      CPI	R16,1
    006F E0E0      LDI	R30,0
    0070 071E      CPC	R17,R30
    0071 F141      BEQ	0x009A
    0072 3002      CPI	R16,2
    0073 E0E0      LDI	R30,0
    0074 071E      CPC	R17,R30
    0075 F149      BEQ	0x009F
    0076 3003      CPI	R16,3
    0077 E0E0      LDI	R30,0
    0078 071E      CPC	R17,R30
    0079 F151      BEQ	0x00A4
    007A 3004      CPI	R16,4
    007B E0E0      LDI	R30,0
    007C 071E      CPC	R17,R30
    007D F159      BEQ	0x00A9
    007E 3005      CPI	R16,5
    007F E0E0      LDI	R30,0
    0080 071E      CPC	R17,R30
    0081 F159      BEQ	0x00AD
    0082 3006      CPI	R16,6
    0083 E0E0      LDI	R30,0
    0084 071E      CPC	R17,R30
    0085 F161      BEQ	0x00B2
    0086 3007      CPI	R16,7
    0087 E0E0      LDI	R30,0
    0088 071E      CPC	R17,R30
    0089 F159      BEQ	0x00B5
    008A C044      RJMP	0x00CF
(0032)  			{
(0033) 			case 0: //在打电话红灯闪烁
(0034) 				    if(Busybz) 
    008B 90200183  LDS	R2,Busybz
    008D 2022      TST	R2
    008E F011      BEQ	0x0091
(0035) 							   return 1;//在忙状态红灯闪烁
    008F E001      LDI	R16,1
    0090 C03E      RJMP	0x00CF
(0036) 				
(0037) 					//连接时橙灯闪烁
(0038) 					else if(WorkCount <= RTEL) 
    0091 E082      LDI	R24,2
    0092 90200184  LDS	R2,WorkCount
    0094 1582      CP	R24,R2
    0095 F010      BCS	0x0098
(0039) 						 		return 4;
    0096 E004      LDI	R16,4
    0097 C037      RJMP	0x00CF
(0040) 
(0041) 					else 
(0042) 						 	    return 3;//绿灯亮
    0098 E003      LDI	R16,3
    0099 C035      RJMP	0x00CF
(0043) 	        case 1: 
(0044) 				 	CLOSE_LED;//红灯闪烁
    009A 9894      CBI	0x12,4
    009B 9895      CBI	0x12,5
(0045) 				 	RED_LED;
    009C 9A94      SBI	0x12,4
(0046) 				    return 6;
    009D E006      LDI	R16,6
    009E C030      RJMP	0x00CF
(0047) 			case 2: 
(0048) 				 	CLOSE_LED;//红灯亮
    009F 9894      CBI	0x12,4
    00A0 9895      CBI	0x12,5
(0049) 				 	RED_LED	;	
    00A1 9A94      SBI	0x12,4
(0050) 					return 0;
    00A2 2700      CLR	R16
    00A3 C02B      RJMP	0x00CF
(0051) 			case 3: 
(0052) 				 	CLOSE_LED;//绿灯闪烁
    00A4 9894      CBI	0x12,4
    00A5 9895      CBI	0x12,5
(0053) 				 	GREEN_LED;
    00A6 9A95      SBI	0x12,5
(0054) 					return 6;
    00A7 E006      LDI	R16,6
    00A8 C026      RJMP	0x00CF
(0055) 			case 4:
(0056) 			        RED_LED;//橙灯亮
    00A9 9A94      SBI	0x12,4
(0057) 				    GREEN_LED;
    00AA 9A95      SBI	0x12,5
(0058) 					return 6;
    00AB E006      LDI	R16,6
    00AC C022      RJMP	0x00CF
(0059) 		    case 5: 
(0060) 				 	CLOSE_LED;//绿灯亮
    00AD 9894      CBI	0x12,4
    00AE 9895      CBI	0x12,5
(0061) 				    GREEN_LED;
    00AF 9A95      SBI	0x12,5
(0062) 					return 0;
    00B0 2700      CLR	R16
    00B1 C01D      RJMP	0x00CF
(0063) 			case 6: 
(0064) 				 	led1 = 5;//500ms闪烁一次
    00B2 E085      LDI	R24,5
    00B3 9380008C  STS	led1,R24
(0065) 	        case 7:
(0066) 					if(led1--)
    00B5 9020008C  LDS	R2,led1
    00B7 2433      CLR	R3
    00B8 2D82      MOV	R24,R2
    00B9 5081      SUBI	R24,1
    00BA 9380008C  STS	led1,R24
    00BC 2022      TST	R2
    00BD F011      BEQ	0x00C0
(0067) 							 return 7;
    00BE E007      LDI	R16,7
    00BF C00F      RJMP	0x00CF
(0068) 				    if(!raybz)
    00C0 9020008E  LDS	R2,raybz
    00C2 2022      TST	R2
    00C3 F439      BNE	0x00CB
(0069) 							  {
(0070) 							   raybz = TRUE;
    00C4 E081      LDI	R24,1
    00C5 9380008E  STS	raybz,R24
(0071) 				               CLOSE_LED;
    00C7 9894      CBI	0x12,4
    00C8 9895      CBI	0x12,5
(0072) 				               return 6;
    00C9 E006      LDI	R16,6
    00CA C004      RJMP	0x00CF
(0073) 							   }
(0074) 					else	  {
(0075) 							   raybz = FALSE;
    00CB 2422      CLR	R2
    00CC 9220008E  STS	raybz,R2
(0076) 							   return 0;
    00CE 2700      CLR	R16
    00CF 9508      RET
FILE: D:\MEGA8\西门子3508\3508呼死你\uartnews.h
(0001) 
(0002) void ReDial(void);
(0003) /**************************************************
(0004) *原型:void InitUART( unsigned char baudrate )
(0005) *功能:串口初始化,19.2k,一个字节520.8US
(0006) *参数:unsigned char baudrat
(0007) *返回:无
(0008) **************************************************/
(0009) void InitUART( unsigned char baudrate )
(0010) 	{
(0011) 	UBRR = baudrate; //19.2k
_InitUART:
  baudrate             --> R16
    00D0 B909      OUT	0x09,R16
(0012) 	UCSRB = ( (1<<RXCIE) | (1<<RXEN) | (1<<TXEN) );//接收中断开,接收口开,发送口开
    00D1 E988      LDI	R24,0x98
    00D2 B98A      OUT	0x0A,R24
(0013)     UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);//8位数据+1位STOP位
    00D3 E886      LDI	R24,0x86
    00D4 BD80      OUT	0x20,R24
    00D5 9508      RET
(0014) 	}   
(0015) /*************************************************
(0016) *原型:void UART_TX_interrupt(void)
(0017) *功能:初始化,执行任务
(0018) *说明:无
(0019) *参数:无
(0020) *返回:无
(0021) **************************************************/
(0022) /*  		字符输出函数 		 */
(0023) void putchar(unsigned char c)
(0024) 	{	 
(0025)      while (!GET_BIT(UCSRA,UDRE)) ;
_putchar:
  c                    --> R16
    00D6 9B5D      SBIS	0x0B,5
    00D7 CFFE      RJMP	_putchar
(0026) 	 
(0027) 	 UDR=c;    
    00D8 B90C      OUT	0x0C,R16
    00D9 9508      RET
_puts:
  s                    --> R20
    00DA D2E1      RCALL	push_gset1
    00DB 01A8      MOVW	R20,R16
(0028) 	}
(0029) 
(0030) /*			字符串输出函数	   	 */
(0031) void puts(char *s)
(0032) 	{
    00DC C005      RJMP	0x00E2
(0033) 	while (*s)
(0034) 		{
(0035) 		putchar(*s);
    00DD 01FA      MOVW	R30,R20
    00DE 8100      LDD	R16,Z+0
    00DF DFF6      RCALL	_putchar
(0036) 		s++;
    00E0 5F4F      SUBI	R20,0xFF
    00E1 4F5F      SBCI	R21,0xFF
    00E2 01FA      MOVW	R30,R20
    00E3 8020      LDD	R2,Z+0
    00E4 2022      TST	R2
    00E5 F7B9      BNE	0x00DD

⌨️ 快捷键说明

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