找回密码
 立即注册
查看: 410|回复: 7

请教开天斧开发板用中断模拟PWM的问题

[复制链接]
  • TA的每日心情
    开心
    4 天前
  • 签到天数: 127 天

    [LV.7]常住居民III

    2

    主题

    63

    回帖

    690

    积分

    高级会员

    积分
    690
    发表于 2023-12-13 23:11:32 | 显示全部楼层 |阅读模式
    开天斧开发板,用中断方式产生1000HZ的PWM控制LED0灯的亮度,想输出占空比为50%的PWM输出,为什么输出的波形不对,帮忙看哈程序哪里有问题


    #include <stc8h.h>
    sbit LED0=P2^0;
    sbit LED1=P2^1;

    unsigned char HighRH=0;             //高电平重载值的高字节
    unsigned char HighRL=0;             //高电平重载值的低字节
    unsigned char LowRH=0;              //低电平重载值的高字节
    unsigned char LowRL=0;              //低电平重载值的低字节
    /***********配置PWM占空比,周期为1000HZ******/
    void ConfigPWM( unsigned char dc)
    {
        unsigned int high,low;
        high = (11059*dc)/100; // 计算高电平所需的计数值
        low = 11059 - high; // 计算低电平所需的计数值
              high=65536-high +12;
              low=65536-low+12;

        // 计算两个时序需要的定时器重载值
        HighRH = (unsigned char)(high>>8);
        HighRL = (unsigned char)high;
        LowRH = (unsigned char)(low>>8);
        LowRL = (unsigned char)low;
                    AUXR |= 0x80;                        //定时器时钟1T模式
                    TMOD &= 0xF0;                        //设置定时器模式
                    TMOD |= 0x01;                        //设置定时器模式
                    TL0 = HighRL;                                //设置定时初始值
                    TH0 = HighRH;                                //设置定时初始值
                    TF0 = 0;                                //清除TF0中断标志
              ET0=1;           //打开T0中断
                    TR0 = 1;                                //定时器0开始计时
                    LED0=1;          //输出高电平
                   
    }
    /************定时器0中断,产生PWM**************/
    void InterruptTimer0() interrupt 1
    {               
                       if(LED0==1)  //当前输出为高电平时,装载低电平值并输出低电平
        {
            TH0 = LowRH;
            TL0 = LowRL;
            LED0 = 0;                               
        }
        else              //当前输出为低电平时,装载高电平值并输出高电平
        {
            TH0 = HighRH;
            TL0 = HighRL;
            LED0 = 1;                         
        }             
    }

    void main()
    {       
      P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
            EA=1;
            LED1=0;       
            ConfigPWM(50);
            while(1);       
    }
           

    采样周期100us,2.5v,以上频率为1000HZ,

    采样周期100us,2.5v,以上频率为1000HZ,
    2.jpg
    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-6 15:33
  • 签到天数: 2 天

    [LV.1]初来乍到

    20

    主题

    100

    回帖

    1000

    积分

    荣誉版主

    积分
    1000
    发表于 2023-12-13 23:30:25 | 显示全部楼层
    问题可能出现在high = (11059*dc)/100;这里,dc为char型,11059编译器会默认为int型,两个相乘的结果大于int型的65535,试试改成high = (11059L*dc)/100;

    话说不是有硬件pwm么,那个更简单而且更稳定
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 127 天

    [LV.7]常住居民III

    2

    主题

    63

    回帖

    690

    积分

    高级会员

    积分
    690
     楼主| 发表于 2023-12-14 20:45:56 | 显示全部楼层
    chen 发表于 2023-12-13 23:30
    问题可能出现在high = (11059*dc)/100;这里,dc为char型,11059编译器会默认为int型,两个相乘的结果大于in ...

    感谢大神的指点,解决了困扰我几日的难题,更改后波形已输出正常,关于这个芯片有PWM的问题,这段代码是我另一个(stc11f02e)硬件上的,那个单片机上没有pwm,我还以为那个芯片有问题才将代码移植到开天斧开发板上,再有就是好多坛友都有这个硬件,也方便提问,再次感谢!!!
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9496

    回帖

    1万

    积分

    管理员

    积分
    14067
    发表于 2023-12-14 22:47:26 | 显示全部楼层
    感谢 51 官方论坛 荣誉版主,路见不平拔刀相助
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    8 小时前
  • 签到天数: 175 天

    [LV.7]常住居民III

    12

    主题

    352

    回帖

    1164

    积分

    金牌会员

    积分
    1164
    发表于 2023-12-25 15:29:51 | 显示全部楼层
    收藏了,我也有几片STC11F02E,你这个程序很有用,我留着备用

    点评

    都什么年代了 ? 还收藏 这个经典老古董 ~~~~~~  详情 回复 发表于 2023-12-26 03:37
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 127 天

    [LV.7]常住居民III

    2

    主题

    63

    回帖

    690

    积分

    高级会员

    积分
    690
     楼主| 发表于 2023-12-25 21:23:53 | 显示全部楼层
    wangxiangtan 发表于 2023-12-25 15:29
    收藏了,我也有几片STC11F02E,你这个程序很有用,我留着备用

    相互学习
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 147 天

    [LV.7]常住居民III

    39

    主题

    887

    回帖

    4126

    积分

    荣誉版主

    积分
    4126
    发表于 2023-12-26 03:37:18 | 显示全部楼层
    wangxiangtan 发表于 2023-12-25 15:29
    收藏了,我也有几片STC11F02E,你这个程序很有用,我留着备用

    都什么年代了 ?

    还收藏 这个经典老古董 ~~~~~~
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    8 小时前
  • 签到天数: 175 天

    [LV.7]常住居民III

    12

    主题

    352

    回帖

    1164

    积分

    金牌会员

    积分
    1164
    发表于 2023-12-26 08:08:17 | 显示全部楼层
    LAOXU 发表于 2023-12-26 03:37
    都什么年代了 ?

    还收藏 这个经典老古董 ~~~~~~

    拆机件,被时间验证过了的经典
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-18 18:06 , Processed in 0.071455 second(s), 63 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表