使用ch552芯片,设置脉冲输出,按键改变脉宽,不能实现,是什么问题呢,求解

#include "CH552.H"                                                  

#include "Debug.H"

#include "Timer.H"

#include "stdio.h"

#include "GPIO.H"

#pragma  NOAREGS


//UINT8 FLAG;

//UINT16 Cap[8] = {0};

//typedef unsigned int uint16_t;

sbit LED1 = P3^4;

sbit led2 = P1^3;

sbit key = P1^4;

unsigned int condition=0;//这里高电平占一份

unsigned int cnt;  //整个周期

void button();

void main( ) 

{

    CfgFsys( );                                                                //CH554时钟选择配置   

    mDelaymS(5);                                                               //修改主频,建议稍加延时等待主频稳定

Port3Cfg(1,4);

Port1Cfg(1,3);

Port1Cfg(3,4);

    mTimer0Clk12DivFsys();                                                   //T0定时器时钟设置

    mTimer_x_ModInit(0,2);                                                     //T0 定时器模式设置

    mTimer_x_SetData(0,0x5555);                                               //T0定时器赋值

    mTimer0RunCTL(1);                                                          //T0定时器启动

    ET0 = 1;                                                                   //T0定时器中断开启

    EA = 1;

    while(1)

{

if(cnt>=100)

{

LED1=0;

}

if(cnt<condition)

{

    LED1=1;

}

else

{

    LED1=0;

}

    button();

 }

}

void Time0Interrupt(void) interrupt INT_NO_TMR0 using 1

{

mTimer_x_SetData(0,0x5555);                                               //T0定时器赋值

    cnt++;

}

void button()

{

if(key==0)

{

mDelaymS(5);

if(key==0)

{

condition=condition+30; //调制脉宽

            led2=!led2;//led灯反转

            if(condition>=90)//如果脉宽等于总周期了等于0

 {

condition=90;

            }

            while(!key);  //等待按键松手

}

}

}


您好,您说的脉宽是LED1输出的波形吗?这个引脚的波形是如何测试的?

LED1输出高电平是cnt

按键按3次之后高电平时间固定,按照您的代码逻辑大致是这样的。

您是如何判断引脚脉宽的?以及是如何实现修改这个脉宽的?

cnt的高电平占比在周期中最大应该就是90/65536,脉宽从占比上来说很低

不知我理解的有没有问题j_0058.gif


只有登录才能回复,可以选择微信账号登录