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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機通過兩個固定的光電開關測量勻速運動物體的速度,程序問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:128279 發表于 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;
          }   
      }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:164602 發表于 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單片機,可能是一樣的吧。
回復

使用道具 舉報

板凳
ID:234075 發表于 2019-3-14 00:50 | 只看該作者
1、使用定時器0作為計時,初始化時不要啟動定時器;
2、設置外部中斷0(第1個傳感器P32=外部中斷0),被觸發后,在外部中斷0服務函數中啟動定時器0,累加計時;
3、設置外部中斷1(第2個傳感器P33=外部中斷1),被觸發后,在外部中斷1服務函數中停止定時器0,讀取計時數據;
回復

使用道具 舉報

地板
ID:603160 發表于 2019-11-7 14:03 | 只看該作者
兄弟,這個問題解絕了嗎?
回復

使用道具 舉報

5#
ID:560467 發表于 2019-11-8 14:44 | 只看該作者
光電門不是有物體輸出低電平么,你可以使用兩個光電門接在單片機的外部中斷口上利用外部中斷0執行開啟計時器,利用外部中斷1關閉定時器。注意定時器就不要開啟中斷了,你直接使用查詢的方式就好了
回復

使用道具 舉報

6#
ID:617449 發表于 2019-11-8 15:42 | 只看該作者










回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区黄 | 亚洲国产成人av好男人在线观看 | 日本成人中文字幕在线观看 | 久久亚洲欧美日韩精品专区 | 久久精品国产久精国产 | 国产午夜精品久久久久 | av日韩在线播放 | 97av视频在线观看 | 欧美黄色片 | 91视频进入 | 精品久久精品 | 久操伊人| 一级特黄视频 | 国产一区二区三区在线看 | 欧美激情在线精品一区二区三区 | 男插女下体视频 | 欧美精品一区二区三区蜜桃视频 | 国产一区二区三区免费 | 黄视频欧美 | 欧美一区二区三区的 | 欧美一区二区三区国产精品 | 国产日韩欧美在线观看 | 99久久久久久久 | 黄色大片免费播放 | 亚洲成人精品免费 | 精品99久久久久久 | 日韩在线精品视频 | 日韩成人av在线 | 夜色www国产精品资源站 | 久久久久久av| 亚洲日本乱码在线观看 | 国产精品99视频 | www.久久久久久久久久久久 | 玖玖国产| 欧美一级在线 | 亚洲一区二区三区四区五区中文 | 欧美视频在线播放 | 国产98色在线 | 日韩 | 天天精品在线 | 在线观看视频一区 | 欧美午夜一区 |