WCH沁恒单片机
直播中

刘丽

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

使用ch552G的定时器测的波形不正常是什么原因?

使用552G的定时器,程序如下



sbit led_r = P3^1;


int main( )
{
    CfgFsys( );                                                                //CH554时钟选择配置   
    mDelaymS(5);

mtimer0Clk12DivFsys();                                                   //T0定时器时钟设置
    mTimer_x_ModInit(0,2);                                                     //T0 定时器模式设置
    mTimer_x_SetData(0,0x3838);                                               //T0定时器赋值
    mTimer0RunCTL(1);                                                          //T0定时器启动
ET0 = 1;                                                                   //T0定时器中断开启
    EA = 1;

led_r = 0;


    while(1) {

}
}


void mTimer0Interrupt( void ) interrupt INT_NO_TMR0 using 1                //timer0中断服务程序,使用寄存器组1
{
if (led_r == 0)
led_r = 1;
else
led_r = 0;
}


使用逻辑分析仪测得p31输出:


去掉R7,将led断开后,输出的波形就正常了

原理图如下:


在P31脚加一个300K的电阻接地后测得波形一样不正常,请问这个是哪里的问题?
  
  

回帖(1)

李思昊

2022-6-2 09:54:26
使用552G的定时器,程序如下



sbit led_r = P3^1;


int main( )
{
    CfgFsys( );                                                                //CH554时钟选择配置   
    mDelaymS(5);

mTimer0Clk12DivFsys();                                                   //T0定时器时钟设置
    mTimer_x_ModInit(0,2);                                                     //T0 定时器模式设置
    mTimer_x_SetData(0,0x3838);                                               //T0定时器赋值
    mTimer0RunCTL(1);                                                          //T0定时器启动
ET0 = 1;                                                                   //T0定时器中断开启
    EA = 1;

led_r = 0;


    while(1) {

}
}


void mTimer0Interrupt( void ) interrupt INT_NO_TMR0 using 1                //timer0中断服务程序,使用寄存器组1
{
if (led_r == 0)
led_r = 1;
else
led_r = 0;
}


使用逻辑分析仪测得p31输出:


去掉R7,将led断开后,输出的波形就正常了

原理图如下:


在P31脚加一个300K的电阻接地后测得波形一样不正常,请问这个是哪里的问题?
  
  
举报

更多回帖

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