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

📄 main.lst

📁 单片机通过控制SIM300C 短信模块读GPS 数据
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.10   MAIN                                                                  05/03/2007 10:20:04 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAIN.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /* IO 口模拟232通讯程序
   2          使用两种方式的C程序 占用定时器0
   3          **********************************************/
   4          #include <ctype.h>
   5          #include <reg51.h>
   6          #include <stdio.h>
   7          #include <string.h>
   8          #define DEBUG_SMS
   9          
  10          #define byte unsigned char
  11          extern void sector_erase(unsigned short int dataAddr);
  12          extern void byte_program(unsigned short int dataAddr, unsigned char dataByte);
  13          extern unsigned char byte_verify(unsigned short int dataAddr);
  14          extern bit sendSMS(byte *telnum, byte  *STRING);
  15          extern bit getAck(byte Len,byte *getData);
  16          extern void deleSMS(byte *POINT);
  17          byte gsmDecode7bit(unsigned char* pSrc, char* pDst, byte nSrcLength);
  18          pdata byte pData[256];
  19          sbit BT_SND =P1^7;
  20          sbit BT_REC =P1^6;
  21          
  22          //sbit BT_SND =P3^1;
  23          //sbit BT_REC =P3^0;
  24          //sbit LED_RED =P1^1;
  25          
  26          
  27          
  28          typedef struct{         
  29                          byte Index[4];          //短消息索引
  30                          byte TelNum[16];
  31                          byte Ref[20];
  32                          byte SMS_text[100];
  33                  
  34                  }SMS_INFO;
  35                  
  36          
  37          
  38          
  39          byte    RxFlag=0;                                                       
  40          byte    RecTimeOut=0;   
  41          byte    RecStatus=0;    
  42          byte    RxCount=0;              
  43          bit             SMS_TYPE;
  44          // 设置接收短信的手机号
  45          //6
  46          //code  byte Owner[]="Owner";
  47          
  48          // 更改密码
  49          //code  byte Password[]="Password";
  50          
  51          //取信息
  52          //code  byte GetMessage[]="Get Message";
  53          
  54          code    byte ACK_OK[]={'O','K',0X0D,0X0A,0X00};
  55          //code    byte CharZ[]={'>',0X00};
