欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機定時產生pwm波程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:161768 發(fā)表于 2017-3-13 02:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
PWM(脈寬調制)在很多場合都用得上,例如LED亮度控制,開關電源輸出電圧控制等。
這里采用簡單的定時器實現PWM波輸出,通過更改定時器定時參數,控制IO口輸出
波形高低電平持續(xù)時間,實現PWM波。

代碼如下:
  1. #include<reg52.h>

  2. #define T0_INTERRUPT 1  //T0中斷向量號
  3. #define PWMH_L 0x9C
  4. #define PWMH_H 0xFF   //PWM低電平時間0.1ms

  5. #define PWML_L 0xCE
  6. #define PWML_H 0xFF    //PWM高電平時間0.05ms

  7. sbit LED1 = P1^0;   //常亮LED,作為對比,仿真看不出效果
  8. sbit LED2 = P1^1;    //PWM驅動LED



  9. typedef unsigned char uchar;
  10. typedef unsigned int uint;

  11. void Init_T0();

  12. void main()
  13. {
  14.     LED1 = 0;      //點亮LED1
  15.     LED2 = 1;      //熄滅LED2
  16.     Init_T0();    //初始化定時器0
  17.     while(1)
  18.     {
  19.         PCON |= 0x01; //單片機進入休眠模式,節(jié)省功耗
  20.     }
  21. }

  22. void Init_T0()
  23. {
  24.     TMOD &= 0xF0;
  25.     TMOD |= 0x01;  //16位定時器模式
  26.    
  27.     TH0 = PWML_H;
  28.     TL0 = PWML_L;
  29.    
  30.     EA = 1;       //開全局中斷
  31.     ET0 = 1;      //允許T0中斷
  32.     TR0 = 1;      //啟動定時器
  33. }

  34. void T0_Interrupt() interrupt T0_INTERRUPT
  35. {
  36.     TF0 = 0;
  37.     if(LED2 == 1)
  38.     {
  39.         LED2 = 0;        //設置低電平持續(xù)時間,LED2亮
  40.         TH0 = PWMH_H;
  41.         TL0 = PWMH_L;
  42.     }
  43.     else
  44.     {
  45.         LED2 = 1;        //設置高電平持續(xù)時間,LED2滅        
  46.         TH0 = PWML_H;
  47.         TL0 = PWML_L;
  48.     }
  49. }
復制代碼




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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表