单片机/MCU论坛
直播中

何楚婷

6年用户 4经验值
擅长:模拟技术
私信 关注
[问答]

拜托帮我看一下定时器的时间和作用

下面程序里面的定时器0和1的作用是什么呀,还有定时器0定时时间是多少?

C51 COMPILER V9.01, COMPILAtiON OF MODULE _悄_小车
OBJECT MODULE PLACED IN 智能小车.OBJ
COMPILER INVOKED BY: D:Program Files (x86)KEIL 4C51BINC51.EXE 智能小车.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1         
   2          #include                        //调用单片机头文件
   3          #define uchar unsigned char  //无符号字符型 宏定义      变量范围0~255
   4          #define uint  unsigned int       //无符号整型 宏定义    变量范围0~65535
   5          #include
   6          #include "lcd1602.h"
   7         
   8         
   9          /********************LN298电机驱动IO口定义*********************************/
  10          ***it qu_ll = P1^4;         //左边电机控制IN1
  11          ***it qu_zl = P1^5;         //左边电机控制IN2
  12          ***it qu_zr = P1^6;         //右边电机控制IN1
  13          ***it qu_rr = P1^7;         //右边电机控制IN2
  14         
  15          ***it beep = P1^3;   //蜂鸣器IO口定义
  16         
  17          ***it c_recive = P2^4;           //超声波接收
  18          ***it c_send   = P2^3;           //超声波发射
  19         
  20          uchar flag_hc_value;        //超声波中间变量
  21          long distance = 888;                //距离
  22          bit flag_c***_juli;          //超声波超出量程
  23          uint  flag_time0;           //用来保存定时器0的时候的
  24         
  25         
  26          /*****************1ms延时函数*********************************/
  27          void delay_1ms(uint q)
  28          {
  29   1              uint i,j;
  30   1              for(i=0;i   31   1                      for(j=0;j<115;j++);
  32   1      }
  33         
  34          /***********************小车前进函数************************/
  35          void go()
  36          {
  37   1              qu_ll = 1;  
  38   1              qu_zl = 0;
  39   1              qu_zr = 0;
  40   1              qu_rr = 1;      
  41   1      }
  42         
  43         
  44         
  45          /***********************小车停下函数************************/
  46          void stop()
  47          {
  48   1              qu_ll = 0;  
  49   1              qu_zl = 0;
  50   1              qu_zr = 0;
  51   1              qu_rr = 0;
  52   1      }
  53         
  54         
  55          /******************小延时函数*****************/
C51 COMPILER V9.01   _悄_小车                                                              12/07/2016 23:12:18 PAGE 2   

  56          void delay()
  57          {
  58   1              _nop_();                           //执行一条_nop_()指令就是1us
  59   1              _nop_();
  60   1              _nop_();
  61   1              _nop_();
  62   1              _nop_();
  63   1              _nop_();
  64   1              _nop_();
  65   1              _nop_();
  66   1              _nop_();  
  67   1              _nop_();
  68   1      }
  69         
  70         
  71          /*********************超声波测距程序*****************************/
  72          void send_wave()
  73          {
  74   1              c_send = 1;                        //10us的高电平触发
  75   1              delay();
  76   1              c_send = 0;      
  77   1              TH0 = 0;                          //给定时器0清零
  78   1              TL0 = 0;
  79   1              TR0 = 0;                                  //关定时器0定时
  80   1              while(!c_recive);                 //当c_recive为零时等待
  81   1              TR0=1;
  82   1              while(c_recive)               //当c_recive为1计数并等待
  83   1              {
  84   2                      flag_time0 = TH0 * 256 + TL0;
  85   2                      if((flag_time0 > 40000))      //当超声波超过测量范围时,显示3个888
  86   2                      {
  87   3                              TR0 = 0;
  88   3                              flag_c***_juli = 2;
  89   3                              distance = 888;
  90   3                              break ;         
  91   3                      }
  92   2                      else
  93   2                      {
  94   3                              flag_c***_juli = 1;      
  95   3                      }
  96   2              }
  97   1              if(flag_c***_juli == 1)
  98   1              {      
  99   2                      TR0=0;                                                   //关定时器0定时
100   2                      distance =flag_time0;                    //读出定时器0的时间
101   2                      distance *= 0.017;               // 0.017 = 340M / 2 = 170M = 0.017M 算出来是米
102   2                      if((distance > 500))                             //距离 = 速度 * 时间
103   2                      {      
104   3                              distance = 888;                          //如果大于3.8m就超出超声波的量程
105   3                      }
106   2              }  
107   1      }
108         
109          /*********************定时器0、定时器1初始化******************/
110          void time_init()         
111          {
112   1              EA  = 1;                  //开总中断
113   1              TMOD = 0X11;      //定时器0、定时器1工作方式1
114   1              ET0 = 1;                  //开定时器0中断
115   1              TR0 = 0;                  //允许定时器0定时
116   1      }
117         
C51 COMPILER V9.01   _悄_小车                                                              12/07/2016 23:12:18 PAGE 3   

118         
119          /*****************主函数*********************/
120          void main()
121          {      
122   1              time_init()      ;
123   1              init_1602();      //1602初始化
124   1              while(1)
125   1              {
126   2                     
127   2                      send_wave();    //测距离函数
128   2                      write_sfm3(1,7,distance);        //显示距离
129   2                      delay_1ms(50);
130   2                      if(distance <= 20)
131   2                      {
132   3                              stop();
133   3                              beep = ~beep;
134   3                      }else
135   2                      {
136   3                              go();
137   3                              beep = 1;
138   3                      }
139   2              }
140   1      }
141         


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    544    ----
   CONSTANT SIZE    =     56    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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


更多回帖

发帖
×
20
完善资料,
赚取积分