|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PWM输出波形脉冲控制系统Proteus仿真及源码/ ^3 M7 e, ]& Y- o
, ^- {; M3 T. r. A4 K
9 X: } F4 D/ K8 m6 X这是关于PWM 输出波形脉冲的仿真proteus仿真,有仿真示波器,有程序,用数码管和流水灯表示输出结果
) W0 Z6 W4 t: Q7 \% U) p# U
% n3 B; w7 g- H8 O, R' i8 k! F
# K$ n/ E# q" a/ B; _- r9 q
8 B6 Z+ a+ B3 v, V3 y" \部分单片机源程序:
5 N5 S1 G. ~/ c, W#define PWM_GLOBAL 1
$ U U% R s, x! k6 a3 C#include "pwm.h", Q' T2 p# f- H6 K2 `6 T
/*****************************************************! M) D2 d# l4 z) h8 N! v
*函数名称:pwm_init(void)' A: ?0 A' @+ L
*函数功能:PWM初始化,设置定时器
/ s& n# u2 P& u8 q+ h- p*函数入口:无: F% O& Z. h+ H/ n0 E
*函数出口:无
( ~# R- W6 [/ A*****************************************************/
9 g# B4 Q5 B3 \, @4 C1 [void pwm_init(void) // 12M$ Z0 C7 L. |$ Z, R
{
& m! r# m- ]( S t9 B TMOD=0x20; // 定时器1 模式2
* E0 j& {4 z5 C! A8 \ TL1 = 255-10; // 1ms5 f" \& S$ T2 f/ \8 p
TH1 = 255-10;/ X/ q. {, j: ~, ^& }* O
ET1 = 1; //定时器1边沿触发3 z( C- _# u5 `
TR1 = 1; //开定时器1中断
% q+ Z, n9 o6 J& \" P' m pwmPeriodCont =0x00;7 ?: l3 ?+ v& o; S
pwmH=0x01;0 N. t" c+ K6 ]
}
; D* O8 @) W: k/ u/*****************************************************& {2 E7 W- U6 p- W
*函数名称:void pwm_set(const uchar NewPwmValue)+ @4 M5 H7 Q( g! @1 T3 i
*函数功能:PWM占空比设置) o0 O6 T0 F. e% S
*函数入口:无
' [& _7 d6 C: R2 X: u3 y*函数出口:无
6 n2 q! A& R7 M) i$ {9 A' A. {*****************************************************/
$ ^: |* E& X0 c9 e8 C8 Cvoid pwm_set(uchar NewPwmValue)) f# g9 M7 q3 R% A/ S, H. v
{& ?6 J. ]' U8 q* h) i
if ((NewPwmValue >= 1)&&(NewPwmValue <= 99)) //一个周期里) {& b; l; P8 n, u; R9 |7 q
{7 o) L6 A- ~6 ^, p
pwmH = NewPwmValue;
: P$ ~$ S: L( q3 ~- w4 x }+ }6 t8 u# h, }+ z; F
else //若占空比不在1...99范围内则输出一个尖脉冲6 ^1 T, l1 ~0 I, w* ]4 o
{
; ^* q6 {! p6 _; J/ Z pwmH =0x01;( |8 O/ k) a! D$ p% r
} & B, @, G, a; c
}6 N( D5 p( R/ Z: G% Z
/*****************************************************$ w# T+ J- L* w1 h( Q! k3 K
*函数名称:pwmProduce(void)) H& B0 \; G/ I3 G
*函数功能:定时器1溢出中断设置
) P, Y# L$ ?5 g! f7 @*函数入口:无1 m3 V) U! d: }: R1 u! o" X
*函数出口:无
! i4 d" v# ?2 ], m1 i4 ~*****************************************************/3 d* z: A( D% |' O
void pwmProduce(void) interrupt 3, y! R o9 B! F+ S7 {: P* l
{
9 E$ S Z2 M% s' s$ y% I* w pwmPeriodCont++; //PWM定时周期计数加1
* x% |3 Y# h* G- r" [0 G0 c0 X if(pwmPeriodCont<=pwmH)3 G; j, b! w+ o7 ^% t0 R
PWM_OUT =1; // 高电平从0 到...PWM_H
& }# k( X- M; m1 v! M else // 剩下的为低电平时间
2 r* F; h4 @/ s" ~" g {
# T, u8 M0 C. X6 Z1 c b0 s PWM_OUT =0;% n e3 f7 a* \' o; c9 h
if (pwmPeriodCont >= PWM_Period)// 一个频率周期结束: |, Q1 D1 K# K( k8 `2 V' V! b
{
; j. T1 [- k3 l% c4 Y8 E- U pwmPeriodCont=0;5 P, }* O7 S. o1 E9 l" P" p3 F# r
}7 @6 l) F2 \( D7 a" w2 ^; q
}" B" B4 T( c* j
}
9 u! e3 {+ K2 Z2 {* t5 \) E) V7 z
/ ~/ \ p9 k! U3 P) d7 s* G& Z: {, W9 B' V$ F$ I: e
|
|