标题:
pwm语法 看起来没问题 但是改变占空比 效果没改变 求解
[打印本页]
作者:
159753
时间:
2017-11-10 14:56
标题:
pwm语法 看起来没问题 但是改变占空比 效果没改变 求解
使用定时器 让P2^3口(小灯) 发送PWM 占空比是固定值
想用 if 判断语句实现 控制高低电平时间
但是改变高低电平的分配时间 灯的亮度不发生改变
求个详细解答 程序如下
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit PWM=P2^3; //--定义使用的IO口--//
u16 timer1; //--定义一个全局变量--//
void Timer1Init()
{
TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
TH1 = 0xFF;
TL1 = 0xff; //1us
ET1=1;//打开定时器1中断允许
EA=1;//打开总中断
TR1=1;//打开定时器
}
void main()
{
Timer1Init(); //定时器1初始化
while(1)
{
if(timer1>1000) //设定周期
{
timer1=0; //周期归零
if(timer1<=100) //调占空比
改变此值 小灯亮度没变化,求解释@@##¥%……
{
PWM=1;
}
else
{
PWM=0;
}
}
}
}
void Time1(void) interrupt 3 //3 为定时器1的中断号
{
TH1 = 0xFF;
TL1 = 0xff; //1us
timer1++;
}
作者:
yzwzfyz
时间:
2017-11-10 14:57
中断设置为1us是不合理的。
你想一想,CPU执行一条指令需要多少时间?
另外:CPU在下列情况下是不能响应中断的:
1、当一条指令正在执行中,尚未完成时;
2、当本中断已被响应后,尚未 RETI 时;
你想想,如此。你的中断还能不能每隔1uS中断一次呢?
另外你的主程序还有没有办法顺利地执行下去吗?会不会一个中断接着一个中断地到来?
改一下程序吧,学习不认真的家伙。
作者:
sldx
时间:
2017-11-10 23:09
思路不错,但同楼上说法,1us的延迟没啥意义,你定个毫秒的定时还差不多
作者:
天0
时间:
2017-11-11 10:21
定时的频率搞低一点,频率太高,51单片机速度跟不上
作者:
Taliban
时间:
2017-11-11 14:16
定时中断时间太短了,主函数差不多一直卡着不动了
作者:
1123212143255
时间:
2017-11-11 18:41
1u秒上面TH1等于0xff,写成大写的0xFF了。
作者:
cccc8888
时间:
2017-11-11 23:24
if(timer1>1000) //设定周期
//
{
timer1=0; //周期归零
if(timer1<=100) //调占空比 改变此值 小灯亮度没变化,求解释@@##¥%……
{
PWM=1;
}
else
{
PWM=0;
}
//
}
作者:
159753
时间:
2017-11-13 08:44
谢谢 各位
作者:
微烽细雨
时间:
2017-11-13 09:20
中断执行时间过短了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1