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

📄 模拟串口.lst

📁 几年搜的LED显示屏程序大全20多个实例带仿真.rar
💻 LST
字号:
C51 COMPILER V7.00  腳拟串__                                                               04/12/2009 16:27:25 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE 腳拟串__
OBJECT MODULE PLACED IN 模拟串口.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 模拟串口.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <AT89x52.H>
   2          sbit BT_SND =P1^0;
   3          sbit BT_REC =P1^1;
   4          /**********************************************
   5          
   6          IO 口模拟232通讯程序
   7          
   8          使用两种方式的C程序 占用定时器0
   9          
  10          **********************************************/
  11          
  12          #define MODE_QUICK
  13          
  14          #define F_TM F0
  15          
  16          #define TIMER0_ENABLE   TL0=TH0; TR0=1;
  17          #define TIMER0_DISABLE TR0=0;
  18          
  19          sbit ACC0=    ACC^0;
  20          sbit ACC1=    ACC^1;
  21          sbit ACC2=    ACC^2;
  22          sbit ACC3=    ACC^3;
  23          sbit ACC4=    ACC^4;
  24          sbit ACC5=    ACC^5;
  25          sbit ACC6=    ACC^6;
  26          sbit ACC7=    ACC^7;
  27          
  28          void IntTimer0() interrupt 1
  29          {
  30   1      F_TM=1;
  31   1      }
  32          //发送一个字符
  33          void PSendChar(unsigned char inch)
  34          {
  35   1      #ifdef MODE_QUICK
  36   1      ACC=inch;
  37   1      
  38   1      F_TM=0;
  39   1      BT_SND=0; //start bit
  40   1      TIMER0_ENABLE; //启动
  41   1      while(!F_TM);
  42   1      
  43   1      BT_SND=ACC0; //先送出低位
  44   1      F_TM=0;
  45   1      while(!F_TM);
  46   1      
  47   1      BT_SND=ACC1;
  48   1      F_TM=0;
  49   1      while(!F_TM);
  50   1      
  51   1      BT_SND=ACC2;
  52   1      F_TM=0;
  53   1      while(!F_TM);
  54   1      
  55   1      BT_SND=ACC3;
C51 COMPILER V7.00  腳拟串__                                                               04/12/2009 16:27:25 PAGE 2   

  56   1      F_TM=0;
  57   1      while(!F_TM);
  58   1      
  59   1      BT_SND=ACC4;
  60   1      F_TM=0;
  61   1      while(!F_TM);
  62   1      
  63   1      BT_SND=ACC5;
  64   1      F_TM=0;
  65   1      while(!F_TM);
  66   1      
  67   1      BT_SND=ACC6;
  68   1      F_TM=0;
  69   1      while(!F_TM);
  70   1      
  71   1      BT_SND=ACC7;
  72   1      F_TM=0;
  73   1      while(!F_TM);
  74   1      
  75   1      BT_SND=1;
  76   1      F_TM=0;
  77   1      while(!F_TM);
  78   1      
  79   1      
  80   1      TIMER0_DISABLE; //停止timer
  81   1      #else
              unsigned char ii;
              
              ii=0;
              
              F_TM=0;
              BT_SND=0; //start bit
              TIMER0_ENABLE; //启动
              while(!F_TM);
              
              while(ii<8)
              {
              if(inch&1)
              {
              BT_SND=1;
              }
              else
              {
              BT_SND=0;
              }
              F_TM=0;
              while(!F_TM);
              ii++;
              inch>>=1;
              }
              BT_SND=1;
              F_TM=0;
              while(!F_TM);
              
              #endif
 111   1      TIMER0_DISABLE; //停止timer
 112   1      }
 113          //接收一个字符
 114          unsigned char PGetChar()
 115          {
 116   1      #ifdef MODE_QUICK
 117   1      
C51 COMPILER V7.00  腳拟串__                                                               04/12/2009 16:27:25 PAGE 3   

 118   1      TIMER0_ENABLE;
 119   1      F_TM=0;
 120   1      while(!F_TM); //等过起始位
 121   1      ACC0=BT_REC;
 122   1      
 123   1      TL0=TH0;
 124   1      
 125   1      F_TM=0;
 126   1      while(!F_TM);
 127   1      ACC1=BT_REC;
 128   1      
 129   1      F_TM=0;
 130   1      while(!F_TM);
 131   1      ACC2=BT_REC;
 132   1      
 133   1      F_TM=0;
 134   1      while(!F_TM);
 135   1      ACC3=BT_REC;
 136   1      
 137   1      F_TM=0;
 138   1      while(!F_TM);
 139   1      ACC4=BT_REC;
 140   1      
 141   1      F_TM=0;
 142   1      while(!F_TM);
 143   1      ACC5=BT_REC;
 144   1      
 145   1      F_TM=0;
 146   1      while(!F_TM);
 147   1      ACC6=BT_REC;
 148   1      
 149   1      F_TM=0;
 150   1      while(!F_TM);
 151   1      ACC7=BT_REC;
 152   1      
 153   1      F_TM=0;
 154   1      
 155   1      while(!F_TM)
 156   1      {
 157   2      if(BT_REC)
 158   2      {
 159   3      break;
 160   3      }
 161   2      }
 162   1      TIMER0_DISABLE; //停止timer
 163   1      return ACC;
 164   1      #else
              unsigned char rch,ii;
              TIMER0_ENABLE;
              F_TM=0;
              ii=0;
              rch=0;
              while(!F_TM); //等过起始位
              
              while(ii<8)
              {
              rch>>=1;
              if(BT_REC)
              {
              rch|=0x80;
              }
              ii++;
C51 COMPILER V7.00  腳拟串__                                                               04/12/2009 16:27:25 PAGE 4   

              F_TM=0;
              while(!F_TM);
              
              }
              F_TM=0;
              while(!F_TM)
              {
              if(BT_REC)
              {
              break;
              }
              
              }
              TIMER0_DISABLE; //停止timer
              return rch;
              
              #endif
 197   1      
 198   1      }
 199          //检查是不是有起始位
 200          bit StartBitOn()
 201          {
 202   1      return   (BT_REC==0);
 203   1      
 204   1      }
 205          void main()
 206          {
 207   1      unsigned char gch;
 208   1      
 209   1      TMOD=0x22; /*定时器1为工作模式2(8位自动重装),0为模式2(8位
 210   1      自动重装) */
 211   1      PCON=00;
 212   1      
 213   1      TR0=0; //在发送或接收才开始使用
 214   1      TF0=0;
 215   1      TH0=(256-96); //9600bps 就是 1000000/9600=104.167微秒 执行的
 216   1      //timer是
 217   1      //             
 218   1      //104.167*11.0592/12= 96
 219   1      TL0=TH0;
 220   1      ET0=1;
 221   1      EA=1;
 222   1      
 223   1      PSendChar(0x55);
 224   1      PSendChar(0xaa);
 225   1      PSendChar(0x00);
 226   1      PSendChar(0xff);
 227   1      
 228   1      while(1)
 229   1      {
 230   2      if(StartBitOn())
 231   2      {
 232   3      gch=PGetChar();
 233   3      PSendChar(gch);
 234   3      }
 235   2      }
 236   1      
 237   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    253    ----
C51 COMPILER V7.00  腳拟串__                                                               04/12/2009 16:27:25 PAGE 5   

   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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