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

📄 模拟中断shou.lst

📁 四机通信程序(电脑-单片机-单片机-gsm模块)
💻 LST
字号:
C51 COMPILER V8.05a   模拟中断SHOU                                                         04/10/2009 21:13:28 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE 模拟中断SHOU
OBJECT MODULE PLACED IN 模拟中断shou.OBJ
COMPILER INVOKED BY: D:\Program Files\keil c51 v8.05\C51\BIN\C51.EXE 模拟中断shou.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<STC_NEW_8051.H>
   2          
   3          //-------------------短信内容数组--------------------
   4          unsigned char idata msm[180]="1111111111222222222233333333334444444444555555555566666666667777777777888888
             -88889999999999000000000011111111112222222222333333333344444444445555555555666666666677777777778888888888";
   5          
   6          //-------------------------------变量定义--------------------------------------------
   7          //b:检测起始位                             z:I/O发送开关                        a:接收串口信息
   8          //rspoint:I/O口接收数组下标    x:I/O口接收起始位判断   rsopen:I/O口接收开关
   9          unsigned char b,z,a,rspoint,x,rsopen;
  10          
  11          //--------------I/O口:接收设置--------------
  12          sbit F1  = PSW^1;
  13          sbit BT_REC=P3^4;//I/O口接收数据线
  14          #define rsflag F1
  15          
  16          
  17          //-----------------I/O口发送变量初始化------------------
  18          sbit clk=P1^7; //I/O口发送时钟线
  19          sbit BT_SND=P1^5;//I/O口发送线
  20          #define F_TM F0 
  21          sbit ACC0=   ACC^0;
  22          sbit ACC1=   ACC^1;
  23          sbit ACC2=   ACC^2;
  24          sbit ACC3=   ACC^3;
  25          sbit ACC4=   ACC^4;
  26          sbit ACC5=   ACC^5;
  27          sbit ACC6=   ACC^6;
  28          sbit ACC7=   ACC^7;
  29          
  30          //---------------------函数声明---------------------------
  31          void sendasc(unsigned char asc);//发送一个ASCII码
  32          void sendtogsm(unsigned char *p,int L);//发送字符串
  33          void delay(int);//延时程序
  34          bit StartBitOn();//检测起始位
  35          void time();//I/O口clk接收:外部中断0
  36          void initwai0();//I/O口接收:外部中断0初始化
  37          unsigned char PGetChar();//I/O口:接收函数
  38          void IntTimer0();//发送clk中断:定时器0
  39          void init();//发送clk中断:定时器0初始化
  40          void cksz();//串口通讯设置初始化
  41          void sed(unsigned char);//I/O口发送
  42          void time4();//串口中断
  43          
  44          
  45          
  46          //---------------------主函数---------------------/
  47          void main()
  48          {
  49   1              cksz();
  50   1              initwai0();
  51   1              init();
  52   1              rsopen=0;
  53   1          rspoint=0;
  54   1              b=0;
C51 COMPILER V8.05a   模拟中断SHOU                                                         04/10/2009 21:13:28 PAGE 2   

  55   1              z=0;
  56   1              while(1)
  57   1              { 
  58   2                      if(StartBitOn())
  59   2      
  60   2              {
  61   3                 
  62   3              x=PGetChar();
  63   3                      if(x=='~')
  64   3                      {
  65   4                              rsopen=1;
  66   4                      }
  67   3                      if(x=='!')
  68   3                      {
  69   4                              rspoint=0;
  70   4                              rsopen=0;
  71   4                              sendtogsm(msm,180);
  72   4                      }
  73   3                      if(rsopen==1)
  74   3                      {
  75   4                              msm[rspoint]=x;
  76   4                              
  77   4                              if(rspoint==3)
  78   4                                      {
  79   5                                              if(x=='A') P0=0x00;
  80   5                                              if(x=='B') P0=0XFF;
  81   5                                      } 
  82   4                              rspoint++;
  83   4                      } 
  84   3          }
  85   2                      
  86   2                      if(b==1)
  87   2                      {  
  88   3                         b=0;
  89   3                         sed(a);
  90   3                       }      
  91   2              }
  92   1      
  93   1      }
  94          
  95          //----------------发送clk中断:定时器0--------------------/
  96          void IntTimer0() interrupt 1
  97          {
  98   1              
  99   1                      clk=0;
 100   1                      F_TM=1;
 101   1              
 102   1      }
 103          
 104           
 105          //-------------发送clk中断:定时器0初始化-----------------/
 106          void init()
 107          {
 108   1              TH0=(256-12);
 109   1          TL0=TH0;
 110   1              EA=1;
 111   1              ET0=1;
 112   1      }
 113          
 114          
 115          //----------------串口通讯设置初始化-----------------/
 116          void cksz()
