📄 uart.c
字号:
/*********************************Copyright (c)*****************************
**
** 飞鹏电子工作室
** 嵌入式项目
** http://xpstudio2003.blog.163.com
**
**项目名称: xp51nRF2401
**编译环境: KEIL 2
**--------------------------------------------------------------------------
**文 件 名: SYS.C
**作 者: 曹香鹏
**创建日期: 2008年12月04日
**描 述:
**--------------------------------------------------------------------------
**维护记录:
**
****************************************************************************/
#include "xp51HDF.H"
#include "Uart.h"
void ExecuteCommand(void);
#define TIMEOUT 0xFE
#define DATA_NO_MATCH 0XFF
static BOOL TimeOutFlag;//= FALSE;//接收数据超时标志位
//串行通讯初始化
void InitUART(void)
{
SCON |= 0x50; //0101 0000 uart 工作方式1,
TMOD &= 0x0f; //Timer1,WorkMode 1
TMOD |= 0x20;
TH1 = 0xfd; //0xfd
TL1 = 0xfd;
TR1 = TRUE;
ES = TRUE; //init Interrupts
TimeOutFlag = FALSE;
Puts("Rdy\n");
}
//发送1个字节数据
void SendComm(INT8U dat)
{
TI=0;
SBUF=dat;
while(!TI)
{
//应该加入超时程序.!!!
}
TI=0;
}
void Puts(INT8U str[])
{
while(*str)
{
SendComm(*str++);
}
}
//接收1个字节数据,有超时及标志位
INT8U WaitComm(INT16U WaitTimeOut)
{
if(TimeOutFlag == TRUE)return TIMEOUT;
while(!RI)
{
delay(20) ;
WaitTimeOut--;
if(WaitTimeOut==0)
{
TimeOutFlag = TRUE;
return TIMEOUT;
}
}
RI=0;
return SBUF;
}
static INT8U ReceiveData[4]={~0,0,~0,0}; //传输数据数组
void UartINT(void) interrupt 4
{
INT8U ReceiveTemp[4]; //数据接收临时数组
if(RI==TRUE)
{
RI = 0;
//===============================================================
//>>>数据传输
ReceiveTemp[0] = SBUF;
#ifdef __DEBUG__
if(ReceiveTemp[0] == 0xFF)
{
Delay_ms(240);
Delay_ms(240);
ISP_CONTR = 0x60;//软复位AP->ISP,可下程序
}
if(ReceiveTemp[0] == 0xEE)
{
Delay_ms(200);
ISP_CONTR = 0x20;//软复位AP->ISP,可下程序
}
#endif
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -