|
軟件模擬HC_SRO4超聲模塊
作者:五號智能
需求:需要主控制單片機啟動的第一時間進行初始化,初始化代碼
trig=0;
echo=1;
使用方法:你只需要提供一個10uS以上脈沖觸發信號。
此程序便按arr數組里標的時間,讓echo引腳發出不同時長的高電平.來模擬HC_SR04
- /*
- 軟件模擬HC_SRO4超聲模塊
- 作者:五號智能
- 需求:需要主控制單片機啟動的第一時間進行初始化,初始化代碼
- trig=0;
- echo=1;
-
- 使用方法:你只需要提供一個10uS以上脈沖觸發信號。
- 此程序便按arr數組里標的時間,讓echo引腳發出不同時長的高電平.來模擬HC_SR04
- 功能:被觸發后,模擬超聲模塊輸出.輸出5次,每次間隔5秒,
- 距離從長到短,使用著可以自行設置數組arr來模擬
- HC_SR04說明書:
- 基本工作原理:
- (1)采用IO口TRIG觸發測距,給最少10us的高電平信呈。
- (2)模塊自動發送8個40khz的方波,自動檢測是否有信號返回;
- (3)有信號返回,通過IO口ECHO輸出一個高電平,
- 高電平持續的時間就是超聲波從發射到返回的時間。
- 測試距離=(高電平時間*聲速(340M/S))/2;
- 每次觸發高電平必須15us以上
- */
- #include<reg52.h>
- #include <intrins.h>
- sbit trig=P3^2; //模擬HC_SR04的兩個引腳定義,可自行更改
- sbit echo=P2^1;
- unsigned int conter=0;
- unsigned int ec=0;
- unsigned int arr[]={588,400,350,200,50,1}; //此處為模擬發出的超聲時長.可自行設置
- unsigned int timer=0;
- unsigned int flag=0;
- void daley_10us(unsigned int n)//12M
- {
- _nop_();
- _nop_();
- while(n--);
- }
- void main ()
- {
- unsigned int a=0;
-
- TMOD=0x01;
- TH0=(65536-50000)/256;
-
- TL0=(65536-50000)%256;
-
- ET0=1;
- EA=1;
- echo=0; //初始化echo電平為低
- while(trig); //等待初始化指令
-
- echo=0;
- TR0=1; //啟動定時器0
-
- while(1)
- {
- if(flag)
- {
- a=arr[ec];
- flag=0;
- }
-
- if(conter>1) //如果高電平時間超過2次計時自增,大約10us
- {
- echo=1; //拉高echo電平
- if(ec<6) //判斷數組下標是否溢出
- {
- daley_10us(a); //循環設置拉高電平的時間
- }
- else
- {
- ec=0; //數組溢出電標歸0
- daley_10us(a); //拉高電平的延時.
- }
-
- echo=0; //延時結束時,拉低電平
- daley_10us(1); //拉高電平的延時.
- conter=0; //觸發信號標志歸0
-
- }
- if(trig) //檢測高電平觸發信號
- {
- conter++; //對高電平時間進行計時
- }
-
- }
-
-
- }
- void delaytime() interrupt 1
- {
- TH0=(65536-50000)/256;
-
- TL0=(65536-50000)%256;
- if(100==timer)
- {
- timer=0;
- ec++; //數組下標自增
- flag=1;
- }
- timer++;
-
- }
復制代碼
|
|