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

📄 rs232c.lst

📁 本程序为MCU端程序
💻 LST
字号:
C51 COMPILER V7.50   RS232C                                                                11/28/2008 16:09:25 PAGE 1   


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

line level    source

   1          #include <at89x52.h>
   2          #include <stdio.h>
   3          
   4          sfr WDTRST = 0xA6;
   5          
   6          sbit MOTOR_STOP = P2^0;
   7          unsigned int number = 0;
   8          unsigned char r_buf=0;
   9          unsigned char motor_direction = 0;
  10          unsigned char stop = 0;
  11          unsigned char disp_buf=0;
  12          unsigned char counter;
  13          
  14          #define STEP 500 //设置step_run模式时的步长
  15          
  16          void watch_dog(void);
  17          void step_motor(unsigned int);
  18          void delay_msec(unsigned int);
  19          //实验板上的数码管编码
  20          unsigned char code tube_array[23] = {0x28,0x7e,0xA2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa9,0x26
             -,0xa1,0xb1,0x35,0xad,0x38,0xb0,0x2c,0xFF,0xa0};
  21          // ********************* 0 ** 1 ** 2 ** 3 ** 4 ** 5 ** 6 ** 7 ** 8 ** 9 ** A ** b ** C ** d ** E ** F ** h
             - ** L ** n ** P ** U **   ** e **
  22          
  23          void main()
  24          {
  25   1              unsigned int msec_reg = 5, number_reg = 0;
  26   1              TMOD = 0x21;//定时器1用来作为串行通讯的波特率发生器,工作在方式2; 定时器0用来喂狗
  27   1              SCON = 0x50;//串行口工作在方式1,置位串行口接收允许位REN。
  28   1              PCON = 0;//设置SMOD为0.
  29   1              TH0 = (65536-2000)/256; TL0 = (65536-2000)%256;//定时器0置初值
  30   1              TH1 = 0xE8; TL1 = 0xE8;//设置波特率为1200。
  31   1              TR0 = 1;
  32   1              ET0 = 1;
  33   1              TR1 = 1;
  34   1              ES = 1;
  35   1              IP=0x10;
  36   1              EA = 1;
  37   1      
  38   1              watch_dog();
  39   1              stop = 1;
  40   1      
  41   1              while(1)
  42   1              {
  43   2                      if(r_buf&&r_buf!=255)
  44   2                      {
  45   3                              disp_buf=r_buf;
  46   3                              //SBUF = 1;
  47   3                              //while(!TI);
  48   3                              //TI=0;
  49   3                              ES = 0; //关串口中断
  50   3                              switch(r_buf) //根据串口送过来的不同字符,单片机采取不同动作
  51   3                              {
  52   4                                      case 49: r_buf = 0;                    //步进,步长可以通过宏STEP调整
  53   4                                                       number_reg = number;
C51 COMPILER V7.50   RS232C                                                                11/28/2008 16:09:25 PAGE 2   

  54   4                                                       if(40000-number_reg<1000)
  55   4                                                       {
  56   5                                                              number = 0;
  57   5                                                              number_reg = 0;
  58   5                                                       }
  59   4      
  60   4                                                       stop = 0;
  61   4                                                       while((number-number_reg<=STEP)&&!stop)
  62   4                                                       {
  63   5                                                              step_motor(msec_reg);
  64   5                                                       }
  65   4                                                       stop = 1;
  66   4                                                       break;
  67   4                                      case 50: r_buf = 0;                   //改变msec_reg,从而改变电机的速度,低速模式
  68   4                                                       msec_reg = 5;
  69   4                                                       break;
  70   4                                      case 51: r_buf = 0;                   //改变msec_reg,从而改变电机的速度,高速模式
  71   4                                                       msec_reg = 2;
  72   4                                                       break;
  73   4                                      case 52: r_buf = 0;
  74   4                                                       motor_direction = 1;         //改变电机转动的方向
  75   4                                                       break;
  76   4                                      case 53: r_buf = 0;                   //改变电机转动的方向
  77   4                                                       motor_direction = 0;
  78   4                                                       break;
  79   4                                      default: r_buf = 0;                   //清除r_buf不做任何动作
  80   4                                                       break;                                  
  81   4                              }
  82   3                              ES = 1;//开串口中断
  83   3                      }
  84   2              }
  85   1      }
  86          
  87          void step_motor(unsigned int msec)
  88          {
  89   1              if(!stop)
  90   1              {
  91   2                      if(motor_direction)
  92   2                      {
  93   3                              P1 = 0xf1;
  94   3                              delay_msec(msec);
  95   3                          P1 = 0xf3;
  96   3                              delay_msec(msec);
  97   3                              P1 = 0xf2;
  98   3                              delay_msec(msec);
  99   3                              P1 = 0xf6;
 100   3                              delay_msec(msec);
 101   3                              P1 = 0xf4;
 102   3                              delay_msec(msec);
 103   3                              P1 = 0xfc;
 104   3                              delay_msec(msec);
 105   3                              P1 = 0xf8;
 106   3                              delay_msec(msec);
 107   3                              P1 = 0xf9;
 108   3                              delay_msec(msec);
 109   3                      }
 110   2                      else
 111   2                      {
 112   3                              P1 = 0xf9;
 113   3                              delay_msec(msec);
 114   3                              P1 = 0xf8;
 115   3                              delay_msec(msec);
C51 COMPILER V7.50   RS232C                                                                11/28/2008 16:09:25 PAGE 3   

 116   3                              P1 = 0xfc;
 117   3                              delay_msec(msec);
 118   3                              P1 = 0xf4;
 119   3                              delay_msec(msec);
 120   3                              P1 = 0xf6;
 121   3                              delay_msec(msec);
 122   3                              P1 = 0xf2;
 123   3                              delay_msec(msec);
 124   3                              P1 = 0xf3;
 125   3                              delay_msec(msec);
 126   3                              P1 = 0xf1;
 127   3                              delay_msec(msec);
 128   3                      }
 129   2                      number++;     //计数
 130   2                      if(number==40000) number = 0;
 131   2              }
 132   1      }
 133          
 134          void watch_dog(void)
 135          {
 136   1              WDTRST=0x1e;
 137   1              WDTRST=0xe1;
 138   1      }
 139          
 140          
 141          void time0(void) interrupt 1
 142          {
 143   1              TH0 = (65536-2000)/256; TL0 = (65536-2000)%256;//定时器0置初值
 144   1              watch_dog();
 145   1              if(MOTOR_STOP) stop = 1;  //当P2_0为高时,停止电机转动
 146   1      
 147   1              counter++;
 148   1              if(counter>=3) counter=0;
 149   1              switch(counter)
 150   1              {
 151   2              case 0:
 152   2                              P2=0x7F;
 153   2                              P0=tube_array[disp_buf%100%10];
 154   2                              break;
 155   2              case 1:
 156   2                              P2=0xBF;
 157   2                              P0=tube_array[(disp_buf%100)/10];
 158   2                              break;
 159   2              case 2:
 160   2                              P2=0xDF;
 161   2                              P0=tube_array[disp_buf/100];
 162   2                              break;
 163   2              }
 164   1      }
 165          
 166          
 167          void serial(void) interrupt 4
 168          {
 169   1              if(RI)
 170   1              {
 171   2                      r_buf=SBUF;
 172   2                      RI=0;           
 173   2              }
 174   1      }
 175          
 176          void delay_msec(unsigned int i)
 177          {
C51 COMPILER V7.50   RS232C                                                                11/28/2008 16:09:25 PAGE 4   

 178   1              unsigned char j;
 179   1              while(i--)
 180   1              {
 181   2                      for(j=0;j<125;j++);
 182   2              }       
 183   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    521    ----
   CONSTANT SIZE    =     23    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7       6
   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 + -