教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 外语考试 >

单片机做PWM波形的c程序

来源:网络收集 时间:2026-08-30
导读: 单片机控制PWM直流电机的c程序 其实有很多种方法可以实现的, 我可以给你大致的说一下思路: 用两个定时器,T0用来控制频率,T1用来控制占空比。 T0定时器用来产生高电平,在T0中断当中将T1定时器打开,而T1用来产生低电平。 这样改变T0定时器的初值就可以改

单片机控制PWM直流电机的c程序

其实有很多种方法可以实现的,

我可以给你大致的说一下思路:

用两个定时器,T0用来控制频率,T1用来控制占空比。

T0定时器用来产生高电平,在T0中断当中将T1定时器打开,而T1用来产生低电平。 这样改变T0定时器的初值就可以改变频率。改变T1定时器的初值就可以改变占空比。 这样说不知道你能不能明白。程序应该能自己写出来吧??

// 利用定时器控制产生占空比可变的 PWM 波

// 按K1,PWM值增加,则占空比减小,电机减速。

// 按K2,PWM值减小,则占空比增加,电机加速。

// 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。

/*********************************************************/

#include<reg51.h>

#include<intrins.h>

sbit K1 =P1^4 ; //PWM值增加键

sbit K2 =P1^5 ; //PWM值减少键

sbit BEEP =P3^7 ; //蜂鸣器

unsigned char PWM=0x7f ; //赋初值

void Beep();

void delayms(unsigned char ms);

void delay(unsigned char t);

/*********************************************************/

void main()

{

P1=0xff;

TMOD=0x21 ;

TH0=0xfc ; //1ms延时常数

TL0=0x66 ; //频率调节

TH1=PWM ; //脉宽调节

TL1=0 ;

EA=1;

ET0=1;

ET1=1;

TR0=1 ;

while(1)

{

do{

if(PWM!=0xff)

{PWM++ ;delayms(10);}

else Beep() ;

}

while(K1==0);

do{

if(PWM!=0x02)

{PWM-- ;delayms(10);}

else Beep() ;

}

while(K2==0);

}

}

/*********************************************************/ // 定时器0中断服务程序 (频率)

/*********************************************************/ void timer0() interrupt 1

{

TR1=0 ;

TH0=0xfc ;

}

/*********************************************************/ // 定时器1中断服务程序 (脉宽)

/*********************************************************/ void timer1() interrupt 3

{

TR1=0 ;

P0=0xff ; //结束输出

}

/*********************************************************/ //蜂鸣器子程序 TL0=0x66 ; TH1=PWM ; TR1=1 ; P0=0x00 ; //启动输出

/*********************************************************/

void Beep()

{

unsigned char i ;

for (i=0 ;i<100 ;i++)

{

delay(100) ;

BEEP=!BEEP ; //Beep取反

}

BEEP=1 ; //关闭蜂鸣器

delayms(100);

}

/*********************************************************/ // 延时子程序

/*********************************************************/ void delay(unsigned char t)

{

while(t--) ;

}

/*********************************************************/ // 延时子程序

/*********************************************************/ void delayms(unsigned char ms)

{

unsigned char i ;

while(ms--)

{

for(i = 0 ; i < 120 ; i++) ;

}

}

/*********************************************************/

…… 此处隐藏:114字,全部文档内容请下载后查看。喜欢就下载吧 ……
单片机做PWM波形的c程序.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1693741.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)