C51 COMPILER V8.05a   模拟中断SHOU                                                         04/10/2009 21:13:28 PAGE 3   

 117          {       
 118   1              AUXR=0x60; //波特率*12    4800*12=57600
 119   1              TMOD=0x22; //波特率设置
 120   1              TH1=0xfa;  //4800
 121   1              TL1=0xfa;
 122   1              TR1=1;
 123   1              REN=1;//工作方式设置
 124   1              SM0=0;
 125   1              SM1=1;
 126   1              EA=1; //开启中断
 127   1              ES=1;
 128   1      }                                                          
 129          
 130          //-----------串口:发送一个ASCII码----------------
 131          void sendasc(unsigned char asc)
 132          {
 133   1              bit es;
 134   1              es=ES;
 135   1              ES=0;
 136   1              TI=0;
 137   1              SBUF=asc;
 138   1              while(!TI);
 139   1              TI=0;
 140   1              ES=es;
 141   1      }
 142          
 143          //------------------串口:发送字符串---------------------
 144          void sendtogsm(unsigned char *p,int L)//1、字符串数组   2、字符串长度
 145          {
 146   1              while (L--)
 147   1                      {
 148   2                              sendasc(*p++);
 149   2                      }
 150   1      }
 151          
 152          //---------------串口中断---------------------
 153          void time4() interrupt 4
 154          {
 155   1              if(RI==1)
 156   1              {       
 157   2                      RI=0;
 158   2                      a=SBUF;
 159   2                      if(a=='~')
 160   2                              {
 161   3                                      z=1;
 162   3                              }
 163   2                      if(z==1)
 164   2                              {
 165   3                                      b=1;
 166   3                              }               
 167   2              }
 168   1      }
 169          
 170          //--------------I/O口发送---------------------/
 171          void sed(unsigned char inch)
 172          {
 173   1                      ACC=inch;
 174   1                      clk=1;
 175   1                      F_TM=0;
 176   1                      BT_SND=0; //start bit 
 177   1                      TR0=1; //启动
 178   1                      while(!F_TM);
C51 COMPILER V8.05a   模拟中断SHOU                                                         04/10/2009 21:13:28 PAGE 4   

 179   1                      
 180   1                      BT_SND=ACC0; //先送出低位
 181   1                      clk=1;
 182   1                      F_TM=0;
 183   1                      while(!F_TM);
 184   1                      
 185   1                      BT_SND=ACC1;
 186   1                      clk=1; 
 187   1                      F_TM=0;
 188   1                      while(!F_TM);
 189   1                      
 190   1                      BT_SND=ACC2;
 191   1                      clk=1; 
 192   1                      F_TM=0;
 193   1                      while(!F_TM);
 194   1                      
 195   1                      BT_SND=ACC3;
 196   1                      clk=1; 
 197   1                      F_TM=0;
 198   1                      while(!F_TM);
 199   1                      
 200   1                      BT_SND=ACC4;
 201   1                      clk=1; 
 202   1                      F_TM=0;
 203   1                      while(!F_TM);
 204   1                      
 205   1                      BT_SND=ACC5; 
 206   1                      clk=1;
 207   1                      F_TM=0;
 208   1                      while(!F_TM);
 209   1                      
 210   1                      BT_SND=ACC6; 
 211   1                      clk=1;
 212   1                      F_TM=0;
 213   1                      while(!F_TM);
 214   1                      
 215   1                      BT_SND=ACC7; 
 216   1                      clk=1;
 217   1                      F_TM=0;
 218   1                      while(!F_TM);
 219   1                      
 220   1                      BT_SND=1;
 221   1                      clk=1;
 222   1                      F_TM=0;
 223   1                      while(!F_TM);
 224   1              TR0=0; //停止timer
 225   1                      clk=1;
 226   1      }
 227          
 228          //--------------------------延时程序---------------------------
 229          void delay(int x)
 230          {
 231   1              int i;
 232   1              for (i=0;i<=x;i++);
 233   1      } 
 234          
 235          //----------------------检测起始位----------------------------/
 236          bit StartBitOn()
 237          {
 238   1      return  (BT_REC==0);
 239   1      
 240   1      }
C51 COMPILER V8.05a   模拟中断SHOU                                                         04/10/2009 21:13:28 PAGE 5   

 241          
 242          //--------------------I/O口接收:外部中断0初始化--------------------/
 243          void initwai0()
 244          {
 245   1         IT0=1;
 246   1         EA=1;
 247   1         EX0=1;
 248   1         ACC=0XFF;
 249   1      }
 250          
 251          //----------------------I/O口接收:外部中断0------------------------/
 252          void time() interrupt 0
 253          {
 254   1              rsflag=1;
 255   1      
 256   1      }
 257          
 258          
 259          
 260          
 261          //--------------------I/O口:接收函数--------------------------/
 262          unsigned char PGetChar()
 263          { 
 264   1                      rsflag=0;
 265   1                      while(!rsflag); //等过起始位
 266   1                      ACC0=BT_REC;
 267   1                      
 268   1                      rsflag=0;
 269   1                      while(!rsflag);
 270   1                      ACC1=BT_REC;
 271   1                      
 272   1                      rsflag=0;
 273   1                      while(!rsflag);
 274   1                      ACC2=BT_REC;
 275   1                      
 276   1                      rsflag=0;
 277   1                      while(!rsflag);
 278   1                      ACC3=BT_REC;
 279   1                      
 280   1                      rsflag=0;
 281   1                      while(!rsflag);
 282   1                      ACC4=BT_REC;
 283   1                      
 284   1                      rsflag=0;
 285   1                      while(!rsflag);
 286   1                      ACC5=BT_REC;
 287   1                      
 288   1                      rsflag=0;
 289   1                      while(!rsflag);
 290   1                      ACC6=BT_REC;
 291   1                      
 292   1                      rsflag=0;
 293   1                      while(!rsflag);
 294   1                      ACC7=BT_REC;
 295   1                      
 296   1                      rsflag=0;
 297   1                      while(!rsflag)
 298   1                      {
 299   2                              if(BT_REC)
 300   2                              {
 301   3                                      break;
 302   3                              }
C51 COMPILER V8.05a   模拟中断SHOU                                                         04/10/2009 21:13:28 PAGE 6   

 303   2              }
 304   1              return ACC;
 305   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    482    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       3
   IDATA SIZE       =    180    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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