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

📄 main.lst

📁 51单片机用IO模拟串口通信,只占用一个定时器
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.10   MAIN                                                                  04/20/2007 12:45:23 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          /*
   2          IO 口模拟232通讯程序
   3          
   4          使用两种方式的C程序 占用定时器0
   5          
   6          **********************************************/
   7          #include <reg51.h>
   8          #include <string.h>
   9          #define byte unsigned char
  10          
  11          
  12          #define GPGLL           0
  13          #define GPGSA           1
  14          #define GPRMC           2
  15          #define GPZDA           3
  16          #define GPVTG           4
  17          #define GPGGA           5
  18          
  19          
  20          pdata byte pData[200];
  21          sbit BT_SND =P3^1;
  22          sbit BT_REC =P3^0;
  23          
  24          
  25          byte    RxFlag=0;                                                       
  26          byte    RecTimeOut=0;   
  27          byte    RecStatus=0;    
  28          byte    RxCount=0;              
  29          //byte    g_GPS;                                                //GPS数据状态.
  30          
  31          extern void putch(byte ch);
  32          #define F_TM F0
  33          
  34          #define TIMER0_ENABLE  TL0=TH0; TR0=1;
  35          #define TIMER0_DISABLE TR0=0;
  36          
  37          sbit ACC0=   ACC^0;
  38          sbit ACC1=   ACC^1;
  39          sbit ACC2=   ACC^2;
  40          sbit ACC3=   ACC^3;
  41          sbit ACC4=   ACC^4;
  42          sbit ACC5=   ACC^5;
  43          sbit ACC6=   ACC^6;
  44          sbit ACC7=   ACC^7;
  45          
  46          //用IO模拟串口收,发数据占用定时器0
  47          void IntTimer0() interrupt 1
  48          {
  49   1        F_TM=1;
  50   1      }
  51          
  52          //模拟串口,发送一个字符
  53          void PSendChar(unsigned char inch)
  54          {                               
  55   1              ACC=inch;       
C51 COMPILER V7.10   MAIN                                                                  04/20/2007 12:45:23 PAGE 2   

  56   1              F_TM=0;
  57   1              BT_SND=0; //start bit
  58   1              TIMER0_ENABLE; //启动
  59   1              while(!F_TM);
  60   1              
  61   1              BT_SND=ACC0; //先送出低位
  62   1              F_TM=0;
  63   1              while(!F_TM);
  64   1              
  65   1              BT_SND=ACC1;
  66   1              F_TM=0;
  67   1              while(!F_TM);
  68   1              
  69   1              BT_SND=ACC2;
  70   1              F_TM=0;
  71   1              while(!F_TM);
  72   1              
  73   1              BT_SND=ACC3;
  74   1              F_TM=0;
  75   1              while(!F_TM);
  76   1              
  77   1              BT_SND=ACC4;
  78   1              F_TM=0;
  79   1              while(!F_TM);
  80   1              
  81   1              BT_SND=ACC5;
  82   1              F_TM=0;
  83   1              while(!F_TM);
  84   1              
  85   1              BT_SND=ACC6;
  86   1              F_TM=0;
  87   1              while(!F_TM);
  88   1              
  89   1              BT_SND=ACC7;
  90   1              F_TM=0;
  91   1              while(!F_TM);
  92   1              
  93   1              BT_SND=1;
  94   1              F_TM=0;
  95   1              while(!F_TM);
  96   1              TIMER0_DISABLE; //停止timer
  97   1      
  98   1      }
  99          
 100          
 101          
 102          
 103          //模拟串口,接收一个字符
 104          unsigned char PGetChar()
 105          {               
 106   1              
 107   1              TIMER0_ENABLE;
 108   1              F_TM=0;
 109   1              while(!F_TM); //等过起始位
 110   1              ACC0=BT_REC;
 111   1              
 112   1              TL0=TH0;
 113   1              
 114   1              F_TM=0;
 115   1              while(!F_TM);
 116   1              ACC1=BT_REC;
 117   1              
C51 COMPILER V7.10   MAIN                                                                  04/20/2007 12:45:23 PAGE 3   

 118   1              F_TM=0;
 119   1              while(!F_TM);
 120   1              ACC2=BT_REC;
 121   1              
 122   1              F_TM=0;
 123   1              while(!F_TM);
 124   1              ACC3=BT_REC;
 125   1              
 126   1              F_TM=0;
 127   1              while(!F_TM);
 128   1              ACC4=BT_REC;
 129   1              
 130   1              F_TM=0;
 131   1              while(!F_TM);
 132   1              ACC5=BT_REC;
 133   1              
 134   1              F_TM=0;
 135   1              while(!F_TM);
 136   1              ACC6=BT_REC;
 137   1              
 138   1              F_TM=0;
 139   1              while(!F_TM);
 140   1              ACC7=BT_REC;
 141   1              
 142   1              F_TM=0;
 143   1              
 144   1              while(!F_TM)
 145   1              {
 146   2                      if(BT_REC)
 147   2                      {
 148   3                      break;
 149   3                      }
 150   2              }
 151   1              TIMER0_DISABLE; //停止timer
 152   1              return ACC;
 153   1      
 154   1      
 155   1      }
 156          
 157          
 158          //发送字符串
 159          unsigned char send_str(unsigned char *str)
 160          {
 161   1       unsigned char i;
 162   1       i=0;
 163   1              while( str[i] != 0 ){
 164   2              PSendChar(str[i]); 
 165   2              i++;    
 166   2              }
 167   1       
 168   1        return(0);
 169   1       }
 170           
 171          
 172          // 发送AT指令. (返回接收到的数据长度.)
 173          
 174          unsigned char SendAT(unsigned char *command,unsigned char *ACK)
 175          {
 176   1        unsigned char i=0;  
 177   1        unsigned long m;
 178   1         
 179   1        if(strlen(command) > 0){      
C51 COMPILER V7.10   MAIN                                                                  04/20/2007 12:45:23 PAGE 4   

 180   2          if( strlen(command) < 2) return(0); //  AT 命令格式错
 181   2              while(command[i] != 0){  
 182   3              
 183   3                      if( command[i] == '\n' )
 184   3                     {
 185   4                              command[i] = 0;  // Remove the existing line terminating character (if any)
 186   4                              break;
 187   4                              }
 188   3                      if( command[i] == '\r' ) {
 189   4                              command[i] = 0;  // Remove the existing line terminating character (if any)
 190   4                              break;
 191   4                              }
 192   3                      i++;
 193   3                      }
 194   2              }

⌨️ 快捷键说明

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