C51 COMPILER V7.10   MAIN                                                                  05/03/2007 10:20:04 PAGE 2   

  56          //code    byte CMG[]={'+','C','M','G',0};
  57          
  58          bit     LongDataFlag;
  59          
  60          #ifdef DEBUG_SMS
  61          extern void putch(byte ch);
  62          #endif
  63          
  64          #define F_TM F0
  65          
  66          #define TIMER0_ENABLE  TL0=TH0; TR0=1;
  67          #define TIMER0_DISABLE TR0=0;
  68          
  69          sbit ACC0=   ACC^0;
  70          sbit ACC1=   ACC^1;
  71          sbit ACC2=   ACC^2;
  72          sbit ACC3=   ACC^3;
  73          sbit ACC4=   ACC^4;
  74          sbit ACC5=   ACC^5;
  75          sbit ACC6=   ACC^6;
  76          sbit ACC7=   ACC^7;
  77          
  78          
  79          // 在 S 串中找 串 T ,算法如下。 从第一个数开始比较之前,先求出各串的长度。
  80          // 当比较的字符数都小于各自的串长度时,进行比较 当取出的数据比较相等时,设量i,j 都加 1.
  81          // 不相等时, i=i-j+2,j=1;
  82          // 退出比较,当j> t 串的长度时,比较成功。即在 i- t 长处发现相待。
  83          
  84          unsigned char cmp(unsigned char *array1,unsigned char *array2) 
  85            {
  86   1          unsigned char i;    
  87   1         
  88   1          unsigned char m=strlen (array2); 
  89   1      
  90   1              for(i=0;i<256-m;i++)
  91   1              {
  92   2              if(memcmp(&array1[i],array2,m)==0) 
  93   2                      return(i);
  94   2              }
  95   1              return(0xff);
  96   1      
  97   1      
  98   1         }
  99          
 100          
 101          //用IO模拟串口收,发数据占用定时器0
 102          void IntTimer0() interrupt 1
 103          {
 104   1        F_TM=1;
 105   1      }
 106          
 107          //模拟串口,发送一个字符
 108          void PSendChar(unsigned char inch)
 109          {                               
 110   1              ACC=inch;       
 111   1              F_TM=0;
 112   1              BT_SND=0;                       //start bit
 113   1              TIMER0_ENABLE;          //启动
 114   1              while(!F_TM);
 115   1              
 116   1              BT_SND=ACC0;            //先送出低位
 117   1              F_TM=0;
C51 COMPILER V7.10   MAIN                                                                  05/03/2007 10:20:04 PAGE 3   

 118   1              while(!F_TM);
 119   1              
 120   1              BT_SND=ACC1;
 121   1              F_TM=0;
 122   1              while(!F_TM);
 123   1              
 124   1              BT_SND=ACC2;
 125   1              F_TM=0;
 126   1              while(!F_TM);
 127   1              
 128   1              BT_SND=ACC3;
 129   1              F_TM=0;
 130   1              while(!F_TM);
 131   1              
 132   1              BT_SND=ACC4;
 133   1              F_TM=0;
 134   1              while(!F_TM);
 135   1              
 136   1              BT_SND=ACC5;
 137   1              F_TM=0;
 138   1              while(!F_TM);
 139   1              
 140   1              BT_SND=ACC6;
 141   1              F_TM=0;
 142   1              while(!F_TM);
 143   1              
 144   1              BT_SND=ACC7;
 145   1              F_TM=0;
 146   1              while(!F_TM);
 147   1              
 148   1              BT_SND=1;
 149   1              F_TM=0;
 150   1              while(!F_TM);
 151   1              F_TM=0;
 152   1              
 153   1              TIMER0_DISABLE;         //停止timer
 154   1      }
 155          
 156          //模拟串口,接收一个字符
 157          unsigned char PGetChar()
 158          {                                                               
 159   1              TIMER0_ENABLE;
 160   1              F_TM=0;
 161   1              while(!F_TM); //等过起始位
 162   1              ACC0=BT_REC;
 163   1              
 164   1              TL0=TH0;
 165   1              
 166   1              F_TM=0;
 167   1              while(!F_TM);
 168   1              ACC1=BT_REC;
 169   1              
 170   1              F_TM=0;
 171   1              while(!F_TM);
 172   1              ACC2=BT_REC;
 173   1              
 174   1              F_TM=0;
 175   1              while(!F_TM);
 176   1              ACC3=BT_REC;
 177   1              
 178   1              F_TM=0;
 179   1              while(!F_TM);
C51 COMPILER V7.10   MAIN                                                                  05/03/2007 10:20:04 PAGE 4   

 180   1              ACC4=BT_REC;
 181   1              
 182   1              F_TM=0;
 183   1              while(!F_TM);
 184   1              ACC5=BT_REC;
 185   1              
 186   1              F_TM=0;
 187   1              while(!F_TM);
 188   1              ACC6=BT_REC;
 189   1              
 190   1              F_TM=0;
 191   1              while(!F_TM);
 192   1              ACC7=BT_REC;
 193   1              
 194   1              F_TM=0;
 195   1              
 196   1              while(!F_TM)
 197   1              {
 198   2                      if(BT_REC)
 199   2                      {
 200   3                      break;
 201   3                      }
 202   2              }
 203   1              TIMER0_DISABLE; //停止timer
 204   1              return ACC;
 205   1      
 206   1      }
 207          
 208          
 209          //发送字符串
 210          unsigned char send_str(unsigned char *str)
 211          {
 212   1       unsigned char i;
 213   1        i=0;
 214   1              while( str[i] != 0 ){
 215   2              PSendChar(str[i]); 
 216   2              i++;    
 217   2              }
 218   1       
 219   1        return(0);
 220   1       }
 221           
 222          
 223          unsigned char SendAT(unsigned char *command,unsigned char * Cmp_Data,unsigned char *ACK)
 224          {
 225   1        unsigned char i=0;
 226   1        unsigned char ACK_LEN;  
 227   1        unsigned long m;
 228   1         
 229   1        if(strlen(command) > 0)
 230   1        {     
 231   2              while(1)
 232   2                      {               
 233   3              
 234   3                      if(command[i] == 0 || command[i] == '\n' || command[i] == '\r' )
 235   3                     {
 236   4                              PSendChar(0x0D);
 237   4                              break;
 238   4                              }
 239   3      
 240   3                      else
 241   3                              {
C51 COMPILER V7.10   MAIN                                                                  05/03/2007 10:20:04 PAGE 5   

 242   4                              PSendChar(command[i]);
 243   4                              
 244   4                              }
 245   3              
 246   3                      i++;
 247   3                      }
 248   2              }
 249   1      
 250   1              ACK_LEN = strlen(Cmp_Data);
 251   1                  
 252   1      /*
 253   1              三秒钟内无回复,认为超时退出.
 254   1      */
 255   1              m = 500000L;
 256   1              i = 0;
 257   1              while(m--)
 258   1              {
 259   2              
 260   2                if(BT_REC==0)
 261   2                {
 262   3                      
 263   3                      ACK[i] =PGetChar();     
 264   3                      m = 200000L;
 265   3                      if(i<0xff)
 266   3                      i+=1;
 267   3                      if(i>=ACK_LEN)
 268   3                              { 
 269   4                                      if(memcmp(&ACK[i-ACK_LEN],Cmp_Data,ACK_LEN)==0)
 270   4                                      {
 271   5                                       if(i>=0x80) LongDataFlag = 1;                  //收到的数据确实很长    
 272   5                                       return(i+0x80);
 273   5                                      }       
 274   4                              
 275   4                              }                       
 276   3                      }        
 277   2              
 278   2              }
 279   1      
 280   1       return(i);       //回复收到的数据长度.
 281   1      
 282   1      }
 283          
 284          
 285          unsigned long delay;
 286          
 287          void Delay100mS(byte Cnt)
 288          {
 289   1       unsigned int m_100MS;    
 290   1       m_100MS = 0;
 291   1       while(--Cnt)
 292   1       {
 293   2         for(m_100MS=0;m_100MS<60000;m_100MS++);
 294   2       }
 295   1      
 296   1      }
 297          
 298          bit CPL;
 299          void main()
 300          {

⌨️ 快捷键说明

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