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

📄 gpseep.lst

📁 微程序控制器采用ATMEL AVR MEGA162
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0088) 
(0089) 
(0090) void watchdog_init() 
(0091) { 
(0092)     WDR();
_watchdog_init:
    0234 95A8      WDR
(0093)     WDTCR=0x18;
    0235 E188      LDI	R24,0x18
    0236 BD81      OUT	0x21,R24
(0094)     WDTCR=0x08;//最快复位8,最慢f
    0237 E088      LDI	R24,0x8
    0238 BD81      OUT	0x21,R24
    0239 9508      RET
_main:
  Res                  --> Y+3
  ResSendSucc          --> R20
  num                  --> R20
    023A 9722      SBIW	R28,2
FILE: F:\mydoc\avrproject\icc\big162\gpseep\main.c
(0001) //ICC-AVR application builder : 2007-6-9 11:45:19
(0002) // Target : M162
(0003) // Crystal: 3.6864Mhz
(0004) #include "sci.h"
(0005) 
(0006) #include "modem.h"
(0007) #include <stdlib.h>
(0008) #include <eeprom.h>
(0009) 
(0010) #pragma data:eeprom
(0011) BYTE ip[]="000.000.000.000";
(0012) #pragma data:data
(0013) 
(0014) 
(0015) char * GPRSCommand [] = {
(0016) 	"AT\r",
(0017)     "ATE0\r",//////////
(0018)     "AT+CGDCONT=1,\"IP\",\"CMWAP\"\r",
(0019)     "AT%CGPCO=1,\"PAP,,\",1\r", 
(0020) 	//"AT$DESTINFO=\"218.6.64.240\",2,80\r",//UDP 2 TCP 1
(0021) 	"AT$NOSLEEP=1\r"
(0022) };
(0023) 
(0024) BYTE IPADD[]="000.000.000.000";
(0025) BYTE *p_IPADD=IPADD;
(0026) BYTE CC=0;
(0027) void conGPRS(void);
(0028) void init_devices(void);
(0029) void iniGPS(void);
(0030) 
(0031) void main(void)
(0032) {
(0033)     BYTE num;
(0034) 	BYTE Res;
(0035) 	BYTE ResSendSucc=1;
    023B E041      LDI	R20,1
(0036) 	
(0037) 	init_devices();    
    023C 940E0189  CALL	_init_devices
(0038)     timer1_init();
    023E 940E021A  CALL	_timer1_init
(0039)     initTimer2();
    0240 940E01F3  CALL	_initTimer2
(0040)     WriteCommStr0("start");
    0242 E40E      LDI	R16,0x4E
    0243 E012      LDI	R17,2
    0244 940E03D6  CALL	_WriteCommStr0
(0041) 	
(0042) 	ModemInit();
    0246 940E034B  CALL	_ModemInit
(0043) 	if(Waitfor ("ip", 250)){
    0248 EF2A      LDI	R18,0xFA
    0249 E40B      LDI	R16,0x4B
    024A E012      LDI	R17,2
    024B 940E0362  CALL	_Waitfor
    024D 2300      TST	R16
    024E F1A9      BEQ	0x0284
(0044) 		WriteCommStr0("input ip add end with ;");
    024F E303      LDI	R16,0x33
    0250 E012      LDI	R17,2
    0251 940E03D6  CALL	_WriteCommStr0
(0045) 		UCSR0B &= ~(1<<RXCIE0);//stop u0 int
    0253 9857      CBI	0x0A,7
    0254 C009      RJMP	0x025E
(0046) 		while((num=ReadComm0())!=';'){
(0047) 			*p_IPADD++=num;
    0255 91E0018D  LDS	R30,p_IPADD
    0257 91F0018E  LDS	R31,p_IPADD+1
    0259 9341      ST	R20,Z+
    025A 93F0018E  STS	p_IPADD+1,R31
    025C 93E0018D  STS	p_IPADD,R30
    025E 940E03E6  CALL	_ReadComm0
    0260 2F40      MOV	R20,R16
    0261 334B      CPI	R20,0x3B
    0262 F791      BNE	0x0255
(0048) 		}
(0049) 		*p_IPADD=0;
    0263 2422      CLR	R2
    0264 91E0018D  LDS	R30,p_IPADD
    0266 91F0018E  LDS	R31,p_IPADD+1
    0268 8220      STD	Z+0,R2
(0050) 		EEPROM_WRITE((int)ip,IPADD);
    0269 E180      LDI	R24,0x10
    026A E090      LDI	R25,0
    026B 8399      STD	Y+1,R25
    026C 8388      STD	Y+0,R24
    026D E72D      LDI	R18,0x7D
    026E E031      LDI	R19,1
    026F E001      LDI	R16,1
    0270 E010      LDI	R17,0
    0271 940E04BA  CALL	_EEPROMWriteBytes
(0051) 		WriteCommStr0("\nyou ip is:");
    0273 E207      LDI	R16,0x27
    0274 E012      LDI	R17,2
    0275 940E03D6  CALL	_WriteCommStr0
(0052) 		WriteCommStr0(IPADD);
    0277 E70D      LDI	R16,0x7D
    0278 E011      LDI	R17,1
    0279 940E03D6  CALL	_WriteCommStr0
(0053) 		WriteCommStr0("\nturn switch to gps mode\n");
    027B E00D      LDI	R16,0xD
    027C E012      LDI	R17,2
    027D 940E03D6  CALL	_WriteCommStr0
(0054) 		UCSR0B |= (1<<RXCIE0);//start u0 int
    027F 9A57      SBI	0x0A,7
(0055) 		DelayMORE(100);
    0280 E604      LDI	R16,0x64
    0281 940E01B2  CALL	_DelayMORE
(0056) 	}else{
    0283 C011      RJMP	0x0295
(0057) 		EEPROM_READ((int)ip,IPADD);	
    0284 E180      LDI	R24,0x10
    0285 E090      LDI	R25,0
    0286 8399      STD	Y+1,R25
    0287 8388      STD	Y+0,R24
    0288 E72D      LDI	R18,0x7D
    0289 E031      LDI	R19,1
    028A E001      LDI	R16,1
    028B E010      LDI	R17,0
    028C 940E0496  CALL	_EEPROMReadBytes
(0058) 		WriteCommStr0("config time has pass");
    028E EF08      LDI	R16,0xF8
    028F E011      LDI	R17,1
    0290 940E03D6  CALL	_WriteCommStr0
(0059) 		DelayMORE(10);
    0292 E00A      LDI	R16,0xA
    0293 940E01B2  CALL	_DelayMORE
(0060) 	}
(0061)     
(0062) 	WriteCommStr0("\nif you have not turn switch ,you must restart device");
    0295 EC02      LDI	R16,0xC2
    0296 E011      LDI	R17,1
    0297 940E03D6  CALL	_WriteCommStr0
(0063) 	WriteCommStr0("at\r");
    0299 EB0E      LDI	R16,0xBE
    029A E011      LDI	R17,1
    029B 940E03D6  CALL	_WriteCommStr0
(0064) 	conGPRS();
    029D D03A      RCALL	_conGPRS
(0065) 	DelayMORE(50);
    029E E302      LDI	R16,0x32
    029F 940E01B2  CALL	_DelayMORE
(0066) 	WriteCommStr0 ("ATD*97#\r");
    02A1 EB05      LDI	R16,0xB5
    02A2 E011      LDI	R17,1
    02A3 940E03D6  CALL	_WriteCommStr0
(0067) 	ModemInit();
    02A5 940E034B  CALL	_ModemInit
(0068) 	iniGPS();
    02A7 940E0146  CALL	_iniGPS
    02A9 C013      RJMP	0x02BD
(0069) 	while(!Waitfor ("en", 254)){ // Wait for OK	
(0070) 		//WriteCommStr0 ("ATD*97#\r");
(0071) 		if(Waitfor ("CAR",50)){
    02AA E322      LDI	R18,0x32
    02AB EA0E      LDI	R16,0xAE
    02AC E011      LDI	R17,1
    02AD 940E0362  CALL	_Waitfor
    02AF 2300      TST	R16
    02B0 F009      BEQ	0x02B2
(0072) 			conGPRS();
    02B1 D026      RCALL	_conGPRS
(0073) 		}
(0074) 		if(CC++>3)
    02B2 9020018F  LDS	R2,CC
    02B4 2433      CLR	R3
    02B5 2D82      MOV	R24,R2
    02B6 5F8F      SUBI	R24,0xFF
    02B7 9380018F  STS	CC,R24
    02B9 E083      LDI	R24,3
    02BA 1582      CP	R24,R2
    02BB F408      BCC	0x02BD
(0075) 			break;
    02BC C007      RJMP	0x02C4
    02BD EF2E      LDI	R18,0xFE
    02BE EB02      LDI	R16,0xB2
    02BF E011      LDI	R17,1
    02C0 940E0362  CALL	_Waitfor
    02C2 2300      TST	R16
    02C3 F331      BEQ	0x02AA
(0076) 	}
(0077) 	DelayMORE(50);
    02C4 E302      LDI	R16,0x32
    02C5 940E01B2  CALL	_DelayMORE
    02C7 C00D      RJMP	0x02D5
(0078)     while(1)
(0079)     {      
(0080) 		UCSR1B |= (1<<RXCIE1);
    02C8 9A0F      SBI	0x01,7
(0081) 		DelayMORE(100);
    02C9 E604      LDI	R16,0x64
    02CA 940E01B2  CALL	_DelayMORE
(0082) 		UCSR1B &= ~(1<<RXCIE1);
    02CC 980F      CBI	0x01,7
(0083) 		if(Waitfor ("CAR",50)){
    02CD E322      LDI	R18,0x32
    02CE EA0E      LDI	R16,0xAE
    02CF E011      LDI	R17,1
    02D0 940E0362  CALL	_Waitfor
    02D2 2300      TST	R16
    02D3 F009      BEQ	0x02D5
(0084) 			conGPRS();
    02D4 D003      RCALL	_conGPRS
    02D5 CFF2      RJMP	0x02C8
    02D6 9622      ADIW	R28,2
    02D7 9508      RET
_conGPRS:
  Res                  --> R20
  index                --> R22
    02D8 940E0430  CALL	push_gset2
(0085) 		}
(0086)     }
(0087) }
(0088) 
(0089) void conGPRS(){
(0090) 	BYTE index ;
(0091) 	BYTE Res = 0 ;
    02DA 2744      CLR	R20
(0092) 	for (index = 0; index <= 4; index++) 
    02DB 2766      CLR	R22
    02DC C023      RJMP	0x0300
(0093)     { 
(0094) 		WriteCommStr0 (GPRSCommand [index]);
    02DD E082      LDI	R24,2
    02DE 9F86      MUL	R24,R22
    02DF 01F0      MOVW	R30,R0
    02E0 E783      LDI	R24,0x73
    02E1 E091      LDI	R25,1
    02E2 0FE8      ADD	R30,R24
    02E3 1FF9      ADC	R31,R25
    02E4 8100      LDD	R16,Z+0
    02E5 8111      LDD	R17,Z+1
    02E6 940E03D6  CALL	_WriteCommStr0
(0095) 		
(0096) 		Res = Waitfor ("OK", 50); // Wait for OK	
    02E8 E322      LDI	R18,0x32
    02E9 EA0B      LDI	R16,0xAB
    02EA E011      LDI	R17,1
    02EB 940E0362  CALL	_Waitfor
    02ED 2F40      MOV	R20,R16
(0097) 		DelayMORE(30);//40
    02EE E10E      LDI	R16,0x1E
    02EF 940E01B2  CALL	_DelayMORE
(0098) 		if (!Res)
    02F1 2344      TST	R20
    02F2 F461      BNE	0x02FF
(0099)    		{ 
(0100)        		ModemInit (); 
    02F3 940E034B  CALL	_ModemInit
(0101)           	index = 0;
    02F5 2766      CLR	R22
(0102) 			WriteCommStr0("ATH\r");
    02F6 EA06      LDI	R16,0xA6
    02F7 E011      LDI	R17,1
    02F8 940E03D6  CALL	_WriteCommStr0
(0103) 			Waitfor ("OK", 30);
    02FA E12E      LDI	R18,0x1E
    02FB EA0B      LDI	R16,0xAB
    02FC E011      LDI	R17,1
    02FD 940E0362  CALL	_Waitfor
    02FF 9563      INC	R22
    0300 E084      LDI	R24,4
    0301 1786      CP	R24,R22
    0302 F6D0      BCC	0x02DD
(0104)        	}     
(0105)     }
(0106) 	WriteCommStr0 ("AT$DESTINFO=\"");
    0303 E908      LDI	R16,0x98
    0304 E011      LDI	R17,1
    0305 940E03D6  CALL	_WriteCommStr0
(0107) 	WriteCommStr0 (IPADD);
    0307 E70D      LDI	R16,0x7D
    0308 E011      LDI	R17,1
    0309 940E03D6  CALL	_WriteCommStr0
(0108) 	WriteCommStr0 ("\",2,80\r");
    030B E900      LDI	R16,0x90
    030C E011      LDI	R17,1
    030D 940E03D6  CALL	_WriteCommStr0
    030F 940E0424  CALL	pop_gset2
    0311 9508      RET
FILE: F:\mydoc\avrproject\icc\big162\gpseep\modem.c
(0001) #include "Modem.h"
(0002) 
(0003) #include "sci.h"
(0004) #include <string.h>
(0005) #define MODEM_BUFFER_SIZE 250 // Size of Modem Buffer
(0006) BYTE InBuffer[256];
(0007) 
(0008) BYTE OutBuffer[10];
(0009) 
(0010) BYTE *In = &InBuffer[0];
(0011) BYTE *Out = &OutBuffer[0];
(0012) 
(0013) // Byte pointers of the ring buffer (FIFO)
(0014) volatile BYTE mDataSlot = 0; // Points to the next available character
(0015) volatile BYTE mEmptySlot = 0; // Points to next available slot of the FIFO
(0016) volatile BYTE mTest = 0;
(0017) volatile BYTE oTest = 0;
(0018) volatile BYTE firstTest = 0;
(0019) volatile BYTE isAdd = 0;
(0020) void addoid(void);
(0021) void strtob(void);
(0022) BYTE *ModemBuffer = &InBuffer[0];
(0023) extern BYTE *pordid;
(0024) extern BYTE ordidStr[];
(0025) extern BYTE looptimeStr[];
(0026) extern BYTE *plooptime;
(0027) 
(0028) extern DWORD ii,kk;
(0029) 
(0030) void ProcModemReceive (BYTE c)
(0031) {
(0032) 	ModemBuffer [mEmptySlot++] = c;
_ProcModemReceive:
  c                    --> R16
    0312 902002A2  LDS	R2,mEmptySlot
    0314 2433      CLR	R3
    0315 2D82      MOV	R24,R2
    0316 5F8F      SUBI	R24,0xFF
    0317 938002A2  STS	mEmptySlot,R24
    0319 904002A7  LDS	R4,ModemBuffer
    031B 905002A8  LDS	R5,ModemBuffer+1
    031D 2DE2      MOV	R30,R2
    031E 27FF      CLR	R31
    031F 0DE4      ADD	R30,R4
    0320 1DF5      ADC	R31,R5
    0321 8300      STD	Z+0,R16
(0033) 	if (mEmptySlot > MODEM_BUFFER_SIZE) {
    0322 EF8A      LDI	R24,0xFA
    0323 902002A2  LDS	R2,mEmptySlot
    0325 1582      CP	R24,R2
    0326 F418      BCC	0x032A
(0034) 		mEmptySlot = 0;
    0327 2422      CLR	R2
    0328 922002A2  STS	mEmptySlot,R2
(0035)   	}
(0036)     if(c == '['){
    032A 350B      CPI	R16,0x5B
    032B F421      BNE	0x0330
(0037)     	firstTest=1;
    032C E081      LDI	R24,1
    032D 938002A5  STS	firstTest,R24
(0038)         return;
    032F C01A      RJMP	0x034A
(0039)     }else if(c == ']'){
    0330 350D      CPI	R16,0x5D
    0331 F421      BNE	0x0336
(0040)     	mTest=0;
    0332 2422      CLR	R2
    0333 922002A3  STS	mTest,R2
(0041)         return;
    0335 C014      RJMP	0x034A
(0042)     }else if(firstTest==1){
    0336 918002A5  LDS	R24,firstTest
    0338 3081      CPI	R24,1
    0339 F461      BNE	0x0346
(0043)     	if(c == '$'){
    033A 3204      CPI	R16,0x24
    033B F439      BNE	0x0343
(0044)         	mTest=1;
    033C E081      LDI	R24,1
    033D 938002A3  STS	mTest,R24
(0045)             firstTest=0;
    033F 2422      CLR	R2
    0340 922002A5  STS	firstTest,R2
(0046)             return;
    0342 C007      RJMP	0x034A
(0047)         }else{
(0048)         	firstTest=0;
    0343 2422      CLR	R2
    0344 922002A5  STS	firstTest,R2
(0049)         }
(0050)     }
(0051)     
(0052)     if(mTest){
    0346 902002A3  LDS	R2,mTest
    0348 2022      TST	R2
    0349 F001      BEQ	0x034A
(0053)     	
(0054)     }
    034A 9508      RET
(0055) }
(0056) 
(0057) void ModemInit (void)
(0058) {
(0059)     mDataSlot = 0; // Initialize FIFO Modem pointers
_ModemInit:
    034B 2422      CLR	R2
    034C 922002A1  STS	mDataSlot,R2
(0060) 	mEmptySlot = 0;
    034E 922002A2  STS	mEmptySlot,R2
    0350 9508      RET
(0061)   
(0062) }
(0063) 
(0064) BYTE ModemBuffNotEmpty (void)
(0065) {
(0066) 	return !(mDataSlot == mEmptySlot);
_ModemBuffNotEmpty:
    0351 902002A2  LDS	R2,mEmptySlot
    0353 903002A1  LDS	R3,mDataSlot
    0355 1432      CP	R3,R2
    0356 F019      BEQ	0x035A
    0357 E001      LDI	R16,1
    0358 E010      LDI	R17,0
    0359 C002      RJMP	0x035C
    035A 2700      CLR	R16
    035B 2711      CLR	R17
    035C 9508      RET
(0067) }
(0068) 
(0069) 
(0070) void ModemBuffFlush (void)
(0071) {
(0072) 	mDataSlot = mEmptySlot;
_ModemBuffFlush:
    035D 902002A2  LDS	R2,mEmptySlot
    035F 922002A1  STS	mDataSlot,R2
    0361 9508      RET
_Waitfor:
  c                    --> R20
  Offset               --> R22
  Time                 --> R10
  String               --> R12
    0362 940E042C  CALL	push_gset4
    0364 2EA2      MOV	R10,R18
    0365 0168      MOVW	R12,R16
(0073) }
(0074) 
(0075) 
(0076) 
(0077) BYTE Waitfor (char *String, BYTE Time)
(0078) {
(0079) 	BYTE c = 0;
    0366 2744      CLR	R20
(0080) 	BYTE Offset = 0;
    0367 2766      CLR	R22
    0368 C01B      RJMP	0x0384
(0081)    
(0082)     while (Time-- > 0) 
(0083) 	{
(0084) 		DelayM (100);          // Wait =~ 150 mSec
    0369 E604      LDI	R16,0x64
    036A 940E01A0  CALL	_DelayM
    036C C014      RJMP	0x0381
(0085)     	while (ModemBuffNotEmpty())
(0086) 		{          // Wait for characters
(0087)     		c = ModemGetch ();          // Extract a character from FIFO
    036D D022      RCALL	_ModemGetch
    036E 2F40      MOV	R20,R16
(0088)     		if (c == String [Offset]) 
    036F 2FE6      MOV	R30,R22
    0370 27FF      CLR	R31
    0371 0DEC      ADD	R30,R12
    0372 1DFD      ADC	R31,R13
    0373 8020      LDD	R2,Z+0
    0374 1502      CP	R16,R2
    0375 F451      BNE	0x0380
(0089) 			{     // Is C a part of the string?
(0090)     			Offset++;          // Compare with next character
    0376 9563      INC	R22
(0091)     			if (String [Offset] == 0)
    0377 2FE6      MOV	R30,R22
    0378 27FF      CLR	R31
    0379 0DEC      ADD	R30,R12
    037A 1DFD      ADC	R31,R13
    037B 8020      LDD	R2,Z+0
    037C 2022      TST	R2
    037D F419      BNE	0x0381
(0092) 				{ // is this the end of string?
(0093)            			return True; // match = True
    037E E001      LDI	R16,1
    037F C00D      RJMP	0x038D
(0094)     			}
(0095)     		}
(0096)     		else // c does not belong to String
(0097)     		Offset = 0; // Reset String pointer
    0380 2766      CLR	R22

⌨️ 快捷键说明

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