项目需要同时使用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同时使用时会失效?
热门产品 :
CH339: 7端口多功能USB HUB控制器芯片