|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PWM输出波形脉冲控制系统Proteus仿真及源码) k7 V, | K0 P! P
( |2 D, c9 S9 p! w3 m
6 m B3 s5 i, G0 y! E
这是关于PWM 输出波形脉冲的仿真proteus仿真,有仿真示波器,有程序,用数码管和流水灯表示输出结果0 k: Y% M) n7 b' c8 f2 n2 U( t, |- g
. K$ _* {- J. k6 P& _' v
& X0 R) G: C; k0 h
" \0 s- F3 c) g+ j9 G7 b0 G部分单片机源程序:
% X' f* p9 A6 n' W; d/ O+ I, b#define PWM_GLOBAL 1
( g' @0 M% F& p: X6 W4 s#include "pwm.h"
1 {* M' |8 e6 v( l/****************************************************** }1 S+ `5 v' W
*函数名称:pwm_init(void)5 Y L# t. ^% Z& }# c7 V& l
*函数功能:PWM初始化,设置定时器2 s6 i/ Z6 |4 _" m _. O$ b9 O
*函数入口:无- i7 Q% [' S1 [, ~4 W$ G
*函数出口:无! d: F% k( X& v( G/ Y# L
*****************************************************/: C9 C8 a6 N( B9 \! h
void pwm_init(void) // 12M
t) s: h6 E0 T* b) |/ \{ 1 V$ L. B5 K0 ]* H/ K
TMOD=0x20; // 定时器1 模式21 P; L3 ~, e8 Z& x' b3 z
TL1 = 255-10; // 1ms
3 y# }1 ^- d ^! s TH1 = 255-10;
- W/ o' I* ?% b+ ~4 W7 M ET1 = 1; //定时器1边沿触发4 k( F- i: b$ w, P
TR1 = 1; //开定时器1中断
7 }$ x3 c1 Q, e3 o H pwmPeriodCont =0x00;
' d- R: c7 i; J pwmH=0x01;
. C0 t1 @3 ~7 [& @}, ~" a. t3 b% W' p) a8 O
/*****************************************************7 c- `9 W" H0 a7 x1 I
*函数名称:void pwm_set(const uchar NewPwmValue)* ]1 P) H7 e; r. o7 O/ o% W8 `+ l
*函数功能:PWM占空比设置" _4 v& E" K; ?, N
*函数入口:无. K/ V) _$ x/ n# e2 F2 ^7 g! ?
*函数出口:无
9 R9 Q4 a- B) I0 F$ l3 j! P( q*****************************************************/
- H/ q" I6 v$ Z$ P) _. M+ Hvoid pwm_set(uchar NewPwmValue)9 R' N$ m6 i2 M" F" ~9 I: G
{8 S7 |2 `- `/ y7 J6 @* X
if ((NewPwmValue >= 1)&&(NewPwmValue <= 99)) //一个周期里
$ O& g4 c+ e0 A6 e8 O {* R) I7 K9 ^, L2 R* }! T# M
pwmH = NewPwmValue;7 F- _# l8 [/ ^; s8 z7 W, l
}
9 A) B6 W& O" U8 x4 o else //若占空比不在1...99范围内则输出一个尖脉冲) y/ U1 z; [( x
{
7 n2 H. K, ~& J' a B pwmH =0x01;
$ y* G% C8 s/ @6 L3 w }
3 [6 f8 ?2 n z" g0 K}9 z# @5 G" L! n8 f
/*****************************************************( @ Y$ g; @6 ^. u- m# R
*函数名称:pwmProduce(void); S1 r; {" `% X) W3 d3 A |( h. ]
*函数功能:定时器1溢出中断设置" F. v2 _! ]# U7 p6 l
*函数入口:无
; T+ K) K5 T, L6 k*函数出口:无1 k; J9 [: C8 @# D
*****************************************************/
3 M2 r% C1 { l# Q5 k+ L* ~void pwmProduce(void) interrupt 3# h- u; ~$ K; U
{& V2 m! }; A7 q: w$ P9 _
pwmPeriodCont++; //PWM定时周期计数加1 ( W3 w3 y1 w4 t" y4 k! z
if(pwmPeriodCont<=pwmH)$ ]0 J) u" F& A2 Z
PWM_OUT =1; // 高电平从0 到...PWM_H
" g, x2 V* }. D% ]5 t! y% ? else // 剩下的为低电平时间
% |3 ?3 B w* q1 c {
; T" S. c# T( ~4 E$ g2 Q, z PWM_OUT =0;6 f/ ~- F6 g( v- H# d& `- v
if (pwmPeriodCont >= PWM_Period)// 一个频率周期结束
$ s' ?7 R. Q$ G6 x$ U { r# q! \5 t% m
pwmPeriodCont=0;, g/ O) j, G4 N. y& [. ?0 T
}
/ M: q. ^: r4 | }8 t) P6 o6 Z& U1 ]
}
6 [9 `2 z" q+ T6 ?6 ]
( ^- Q/ e, \8 }9 `5 w
8 _% q1 ^+ ]# v) H& ?1 i' _ |
|