蓝桥杯 单片机组 超准超声波测距
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| void Timer1Init(void) { AUXR &= 0xBF; TMOD &= 0x0F; TMOD |= 0x10; TL1 = 0x30; TH1 = 0xF8; TF1 = 0; }
void Sand_wav(void) { unsigned char i;
for(i=0;i<20;i++) { P10 = ~P10; {unsigned char i;_nop_();_nop_();i = 33;while (--i);} } }
unsigned char Read_wav(void) { float range;
Sand_wav(); TR1 = 1; while((P11 != 0) && (TF1 == 0)); TR1 = 0; if(TF1 == 1) { TF1 = 0; TL1 = 0x30; TH1 = 0xF8; return 99; } else { range = TH1*256 + TL1 -63535 +260; range = range * 0.017; TL1 = 0x30; TH1 = 0xF8; return (unsigned char)range; } }
|
注意
- ET1不要打开
- 在Read_wav没有关闭T0要注意主程序延时使程序进入中断
- 清除中断标志 重新TH0 TL0初值赋值
- 运算时减去260是除去发送波形的间隔(此BUG极大影响了精准度 近4cm)
单片机组 和 嵌入式组的相关代码资源可以在我的主页下载。