久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8031|回復: 12
打印 上一主題 下一主題
收起左側

超聲波測距程序里為什么要先把echo回波接收端置1?

[復制鏈接]
回帖獎勵 5 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:139175 發(fā)表于 2016-10-30 16:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <STC89C5xRC.H>
#define uint unsigned int//宏定義unsigned int
#define uchar unsigned char//宏定義unsigned char
sbit echo=P3^2;//接收
sbit trig=P3^3;//發(fā)送
sbit led=P1^0;//蜂鳴器
sbit bw=P2^0;//百位
sbit sw=P2^1;//十位
sbit gw=P2^2;//個位
sbit sfw=P2^3;//十分位
uint timeh,timel,distance,time;
uchar bai,shi,ge,shifen;
bit flag;
uchar code list[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽極數(shù)碼管不帶小數(shù)點代碼數(shù)組
uchar code listtwo[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//共陽極數(shù)碼管帶小數(shù)點代碼數(shù)組
void delay(uint z)//延時z毫秒函數(shù)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=123;y>0;y--);
}
void delay20us()//延時20微秒函數(shù)
{
uchar a;
for(a=7;a>0;a--);
}
void ini()//初始化函數(shù)
{
TMOD=0x01;//設置定時器0為16位定時器/計數(shù)器
TH0=0;//定時器0高8位清0
TL0=0;//定時器0低8位清0   
flag=0;//中斷標志位置0
trig=0;//trig信號置0
EA=0;//關閉總中斷
ET0=0;//關閉定時器0中斷
EX0=0;//關閉外部中斷0中斷
}
void display(distance)//顯示函數(shù)
{
bai=distance/1000;//分離百位
shi=distance%1000/100;//分離十位
ge=distance%100/10;//分離個位
shifen=distance%10;//分離十分位
P0=list[bai];//發(fā)送百位代碼
bw=0;//顯示百位
delay(1);//延時1毫秒
bw=1;//消隱百位
P0=list[shi];//發(fā)送十位代碼
sw=0;//顯示十位
delay(1);//延時1毫秒
sw=1;//消隱十位
P0=listtwo[ge];//發(fā)送個位代碼
gw=0;//顯示個位
delay(1);//延時1毫秒
gw=1;//消隱個位
P0=list[shifen];//發(fā)送十分位代碼
sfw=0;//顯示十分位
delay(1);//延時1毫秒
sfw=1;//消隱十分位
}   
void main()//主函數(shù)
{
ini();//調用初始化函數(shù)  初始化定時器,關中斷
while(1)//無限循環(huán)
{
  uchar i;
  echo=1;//接收端置1,準備接收echo信號   這里的這句話不太懂,置1了還怎么接收回響信號輸出的高電平?
  trig=1;//發(fā)送trig信號
  delay20us();//延時20微秒
  trig=0;//發(fā)送trig信號完畢


  while(echo==0);//等待接收echo信號,如接收到echo信號則繼續(xù)執(zhí)行

  
      
  flag=0;//中斷標志位置0
  TH0=0;//定時器0高8位清0
  TL0=0;//定時器0低8位清0
  EA=1;//打開總中斷
  EX0=1;//打開外部中斷0
  TR0=1;//打開定時器0


  for(i=1000;i>0;i--)//循環(huán)顯示100次
  {
   display(distance);//調用顯示函數(shù)
  }


  EA=0;//關閉總中斷
  EX0=0;//關閉外部中斷0中斷
  TR0=0;//關閉定時器0


  if(flag==1)//如果進入中斷
  {
   time=timeh*256+timel;//計算時間
   distance=time*0.172;//計算測定距離
  }
  else//否則
  {
   distance=0;//距離為0
  }
   if(distance<200)
   {
     led=0;
   }
   else
   {
     led=1;
   }
}
}
void ex0() interrupt 0//外部中斷0中斷函數(shù)
{
timeh=TH0;//把定時器0高8位裝入timeh
timel=TL0;//把定時器0低8位裝入timel
flag=1;//中斷標志位置1
EX0=0;//關閉外部中斷0中斷
TR0=0;//關閉定時器0
}  

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:139175 發(fā)表于 2016-10-30 16:37 | 只看該作者
求解答
回復

使用道具 舉報

板凳
ID:145229 發(fā)表于 2016-10-30 17:14 | 只看該作者

回帖獎勵 +5 黑幣

把echo端置1是因為到接收到回波時echo會變?yōu)榱?通過定時計算這段時間能算出距離
回復

使用道具 舉報

地板
ID:123732 發(fā)表于 2016-10-30 18:45 | 只看該作者

回帖獎勵 +5 黑幣

這句沒有用,刪掉echo=1;//接收端置1,準備接收echo信號
回復

使用道具 舉報

5#
ID:111634 發(fā)表于 2016-10-30 19:11 | 只看該作者

回帖獎勵 +5 黑幣

本帖最后由 zl2168 于 2016-10-30 19:14 編輯

