藍橋杯備忘錄——超聲波

林佳伟發表於2024-05-19
有關藍橋杯的超聲波程式碼 實測測距能達到兩米多 以下是程式碼 void chao_init() { uchar i; for(i=0;i<8;i++) { na1=1; //連續傳送8個頻率為40Khz的超聲波訊號 Delay12us(); na1=0; Delay12us(); } } ////////////////////////////////////////////////// 接下來是計算函式的定時器初始化 定時器初始化可以直接用軟體生成,但需要把TH0和TL0的值清零 void Timer0_Init(void) //10微秒@12.000MHz { AUXR |= 0x40; //定時器時鐘12T模式 TMOD &= 0xF0; //設定定時器模式 TL0 = 0x00; //設定定時初始值 TH0 = 0x00; //設定定時初始值 } ////////////////////////////////////////////////// 計算函式 uint get_chao() { uint time=0; //計算變數,透過return返回出去 TMOD &= 0xf0; //設定定時器模式 TL0 = 0x00; //設定定時初值 TH0 = 0x00; //設定定時初值 chao_init(); //傳送八個40k的方波 TR0=1; //迅速開啟定時器 while(nb1&&TF0==0); //當NB1等於0時或者TF標誌位中斷時推出while迴圈 TR0=0; //關閉定時器 if(TF0==0) //如果未溢位則判定值有效 { time=TH0<<8|TL0; //將定時器值高八位和低八位賦值給time return time*0.017; //測試發現無論定時器以1t還是12t的頻率下都是乘與0.017 } else { TF0=0; //如果中斷標誌位超出,則清空中斷標誌位 time=0; return time; } }