51定时器产生PWM(转贴) - cpubbs虚拟仪器论坛 - cpubbs论坛免费虚拟仪器博客 labview虚拟仪器讨论区 - cpubbs论坛 虚拟仪器论坛|labview论坛|labwindows论坛|vi|cvi|数据采集卡|入门教程|初学|软件下载|虚拟仪器免费博客|虚拟仪器电子商务|虚拟仪器商城|虚拟仪器人才中心|图形化单片机编程cpuview|虚拟仪器在线商城 - Powered by X-Space
cpubbs论坛,专业的labview,labwindows,虚拟仪器数据采集卡交流论坛,免费博客,人才中心,电子商贸,欢迎您的光临!

51定时器产生PWM(转贴)

上一篇 / 下一篇  2007-11-28 21:52:23 / 个人分类:转载类

转贴自:

http://blog.21ic.com/user1/3075/archives/2006/28750.html

 

51定时器产生PWM

dmjkun 发表于 2006-9-18 9:52:00

使用普通51的定时器产生PWM信号,不需其它程序参与,本人觉得挺简练的,效果不错,已经用于多个项目,不过设置PWM的频率时,要注意设置所产生的频率是否超出其上限值。

/******************************************************************************
*   函数名称:PWM_Set
*   函数版本:1.0
*   创建日期:2004/07/05
*   功能描述:计算PWM波50Hz定时器的重装值
*   参    数:PWM波的占空比
*   返    回:无
*   修改记录:
*******************************************************************************/
void PWM_Set( uint uiFreq, uchar ucScale )
{
 if( ucScale > 100 )      //占空比不可能大于100%
  return;
 s_ulCycle = SYS_OSC/SYS_DIV/uiFreq;
 s_uiHighTime = 65535-s_ulCycle*ucScale/100;
 s_uiLowTime  = 65535-s_ulCycle*(100 - ucScale)/100;
}

/******************************************************************************
*   函数名称:PWM_Tm0ISR
*   函数版本:1.0
*   创建日期:2004/07/05
*   功能描述:产生PWM波中断服务程序
*   参    数:无
*   返    回:无
*   修改记录:
*******************************************************************************/
void PWM_Tm1ISR(void) interrupt 3
{
 TR1 = 0;
 s_bStatus = ~s_bStatus;  //取反标志位,表示该输出高电平或低电平

 if( s_bStatus )    //输出高电平
 {
  TH1 = s_uiHighTime>>8;
  TL1 = s_uiHighTime;
  POW_CTRL = 1;
 }
 else      //输出低电平
 {
  TH1 = s_uiLowTime>>8;
  TL1 = s_uiLowTime;
  POW_CTRL = 0;
 }
 TR1 = 1;
}


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2024-05-11  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 33687572
  • 日志数: 168
  • 图片数: 6
  • 影音数: 5
  • 商品数: 4
  • 文件数: 105
  • 建立时间: 2006-11-02
  • 更新时间: 2016-04-08

RSS订阅

Open Toolbar