📄 gpseep.lst
字号:
(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 + -