• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

如何用定时器中断模拟pwm

yhj416606438 2021-05-27 浏览量:670
单片机的pwm是8位的,而且只有内部时钟不能输出制定频率,想用定时器中断输出,位数只要4位就行了,这样频率了调整度比较好,有没有例程,51单片机的
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 可以用定时器确定时间频率,

    #include<reg51.h>
    #define uint unsigned int
    #define uchar unsigned char
     
    sbit PWM=P2^0;//  P2.0输出pwm
    uchar time;  // 定义占空比的变量
     
    void main()
    {
        TMOD=0x01;//定时器0工作方式1
        TH0=0xff;//(65536-10)/256;//赋初值定时
        TL0=0xf7;//(65536-10)%256;//0.01ms
        EA=1;//开总中断
        ET0=1;//开定时器0中断
        TR0=1;//启动定时器0
        while(1)
        {            
        }            
    }
     
    void tim0() interrupt 1
    {
        TR0=0;//赋初值时,关闭定时器
        TH0=0xff;//(65536-10)/256;//赋初值定时
        TL0=0xf7;//(65536-10)%256;//0.01ms
        TR0=1;//打开定时器
     
        time++;
        if(time>=100)  //1khz
          time=0;   
        if(time<=30)   //占空比%30可改
          PWM=1;  
        else PWM=0;
    }

    • 发布于 2021-06-07
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:1
  • 你就在中断函数里把IO口的电平反转就可以了啊,频率什么的,设置定时器的定时时间来修改
    • 发布于2021-06-07
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

如何用定时器中断模拟pwm