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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51单片机定时产生pwm波程序
/ c& A( l4 n: P7 K, j- t% u- {4 O) o: \4 H  p% j& J
PWM(脉宽调制)在很多场合都用得上,例如LED亮度控制,开关电源输出电圧控制等。" g; o2 `! X, M! w3 r7 Q
这里采用简单的定时器实现PWM波输出,通过更改定时器定时参数,控制IO口输出; J% c% Y, E+ l# `8 Q) v
波形高低电平持续时间,实现PWM波。' Y6 _! U4 b( J; L1 d
6 h* R0 y6 m; {$ S5 d8 ?
代码如下:

6 b$ g# _- I: d( K#include<reg52.h>
& e2 D8 {% @- v/ E( e4 E( o2 ]; d9 O7 B6 h8 k& Q8 _4 Z. A
#define T0_INTERRUPT 1  //T0中断向量号
: ^7 E/ w$ d9 x#define PWMH_L 0x9C+ z! S; U) Y/ o0 |
#define PWMH_H 0xFF   //PWM低电平时间0.1ms
& B, I* |9 w% p2 L0 |; q- N" }' o# P0 A8 ]) o
#define PWML_L 0xCE
+ h( K3 O- z( t0 K# }: j" O#define PWML_H 0xFF    //PWM高电平时间0.05ms
9 n" l6 ?4 _0 l6 [* E4 C) G/ N( P/ t
sbit LED1 = P1^0;   //常亮LED,作为对比,仿真看不出效果8 R8 P. C6 Q- v( ]
sbit LED2 = P1^1;    //PWM驱动LED
; u, \9 F% A  v) b* `: Z) b, Y* C/ \! e) b5 h# s. H/ {3 S

. G) @7 K. |* T0 K' {' o
* r! P% q9 t- y$ q' f7 U4 N/ atypedef unsigned char uchar;% ?% ~7 W. F4 r" n  Q
typedef unsigned int uint;
) @# Q0 h# f9 F4 s' M% x' C* ?+ a2 K5 X. k& a- d: }) B
void Init_T0();, H" ~: B; R5 ?" G
# ?# i% w- J' g8 u' t
void main()6 S1 ~* f" V+ R/ |9 J6 B4 D+ r6 H
{5 w1 n0 D8 b9 K0 L8 N. W4 W; O( G
    LED1 = 0;      //点亮LED1% ~8 d0 \0 @1 B0 I7 _
    LED2 = 1;      //熄灭LED26 r" W% f% E. Q( g
    Init_T0();    //初始化定时器0+ d& n  n, V  r
    while(1)
7 T2 _3 N$ J; {8 B% Z% g    {
2 \: Y! m# B7 D5 q        PCON |= 0x01; //单片机进入休眠模式,节省功耗" q  F/ w$ y8 M+ p1 F
    }
" {( p% _$ U4 _. F# ~0 q. G2 B}/ z5 R( N/ j" p0 l
1 E. f, A. |0 K. b
void Init_T0()4 F2 l; Y; o1 x
{
1 X+ r; N1 p5 u! f6 B    TMOD &= 0xF0;+ h- c: O& s# k/ Y" h
    TMOD |= 0x01;  //16位定时器模式/ H8 d# ?- M& o* {( a1 ?& k

* _/ V- O: r! Z- {    TH0 = PWML_H;8 S6 n) _5 \  c" j4 k. w9 z
    TL0 = PWML_L;- N: n1 d( a: p# C0 ?; h
. @% i9 o3 C! Q' p' J" E9 ~
    EA = 1;       //开全局中断
: E' N* e4 c4 o4 e5 q3 G/ f    ET0 = 1;      //允许T0中断
4 r. ^3 _+ G; L. Y0 f    TR0 = 1;      //启动定时器
- S: y3 E/ R( r}: f0 N% s8 t( u( D9 P

2 L- m4 {: Q* E/ u# ?7 L3 _! G: avoid T0_Interrupt() interrupt T0_INTERRUPT6 w- U$ z" l4 k' t% ~" k
{3 a2 a, G! a6 b. l/ ^, R8 ^% U5 O8 {
    TF0 = 0;( P8 j% n& T& A, O  O
    if(LED2 == 1)/ A& n3 K; @) x3 T$ ?: U- j
    {3 W, b0 X* t, V! R6 g
        LED2 = 0;        //设置低电平持续时间,LED2亮
, Z8 U9 o2 H' v! J" ~        TH0 = PWMH_H;5 ]& i- l, P' s8 `1 Y* c
        TL0 = PWMH_L;
) h$ t( W4 A4 k. y/ E) X    }
- f8 Y' v5 o( c5 n    else
, n/ J2 j5 b. p" [0 l% [    {
: c( S2 C) K* C+ d) P1 m' t, {        LED2 = 1;        //设置高电平持续时间,LED2灭        
+ _9 i9 P+ K3 V6 S* F/ v        TH0 = PWML_H;
, n& A$ y# B! e/ \/ ]' }/ \        TL0 = PWML_L;
* y& Q" z# M# u: T& I- E4 o    }) v, @, V, O' ^; H5 X
}8 x7 p* A# s/ {( U" {

. d& g- C! G( C' G

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-19 20:57 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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