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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機判斷低電平持續時間請問我的源碼哪里出錯了?

[復制鏈接]
跳轉到指定樓層
樓主
ID:718523 發表于 2020-5-29 00:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
下面的代碼運行的結果是LED錯亂,感覺每個燈的閃爍是隨機的好像沒有規律并不是按照我的代碼執行的。我要的結果是低電平持續時間1秒時D3閃兩下,持續時間是2秒時D2閃兩下,持續時間是3秒時D1閃兩下。大佬幫我看下吧。

單片機源程序如下:
  1. #include<reg51.h>  //  包含51單片機寄存器定義的頭文件
  2. #define uint unsigned int //unsigned是無符號,int是整型。定義uint為無符號整型。
  3. unsigned char Countor; //設置全局變量,儲存定時器T0中斷次數
  4. sbit D0=P1^0;
  5. sbit D1=P1^1;
  6. sbit D2=P1^2;
  7. sbit D3=P1^3;

  8. /**************************************************************
  9. 函數功能:延時 delayms(1000); 1秒
  10. **************************************************************/
  11. void Delay1ms()                //@12.000MHz
  12. {
  13.         unsigned char i, j;

  14.         i = 2;
  15.         j = 239;
  16.         do
  17.         {
  18.                 while (--j);
  19.         } while (--i);
  20. }

  21. void delayms(uint x)
  22. {
  23.         while(x--)Delay1ms();
  24. }

  25. /**************************************************************
  26. 函數功能:主程序
  27. **************************************************************/
  28. void main(void){
  29.         while(1){
  30.         while(D0==0);//等待眼前的低電平過去
  31.         while(D0==1);//等待下一個低電平來到
  32.                 if(D0 == 0){
  33.             EA=1;                  //開總中斷
  34.                 ET0=1;                 //定時器T0中斷允許         
  35.                 TMOD=0x01;             //使用定時器T0的模式2
  36.                 TH0=(65536-46083)/256; //定時器T0的高8位賦初值
  37.                 TL0=(65536-46083)%256; //定時器T0的高8位賦初值
  38.                 TR0=1;                 //啟動定時器T0
  39.                 Countor=0;            //從0開始累計中斷次數
  40.                 //while(D0-1);//無限循環等待中斷
  41.                 while(D0==0);//等待低電平結束
  42.                 TR0=0;//關閉定時器                                 
  43.                 //T=N*65536+TH0*256+TL0; //N是定時器溢出次數

  44. if(Countor>=60)  //若累計滿20次,即計時滿1s
  45. {
  46.         D1=0;delayms(1000);D1=1;delayms(1000);D1=0;delayms(1000);D1=1;
  47.         Countor=0;  //將Countor清0,重新從0開始計數
  48.         
  49. }
  50. if(Countor>=40)  //若累計滿20次,即計時滿1s
  51. {
  52.         D2=0;delayms(1000);D2=1;delayms(1000);D2=0;delayms(1000);D2=1;
  53.         Countor=0;  //將Countor清0,重新從0開始計數
  54. }
  55. if(Countor>=20)  //若累計滿20次,即計時滿1s
  56. {
  57.         D3=0;delayms(1000);D3=1;delayms(1000);D3=0;delayms(1000);D3=1;
  58.         Countor=0;  //將Countor清0,重新從0開始計數
  59. }


  60.                                    }
  61.          }
  62.       
  63. }


  64. /**************************************************************
  65. 函數功能:定時器T0的中斷服務程序
  66. **************************************************************/
  67. void Time0(void) interrupt 1 using 0 //“interrupt”聲明函數為中斷服務函數
  68.                  //其后的1為定時器T0的中斷編號;0表示使用第0組工作寄存器
  69. {
  70.    Countor++;   //中斷次數自加1               
  71.           TH0=(65536-46083)/256; //定時器T0的高8位重新賦初值
  72.         TL0=(65536-46083)%256; //定時器T0的高8位重新賦初值
  73. }
復制代碼



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

使用道具 舉報

沙發
ID:660091 發表于 2020-5-29 09:14 | 只看該作者
首先,你把初始化這些也放到while(1)里面去了
其次, Countor>20時就執行第三個if(這個if里面把 Countor清零了),也就是前兩個if永遠無法執行,
回復

使用道具 舉報

板凳
ID:476599 發表于 2020-5-29 09:26 | 只看該作者
你這個不管按下幾秒都是閃2下?感覺沒看明白,都是閃2下要區分嗎?
回復

使用道具 舉報

地板
ID:389856 發表于 2020-5-29 10:56 | 只看該作者
本帖最后由 墨梔 于 2020-5-29 13:00 編輯

定時器工作方式2只有低八位參與計數,高八位存的是預置值,而且一般定時器計數器都會用工作方式1,方式2用于波特率發生器
回復

使用道具 舉報

5#
ID:389856 發表于 2020-5-29 11:09 | 只看該作者
發現你的程序邏輯是先等待當前低電平過去,再對下一個低電平計時,計時完循環,如果判斷D0的時候是低電平,那就要等待這一個低電平過去,再對下個低電平計時。這種情況如果你的D0輸入不是一個高低電平時間等長的信號,那就很可能出現亂閃的情況了
回復

使用道具 舉報

6#
ID:401564 發表于 2020-5-29 19:15 | 只看該作者
STC的51單片機都有設定成上升沿和下降沿中斷的
1:你把外部中斷設定成下降沿和上升沿中斷
2:進入中斷之后先判斷觸發中斷的引腳電平:高電平就是上升沿觸發,低電平就是上升沿觸發
3:如果是低電平就開始計時,可以使用定時器,如果是高電平就停止計時,然后退出中斷
這不就完事了嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美1—12sexvideos | 亚洲国产aⅴ精品一区二区 免费观看av | 香蕉婷婷 | av在线一区二区三区 | 欧美日韩亚洲国产 | 亚洲国产精品自拍 | 久久精品国产99国产精品 | 国产精品一区二区三 | 色综合桃花网 | 亚洲区一区二区 | 欧美一区二区三区在线视频 | 欧美激情一区二区三级高清视频 | 精品一区视频 | 久久精品亚洲精品 | 盗摄精品av一区二区三区 | 免费一区 | 国产精品久久久久久久久久三级 | 毛片免费看 | 日韩免费视频一区二区 | 91精品国产综合久久香蕉922 | 国产a区 | 人人精品| 亚洲一区二区三区在线免费 | 操久久| 成人国产精品久久 | 日韩在线国产精品 | 国产欧美精品区一区二区三区 | 狠狠做深爱婷婷综合一区 | 黄色成人国产 | 美女毛片免费看 | 91手机精品视频 | www.中文字幕.com | 九久久| 国产精品美女久久久久久免费 | 男女午夜免费视频 | 日本高清不卡视频 | 天天色天天色 | 国产99久久精品一区二区永久免费 | 九九久久久 | 亚洲一区 中文字幕 | 久久69精品久久久久久久电影好 |