当我收到频率小于1000的时候 PWM增大情况有点问题 一直会先减小再增大而且增大的速度非常慢 在给予频率大于1000的时候PWM的减小很正常的
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
uint jici=0,pinlv=0,count=0,jishu=0,fangbo=1000,spl=0;
void delay(uint xms);
void dis();
void delay1(int ms) // 延时1ms函数
{
unsigned char y;
while(ms--)
{
for(y = 0; y<250; y++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void Timer0_ISR(void)interrupt 1 // 中断函数
{
jici++;
TH0=1536/256;
TL0=1536%256;
if(jici==250) //1S后进入运算
{
jishu=jici; //赋值
TR0=0; //关闭 定时器t0
spl=8000000/count;//频率的计算
pinlv=spl;
TL1=TH1=0;
count=0;
jici=0;
spl=0;
TR0=1; //打开定时器t0
}
}
void dis() //
{
if(jishu==250) //1S后进行运算
{
if (pinlv<1000) //当频率小于1000HZ的时候
{
clr_LOAD;
set_SFRPAGE;
fangbo=fangbo+50; //PWM输出增加
PWM5H = fangbo/256;
PWM5L = fangbo%256;
clr_SFRPAGE;
set_LOAD;
jishu=0;
if (fangbo>=1995)
{fangbo=1945;}
}
else if (pinlv>1000) // 当频率大于1000HZ
{
clr_LOAD;
set_SFRPAGE;
fangbo=fangbo-50; //PWM输出减少
PWM5H = fangbo/256;
PWM5L = fangbo%256;
clr_SFRPAGE;
set_LOAD;
jishu=0;
if (fangbo<=5)
{fangbo=55;}
}
}
}
void main()
{
Set_All_GPIO_Quasi_Mode;
PWM5_P03_OUTPUT_ENABLE; //使P03输出PWM5信号
PWM4_P01_OUTPUT_ENABLE;
clr_PWMTYP;
clr_PWMMOD0;
clr_PWMMOD1;
PWM_CLOCK_DIV_8; //进行分频
PWMPH = 0x07;
PWMPL = 0xCF;
set_SFRPAGE;
PWM5H = fangbo/256;
PWM5L = fangbo%256;
PWM4H = 1000/256;
PWM4L = 1000%256;
clr_SFRPAGE;
set_LOAD;
set_PWMRUN;//PWM开始输出
P00_Input_Mode; //P00作为输入模式
P00 = 1;
set_ENF0; //打开0通道噪声滤波
TIMER2_CAP0_Capture_Mode; //采用CAP0组捕获信道
IC3_P00_CAP0_BothEdge_Capture; //设定P00通过CAP0通道,双边沿触发
TIMER0_MODE1_ENABLE; //定时器0 模式1 启用
TH0=1536/256;
TL0=1536%256;
set_ECAP; //打开输入捕获中断
set_TR2; //定时器2计数器 开始
set_ET0;
set_EA; //开启总中断
set_TR0;
while(1)
{
dis();
}
}
void Capture_ISR (void) interrupt 12
{
clr_CAPF0; // 清除中断标志
count=(C0H*256)+C0L;
clr_TF2; //清除定时器2中断标志
delay1(1);
}
|