|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PWM输出波形脉冲控制系统Proteus仿真及源码" \) ~5 L; i& Q J% ]# D6 Q
) X. k3 w" z1 [4 Z5 J
3 o8 j, w. S! c8 z( ~这是关于PWM 输出波形脉冲的仿真proteus仿真,有仿真示波器,有程序,用数码管和流水灯表示输出结果* ]; Q7 R+ H: `! j
& f, ^' k' O" K! x6 G
# A0 W. _7 u* N+ @' K* \+ Y# Z7 F- z4 Y' X" P; D, p% L
部分单片机源程序:" Q6 ]5 _1 \! N) \0 \
#define PWM_GLOBAL 1: P; X7 a- F& G% s
#include "pwm.h") B ~1 c5 E, a4 h
/*****************************************************
6 @( f8 U; Z3 r9 }6 r6 r* {% r*函数名称:pwm_init(void)
1 q3 N- D; Y6 x5 D$ _9 k! \*函数功能:PWM初始化,设置定时器9 ]8 }, W4 e( g
*函数入口:无7 D5 k$ P1 d7 f4 B" Z4 C# n r! l# ^
*函数出口:无) y' r! m; A! d D2 }$ |' o
*****************************************************/
' @- }- ]& Y" [void pwm_init(void) // 12M' w6 M, F3 z( j: R6 K
{
@; y% W4 q0 o1 D9 L8 G) R; z TMOD=0x20; // 定时器1 模式2
6 |, J- N3 ?# v7 Y9 ~ TL1 = 255-10; // 1ms
- {# @# K0 l& [& {! b TH1 = 255-10;
9 B6 u3 S% p! |$ G/ I ET1 = 1; //定时器1边沿触发
; Q0 S) F) o# u: X# g6 Z TR1 = 1; //开定时器1中断
! B. @" A4 J) M5 U$ h3 v) k. X: ] pwmPeriodCont =0x00;
& }7 W+ `1 ]" p pwmH=0x01;, X, V! w! @3 I- t8 Z2 C2 J; j4 [
}. n3 r% o* @3 m$ B# y
/*****************************************************
8 S& Q; U& a" r2 V- W. L$ ~& _*函数名称:void pwm_set(const uchar NewPwmValue)
$ B1 e1 v9 F: _* b: v9 X$ y*函数功能:PWM占空比设置4 P! J5 j2 {( V
*函数入口:无3 A1 {$ r; D1 [1 m$ o$ b" X
*函数出口:无( Q- Q' P8 [6 O, h) c
*****************************************************/
3 D u8 H6 o# }1 w, w, Nvoid pwm_set(uchar NewPwmValue)
8 F9 b/ { v( C; j/ w+ f{
/ p- S! _" |6 O$ \6 \+ @5 W2 S0 y; P if ((NewPwmValue >= 1)&&(NewPwmValue <= 99)) //一个周期里* o! U* o1 h9 z. `" a! Y& `0 R
{+ E4 \# K7 k: j5 {7 }: B2 k* I
pwmH = NewPwmValue;0 E7 I! J" g& h5 j/ C; J
}
9 N/ f4 R2 E( q else //若占空比不在1...99范围内则输出一个尖脉冲
4 X S+ z, x% g; e {
$ U2 q" Q' J# c pwmH =0x01;/ G' g; ^9 ?% n
}
; {! Y2 u0 E( E7 F}' i' ?, J4 d0 L+ r& w7 t& H: f/ X
/*****************************************************
0 F6 o0 g4 A: g6 U*函数名称:pwmProduce(void)- q( d! w: s. b7 M% i
*函数功能:定时器1溢出中断设置- A; t2 w! ^" Z. u" n
*函数入口:无 c- _8 C6 T5 n4 E o$ W p
*函数出口:无( u6 V3 A( N1 W* ?, q. U
*****************************************************/
3 n" k0 b* ^9 W5 ]$ E. pvoid pwmProduce(void) interrupt 3
/ Y6 U0 L( K$ Y% P{, N; ]* q6 W8 N! R4 E, l
pwmPeriodCont++; //PWM定时周期计数加1 7 j1 O& R/ ~( W. }) l
if(pwmPeriodCont<=pwmH)
. M# d. t' `" U+ y G8 S0 x [ PWM_OUT =1; // 高电平从0 到...PWM_H0 Z0 ^2 z$ a$ N5 j
else // 剩下的为低电平时间- v/ W- W$ r" T+ s2 n8 _
{
1 p* D3 N+ V3 U. E7 S PWM_OUT =0;
, a# J; B. r; E5 _$ e if (pwmPeriodCont >= PWM_Period)// 一个频率周期结束8 K: |" g0 ?$ r ~. O
{
* ]3 o& F8 p0 u7 Q7 T pwmPeriodCont=0;
' o3 T% E+ C: G* i2 P }
( c: P" {7 f. I$ ?8 o9 ~* z' a7 h }
/ G1 k' {* N( b! D* m; @}2 M; [# Y# [& i: W6 \0 _4 U! q
$ y" |+ y, G" r! r6 Y# G" s
9 b: f: M* x7 P# ~; n |
|