51單片機復位時,各I/O端口均自動置1,除非在程序中清過0,它將始終保持置1。因此echo=1雖然無用,但也無害。I/O端口置1的作用是準備接受輸入信號,I/O=1,輸入信號可傳輸?shù)綌?shù)據(jù)總線上;I/O=0,輸入信號將被對地短路,這是由51單片機I/O端口的硬件電路決定的。。
回復

使用道具 舉報

6#
ID:139175 發(fā)表于 2016-10-30 22:53 | 只看該作者
zl2168 發(fā)表于 2016-10-30 19:11
51單片機復位時,各I/O端口均自動置1,除非在程序中清過0,它將始終保持置1。因此echo=1雖然無用,但也無害 ...

我感覺這個程序寫的不是很規(guī)范,外部中斷0的觸發(fā)方式也沒定義,請問你覺得這段程序寫的怎么樣?
回復

使用道具 舉報

7#
ID:111634 發(fā)表于 2016-10-31 07:57 | 只看該作者
本帖最后由 zl2168 于 2016-10-31 08:01 編輯
keil 發(fā)表于 2016-10-30 22:53
我感覺這個程序寫的不是很規(guī)范,外部中斷0的觸發(fā)方式也沒定義,請問你覺得這段程序寫的怎么樣?

我一般不看人家的程序,有看人家程序的時間,我自己已經寫好了。
希望初學者不要看網上這種不靠譜的程序,以免浪費時間。
找一些靠譜的書,認真研讀,必有收獲,才是正道。
回復

使用道具 舉報

8#
ID:111634 發(fā)表于 2016-10-31 08:09 | 只看該作者
本帖最后由 zl2168 于 2016-10-31 08:14 編輯

本網站常有人將調不通的程序讓“大神”診斷,而且這些程序冗長且無必要的注釋,讓人猜謎揣摩么?為什么不找一些可靠即肯定能調通的程序仿真研讀呢?若欲了解某一條語句錯了以后的副作用,你可以改錯后再仿真,看看后果。
改變學習方法,拿正確的程序改錯后去辨析,不要拿錯誤的程序去辨析,這樣太費時,甚至可能得不到正確的解答。
回復

使用道具 舉報

9#
ID:139175 發(fā)表于 2016-11-2 11:37 | 只看該作者
zl2168 發(fā)表于 2016-10-31 08:09
本網站常有人將調不通的程序讓“大神”診斷,而且這些程序冗長且無必要的注釋,讓人猜謎揣摩么?為什么不找 ...

謝謝指導
回復

使用道具 舉報

10#
ID:139175 發(fā)表于 2016-11-2 11:38 | 只看該作者
問題已得到解答,謝謝大家
回復

使用道具 舉報

11#
ID:7485 發(fā)表于 2016-11-2 14:32 | 只看該作者

回帖獎勵 +5 黑幣

這是一個許多初學者都感到迷茫的問題。51單片機的IO的讀和寫是不一樣的,讀端口,寫寄存器。所以在讀端口之前,都要將端口寄存器置1,否則將有可能會出錯。當然51單片機IO上電初始化后的默認狀態(tài)就是高電位,但是當程序運行以后難免會有改變的情況,所以規(guī)范的程序寫法就應該先置1。
對于單片機的基本特性還是要讀懂才好。
回復

使用道具 舉報

12#
ID:7485 發(fā)表于 2016-11-2 14:36 | 只看該作者
自己糾正一下:嚴格說,IO端口是鎖存器。
回復

使用道具 舉報

13#
ID:470469 發(fā)表于 2019-1-19 23:44 | 只看該作者
樓主我被學長要求也是寫這個代碼,現(xiàn)在有幾個疑惑的地方想請教一下你,不麻煩的話可以加下我QQ603619540
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 麻豆国产一区二区三区四区 | 成人免费一区二区三区视频网站 | 日韩中文字幕 | 国产一区二区三区四区 | 欧美精品网 | 91精品久久久 | 久久毛片 | 啪啪精品 | 7777在线| 中文字幕日韩欧美一区二区三区 | 成人在线观看亚洲 | 男女视频在线观看 | 精品一区二区三区在线视频 | 国产成人av一区二区三区 | 美女视频一区 | 亚洲精品福利在线 | av喷水 | 国产欧美一区二区三区免费 | 亚洲v区| 色精品| 福利一区视频 | 欧美 日韩 视频 | 伊人春色在线 | 日韩91 | 国产1区2区在线观看 | 久久不卡 | 四虎影院欧美 | 91看片网 | 视频1区 | 国产日韩精品在线 | 精品亚洲一区二区三区 | 午夜丰满寂寞少妇精品 | 日韩在线日韩 | 在线观看日韩精品视频 | 亚洲成人av在线播放 | 久久久精彩视频 | av资源网站 | 国产亚洲一区二区三区 | 精品久久久久久久久久久久久久 | www.日本三级 | 久久中文字幕视频 |