完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的超声波运行过一会就会死机,卡在echo高电平上不变,敲它一下它就能正常运行,但是过一会又卡死了,在里面加了一段跳出代码也不行:
while(!Echo); TR0=1; while(Echo) { if(temp>=100) { temp=0; Echo=0; } } TR0=0; temp是在定时器里改变的0.5毫秒改变一次, 是程序问题还是模块坏了还是什么原因#include #include #define uint unsigned int #define uchar unsigned char ***it led1=P1^0; ***it led7=P1^7; ***it Trig=P1^3; ***it Echo=P1^5;//超声波端口的定义 Trig为触发口 Echo为状态口 static unsigned int s; unsigned int time=0;//用来存储计时时间 uint temp, i=0;//定时时间长度控制 bit flag=0; void Delay20us() //@11.0592MHz { unsigned char i; _nop_(); i = 6; while (--i); } void main() { TMOD=0x11; TH0=0; TL0=0;//定时器0用作定时 来计时而测量距离 TL1 = 0x33; //设置定时初值 500us TH1 = 0xFE; //设置定时初值 ET1=1; // ET0=1; EA=1; TR1=1; //定时器的初始化设置 while(1) { while(!Echo); TR0=1; while(Echo) { if(temp>=100) { temp=0; Echo=0; } } TR0=0; //超声波测量 time=TH0*256+TL0; TH0=0; TL0=0; s=(time*0.034)/2; if(s<=15) { led1=0; led7=1; } else { led1=1; led7=0; } } } //void timer0() interrupt 1 //超出测量范围 //{ // flag=1; //} void timer1() interrupt 3 //定时器1中断函数 { TL1 = 0x33; //设置定时初值 500us TH1 = 0xFE; //设置定时初值 temp++; i++; //每次20毫秒产生一次中断 500us if(i>=140) //每80毫秒发送一次状态 { i=0; Trig=1; Delay20us(); Trig=0; } } |
|
相关推荐 |
|
飞凌嵌入式-ELFBOARD 解决PCB布线时无法捕捉到焊盘中心的问题
449 浏览 0 评论
Openharmony软件评估指南-米尔瑞芯微RK3568开发板
803 浏览 0 评论
STM32CUBEMX(7)--移植雅特力AT32F403AVGT(兼容STM32F103VGT6),DAC输出电压
1113 浏览 0 评论
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】开发板简介与上电测试
1059 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之传参
590 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11053 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-11 19:19 , Processed in 0.486770 second(s), Total 42, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号