|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PWM输出波形脉冲控制系统Proteus仿真及源码& `7 b/ Y* ?- R9 F- e$ D& o
. ]6 ?: u0 h/ z: r8 j' k
! f4 T! u. A# c5 [$ o2 X这是关于PWM 输出波形脉冲的仿真proteus仿真,有仿真示波器,有程序,用数码管和流水灯表示输出结果! v* j7 h. }% Z6 S4 c; J: o9 j
q, u r, {' x
4 `# G- T0 [8 p; E4 `
a# d( K: E0 K6 ]. g; Q. o: s# u部分单片机源程序:+ \/ j& }4 c d" [/ D* H7 o" R
#define PWM_GLOBAL 1
% c. }7 Q3 `5 J% u* E1 z% }#include "pwm.h"
5 L k2 `7 K8 X! O0 i/*****************************************************
; F" `( H p3 [+ O! H2 Q* c+ h*函数名称:pwm_init(void)
- }* h1 m- O- ^ {2 b*函数功能:PWM初始化,设置定时器$ F5 D. c& ] X! O( p: O0 B
*函数入口:无
: ~0 Z/ `) g* O; L*函数出口:无! w; U# W. u+ W( O- {' s. v
*****************************************************/
: g4 R" W1 G- t; P) N5 [void pwm_init(void) // 12M
" H6 W1 o$ S' H2 X K{
3 g/ w% U, N/ @* X: i' y TMOD=0x20; // 定时器1 模式2' i5 h$ n" x! s& C3 w! y7 M
TL1 = 255-10; // 1ms, J I- F) m0 C7 J2 D
TH1 = 255-10;1 O1 L; U& ` t" g; u
ET1 = 1; //定时器1边沿触发
+ ] \$ G0 W3 {4 O8 x0 | TR1 = 1; //开定时器1中断% v$ m. `6 E8 y7 o
pwmPeriodCont =0x00;
0 H# P& N" p! n1 o pwmH=0x01;
! f, f- t7 h0 e5 g5 r: C# ?}0 Y( _+ D: o. P# W
/*****************************************************1 D& L. I* i( R
*函数名称:void pwm_set(const uchar NewPwmValue)# f, I( w3 D# O6 x
*函数功能:PWM占空比设置
( e6 Q$ Q0 j3 P% O1 S. q+ Y6 Z t*函数入口:无" A# Y- o+ i# H& ]$ v+ R/ z* F
*函数出口:无" e% |2 X: N$ Y. E9 |! ]4 o+ F3 V
*****************************************************/( F! U* E8 D y- t
void pwm_set(uchar NewPwmValue)( M( \) e8 _+ F1 J5 d+ f4 D7 Q' z
{1 T. ^2 \! B) H1 j" U
if ((NewPwmValue >= 1)&&(NewPwmValue <= 99)) //一个周期里
' l2 `7 F8 ~0 d6 o7 x/ h% K9 p( G6 @ F {
+ \- a9 L1 n/ \2 |; P5 Q$ k+ M pwmH = NewPwmValue;
1 {2 {& e q+ L# @; q" O }$ B9 K" V0 t: [4 g7 _$ p+ F
else //若占空比不在1...99范围内则输出一个尖脉冲. a& ]% t9 j- R J# ], J* R
{
h8 ^/ F9 B) y5 J$ q2 w pwmH =0x01;
& t5 Z% v; q L. j0 Y+ c1 E }
, S; e( {4 L. m" l}$ A% C, X1 T! P; ?. y
/*****************************************************1 J& A: ^2 K4 L3 ?
*函数名称:pwmProduce(void)% N' |; v7 q6 |- G4 I6 m% `6 z' G8 J
*函数功能:定时器1溢出中断设置8 c, N% `* K A
*函数入口:无
8 H+ b, Y( ^- y*函数出口:无- ~7 c9 u/ Z7 A& _9 h
*****************************************************/7 |8 e% l1 b$ y) R
void pwmProduce(void) interrupt 3
( R4 n! a) e; b4 @( C{( g Q) l2 A0 F
pwmPeriodCont++; //PWM定时周期计数加1
# a5 C1 x2 U: `) F; _5 r+ F1 s if(pwmPeriodCont<=pwmH)5 O' Y9 D9 V$ l1 [: u
PWM_OUT =1; // 高电平从0 到...PWM_H
! m9 @; Y1 Z% Z# R% V0 v else // 剩下的为低电平时间
$ k4 B) \8 d, B) n' T3 R5 w" x {
- p0 G) l2 Z4 o* B6 L# h0 l4 f$ S PWM_OUT =0;
2 Y( i! [& g6 W5 O& b7 ] if (pwmPeriodCont >= PWM_Period)// 一个频率周期结束+ B) N8 C5 z7 _& F0 Z0 h
{
. L9 i, c9 f& K! m pwmPeriodCont=0;% Y7 ~8 S$ H3 G
}
9 P% y; o4 @1 c }
9 g8 q5 D$ p. r}
: V0 {3 n3 d( \9 ~
# C% J* H, L4 f" q# i- }8 Q, W* p) e8 ]9 N8 X1 A1 h0 x
|
|