高级PWM的点空比如果用变量代替,延迟时间长怎么解决?
老师们,新年好,,高级PWM的占空比,我用一个按键产生的变量代替,但是当按键按下时,PWM波变换延迟大约有2秒的时间。。。。请老师们看看下面代码,哪个地方出问题了,谢谢了正常应该是按下按键后,PWM波应该马上变换,但是现在延时大约有2秒。。
591
#include "STC32G.h"
#include "intrins.h"
#include "STC32G_Delay.h"
#define MAIN_Fosc 24000000L //定义主时钟
#define PWMA_PSCR 0 //设置分频 (分频数 = PSCR + 1)
#define PWMA_ARR 2399 //自动重装最高数
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
void PWMA_Init(void);
u16 PWMA_CCR;
void main(void)
{
u8 qianjin = 0;
P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能
P0M1 = 0x00; P0M0 = 0x00; //设置为准双向口
P1M1 = 0x00; P1M0 = 0x00; //设置为准双向口
P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口
P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口
P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口
P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口
P6M1 = 0x00; P6M0 = 0x00; //设置为准双向口
P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口
PWMA_CCR = 0;
PWMA_Init();
while(1)
{
if(P51 == 0)
{
delay_ms(10);
if(P51 == 0)
{
delay_ms(500);
while(!P51);
if(qianjin == 0)
{
qianjin = 1;
PWMA_CCR = t;
PWMA_CCR1H = (u8)(PWMA_CCR >> 8);//计数比较寄存器高位,设置占空比
PWMA_CCR1L = (u8)(PWMA_CCR);
}
else if(qianjin == 1)
{
qianjin = 0;
PWMA_CCR = 0;
PWMA_CCR1H = (u8)(PWMA_CCR >> 8);//计数比较寄存器高位,设置占空比
PWMA_CCR1L = (u8)(PWMA_CCR);
}
}
}
}
}
void PWMA_Init(void)//PWMA的初始化
{
//1.时钟源选择
//2.时基单元选择
PWMA_PSCRH = (u8)(PWMA_PSCR >> 8);//预分步寄存器高8位,设置1分频
PWMA_PSCRL = (u8)(PWMA_PSCR);//预分步寄存器低8位,设置1分频
PWMA_ARRH = (u8)(PWMA_ARR >> 8);//自动重载寄存器高8位
PWMA_ARRL = (u8)(PWMA_ARR); //自动重载寄存器低8位
PWMA_CCR1H = (u8)(PWMA_CCR >> 8);//计数比较寄存器高位,设置占空比
PWMA_CCR1L = (u8)(PWMA_CCR); //计数比较寄存器低位,设置占空比
//3.输入输出引脚配置
PWMA_ENO = 0X00; //清空使能输出引脚
PWMA_ENO |= 0X01; //设置使能输出PWM1P端口
// PWMA_ENO |= 0X02;
PWMA_PS = 0X00; //先清空引脚配置
PWMA_PS |= 0X01; //选择PWM输出IO口为P20
//4.输入输出模式配置
PWMA_CCER1 = 0X00; //先清零捕获比较寄存器
PWMA_CCMR1 = 0X68; //配置捕获比较寄存器1
PWMA_CCER1 = 0X01; //开启PWM通道模式为不互补,高电平有效
//5.下面两个主功能。放在最后
PWMA_BKR = 0X80; //配置刹车寄存器,使用主输出
PWMA_CR1 |= 0X01; //启动计数器
}
已经解决,用了按键状态机就可以了
页:
[1]