完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
下面程序里面的定时器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) |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
250 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
473 浏览 2 评论
571 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
260 浏览 0 评论
400 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11974 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 06:54 , Processed in 0.789525 second(s), Total 67, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号