现在使用CH547开发项目,需要用到UART0 作为与上位机的通讯端口,但是怎样设置都不能正常工作,以下是代码,请各位不吝赐教
/*******************************************************************************
* Function Name : mInitSTDIO()
* Description : CH559´®¿Ú0³õʼ»¯,ĬÈÏʹÓÃT1×÷UART0µÄ²¨ÌØÂÊ·¢ÉúÆ÷,Ò²¿ÉÒÔʹÓÃT2
×÷Ϊ²¨ÌØÂÊ·¢ÉúÆ÷
* Input : None
* Output : None+
* Return : None
*******************************************************************************/
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 / UART0BUAD / 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; //Æô¶¯¶¨Ê±Æ÷1E
TI = 1;
RI = 1;
REN = 1; //´®¿Ú0½ÓÊÕʹÄÜ
ES = 1; //ENABLE UART0 INT
}
我的想法是用UART0的中断来接收发送数据
void UART0Interrupt( void ) interrupt INT_NO_UART0 using 1 //´®¿Ú0ÖжϷþÎñ³ÌÐò,ʹÓüĴæÆ÷×é1
{
if(SCON&0x02)
{
TI=1;
if(++TranPointer >= TRANSMIT_DATA_BUFFER)
TranPointer = 0;
if(TranPointer != BakTranPointer)
{
SBUF = TranData[++TranPointer];
}
//CH549UART1SendByte(dat);
}else if(SCON&0X01) //Çå³ý½ÓÊÕÍêÖжÏ
{
RI=1;
ReceiveData[++ReceivePointer]=SBUF;
if(ReceivePointer >= RECEIVE_DATA_BUFFER)
ReceivePointer = 0;
}
}
其中 TranData[],ReceiveData[] 分别是发送 BUFFER 和接收BUFERR
现在的问题 只要 设 ES=1; 我原本的程序都运行不正常了,请各位不吝指教 |