|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PWM输出波形脉冲控制系统Proteus仿真及源码5 \' v/ K, w- o2 r
1 H7 U% q8 L" T: A9 M, d
$ X. J* L+ x# B! ~这是关于PWM 输出波形脉冲的仿真proteus仿真,有仿真示波器,有程序,用数码管和流水灯表示输出结果
7 }- }3 o% i: O* [! c* d6 ? * A2 J* |8 k2 ?! ?1 `% O% {
7 b0 Z" B' I2 E V9 S' i9 f% `7 f! A* g! K' V; m) C7 z
部分单片机源程序:" t. f9 l5 M* v& ?; {7 m, P- `$ f
#define PWM_GLOBAL 1
% d* g3 D2 C2 a#include "pwm.h"
9 l; v) R8 I2 R1 k* V J6 y2 \6 D( Z9 g/*****************************************************$ t5 c4 e3 z; `8 P+ [3 Z/ F1 w
*函数名称:pwm_init(void)1 S8 U- }) J# t% z2 Y
*函数功能:PWM初始化,设置定时器7 v5 b' u: e: l0 V
*函数入口:无
' w+ f. Y) b5 d$ X" s*函数出口:无& C) d/ Z p$ c& z$ D+ C0 i
*****************************************************/2 |0 U& k2 O# ]' s R8 n
void pwm_init(void) // 12M& S7 Z1 G# w, a: o' M8 q0 V
{
$ t) \+ C# U+ e- J# C4 n TMOD=0x20; // 定时器1 模式2
7 S' m1 U- i! o1 }/ m TL1 = 255-10; // 1ms3 L, ?+ O! x' F! p" B) I1 x
TH1 = 255-10;
5 T) v, l/ q2 z ET1 = 1; //定时器1边沿触发
. `! K, c# T5 h5 A0 V TR1 = 1; //开定时器1中断 j" l: Z9 z1 t( F. n( V' ?
pwmPeriodCont =0x00;
% L+ {! I C' f r% J9 f: V pwmH=0x01;
6 p, Z, U( K- ~( G. G5 h8 u}% r2 U, ?: E2 M8 g
/*****************************************************6 j, V. O2 ]1 b7 T
*函数名称:void pwm_set(const uchar NewPwmValue)
0 W0 @. o6 X5 d8 X2 E8 e6 k0 D*函数功能:PWM占空比设置
* |5 q& o' |# f*函数入口:无5 C9 T: O- c% E
*函数出口:无
k d2 I* Q G- B s2 Z*****************************************************/
& R- O& k: F/ R! l+ D5 Uvoid pwm_set(uchar NewPwmValue)0 {, o3 R7 p4 C. t6 P
{( u: F4 ^% ]& B3 M( Q
if ((NewPwmValue >= 1)&&(NewPwmValue <= 99)) //一个周期里7 y$ r; V4 W7 q3 s; p7 j
{2 _+ l1 [ c5 w& I
pwmH = NewPwmValue;& B) r+ W% ~: d& H" i7 F
}2 Z( c9 ~+ j& u0 ]/ z: G( _9 q
else //若占空比不在1...99范围内则输出一个尖脉冲
% G7 o6 a' A G5 z {
7 {# s# R0 n3 T, a pwmH =0x01;
- |" ?. {' G8 ^3 N- o } * Y6 ?0 Q" V! d- ?- h5 p& [
}
O: e# _$ C! [( x7 n/ G/*****************************************************
$ |' w6 |, l8 M*函数名称:pwmProduce(void)$ I7 x7 D6 y- v' O2 t1 C/ Q) \- N
*函数功能:定时器1溢出中断设置
% E+ w2 h9 P/ X*函数入口:无
3 i9 _: |: D, A; h0 U. l& v*函数出口:无% n% U* _2 |( \. [/ r
*****************************************************/
) {6 E& D, c0 u! o2 m7 W; Ivoid pwmProduce(void) interrupt 3; [& N8 ~# @6 _
{3 Y( q/ H: y# F4 t5 ~
pwmPeriodCont++; //PWM定时周期计数加1 & I" S g& E+ f7 L) O( L6 r9 U
if(pwmPeriodCont<=pwmH)8 D# C C+ {, {6 |+ D0 b K/ d# d7 ]
PWM_OUT =1; // 高电平从0 到...PWM_H8 \: A# i) W, [1 E- A( J
else // 剩下的为低电平时间
$ G/ ^! W6 u U! A3 u2 b; u {
3 D2 |( z7 I/ N' X$ B! ^( Z1 r PWM_OUT =0;
A# v$ R0 ?# H* O if (pwmPeriodCont >= PWM_Period)// 一个频率周期结束
5 L( G: G0 L" X {
, t! T% h0 m- ?6 e* J3 } pwmPeriodCont=0;
' [0 N9 H! v2 T9 @5 Q' w }
) d% U, Z9 D$ ]9 u' P }
9 Y* V; e# b5 |3 @4 d/ q}
; Q U7 [. t, j1 g
- n$ f- h3 C6 [3 ?+ `$ c5 q, I: x2 u2 J7 F
|
|