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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機定時器中斷 定時問題求解

[復制鏈接]
跳轉到指定樓層
樓主
ID:1022878 發表于 2022-5-4 00:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
現在正在做一個超聲波距離報警,假設距離30cm范圍內,每20min重新檢測一次,大于30cm2min重新檢測一次。還有一個其他的滿足條件10min重新檢測一次
但是!!!一直調不好時間。。。。請幫我看看這么寫對嗎?

單片機源程序如下:
  1. void tmer1(void) interrupt 3
  2. {
  3.         uchar num,num1,num2;
  4.         TH1 =0x3c;
  5.         TL1 =0xb0;
  6.         switch(flag_time)        
  7.         {
  8.                 case 1:
  9.                                                                         num++;
  10.                                                                         if(num == 20)// 20*50=1s
  11.                                                                         {  
  12.                                                                                 num =0;
  13.                                                                                 num1++;
  14.                                                                                 if(num1 == 60)//1min
  15.                                                                                 {
  16.                                                                                         num1 =0;
  17.                                                                                         num2++;
  18.                                                                                         if(num2 == 2)
  19.                                                                                         {
  20.                                                                                                 num2 = 0;
  21.                                                                                         LED6 =0;
  22.                                                                                         }
  23.                                                                                 }
  24.                                                                         }
  25.                                                                                 break;
  26.                 case 2:
  27.                                                                         num++;
  28.                                                                         if(num == 20)// 20*50=1s
  29.                                                                         {  
  30.                                                                                 num =0;
  31.                                                                                 num1++;
  32.                                                                                 if(num1 == 60)//1min
  33.                                                                                 {
  34.                                                                                         num1 =0;
  35.                                                                                         num2++;
  36.                                                                                         if(num2== 10)
  37.                                                                                         {
  38.                                                                                                 num2 = 0;
  39.                                                                                                 LED7 = 0;
  40.                                                                                         }
  41.                                                                                 }
  42.                                                                         }
  43.                                                                                 break;
  44.                 case 3:
  45.                                                                         num++;
  46.                                                                         if(num == 20)// 20*50=1s
  47.                                                                         {  
  48.                                                                                 num =0;
  49.                                                                                 num1++;
  50.                                                                                 if(num1 == 60)//1min
  51.                                                                                 {
  52.                                                                                         num1 =0;
  53.                                                                                         num2++;
  54.                                                                                         if(num2 == 30)
  55.                                                                                         {
  56.                                                                                                 num2 = 0;
  57.                                                                                                 LED8 =0;
  58.                                                                                         }
  59.                                                                                 }
  60.                                                                         }
  61.                                                                                 break;        
  62. }                                                                                

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

使用道具 舉報

沙發
ID:624769 發表于 2022-5-4 03:00 | 只看該作者
供參考

  1. void tmer1(void) interrupt 3
  2. {
  3.         static uchar num,num1,num2;
  4.         TH1 =0x3c;
  5.         TL1 =0xb0;
  6.         if(++num == 20)// 20*50=1s
  7.         {  
  8.                 num =0;
  9.                 if(++num1 == 60)//1min
  10.                 {
  11.                         num1 =0;
  12.                         num2++;
  13.                         switch(flag_time)        
  14.                         {
  15.                                 case 1:
  16.                                         if(num2 == 2)
  17.                                         {
  18.                                                 num2 = 0;
  19.                                                 LED6 = 0;
  20.                                         }
  21.                                         break;
  22.                                 case 2:
  23.                                         if(num2== 10)
  24.                                         {
  25.                                                 num2 = 0;
  26.                                                 LED7 = 0;
  27.                                         }
  28.                                         break;
  29.                                 case 3:
  30.                                         if(num2 == 30)
  31.                                         {
  32.                                                 num2 = 0;
  33.                                                 LED7 = 1;
  34.                                         }
  35.                                         break;
  36.                                 default:
  37.                                         break;
  38.                         }                                                                                
  39.                 }
  40.         }
  41. }
復制代碼
回復

使用道具 舉報

板凳
ID:213173 發表于 2022-5-4 06:46 | 只看該作者
局部變量num,num1,num2;要聲明為靜態static或改為全局變量。
  1. void tmer1(void) interrupt 3
  2. {
  3.         static uint  num;
  4.         static uchar min;
  5.         TH1 =0x3c;
  6.         TL1 =0xb0;
  7.         if(++num >= 1200)// 60*0.05=1s
  8.         {  
  9.                 num=0;
  10.                 min++;
  11.         }
  12.         switch(flag_time)        
  13.         {
  14.                 case 1: if(min== 2){LED6=0;LED7=1;LED8=1;min=0;}break;
  15.                 case 2: if(min==10){LED6=1;LED7=0;LED8=1;min=0;}break;
  16.                 case 3: if(min==20){LED6=1;LED7=1;LED8=0;min=0;}break;
  17.         }
  18. }
復制代碼
回復

使用道具 舉報

地板
ID:1022878 發表于 2022-5-4 11:11 | 只看該作者
wulin 發表于 2022-5-4 06:46
局部變量num,num1,num2;要聲明為靜態static或改為全局變量。

還是不行,我想我的中斷就沒有執行。可以幫看一下程序嗎
回復

使用道具 舉報

5#
ID:121859 發表于 2022-5-4 14:41 | 只看該作者
代碼不全呀,是不是沒有初始化定時器,中斷打開了嗎?定時器啟動了嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本在线一区二区三区 | 亚洲人成一区二区三区性色 | 在线国产一区二区 | 亚洲精品久久 | 国产99免费| www.国产精品 | 久久国产一区二区 | 日韩成人在线观看 | 黄色av网站在线观看 | 成人精品国产一区二区4080 | 欧美a级网站 | 91久久国产综合久久 | 盗摄精品av一区二区三区 | 一区二区在线不卡 | 国产在线一区二区三区 | 国产第一亚洲 | 国产一级免费视频 | 天天操天天摸天天爽 | 亚洲一在线| 成人伊人| 国产精品久久久99 | 一级片成人 | 亚洲一本 | 成年人黄色免费视频 | 日韩在线播放中文字幕 | 亚洲欧美国产精品一区二区 | 国产精品久久久久久婷婷天堂 | 国产专区在线 | 一区二区三区 在线 | 日韩欧美在线观看视频 | 国产精品久久久久久久久久久久 | 国产在线高清 | 国产精品久久久久久中文字 | 最近中文字幕第一页 | 毛片网站免费观看 | 91一区二区三区在线观看 | 草草视频在线观看 | 日韩第一夜 | 99久久精品国产一区二区三区 | 91免费小视频| 日韩成人精品 |