ch552使用定时器1控制定时器0启动,代码编译不通过,使用方法不是和51单片机一样的?求解

/*******************************************************************************

* Function Name  : void Timer0_Init()

* Description    : 定时器初始化

*******************************************************************************/

void Time0_Init()

{

   count = 0;

   min   = 0;

   sec   = 59;

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

   mTimer1Clk12DivFsys();                                     //T1定时器时钟设置

   mTimer_x_ModInit(0,1);                                     //T0定时器模式设置16位定时器

   mTimer_x_ModInit(1,2);                                     //T1定时器模式设置8位自动重装定时器

   mTimer_x_SetData(0,0xC350);                                //T0定时器赋值5MS

   mTimer_x_SetData(1,0x4C00);                                //T1定时器赋值5MS

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

   mTimer1RunCTL(1);                                          //T1定时器启动

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

   ET1   = 1;                                                 //T1定时器中断开启

   EA    = 1;

}

/*******************************************************************************

* Function Name  : mTimer0Interrupt()

* Description    : CH554定时计数器0定时计数器中断处理函数

*******************************************************************************/

voidmTimer0Interrupt( void ) interrupt INT_NO_TMR0 using 1           //timer0中断服务程序,使用寄存器组1

{

mTimer_x_SetData(0,0xC350);                                          //非自动重载方式需重新给TH0和TL0赋值

count++;

if(count==10)

{

count=0;

if(sec==0)

{

if(min!=0)

{

sec=59;

min--;

}

else

{

mTimer0RunCTL(0);                                          //T0定时器停止

}

}

else sec--;

}

}

voidmTimer1Interrupt( void ) interrupt INT_NO_TMR1 using 2 

{

cnt++;

if(cnt>=30)     //计时3s

{

cnt=0;

if(key1==1&&key2==1&&(min>0||sec>0))

{

mTimer0RunCTL(1);  //开启定时器0;

}

}

}

void main( ) 

{

Time0_Init();

Init_1621();       //初始化HT1621

HT1621_all_off();  //清空LCD显示

while(1)

{

Write_1621(0,0xF0,4);

if(key1==0)

{

delay_ms(100);

if(key1==0)

{

if(min!=999)

{

min++;

}

}

while(!key2);

delay_ms(1000);

while(!key2);

}

if(key2==0)

{

delay_ms(100);

if(key2==0)

{

if(min!=0)

{

min--;

}

}

while(!key1);

delay_ms(1000);

while(!key1);

}

min0=min/100%10;

min1=min/10%10;

min2=min/1%10;

sec1=sec/10%10;

sec2=sec/1%10;

Display_Init(min0,min1,min2,sec1,sec2);

}

}


可以根据开发工具的输出信息中的错误信息来定位到代码的具体错误位置。

如果是一些常见的语法错误可以在网上找到答案,也可以将错误信息贴出来看一下。


不知道ch552使用两个定时器有什么要求的吗?使用定时器1控制定时器0,调用函数有什么要求的吗,还是和51单片机兼容的?



CH552的定时器和常见的51单片机使用一样。函数调用没有任何特殊要求。

如果是编译通过输出HEX的问题,这个和用什么单片机没有关系,查语法,查工程


需要把T1中断注解才可以,如果注释了t1定时器没法中断,求解一下

1641369182(1).png



我们可以关注一下错误信息~


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