单片机----PWM------14

///
#ifndef PWM_Drive
#define PWM_Drive

sbit PWM3_OUT=P2^1;
extern void PWM3_Init();
extern void PWM3_Modify_Ser(u16 Dat1,u16 Dat2);

#endif
/
#include <all.h>
void PWM3_Init()
{
P2M1&=0xfd; //1111 1101
P2M0|1=0x02; //0000 0010 I/O 口 推挽输出

P_SW2|=0x80;         //1000 0000       P_SW2寄存器的最高位EAXFR 是扩展SFR访问控制使能.允许访问XSFR
PWMCFG=0x00;     //配置PWM的输出初始电平为低电平,也就是第一次翻转前输出的电平
						
						PWMCFG寄存器
?       CBTATC       C7INI  C6INI   C5INI	C4INI	C3INI	C3INI

复位后 000 0000
CBTADC :PWM计数器归零触发ADC转换控制位, 当它为0, 不会触发ADC转换; 为1就触发
注: 前提是PWM和ADC都要使能, ENPWM = 1 && ADCON = 1
CxINI(x: 2-7) 设置PWMx, 当它为0,表示PWMx输出端口初始电压为低电平, 为1就是高电平

PWMCH=0x03;              
PWMCL=0xff;    //0--1023  固定周期

PWM计数器(PWMCH&PWMCL)

复位后 0000 0000

PWM计数器是一个15位寄存器, 计数器1~32768之间的任意值都可以作为PWM的周期. PWM波形发生器内部的计数器从0开始计数, 每个PWM时钟递增1. 当内部计数器达到[PWMCH,PWMCL]设置的PWM周期时, PWM波形发生器内部的计数器将从0开始重新计数. 硬件会自动将PWM归零中断标志位CBIF置一, 如果ECBI为1, 则程序将跳转到相应中断执行中断服务程序

PWMCKS=0;       //选择PWM的时钟为Fosc/(0+1)

M时钟选择寄存器(PWMCKS)
复位后: 0 0000

SELT2: PWM时钟源选择. 为0, PWM时钟源为系统时钟经过分频器之后的时钟; 为1, PWM时钟源为T2的溢出脉冲
PS[3:0] :系统时钟分频参数. SELT2位为0, PWM时钟频率 = 系统时钟频率/(PS[3:0]+1)PW
M时钟选择寄存器(PWMCKS)

PWM3CR=0x00;      //选择PWM3输出到P2.1,不使能 PWM2中断
	
PWMCR&=0x82;   //使能PWM信号输出    1000 0010
PWMCR|=0x82;      //使能PWM模块

P_SW2&=~0x80;  //关闭访问XSFR

}
void PWM3_Modify_Ser(u16 Dat1,u16 Dat2)
{
static xdata u16 count=0; //刷新率太快会让波形重叠,降低一些
if(count>1000)
{
P_SW2|=0x80; //1000 0000 允许访问XSFR
PWMCR&=0x7f; //0111 1111 修改占空比前,关闭寄存器最高位,关闭PWM功能
PWMCFG&=0x00; //配置PWM的输出初始电平为低电平,也就是第一次翻转前输出的电平
PWM3T1=Dat1; //设置 PWM3第一次反转的 PWM计数
PWM3T2=Dat2; //设置 PWM3第二次反转的 PWM计数 一个周期内第二次反转减去第一次反转等于高电平时间
PWMCR|=0x80; //1000 0000 修改之后重新 允许PWM功能
P_SW2&=~0x80; //不允许访问XSFR
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_49327613

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值