WCH沁恒单片机
直播中

h1654155598.0450

12年用户 668经验值
私信 关注
[问答]

ch552 UART0和TIME0同时使用UART时会失效怎么解决?

项目需要同时使用UART0,和tiME0,TIME2。UART0已经使用了TIME1自动重载定时器。在单独使用UART0的示例代码的时候是可以的,但是加上TIME0后,发现UART0就失效了。
#include ".PublicCH554.H"
#include ".PublicDebug.H"
#include ".PublicTimer.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同时使用时会失效?

回帖(1)

高敏兰

2022-7-20 10:06:52
解决了:定时器工作在不同的方式就可以了。
举报

更多回帖

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