有占空比的c语言中断程序,如何用51程序改变占空比

满意答案

*介绍一个51系列单片机采用脉冲宽度调制(PWM)方式控制LED灯亮度的一个程序,大家都知道,51单片机本身是没有pwm接口的,这个程序是通过软件模拟pwm.在一定的频率的方波中,调整高电平和低电平的占空比,即可实现LED灯亮度控制。程序中使用定时器0产生2.5ms周期脉冲,使用占空比控制变量scale控制占空比,在低电平期间使LED灯亮,在高电平期间使LED灯灭,改变scale就改变了高电平与低电平的时间,因此也就控制了LED灯的亮度。*/#include "AT89X51.H" //模拟PWM输出控制灯的10个亮度级 unsigned int scale; //占空比控制变量 void main(void) // 主程序 { unsigned int n; //延时循环变量 TMOD=0x02; //定时器0,工作模式2(0000,0010),8位定时模式 TH0=0x06; //写入预置初值6到定时器0,使250微秒溢出一次(12MHz) TL0=0x06; //写入预置值 TR0=1; //启动定时器 ET0=1; //允许定时器0中断 EA=1; //允许总中断 while(1) //无限循环,实际应用中,这里是做主要工作 { for(n=0;n<50000;n++); //每过一段时间,就自动加一个档次的亮度 scale++; //占空比控制变量scale加1 if(scale==10) scale=0; //如果scale=10,使scale为0 } } timer0() interrupt 1 //定时器0中断服务程序 {unsigned int tt ; //tt用来保存当前时间在一秒中的比例位置 tt++; //每250微秒增加1 if(tt==10) //2.5毫秒的时钟周期 { tt=0; //使tt=0,开始新的PWM周期 P2_0=0; //使LED灯亮 } if(scale==tt) //按照当前占空比切换输出为高电平 P2_0=1; //使LED灯灭 } /*程序中从tt=0开始到scale为低电平,从scale开始到tt=10为高电平,由于scale是变量,所以改变scale就可以改变占空比。*/

00分享举报

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值