#include "H/Function_Init.H"
void Uart0_Init(uint Freq,unsigned long int baud);
bit UartSendFlag = 0; //发送中断标志位
bit UartReceiveFlag = 0; //接收中断标志位
unsigned char redata=0;
/*****************************************************
*函数名称:void Uart0_Test(void)
*函数功能:Uart0测试
*入口参数:void
*出口参数:void
*****************************************************/
void delay1s(void) //误差 0us
{
unsigned char a,b,c,n;
for(c=234;c>0;c--)
for(b=213;b>0;b--)
for(a=159;a>0;a--);
for(n=6;n>0;n--);
}
void Uart0_Test(void)
{
Uart0_Init(16,9600);
while(1)
{
// SBUF = 0X55;
if(UartReceiveFlag )
{
SBUF = redata;
while(!UartSendFlag);
UartSendFlag = 0;
UartReceiveFlag=0;
}
}
}
/*****************************************************
*函数名称:void Uart0_Init(uint Freq,unsigned long int baud)
*函数功能:Uart0中断初始化
*入口参数:Freq-主频,baud-波特率
*出口参数:void
*****************************************************/
void Uart0_Init(uint Freq,unsigned long int baud) //选择Timer1作为波特率信号发生器
{
P1CON &= 0x9f; //TX/RX设置为输入带上拉
P1PH |= 0x60;
SCON |= 0X50; //设置通信方式为模式一,允许接收
TMCON |= 0X02;
TMOD |= 0X20;
PCON |= 0X80; //SMOD=1
TH1 = (Freq*1000000/baud)>>8; //波特率为T1的溢出时间;
TL1 = Freq*1000000/baud;
TR1 = 0;
ET1 = 0;
EUART = 1; //开启Uart0中断
EA = 1;
}
/*****************************************************
*函数名称:void UartInt(void) interrupt 4
*函数功能:Uart0中断函数
*入口参数:void
*出口参数:void
*****************************************************/
void UartInt(void) interrupt 4
{
if(TI)
{
TI = 0;
UartSendFlag = 1;
}
if(RI)
{
RI = 0;
UartReceiveFlag = 1;
redata = SBUF;
}
}
|