附源代码 根据BSP 包例程改写,测试结果uart0 收发逻辑正常,uart1 接收正常,发送不正常没反应
/*---------------------------------------------------------------------------------------------------------*/
/* */
/* Copyright(c) 2017 Nuvoton Technology Corp. All rights reserved. */
/* */
/*---------------------------------------------------------------------------------------------------------*/
//***********************************************************************************************************
// Nuvoton Technoledge Corp.
// Website: http://www.nuvoton.com
// E-Mail : MicroC-8bit@nuvoton.com
// Date : Apr/21/2017
//***********************************************************************************************************
//***********************************************************************************************************
// File Function: N76E003 UART-0 Mode1 demo code
//***********************************************************************************************************
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#define BUFFER_SIZE 16
UINT8 UART_BUFFER[BUFFER_SIZE],temp;
UINT16 u16CNT=0,u16CNT1=0;
bit riflag;
/******************************************************************************
* FUNCTION_PURPOSE: Serial interrupt, echo received data.
* FUNCTION_INPUTS : P0.7(RXD) serial input
* FUNCTION_OUTPUTS: P0.6(TXD) serial output
* Following setting in Common.c
******************************************************************************/
#if 0
//void InitialUART0_Timer1(UINT32 u32Baudrate) //T1M = 1, SMOD = 1
//{
// P06_Quasi_Mode;
// P07_Quasi_Mode;
//
// SCON = 0x52; //UART0 Mode1,REN=1,TI=1
// TMOD |= 0x20; //Timer1 Mode1
//
// set_SMOD; //UART0 Double Rate Enable
// set_T1M;
// clr_BRCK; //Serial port 0 baud rate clock source = Timer1
//
//#ifdef FOSC_160000
// TH1 = 256 - (1000000/u32Baudrate+1); /*16 MHz */
//#endif
// set_TR1;
//}
////---------------------------------------------------------------
//void InitialUART0_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
//{
// P06_Quasi_Mode;
// P07_Quasi_Mode;
//
// SCON = 0x52; //UART0 Mode1,REN=1,TI=1
// set_SMOD; //UART0 Double Rate Enable
// T3CON &= 0xF8; //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1)
// set_BRCK; //UART0 baud rate clock source = Timer3
//#ifdef FOSC_160000
// RH3 = HIBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
// RL3 = LOBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
//#endif
// set_TR3; //Trigger Timer3
//}
#endif
/*******************************************************************************
* FUNCTION_PURPOSE: Main function
******************************************************************************/
void main (void)
{
InitialUART1_Timer3(9600); //UART0 Baudrate initial,T1M=0,SMOD=0
InitialUART0_Timer1(9600); //UART0 Baudrate initial,T1M=0,SMOD=0
//IE = 0x90;
set_ES_1; //For interrupt enable
set_ES;
set_EA;
while(1)
{
if(UART_BUFFER[0] == 0x56)
{
UART_BUFFER[0] = 0;
Send_Data_To_UART1(0x56);
Send_Data_To_UART0(0x56);
}
if(UART_BUFFER[0] == 0x57)
{
UART_BUFFER[0] = 0;
Send_Data_To_UART1(0x57);
Send_Data_To_UART0(0x57);
}
if(UART_BUFFER[0] == 0x58)
{
UART_BUFFER[0] = 0;
Send_Data_To_UART1(0x58);
Send_Data_To_UART0(0x58);
}
if(UART_BUFFER[0] == 0x59)
{
UART_BUFFER[0] = 0;
Send_Data_To_UART1(0x59);
Send_Data_To_UART0(0x59);
}
}
}
void SerialPort0_ISR(void) interrupt 4
{
if (RI==1)
{ /* if reception occur */
clr_RI;
clr_TI;
/* clear reception flag for next reception */
UART_BUFFER[0] = SBUF;
u16CNT ++;
riflag =1;
}
if(TI==1)
{
clr_TI; /* if emission occur */
}
}
void SerialPort1_ISR(void) interrupt 15
{
if (RI_1==1)
{ /* if reception occur */
clr_RI_1;
clr_TI_1;
/* clear reception flag for next reception */
UART_BUFFER[0] = SBUF_1;
u16CNT ++;
riflag =1;
}
if(TI_1==1)
{
clr_TI_1; /* if emission occur */
}
}
|