标题:
知道脉宽 怎么计算单片机定时器初值?
[打印本页]
作者:
李冬
时间:
2021-7-12 14:49
标题:
知道脉宽 怎么计算单片机定时器初值?
晶振11.0592 16位定时器1
周期1毫秒 高电平50微秒 低电平950微秒
以此类推。。。。。
高电平450微秒 低电平550微秒
高电平500微秒 低电平500微秒
高电平450微秒 低电平550微秒
以此类推。。。。。。
高电平50微秒 低电平950微秒
void TM1_Isr() interrupt 3//
{
TR1 = 0; //
switch (x++)
{
case 0:
pwm=1;
TL1 = 0xD7; //设置定时初始值
TH1 = 0xFD; //设置定时初始值
break;
case 1:
pwm=0;
TL1 = 0xF6; //设置定时初始值
TH1 = 0xD6; //设置定时初始值
break;
TR1 = 0; //
}
代码太长。有什么简单的算法吗
作者:
yzwzfyz
时间:
2021-7-12 16:31
两种方案:
1、以周期为定时器的时常数。
操作:每次中断就置1(或清0)。另需要计算正脉宽(或负脉宽)的宽度,到时就将输出清0(或置1)。
2、动态切换定时器的时常数。
操作:对正、负脉冲单独计算,算出两个时常数。每次中断时,改变切换时常数,同时切换输出的电平。
作者:
hoodieboi
时间:
2021-7-12 19:33
本帖最后由 hoodieboi 于 2021-7-12 19:39 编辑
可以定时1μs 只需要通过主函数中按键修改占空比就行了 根据要的高电平时间修改想x的值就行了
void time1(void) interrupt 3
{
TH1 = 0xff; //配置1μs定时
TL1 = 0xff;
timer1++; //timer1开始计数,每1微秒加一
if(timer1>1000) //PWM周期为1000*1μs
{
timer1=0;
}
if(timer1 <x)
{
PWM=1;
}
else
{
PWM=0;
}
}
复制代码
作者:
wulin
时间:
2021-7-12 21:14
定时器中断按最小单位50us。PWM占空比1/20~19/20,来回++--。
作者:
lkc8210
时间:
2021-7-13 13:18
void TM1_Isr() interrupt 3//
{
TR1 = 0; //
static char i = 0;
static char j = 1;
TR1 = 0; //
TL1 = 0xD7; //设置定时初始值
TH1 = 0xFD; //设置定时初始值
pwm=(j>i);
if(++i>=20)
{
i=0;
if(++j==20)
{
j=1;
}
}
TR1 = 1; //
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1