WCH沁恒单片机
直播中

张玉珍

7年用户 1041经验值
私信 关注
[问答]

使用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);  //等待按键松手
}
}
}


回帖(1)

王官君

2022-5-31 11:10:40
您好,您说的脉宽是LED1输出的波形吗?这个引脚的波形是如何测试的?
LED1输出高电平是cnt
按键按3次之后高电平时间固定,按照您的代码逻辑大致是这样的。
您是如何判断引脚脉宽的?以及是如何实现修改这个脉宽的?
cnt的高电平占比在周期中最大应该就是90/65536,脉宽从占比上来说很低
不知我理解的有没有问题
举报

更多回帖

发帖
×
20
完善资料,
赚取积分