下面程序里面的定时器0和1的作用是什么呀,还有定时器0定时时间是多少?
C51 COMPILER V9.01, COMPILA
tiON 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)