欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機通過兩個固定的光電開關測量勻速運動物體的速度,程序問題 [打印本頁]

作者: asult    時間: 2019-3-12 21:49
標題: 單片機通過兩個固定的光電開關測量勻速運動物體的速度,程序問題
本人想通過兩個固定的光電開關(兩個傳感器間距離已固定)作為觸發傳感器,來測量勻速運動物體的速度。通過定時器0來及時,怎么獲取物體經過兩個傳感器間的時間?
#include <reg52.h>
#include <math.h>
/*********************************/
unsigned char i=0;
unsigned char j=0;
sbit sk1=P3^2;                  //sk1為第一個位置傳感器
sbit sk2=P3^3;                  //sk2為第二個位置傳感器
bit flag1;
bit flag2;
/*********************************/
void ZD_initial();

/*********************************/
void ZD_initial()                 //定時器0初始化函數
{
  TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;                         //定時器1打開
}
/*********************************/

void main()                     //主函數
{
if(flag1=!sk1)
  {
     flag1=sk1;
     if(flag1==0)     //下降沿
       {
        ZD_initial();
        while(1)
                {
                t++;                  //以50ms累計計時
               if(TR0==0)break;
                }
               t=t*20             //單位為秒
       }
      
  }

}

/********************************/
void timer0() interrupt 1      //定時器0中斷函數
{
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
   if(flag2=!sk2)
      {
      flag2=sk2;
      if(flag2==0)             //下降沿
          {
          TR0=0;
          }   
      }
}

作者: HC6800-ES-V2.0    時間: 2019-3-13 08:42
給你一個思路:
設置定時器工作方式為1,如定時器0:TMOD=0x01;初值為0
當物體經過第一個光電開關時,打開TR0=1,即打開定時器
當物體經過第二個光電開關時,關閉TR)=0,即關閉定時器
此時,定時器的TH0、TL0的值,就是物體通過兩開關的時間,這個時間是以微秒為單位的。

大致的程序可以這樣寫:
                while(!GDKG1);//光電開關1被觸發時為高電平,此語句在等待被觸發
                TR0=1;//一但光電開關1被觸發,就開定時器
                while(!GDKG2);//等待光電開關2被觸發
                TR0=0;//一但光電開關2被觸發,就關定時器
                time=TH0*256+TL0;//此時定時器0的數據就是以us為單位的時間——注意:時間的多少與晶振
                                             //的值有關,我這里是以12M晶振、單片機12分頻而得到的值。看你的程序
                                            //是51單片機,可能是一樣的吧。

作者: zhb2004xp    時間: 2019-3-14 00:50
1、使用定時器0作為計時,初始化時不要啟動定時器;
2、設置外部中斷0(第1個傳感器P32=外部中斷0),被觸發后,在外部中斷0服務函數中啟動定時器0,累加計時;
3、設置外部中斷1(第2個傳感器P33=外部中斷1),被觸發后,在外部中斷1服務函數中停止定時器0,讀取計時數據;
作者: 子非魚001    時間: 2019-11-7 14:03
兄弟,這個問題解絕了嗎?
作者: CZ1    時間: 2019-11-8 14:44
光電門不是有物體輸出低電平么,你可以使用兩個光電門接在單片機的外部中斷口上利用外部中斷0執行開啟計時器,利用外部中斷1關閉定時器。注意定時器就不要開啟中斷了,你直接使用查詢的方式就好了
作者: 來51學習1    時間: 2019-11-8 15:42















歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1