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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

這個單片機程序想實現光電測速傳感器來測被擋光的時間,哪里有問題?感覺中斷沒啟動

[復制鏈接]
跳轉到指定樓層
樓主
ID:663645 發表于 2019-12-14 12:03 來自手機 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
我想用這個程序測量光電測速傳感器被擋住的時間,此光電測速傳感器沒遮擋時輸出低電平,擋住時輸出高電平,但感覺中斷沒啟動。我想用來做一個光電門,測量擋光的時間

單片機源程序如下:
  1. #include<reg52.h>

  2. unsigned long int cnt;
  3. unsigned long int t;//長整型,時間

  4. sbit in=P3^2;     //信號輸入口

  5. sbit dula=P2^6;
  6. sbit wela=P2^7;
  7. unsigned char code table_du[]={
  8. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,
  9. 0x7d,0x07,0x7f,0x6f,0x77,0x7c,
  10. 0x39,0x5e,0x79,0x71};
  11. unsigned char code table_we[]={
  12. 0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

  13. unsigned char disnum[6];



  14. delay(unsigned char x)
  15. {
  16.         unsigned char a,b;
  17.         for(a=x;a>0;a--)
  18.                 for(b=200;b>0;b--);

  19. }

  20. timedis(void)
  21. {
  22.    
  23.         disnum[0]=t/10000000;
  24.         disnum[1]=(t%10000000)/1000000;
  25.         disnum[2]=(t%1000000)/100000;
  26.         disnum[3]=(t%100000)/10000;
  27.         disnum[4]=(t%10000)/1000;
  28.         disnum[5]=(t%1000)/100;
  29.         

  30. }
  31. display()
  32. {
  33.         unsigned char i;
  34.         for(i=0;i<6;i++)
  35.         {
  36.                 P0=0xff;
  37.                 wela=1;
  38.                 wela=0;
  39.                 P0=table_du[disnum[i]];
  40.                 dula=1;
  41.                 dula=0;
  42.                 P0=table_we[i];
  43.                 wela=1;
  44.                 wela=0;
  45.                 delay(5);
  46.         }
  47. }


  48. void int0() interrupt 0
  49. {
  50.         t=cnt;
  51.     cnt=0;
  52.         
  53. }

  54. void timer0 () interrupt 1
  55. {
  56.     TH0=(65536-100)/256;
  57.     TL0=(65536-100)%256;
  58.         cnt++;
  59. }


  60. void main()
  61. {
  62.         TMOD=0x09;
  63.     TH0=(65536-100)/256;
  64.     TL0=(65536-100)%256;
  65.         TR0=0;  
  66.     ET0=1;
  67.         
  68.     IT0=1;
  69.         EX0=1;
  70.         EA=1;        
  71.         
  72.     while(1)
  73.         {
  74.                 if(in==0)
  75.                 {
  76.             TR0=1;
  77.         }
  78.         timedis();
  79.                 display();
  80.         }
  81. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:235200 發表于 2019-12-14 16:43 | 只看該作者
如果程序沒問題,應該是從擋住光到不擋光會發生中斷,如果要擋住光發生中斷,需把信號反相(可用非門或單個三極管),目前不知道你傳感器是如何接入P32的,程序中看不出
回復

使用道具 舉報

板凳
ID:648281 發表于 2019-12-14 17:27 | 只看該作者
你好!把 in 為高的時候,作為結束,算出期間經過的時間;以前做過小球下落時間檢測的實物。。。












回復

使用道具 舉報

地板
ID:663645 發表于 2019-12-14 19:49 來自手機 | 只看該作者
csmyldl 發表于 2019-12-14 16:43
如果程序沒問題,應該是從擋住光到不擋光會發生中斷,如果要擋住光發生中斷,需把信號反相(可用非門或單個三極 ...

謝謝你的指導,光電傳感器的輸出直接接p3.2口的,我是想用定時器TMOD 0x09模式(Gate=1),先TR0=0,不啟動定時器,然后在while循環中檢測in是否為低電平,再TR0=1,等in為高電平時才會開啟定時器,等高電平變為低電平時由外部中斷(設置為下降沿觸發)讀取時間,這個邏輯是否行得通?
回復

使用道具 舉報

5#
ID:663645 發表于 2019-12-14 20:42 來自手機 | 只看該作者
QQ搜3205931140 發表于 2019-12-14 17:27
你好!把 in 為高的時候,作為結束,算出期間經過的時間;以前做過小球下落時間檢測的實物。。。



謝謝您的指導
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩欧美精品一区二区三区 | 日韩精品一区二区三区在线 | 毛片毛片毛片毛片 | 国产一区二区精品 | 成人免费观看男女羞羞视频 | 久久精品青青大伊人av | 综合精品久久久 | 国产伦一区二区三区视频 | 激情网站 | 亚洲国产一区二区三区在线观看 | 天天操天天玩 | 日韩高清中文字幕 | 天堂一区二区三区 | 亚洲一区在线免费观看 | 在线观看成人精品 | 亚洲视频手机在线 | 欧美一区二区视频 | 欧美激情视频一区二区三区免费 | 国产伦精品 | 日韩精品一区二区三区在线播放 | 欧美精品99 | 亚洲精品久久久久久一区二区 | 成人免费片 | 天天射夜夜操 | 日韩欧美高清 | 日本成人福利视频 | 国产视频三级 | 91中文 | 69av网| 欧美黑人一区 | 99久久婷婷国产综合精品电影 | 国产视频第一页 | 久久久久久久99 | 日韩免费视频一区二区 | a级免费观看视频 | jlzzjlzz国产精品久久 | 伊人激情网 | 九九久久这里只有精品 | 91久久精品国产 | 久久精品国产一区二区 | 欧美视频免费在线 |