ch552 UART0和TIME0同时使用的问题

项目需要同时使用UART0,和TIME0,TIME2。UART0已经使用了TIME1自动重载定时器。在单独使用UART0的示例代码的时候是可以的,但是加上TIME0后,发现UART0就失效了。

#include ".\Public\CH554.H"
#include ".\Public\Debug.H"
#include ".\Public\Timer.H"
#include "stdio.h"
#include 

#pragma  NOAREGS
 

UINT8 dat = 2;
UINT8 flag = 0;
 
 
void UART0Interrupt( void ) interrupt INT_NO_UART0
{
    if(RI)
    {
        dat = SBUF;
        CH554UART0SendByte(dat);
        RI = 0;
        flag = 1;
    }
}

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


}
void main( )
{
    CfgFsys( );                                                                //CH554时钟选择配置
    mDelaymS(20);
    mInitSTDIO( );
   initTime();

    while(1)
    { 
        if(flag)
        {
 
            flag = 0;
        }

        mDelaymS(100);
         
    }
}
void	mInitSTDIO( )
{
    UINT32 x;
    UINT8 x2; 

    SM0 = 0;
    SM1 = 1;
    SM2 = 0;                                                                   //串口0使用模式1
                                                                               //使用Timer1作为波特率发生器
    RCLK = 0;                                                                  //UART0接收时钟
    TCLK = 0;                                                                  //UART0发送时钟
    PCON |= SMOD;
    x = 10 * FREQ_SYS / UART0_BUAD / 16;                                       //如果更改主频,注意x的值不要溢出                            
    x2 = x % 10;
    x /= 10;
    if ( x2 >= 5 ) x ++;                                                       //四舍五入

    TMOD = TMOD & ~ bT1_GATE & ~ bT1_CT & ~ MASK_T1_MOD | bT1_M1;              //0X20,Timer1作为8位自动重载定时器
    T2MOD = T2MOD | bTMR_CLK | bT1_CLK;                                        //Timer1时钟选择
    TH1 = 0-x;                                                                 //12MHz晶振,buad/12为实际需设置波特率
    TR1 = 1;                                                                   //启动定时器1
    //TI = 1;
    REN = 1;                                                                   //串口0接收使能
	 EA=1;//全局中断使能控制位,该位为 1 并且 E_DIS 为 0 则允许中断;该位为 0 屏蔽所有中断请求
	ES=1; //异步串口 0 中断使能位,该位为 1 允许 UART0 中断;为 0 屏蔽
 
}

请问我能不能同时使用uart0 和 time0 time2,为什么UART同时使用时会失效?

解决了:定时器工作在不同的方式就可以了。


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