松翰单片机_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 @ 2019-10-26 13:49  panda_w  阅读(705)  评论(0编辑  收藏  举报