|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PWM输出波形脉冲控制系统Proteus仿真及源码0 y$ w; k! K' i) y% `
; n% a7 w; |) U2 m L
' g$ C, m1 `* `1 j% W9 Y这是关于PWM 输出波形脉冲的仿真proteus仿真,有仿真示波器,有程序,用数码管和流水灯表示输出结果
5 g& g8 J, {# d' g
8 c, p* v/ E/ J' m0 V 8 {) \) P# r! Y8 A- p/ H
7 X$ [# x" W1 @( W* P( m
部分单片机源程序:; E+ h9 k8 `0 P+ V# H/ h7 r5 L
#define PWM_GLOBAL 1
+ D2 g, |8 c; Z8 r! H& w#include "pwm.h"
1 I! h: q i- v+ S) g7 ]/*****************************************************
8 o! @+ E) \* X0 A*函数名称:pwm_init(void)& y: b9 J9 S3 {0 y# u
*函数功能:PWM初始化,设置定时器6 p( N/ e& F3 w( r# b
*函数入口:无
* @# X0 T& A' b9 s$ ^) Q$ |8 W( j*函数出口:无% Q) d7 M6 T. Q4 c. o
*****************************************************/, a! U$ M& `* Y% l3 f
void pwm_init(void) // 12M
3 r& u( J6 @# R8 _ B{ 2 R( p% x1 o) ^& i2 f$ n
TMOD=0x20; // 定时器1 模式2
7 H% b+ p4 \7 s% b0 D1 |8 {( V TL1 = 255-10; // 1ms# S7 `+ p/ B7 [- T( E
TH1 = 255-10;
* A3 ?8 k5 Q" q' d1 T) ~ ET1 = 1; //定时器1边沿触发 X# d3 }# E& ]3 \ P( ~, V
TR1 = 1; //开定时器1中断
9 q, y) E. l, A# a( {" f) q& H pwmPeriodCont =0x00;8 h% e8 ?5 q4 a5 V' `' @7 ^+ C
pwmH=0x01;3 U; S$ R% C* H2 i
}5 L, J0 C1 ]5 X2 d
/*****************************************************
/ l& ~0 a8 _2 {% O. E4 d*函数名称:void pwm_set(const uchar NewPwmValue)
4 q4 E, ~& f: Y8 D9 a+ ~*函数功能:PWM占空比设置
7 x7 c; P% j/ w7 L*函数入口:无
( z/ H! u. J4 R4 ]" k1 d& ^*函数出口:无8 W0 R; I% L* T
*****************************************************/
6 l# w. C6 W. lvoid pwm_set(uchar NewPwmValue)' X S, v( h1 z5 z7 u: e' N
{4 o# z5 g- W' d2 i9 [9 v3 s T, L
if ((NewPwmValue >= 1)&&(NewPwmValue <= 99)) //一个周期里
V7 V, a7 y* V3 R) a3 g5 A& Z4 r0 y {
4 p+ u. V' n- x/ y# T6 | pwmH = NewPwmValue;- P. M" Y9 B# y; g- E& u
}
4 O5 `9 N( n# R/ _9 C else //若占空比不在1...99范围内则输出一个尖脉冲/ N q$ v9 u& j5 s8 V! n/ b. g
{% Y. |1 J9 @! C1 u& y
pwmH =0x01;1 V3 ]6 h. e$ P% H
}
+ u7 f4 y4 i6 I6 g/ O" x- a! B}
) ^' }7 n K6 \* h/ n& ^/*****************************************************
0 g. P, H# B- [6 I*函数名称:pwmProduce(void)
* l% U n- w( N* `# a; D*函数功能:定时器1溢出中断设置
: v, \) ?6 v' B3 L) l2 @1 H*函数入口:无
) h/ i1 Y, P$ u*函数出口:无
k# S+ | D! d; ] K) R. s*****************************************************/
. V# X1 M% M$ h7 ~ fvoid pwmProduce(void) interrupt 39 r3 T2 H! z3 `% y8 X
{
) @9 S5 I8 G$ l( v9 r8 d pwmPeriodCont++; //PWM定时周期计数加1
" m) z" y$ `0 a$ o9 S if(pwmPeriodCont<=pwmH)4 {9 W6 T7 G' [3 n9 m/ u& C
PWM_OUT =1; // 高电平从0 到...PWM_H
9 U0 f, y2 }$ X* n$ _7 | else // 剩下的为低电平时间$ [9 C) h% C+ h, s1 [
{ 2 w. T3 x# u: J
PWM_OUT =0;
# h) `! ^% o* B" V+ ]' T if (pwmPeriodCont >= PWM_Period)// 一个频率周期结束
6 w5 i$ |" k! W; b' x( G2 f o { # c. u$ R+ I% N3 |+ O/ c
pwmPeriodCont=0;
2 |- Z% l& j* s) q4 k, s2 Y }
, H2 A8 w) v: R, K& y) K9 Y0 N }6 a1 w# p2 G- j; Q) v
}
/ W" w) G9 |# i+ b H1 D: A) ~
: w$ ?+ ~6 I4 p! D3 n. d( m* _1 G) i/ p
|
|