基于单片机用软件实现直流电机PWM调速系统的开题报告
3个回答
展开全部
这里有个PWM控制LED给你参考下
使用两个定时器Timer0和Timer1中断实现PWM控制LED明暗效果。其中Timer0工作在方式1用于脉冲宽定时,Timer1工作于方式2用于占空比的定时。在这个程序里,脉冲宽是个固定的值,通过递增、递减改变占空比,从而实现LED明暗效果。如果将LED换作蜂鸣器,通过改变脉冲宽可改变音调。
/**************************************/
//文件名:main.c
//作 者:jammy-lee
//日 期:2009-3-18
//功 能:使用两个定时器模拟PWM
/**************************************/
//头文件
#include<reg51.h>
//宏定义
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef long unsigned int uint32;
uint16 time0;
uint16 PULSE_WIDTH = 0x300; //脉冲宽
uint8 DUTY_CYCLE = PULSE_WIDTH*(1/5);//占空比
//延时子程序
void delay(uint8 ms)
{
uint8 i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
//定时器0,控制低电平
void Timer0() interrupt 1
{
TR1 = 0; //关闭定时器1
time0 = 0xFFFF - PULSE_WIDTH; //定时器0初始值
TL0 = (uint8)time0;
TH0 = time0 >> 8;
TH1 = DUTY_CYCLE;
TR1 = 1;
P0 = 0x00; //打开定时器1
}
//定时器1.控制高电平
void Timer1() interrupt 3
{
TR1 = 0; //关闭定时器1
P0 = 0xFF;
}
//主函数
int main(void)
{
TMOD = 0x21; //定时器1:工作方式1,定时器0:工作方式2
time0 = 0xFFFF - PULSE_WIDTH; //定时器0初始值
TL0 = (uint8)time0;
TH0 = time0 >> 8;
TL1 = DUTY_CYCLE;
TH1 = DUTY_CYCLE;
EA = 1; //允许全局中断
ET0 = 1; //允许定时器0中断
ET1 = 1; //允许定时器1中断
TR0 = 1;
//主循环
while(1)
{
do{
if(DUTY_CYCLE != PULSE_WIDTH*(1/4))
{
DUTY_CYCLE++;
delay(5);
}
else break;
}while(1);
do{
if(DUTY_CYCLE != 0x01)
{
DUTY_CYCLE--;
delay(5);
}
else break;
}while(1);
}
}
使用两个定时器Timer0和Timer1中断实现PWM控制LED明暗效果。其中Timer0工作在方式1用于脉冲宽定时,Timer1工作于方式2用于占空比的定时。在这个程序里,脉冲宽是个固定的值,通过递增、递减改变占空比,从而实现LED明暗效果。如果将LED换作蜂鸣器,通过改变脉冲宽可改变音调。
/**************************************/
//文件名:main.c
//作 者:jammy-lee
//日 期:2009-3-18
//功 能:使用两个定时器模拟PWM
/**************************************/
//头文件
#include<reg51.h>
//宏定义
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef long unsigned int uint32;
uint16 time0;
uint16 PULSE_WIDTH = 0x300; //脉冲宽
uint8 DUTY_CYCLE = PULSE_WIDTH*(1/5);//占空比
//延时子程序
void delay(uint8 ms)
{
uint8 i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
//定时器0,控制低电平
void Timer0() interrupt 1
{
TR1 = 0; //关闭定时器1
time0 = 0xFFFF - PULSE_WIDTH; //定时器0初始值
TL0 = (uint8)time0;
TH0 = time0 >> 8;
TH1 = DUTY_CYCLE;
TR1 = 1;
P0 = 0x00; //打开定时器1
}
//定时器1.控制高电平
void Timer1() interrupt 3
{
TR1 = 0; //关闭定时器1
P0 = 0xFF;
}
//主函数
int main(void)
{
TMOD = 0x21; //定时器1:工作方式1,定时器0:工作方式2
time0 = 0xFFFF - PULSE_WIDTH; //定时器0初始值
TL0 = (uint8)time0;
TH0 = time0 >> 8;
TL1 = DUTY_CYCLE;
TH1 = DUTY_CYCLE;
EA = 1; //允许全局中断
ET0 = 1; //允许定时器0中断
ET1 = 1; //允许定时器1中断
TR0 = 1;
//主循环
while(1)
{
do{
if(DUTY_CYCLE != PULSE_WIDTH*(1/4))
{
DUTY_CYCLE++;
delay(5);
}
else break;
}while(1);
do{
if(DUTY_CYCLE != 0x01)
{
DUTY_CYCLE--;
delay(5);
}
else break;
}while(1);
}
}
艾普斯
2024-07-18 广告
2024-07-18 广告
稳频稳压电源哪家好?艾普斯电源(苏州)有限公司开始专业研发、制造及营销交流稳压电源,满足全球电子及信息业对电源设备日益蓬勃的市场需求。迄今为止,业已发展成为交流不间断电源、稳压电源、变频电源、中频航空- 军事专用电源、直流电源、逆变电源等产...
点击进入详情页
本回答由艾普斯提供
展开全部
二楼的兄弟可否报一下书名,我想看一下这本书。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里有个PWM控制LED给你参考下
使用两个定时器Timer0和Timer1中断实现PWM控制LED明暗效果。其中Timer0工作在方式1用于脉冲宽定时,Timer1工作于方式2用于占空比的定时。在这个程序里,脉冲宽是个固定的值,通过递增、递减改变占空比,从而实现LED明暗效果。如果将LED换作蜂鸣器,通过改变脉冲宽可改变音调。
/**************************************/
//文件名:main.c
//作
者:jammy-lee
//日
期:2009-3-18
//功
能:使用两个定时器模拟PWM
/**************************************/
//头文件
#include<reg51.h>
//宏定义
typedef
unsigned
char
uint8;
typedef
unsigned
int
uint16;
typedef
long
unsigned
int
uint32;
uint16
time0;
uint16
PULSE_WIDTH
=
0x300;
//脉冲宽
uint8
DUTY_CYCLE
=
PULSE_WIDTH*(1/5);//占空比
//延时子程序
void
delay(uint8
ms)
{
uint8
i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
//定时器0,控制低电平
void
Timer0()
interrupt
1
{
TR1
=
0;
//关闭定时器1
time0
=
0xFFFF
-
PULSE_WIDTH;
//定时器0初始值
TL0
=
(uint8)time0;
TH0
=
time0
>>
8;
TH1
=
DUTY_CYCLE;
TR1
=
1;
P0
=
0x00;
//打开定时器1
}
//定时器1.控制高电平
void
Timer1()
interrupt
3
{
TR1
=
0;
//关闭定时器1
P0
=
0xFF;
}
//主函数
int
main(void)
{
TMOD
=
0x21;
//定时器1:工作方式1,定时器0:工作方式2
time0
=
0xFFFF
-
PULSE_WIDTH;
//定时器0初始值
TL0
=
(uint8)time0;
TH0
=
time0
>>
8;
TL1
=
DUTY_CYCLE;
TH1
=
DUTY_CYCLE;
EA
=
1;
//允许全局中断
ET0
=
1;
//允许定时器0中断
ET1
=
1;
//允许定时器1中断
TR0
=
1;
//主循环
while(1)
{
do{
if(DUTY_CYCLE
!=
PULSE_WIDTH*(1/4))
{
DUTY_CYCLE++;
delay(5);
}
else
break;
}while(1);
do{
if(DUTY_CYCLE
!=
0x01)
{
DUTY_CYCLE--;
delay(5);
}
else
break;
}while(1);
}
}
使用两个定时器Timer0和Timer1中断实现PWM控制LED明暗效果。其中Timer0工作在方式1用于脉冲宽定时,Timer1工作于方式2用于占空比的定时。在这个程序里,脉冲宽是个固定的值,通过递增、递减改变占空比,从而实现LED明暗效果。如果将LED换作蜂鸣器,通过改变脉冲宽可改变音调。
/**************************************/
//文件名:main.c
//作
者:jammy-lee
//日
期:2009-3-18
//功
能:使用两个定时器模拟PWM
/**************************************/
//头文件
#include<reg51.h>
//宏定义
typedef
unsigned
char
uint8;
typedef
unsigned
int
uint16;
typedef
long
unsigned
int
uint32;
uint16
time0;
uint16
PULSE_WIDTH
=
0x300;
//脉冲宽
uint8
DUTY_CYCLE
=
PULSE_WIDTH*(1/5);//占空比
//延时子程序
void
delay(uint8
ms)
{
uint8
i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
//定时器0,控制低电平
void
Timer0()
interrupt
1
{
TR1
=
0;
//关闭定时器1
time0
=
0xFFFF
-
PULSE_WIDTH;
//定时器0初始值
TL0
=
(uint8)time0;
TH0
=
time0
>>
8;
TH1
=
DUTY_CYCLE;
TR1
=
1;
P0
=
0x00;
//打开定时器1
}
//定时器1.控制高电平
void
Timer1()
interrupt
3
{
TR1
=
0;
//关闭定时器1
P0
=
0xFF;
}
//主函数
int
main(void)
{
TMOD
=
0x21;
//定时器1:工作方式1,定时器0:工作方式2
time0
=
0xFFFF
-
PULSE_WIDTH;
//定时器0初始值
TL0
=
(uint8)time0;
TH0
=
time0
>>
8;
TL1
=
DUTY_CYCLE;
TH1
=
DUTY_CYCLE;
EA
=
1;
//允许全局中断
ET0
=
1;
//允许定时器0中断
ET1
=
1;
//允许定时器1中断
TR0
=
1;
//主循环
while(1)
{
do{
if(DUTY_CYCLE
!=
PULSE_WIDTH*(1/4))
{
DUTY_CYCLE++;
delay(5);
}
else
break;
}while(1);
do{
if(DUTY_CYCLE
!=
0x01)
{
DUTY_CYCLE--;
delay(5);
}
else
break;
}while(1);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询