×
单片机 > 单片机程序设计 > 详情

使用STC14F104W单片机捕获PWM脉宽

发布时间:2020-05-23 发布时间:
|

最近做了个小东西,使用的是很简单的一个单片机STC15F104W,但是功能很好用。这里简单介绍下本人使用STC15F104W实现的PWM脉冲高电平方式。

本人要捕获的PWM脉冲周期是20ms,高电平介于1~2ms。

主要使用的是外部中断和定时器,STC15F104W有4个外部中断,这里采用外部中断0,可以响应上升沿和下降沿。


(P3.2)外部中断0捕获引脚P3.2的上升沿和下降沿:上升沿开启定时器0计时,下降沿终止定时器0计时,这样读取计时寄存器的值即可获得高电平时间:TH0*256+TL0;

具体程序段:

//*******************************************************
//函数名称:void exint0() interrupt 0 
//函数功能:外部中断0;上升沿和下降沿触发中断
void exint0() interrupt 0       //INT0中断入口(P3.2)
{
  
if(P32 == BIT001)   //上升沿
{
  TL0 = 0x00;             //设置定时初值;0 0x00=0=(65536-65536)%256 
       TH0 = 0x00;            //设置定时初值: 00x00=0=(65536-65536)/256 
 
  TR0 = 1;    //开启定时器0;开始计时
  capter_Tn0_time=0;              //初始化高电平时间
  high_duty=0;
};
if(P32 == BIT000)   //下降沿
    {


  TR0 = 0;   //关闭定时器0;停止计时


  capter_Tn0_time= (TH0*256+TL0) ;//取出计数器寄存器中的值,用于计算高电平的时间
  high_duty=capter_Tn0_time*sys_time_base;//得到高电平的时间,换算单位,即Tn0_time个100us


    TL0 = 0x00;             //清空定时器的值
       TH0 = 0x00;            // 
} ;
run_Capter(high_duty); //根据电平值进行判断处理
    
}


备注:

这种方式使用起来简单可靠,是一种选择。


关键字:STC14F104W  单片机捕获  PWM脉宽 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址