松翰单片机_SN8F570310——PWM

SN8F570310——PWM


 

 

 


 

 

 

 

 


 

 

 


 

 

 


 

 

 


 

 代码示例:

 

复制代码
#include "Equ.h"

/*
        普通   PWM
        单脉冲 PWM
        死区     PWM        (就是取反的PWM)

        寄存器:PW1M
                        PW1CH  (输出引脚)
                        PW1Y  (16 位 PWM1 周期控制位)
                        PW1D  (16 位 PWM1 占空比控制位)
                        PW1B    (16 位 PWM1 死区控制位)
                        PW1A    (8  位 PWM1 死区控制位)
                        IEN0
                        INE4
                        
        PW1C 加载 PW1Y 寄存器的值决定 PWM 的周期和分辨率         (装载值)
        PW1C 从 0000H 开始计数,PWM 输出高电平                 (计数器)
        PW1C=PW1D 时, PWM 输出低电平                         (比较值)
        
        P2.4    PWM11
*/

void pwm_init(void)
{
    PW1YH = 0xA0;        //周期
    PW1YL = 0x00;
    PW1DH = 0x50;        //占空比
    PW1DL = 0x00;
    
    IEN4 |= 0x80;   //开启PWM中断
    
    PW1CH |= 0x02;              //PWM 输出引脚;
    PW1M   = 0x80 | 0x40; //使能时钟  
//    PW1M  |= 0x01  //单脉冲
//     PW1M  |= 0x08  //死  区
    
    P2M |= 0x10;           //输出模式
    P2  |= 0x10;             //起始高电平
    
}

void PW1Interrupt(void) interrupt ISRPwm1
{
    int p;
    for(p=0;p<20000;p++){}
    for(p=0;p<20000;p++){}
    S0BUF = 0x99;                                //for text
    if((IEN4 & 0x08) == 0x08){
        IEN4 &=~0x08; 
        for(p=0;p<20000;p++){}
        for(p=0;p<20000;p++){}
        S0BUF = 0x66;                        //for text
    }
        
}
复制代码

 

 

 

 

 

 

 

 

 

 

 

 

测试:


 

 

普通PWM

 

死区PWM(就是取反的pwm)

 

单脉冲PWM

 

 

 

 笔记:


 

 

 

 

 

 

 

posted @   panda_w  阅读(734)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示