⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 单片机串口设置的一个通用程序
💻 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 + -