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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51单片机定时产生pwm波程序
3 t- K: `4 K: B8 L& o& @& A, [
! n, |9 G) }( DPWM(脉宽调制)在很多场合都用得上,例如LED亮度控制,开关电源输出电圧控制等。" }9 w/ Y  Z! \" {
这里采用简单的定时器实现PWM波输出,通过更改定时器定时参数,控制IO口输出! w6 q! ?/ n7 o0 c
波形高低电平持续时间,实现PWM波。
; K$ B& n* k6 i: X( K+ o0 E
5 D* n4 [. r; @+ O, m  i代码如下:

. M+ e, @; c! S#include<reg52.h>
# V2 V7 G; R0 t1 O6 [1 o0 N3 F1 ]7 h
#define T0_INTERRUPT 1  //T0中断向量号0 o4 I3 _8 h+ {- A% e1 _& r, D
#define PWMH_L 0x9C4 J  c$ G! W: |: D9 x
#define PWMH_H 0xFF   //PWM低电平时间0.1ms5 w1 \$ J1 ~( p, T

5 `  L  Y2 x/ G) [5 B* p7 d: P#define PWML_L 0xCE
3 T. W, A; T" w8 l+ Y#define PWML_H 0xFF    //PWM高电平时间0.05ms
- g( ~9 s3 ^$ y8 w; W/ u( X  y$ e% H8 d3 g) w5 D
sbit LED1 = P1^0;   //常亮LED,作为对比,仿真看不出效果
" f4 c% U7 n& b2 f2 u1 @! asbit LED2 = P1^1;    //PWM驱动LED
/ {% ^( c4 s. d- I. D
1 p( i' n, ]5 K0 A  D4 O( _5 m3 a; W4 ~% D- R9 ^0 I
) B2 h; w9 `) D; j' \2 [
typedef unsigned char uchar;) W0 N* J/ d2 U3 C" z
typedef unsigned int uint;
5 h8 _" L7 {( C, l' `: |! t7 k8 |3 d. A& _/ ?
void Init_T0();' z) T. U# F+ B7 I. O, J) G$ E9 V

/ Y8 k& V! R7 q7 q, s: Hvoid main()
7 p/ }4 Y! h, g; ?6 _{8 N: `2 I' s4 H7 `4 B
    LED1 = 0;      //点亮LED1* x( A) ?$ |' @4 u8 P
    LED2 = 1;      //熄灭LED23 ?* c% k0 s! x
    Init_T0();    //初始化定时器06 S6 g3 Y" i) E0 W9 D, P
    while(1)# i; G/ J0 i0 r+ T! o4 h/ ]2 ]8 O( L
    {
; \# T! C3 _" \% k: u+ m: e        PCON |= 0x01; //单片机进入休眠模式,节省功耗
/ A6 h! O1 B. W1 O2 \    }8 O' T2 ^# t9 b, E  P  u& a( E
}& m; u* V2 ^7 F9 P( d5 `- h

( f. e. i2 Q- hvoid Init_T0()" ^+ {; G/ h" J3 X8 s) N
{
% Y$ `% q# R8 E    TMOD &= 0xF0;
0 F% X7 r$ A0 }6 \  l4 A+ d' d$ w2 w    TMOD |= 0x01;  //16位定时器模式
5 K- \' B% C* A+ r, b0 E" a+ m* s0 Y4 K) @5 q. I/ p9 s
    TH0 = PWML_H;, b. g5 j2 e/ @
    TL0 = PWML_L;
9 {! b4 u; X$ T  u% S* f6 w% j
6 o# x* Z3 r$ I) q$ B0 k& X    EA = 1;       //开全局中断7 Y6 r& c7 h2 B- v4 N0 F
    ET0 = 1;      //允许T0中断5 h3 m7 E: I: s+ Y9 g3 u
    TR0 = 1;      //启动定时器
$ z: h0 c' @9 P" V+ v. A}
' N4 k- K( C! J9 h3 l
% W6 B! D1 u" F4 P8 w' o% _' }void T0_Interrupt() interrupt T0_INTERRUPT
  U8 r1 L: {! c/ T: p* W4 A+ M{
6 u9 A: G5 ^. }% P% [( {  W8 F    TF0 = 0;) _# h2 t( b$ E# L$ p6 o
    if(LED2 == 1)$ P5 z/ X' S3 w' U9 ~/ S& B
    {$ P! s- A6 e- ?  h: @
        LED2 = 0;        //设置低电平持续时间,LED2亮6 f0 C0 w" |  W  W
        TH0 = PWMH_H;/ u3 S7 T" {* L, M9 g) W+ T6 _* J
        TL0 = PWMH_L;3 u7 u3 \1 v/ d- E/ s% J! a0 V
    }8 F! G* w- g, t* A% y3 M& D4 i
    else, s# j6 P; l* K# Z+ f# \' ~
    {5 u3 C" R' I' i
        LED2 = 1;        //设置高电平持续时间,LED2灭        * n+ d5 f4 l4 y. d
        TH0 = PWML_H;* a( O6 G! ]1 j, l0 T; O
        TL0 = PWML_L;- [5 |/ A7 l' @& V/ u% L
    }# {0 u( c' ^7 Z! O) |- B# A8 J
}- R6 d. {$ [( R$ x4 P/ E+ y! k8 o
2 D9 I3 r* m& |& [

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 03:44 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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