微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 一个51产生PWM的演示程序

一个51产生PWM的演示程序

时间:08-19 来源:互联网 点击:

这是一个51产生PWM的演示程序

其中P1.3 P1.4是两个输出,这个程序比较匆忙,没有严格验证,可能有错,如有错误请指正。

/*****************************************************************************

* 程序名称:PWM占空比调整演示程序 *

* 编写时间:2005.9.15 23:30分 *

* 程序版本:1.0 *

*

* *

******************************************************************************

*程序思路说明: *

* *

*关于频率和占空比的确定,对于12M晶振,假定PWM输出频率为1KHZ,这样定时中断次数 *

*设定为C=10,即0.01MS中断一次,则TH0=FF,TL0=F6;由于设定中断时间为0.01ms,这样*

*可以设定占空比可从1-100变化。即0.01ms*100=1ms *

******************************************************************************/

#i nclude

#define uchar unsigned char

/*****************************************************************************

* TH0和TL0是计数器0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256; *

* TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器*

* 工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时 *

* 间为1ms*65536=65.536ms *

******************************************************************************/

#define V_TH0 0XFF

#define V_TL0 0XF6

#define V_TMOD 0X01

void init_sys(void); /*系统初始化函数*/

void Delay5Ms(void);

unsigned char ZKB1,ZKB2;

void main (void)

{

init_sys();

ZKB1=40; /*占空比初始值设定*/

ZKB2=70; /*占空比初始值设定*/

while(1)

{

if (!P1_1) //如果按了+键,增加占空比

{

Delay5Ms();

if (!P1_1)

{

ZKB1++;

ZKB2=100-ZKB1;

}

}

if (!P1_2) //如果按了-键,减少占空比

{

Delay5Ms();

if (!P1_2)

{

ZKB1--;

ZKB2=100-ZKB1;

}

}

/*对占空比值限定范围*/

if (ZKB1>99) ZKB1=1;

if (ZKB1<1) ZKB1=99;

}

}

/******************************************************

*函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/

void init_sys(void) /*系统初始化函数*/

{

/*定时器初始化*/

TMOD="V"_TMOD;

TH0=V_TH0;

TL0=V_TL0;

TR0=1;

ET0=1;

EA="1";

}

//延时

void Delay5Ms(void)

{

unsigned int TempCyc = 1000;

while(TempCyc--);

}

/*中断函数*/

void timer0(void) interrupt 1 using 2

{

static uchar click="0"; /*中断次数计数器变量*/

TH0=V_TH0; /*恢复定时器初始值*/

TL0=V_TL0;

++click;

if (click>=100) click="0";

if (click<=ZKB1) /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/

P1_3=0;

else

P1_3=1;

if (click<=ZKB2)

P1_4=0;

else

P1_4=1;

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top