PWM波(存在问题,待解决)

单片机时钟频率12MHZ,T0做定时器使用,定时时长为0.1ms,要求用P1.0口输出周期为10ms,脉冲宽度按以下规律变化的信号:
第一个脉冲周期,P1.0引脚高电平持续时间为1*0.1ms;
第二个脉冲周期,P1.0引脚高电平持续时间为2*0.1ms;
第三个脉冲周期,P1.0引脚高电平持续时间为3*0.1ms;
第i个脉冲周期,P1.0引脚高电平持续时间为i*0.1ms(0=

////////////////////////实现目标//////////////////////////////
//单片机时钟频率12MHZ,T0做定时器使用,定时时长为0.1ms,要求用P1.0口输出周期为10ms,脉冲宽度按以下规律变化的信号:
//第一个脉冲周期,P1.0引脚高电平持续时间为1*0.1ms;
//第二个脉冲周期,P1.0引脚高电平持续时间为2*0.1ms;
//第三个脉冲周期,P1.0引脚高电平持续时间为3*0.1ms; 
//第i个脉冲周期,P1.0引脚高电平持续时间为i*0.1ms(0=<i<=100).
//即:占空比1%--100%  PWM
///////////////////////定时器初值/////////////////////////////////
//单片机Fosc=12Mhz,T0的定时时长为0.1ms,  T0的计数次数为:
//   n=(t*Fosc)/12=(0.1ms*12MHz)/12=100 
//
//
////////////////////////////////////////////////////////////
#include<reg52.h>
#define uchar unsigned char
#define out P1^0
uchar PWM,count;
void display(uchar);

void init()
{
    TMOD=0X51;                         //T0:定时、方式1,
    TH0=(65536-100)/256;
    TL0=(65536-100)%256;
    ET0=1;                             //开T0中断
    EA=1;                              //开全局中断、
    TR0=1;                             //启动定时器/计数器T0
}

void main()
{   
    //up=100-down;
    //count=1;
    init();                       
    while(1)
    {
        if(count==1)
            out=1;
        else 
            out=0;
    }
}
void time0()  interrupt 1 using 1      //T0中断服务函数,中断型号为1
{
    TH0=(65536-100)/256;               //T0重置初值:0.1ms
    TL0=(65536-100)%256;
    count++;
    if(count==101) count=1;
}

//一个周期分成100份,每份0.1ms;在一个周期中,高电平占有的分量不断增加。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值