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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于單片機PWM呼吸燈程序的幾個問題,求解答

[復制鏈接]
跳轉到指定樓層
樓主
ID:903260 發表于 2021-4-9 23:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  這是我編寫的PWM呼吸燈程序,但是只有在中斷里面加上while(1)循環他才能呼吸。沒有這個while直接就不亮了,但我看別人的呼吸燈函數中斷內沒有while循環也能呼吸,這是為什么?
  還有一個問題,加上while循環后的呼吸燈在逐漸變暗的時候“燈亮滅的抖動”明顯,怎么能讓他看起來流暢一點。

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

  2. typedef unsigned char u8;
  3. typedef unsigned int u16;

  4. sbit LED = P2^0;

  5. u16 timer1, count, value;
  6. bit flag;

  7. void TimeInit()//¶¨ê±1us
  8. {
  9.         TMOD |= 0x10;
  10.         TH1 = 0xFF;
  11.         TL1 = 0xFF;
  12.         TR1 = 1;
  13.         EA = 1;
  14.         ET1 = 1;
  15. }

  16. void main()
  17. {
  18.                 LED = 1;
  19.                 timer1 = 0;
  20.                 count = 0;
  21.                 value = 0;
  22.                 flag = 0;
  23.                 TimeInit();
  24.                 while(1);
  25. }

  26. void Time() interrupt 2
  27. {
  28.         TH1 = 0xFF;
  29.         TL1 = 0xFF;
  30.         //while(1)
  31. //        {
  32.                 timer1++;
  33.                 count++;
  34.                         if(timer1 == 1000)
  35.                         {
  36.                                 timer1 = 0;
  37.                                 LED = 1;
  38.                         }
  39.                         if(count == 100)
  40.                         {
  41.                                 count = 0;
  42.                                 if(flag == 0)
  43.                                 {
  44.                                         value++;
  45.                                 }
  46.                                 if(flag == 1)
  47.                                 {
  48.                                         value--;
  49.                                 }
  50.                         }
  51.                         if(value == 1000)
  52.                         {
  53.                                 flag = 1;
  54.                         }
  55.                         if(value == 0)
  56.                         {
  57.                                 flag = 0;
  58.                         }
  59.                         if(value > timer1)
  60.                         {
  61.                                 LED = 0;
  62.                         }
  63.                         else
  64.                         {
  65.                                 LED = 1;
  66.                         }
  67.         //        }
  68. }
復制代碼

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

使用道具 舉報

沙發
ID:89515 發表于 2021-4-10 08:41 來自觸屏版 | 只看該作者
51是溢出中斷還是匹配中斷?如果是溢出中斷的話,你的初值不合適,雖然邏輯沒錯但是定時器溢出太頻繁了,根本無法正常運行。就模擬占空比控制LED而言,1ms時基絕對沒問題。雖然寫的很復雜,邏輯好像沒錯,修改定時器溢出時間后如果led顯示不平滑可更改你的count。
回復

使用道具 舉報

板凳
ID:89515 發表于 2021-4-10 09:05 來自觸屏版 | 只看該作者
溢出時間重設,不然無法正常中斷。減小count
回復

使用道具 舉報

地板
ID:894154 發表于 2021-4-10 10:32 | 只看該作者
你在定時中斷里面加while(1)的結果就是程序就在定時中斷里面跑不出來了
將執行LED代碼放到主函數里面,定時中斷函數只負責計算時間 重置標志位
回復

使用道具 舉報

5#
ID:390416 發表于 2021-4-10 11:33 | 只看該作者
PWM程序 STC89單片機 定時器做 http://www.zg4o1577.cn/bbs/dpj-200820-1.html
回復

使用道具 舉報

6#
ID:903260 發表于 2021-4-12 17:07 | 只看該作者
  1. #include "reg52.h"

  2. typedef unsigned char u8;
  3. typedef unsigned int u16;

  4. sbit LED = P2^0;

  5. u16 timer1, count, value;
  6. bit flag;

  7. void TimeInit()//¶¨ê±1us
  8. {
  9.         TMOD |= 0x01;
  10.         TH0 = 0xFF;
  11.         TL0 = 0xFF;
  12.        
  13.         //TR0 = 1;
  14.         EA = 1;
  15.         ET0 = 1;
  16. }

  17. void main()
  18. {
  19.                 LED = 1;
  20.                 timer1 = 0;
  21.                 count = 0;
  22.                 value = 0;
  23.                 flag = 0;
  24.                 TimeInit();
  25.         while(1)
  26.         {
  27.                 TR0 = 1;
  28.                 if(timer1 == 1000)
  29.                         {
  30.                                 timer1 = 0;
  31.                                 LED = 1;
  32.                         }
  33.                         if(count == 100)
  34.                         {
  35.                                 count = 0;
  36.                                 if(flag == 0)
  37.                                 {
  38.                                         value++;
  39.                                 }
  40.                                 if(flag == 1)
  41.                                 {
  42.                                         value--;
  43.                                 }
  44.                         }
  45.                         if(value == 1000)
  46.                         {
  47.                                 flag = 1;
  48.                         }
  49.                         if(value == 0)
  50.                         {
  51.                                 flag = 0;
  52.                         }
  53.                         if(value > timer1)
  54.                         {
  55.                                 LED = 0;
  56.                         }
  57.                         else
  58.                         {
  59.                                 LED = 1;
  60.                         }
  61.                 }
  62. }

  63. void Time() interrupt 1
  64. {
  65.         TH0 = 0xFF;
  66.         TL0 = 0xFF;
  67.         timer1++;
  68.         count++;
  69. }
復制代碼


我重新排了一下,這直接不亮了。。。
回復

使用道具 舉報

7#
ID:903260 發表于 2021-4-12 17:27 | 只看該作者
時間我不知道怎么設置好了。。。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产乱码精品一区二区三区五月婷 | 亚洲视频免费在线看 | 国产精品久久久久久 | 91精品国产91久久久久久三级 | 久久婷婷国产香蕉 | 亚洲最大av网站 | 欧美日韩国产传媒 | 日韩成人在线观看 | 国产欧美一区二区久久性色99 | 国产欧美在线播放 | 欧美成人精品在线 | 一本一道久久a久久精品综合蜜臀 | 亚洲精品一区二区三区中文字幕 | 天天久 | 91久久夜色精品国产网站 | www.9191.com| 一区二区三区免费 | 中文av网站 | 成人免费网视频 | 五月婷亚洲 | 亚洲成人免费视频在线观看 | 久久综合狠狠综合久久综合88 | 五月婷婷在线播放 | 国产精品福利久久久 | 天堂中文在线观看 | 午夜小影院 | 福利av在线| 91精品一区 | 精品综合久久 | 国内精品久久影院 | 欧美 日韩 国产 成人 | 91久久国产精品 | 日韩国产欧美视频 | 久久久久se| 日韩一区二区免费视频 | 久久久久网站 | 国产婷婷精品av在线 | 亭亭五月激情 | 日韩视频精品 | av在线黄 | 日韩在线91 |