最近做了个小东西,使用的是很简单的一个单片机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); //根据电平值进行判断处理
}
备注:
这种方式使用起来简单可靠,是一种选择。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』