找回密码
 注册
关于网站域名变更的通知
查看: 322|回复: 1
打印 上一主题 下一主题

51单片机定时产生pwm波程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-19 09:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
51单片机定时产生pwm波程序
8 [  N) E% o0 j2 {: k3 L  f5 ^: @( Z4 g; L9 z
PWM(脉宽调制)在很多场合都用得上,例如LED亮度控制,开关电源输出电圧控制等。& U8 b+ ~5 X8 G9 P% o
这里采用简单的定时器实现PWM波输出,通过更改定时器定时参数,控制IO口输出
' E( a7 u8 O! X( L波形高低电平持续时间,实现PWM波。7 V2 Y* u/ C# W$ I2 x" x% r
7 m7 Q/ U, {0 O) x; E
代码如下:

: J) t- E% e# z" t" r#include<reg52.h>) w+ M+ l. T' M9 {5 x
* S% B: ~: m' Z3 x- w
#define T0_INTERRUPT 1  //T0中断向量号" F+ X/ ]1 ]$ j9 ]* U( }
#define PWMH_L 0x9C, }$ ^# d' a  g' F" ]2 Z$ u/ G/ W
#define PWMH_H 0xFF   //PWM低电平时间0.1ms
7 h, h8 x2 X/ D4 X; M' j
5 {/ {# U& Z6 B: Q#define PWML_L 0xCE
& s! r; x& Z8 ?9 S" H; g#define PWML_H 0xFF    //PWM高电平时间0.05ms
- G* m7 X. H2 m. ?; N4 ?! c% f7 O7 B0 a
sbit LED1 = P1^0;   //常亮LED,作为对比,仿真看不出效果
% E/ w8 Q# l3 B2 Y& W: Lsbit LED2 = P1^1;    //PWM驱动LED2 _% |3 Z% Y: U/ D+ ^$ K( `  j

0 W% K* C! h/ L7 f, g
) G7 }4 Y* i7 M# k. o+ i
4 m) H5 P9 [2 S( N6 W4 Ctypedef unsigned char uchar;
* n/ e" p: W* B8 s' C* g; _typedef unsigned int uint;8 [, G/ p9 u, s' T

  L) b# u5 ^' ^void Init_T0();0 V- H8 |1 l$ x- |  T( C

0 G, u' `- T  Lvoid main()
/ ?/ u% O0 V7 {8 B: Q4 |{
6 f: D2 b% z  h: E3 @. c    LED1 = 0;      //点亮LED13 }) Z0 C9 c% u) O2 h
    LED2 = 1;      //熄灭LED22 h% Y3 H6 _" s+ Y1 c3 I2 c
    Init_T0();    //初始化定时器0; f% J* f5 W, X1 i* K
    while(1)& Q1 o* s! o. {1 c- ]
    {
" f3 \  f7 i( o% |2 m% b0 G        PCON |= 0x01; //单片机进入休眠模式,节省功耗. c% z1 k( w7 e: f  w% y& o+ i
    }# _. P! D1 z8 E+ @, A2 `" V$ k* Z
}" M- {. n) g1 y& N: F
9 D1 e3 |' d( ?/ M* ?
void Init_T0()
* l! W+ p, N; U: }6 r% \3 a7 L{2 o9 O; y# P" W# H. p
    TMOD &= 0xF0;
" I. a, l+ b8 i, w; i5 R    TMOD |= 0x01;  //16位定时器模式+ h3 T0 C) e/ j! q+ A' R3 y; |
% Q, o, C6 V4 k! F
    TH0 = PWML_H;
8 X8 t2 V/ @/ c0 u    TL0 = PWML_L;$ }" W0 I% E. B6 p

) h( |9 B! F8 H9 Q+ c. Q5 g% g    EA = 1;       //开全局中断, T, A- l8 a+ _& B8 W2 t- ?
    ET0 = 1;      //允许T0中断* s" M) d7 D3 E4 q8 ?
    TR0 = 1;      //启动定时器
2 J6 @/ k' E, e- W$ z$ n}
# @5 M+ m9 q4 i! a+ G! x0 S& h' u+ C
void T0_Interrupt() interrupt T0_INTERRUPT- f% V6 n) W# f8 v$ Z8 F0 h
{& V+ Z. F% p6 m1 Y; \# _- Z( H
    TF0 = 0;
% S" C5 H: C8 ]1 f1 a- y    if(LED2 == 1)8 x' c3 \/ L+ t0 e* u
    {
4 z" B8 P$ f8 M  I        LED2 = 0;        //设置低电平持续时间,LED2亮, V" `5 k' D" N0 N# d6 t8 o, i+ C
        TH0 = PWMH_H;9 {* q2 ]) E  k. ~  m
        TL0 = PWMH_L;0 ~8 Z1 e" f6 Z4 ]6 @7 q
    }
1 @% G# c  r% S& n3 b4 k    else
- I6 y# W* [0 D* U5 O, b    {
5 @0 I5 [# E( Z; [; T* L        LED2 = 1;        //设置高电平持续时间,LED2灭        7 z, x3 S' D# I; }, H. l% h. \
        TH0 = PWML_H;
; B  T/ n8 T3 I7 T0 G$ _7 s0 u        TL0 = PWML_L;
' k; h+ e% ^  k% {! d    }
$ ~3 X' g4 ?# J6 E; c) K}
3 r. j2 ~$ |% J3 M( S
$ r+ @! C: F8 |& |

该用户从未签到

2#
发表于 2019-1-21 14:36 | 只看该作者
不错,谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-17 21:40 , Processed in 0.062500 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表