单片机设计PWM三种方式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(num== 1)//设定占空比80%
{
led= 1;
}
else if(num== 5)
{
num= 0;
led= 0;
}
此方法稳定性也不是很高有大概10%的占空比波动,当然也可
以按位取反,不过占空比就只能是50%了 有一个人,做而论道这是他的百度用户名,很强的一个人,使用三个定时器 一个T0控制频率 两个外部中断INT0 INT1分别控制pwm的加减 并且用数码管输出占空比的级数 ,程序摘录如下,调节占空比的部分比较出 彩
TL0= (65536-50000) % 256;
EA= 1;//开总中断
ET0= 1;//开定时器T0
TR0= 1;
TH1= (65536-5000) / 256;//25ms@12MHz
TL1= (65536-5000) % 256;
while(1);
}
//
void t0() interrupt1
原文链接关于MCS-51单片机实现PW啲方法_做而论道的空间_百度空间
C.在定时器里开启定时器,需要两个定时器,第一个控制频率,第二个控 制占空比 稳定性非常高。
#include<reg52.h>
//
void main()
{
TMOD=0x11;//定时器工wk.baidu.com模式
TH0= (65536-50000) / 256;//50ms@12MHz
//==========================================#include<reg52.h>
unsigned int a, b;
//
void main()
{
TMOD=0x01; //T0定时方式1
TH0= (65536-50000) / 256;//50ms@12MHz
//
void X0_INT() in terrupt 0
{
b++;
if(b > 19) b = 19; //占空比等级最大为19
}
//
void X1_INT() in terrupt 2
{
b--;
if(b < 1) b = 1; //占空比等级最小为1.
}
//==========================================
TH0 = (65536-50000)/256;〃50ms@12MHz
a++;
if(a == 20) a = 0; //在这里调整周期.
if(a < b) P2 = 0xff; //在这里调整占空比.
else P2 = 0x00;
P0 = ((b/10) << 4)+b%10; //显示占空比等级
}
TLO = (65536-50000)%256;
TRO = 1;
ET0 = 1;
EX0 = 1; EX1 = 1;
IT0 = 1; IT1 = 1;
EA = 1;
a = 0;
b = 10;
while(1);
}
//
void time0() in terrupt 1
{
TL0 = (65536-50000)%256;
TL0= (65536-50000) % 256;
TH0= (65536-50000) / 256;//50ms@12MHz
P2= 0;
TL1= (65536-5000) % 256;
TH1= (65536-5000) / 256;
ET1= 1; //开定时器T1
TR1= 1;
}
void t1() interrupt3
{
TR1= 0;
P2=0XFF;
第一次学单片机,学到PWM的时候刚好有很多事,就学的很是纠结。今晚不对是今 晨,大概三点半有了一点思路,写下来,以飨初学者。
设计思路:
A.单纯的通过延时程序,让单片机在某段时间内输出高电平,另一段时间内输出 低电平。思路很简单,但是稳定性有待商榷,频率不可调。
B.利用一个定时器,提高计时精度,if语句
{
led= 1;
}
else if(num== 5)
{
num= 0;
led= 0;
}
此方法稳定性也不是很高有大概10%的占空比波动,当然也可
以按位取反,不过占空比就只能是50%了 有一个人,做而论道这是他的百度用户名,很强的一个人,使用三个定时器 一个T0控制频率 两个外部中断INT0 INT1分别控制pwm的加减 并且用数码管输出占空比的级数 ,程序摘录如下,调节占空比的部分比较出 彩
TL0= (65536-50000) % 256;
EA= 1;//开总中断
ET0= 1;//开定时器T0
TR0= 1;
TH1= (65536-5000) / 256;//25ms@12MHz
TL1= (65536-5000) % 256;
while(1);
}
//
void t0() interrupt1
原文链接关于MCS-51单片机实现PW啲方法_做而论道的空间_百度空间
C.在定时器里开启定时器,需要两个定时器,第一个控制频率,第二个控 制占空比 稳定性非常高。
#include<reg52.h>
//
void main()
{
TMOD=0x11;//定时器工wk.baidu.com模式
TH0= (65536-50000) / 256;//50ms@12MHz
//==========================================#include<reg52.h>
unsigned int a, b;
//
void main()
{
TMOD=0x01; //T0定时方式1
TH0= (65536-50000) / 256;//50ms@12MHz
//
void X0_INT() in terrupt 0
{
b++;
if(b > 19) b = 19; //占空比等级最大为19
}
//
void X1_INT() in terrupt 2
{
b--;
if(b < 1) b = 1; //占空比等级最小为1.
}
//==========================================
TH0 = (65536-50000)/256;〃50ms@12MHz
a++;
if(a == 20) a = 0; //在这里调整周期.
if(a < b) P2 = 0xff; //在这里调整占空比.
else P2 = 0x00;
P0 = ((b/10) << 4)+b%10; //显示占空比等级
}
TLO = (65536-50000)%256;
TRO = 1;
ET0 = 1;
EX0 = 1; EX1 = 1;
IT0 = 1; IT1 = 1;
EA = 1;
a = 0;
b = 10;
while(1);
}
//
void time0() in terrupt 1
{
TL0 = (65536-50000)%256;
TL0= (65536-50000) % 256;
TH0= (65536-50000) / 256;//50ms@12MHz
P2= 0;
TL1= (65536-5000) % 256;
TH1= (65536-5000) / 256;
ET1= 1; //开定时器T1
TR1= 1;
}
void t1() interrupt3
{
TR1= 0;
P2=0XFF;
第一次学单片机,学到PWM的时候刚好有很多事,就学的很是纠结。今晚不对是今 晨,大概三点半有了一点思路,写下来,以飨初学者。
设计思路:
A.单纯的通过延时程序,让单片机在某段时间内输出高电平,另一段时间内输出 低电平。思路很简单,但是稳定性有待商榷,频率不可调。
B.利用一个定时器,提高计时精度,if语句