📄 uart.c
字号:
#include <head.h>
#include <config.h>
#include "uart.h"
uchar pdata UartWBuf[UART_WBUFLEN];
uchar pdata pUartWBufW=0,pUartWBufR=0;
uchar pdata UartRBuf[UART_RBUFLEN];
uchar pdata pUartRbufW=0;
BOOL hadrxcom;
BOOL SendEndFlag=1;
/**************************************************************************
* 函数原型: void Uart_init(Ulong baud,char parity)
* 功 能: 串口初始化函数
* 入 口: baud:波特率,parity:校验位
*************************************************************************/
void Uart_Init(ulong Baud,char Parity)
{
ulong temp;
if(Parity) SCON=0xd0;
else SCON=0x50;
T2CON=0x30;
temp=0x10000-(SYSCLK/32)/Baud;
TH2=((uint)temp)>>8;
RCAP2H=TH2;
TL2=temp&0xff;
RCAP2L=TL2;
T2CON=0x34;
D485WEN=FALSE;
PS=1; //
ES=1;
EA=1;
}
/**************************************************************************
* 函数原型:void uart_int(void);
* 功 能:串口中断4
**************************************************************************/
void uart_int(void) interrupt 4
{
if(_testbit_(TI))
{
if(pUartWBufR!=pUartWBufW)
{
D485WEN=TRUE;
SBUF=UartWBuf[pUartWBufR++];
if(pUartWBufR>=UART_WBUFLEN)pUartWBufR=0;
}
else {SendEndFlag=1;D485WEN=FALSE;}
}
if(_testbit_(RI))
{
if(SBUF==0x2)pUartRbufW=0;
else if(SBUF==0x3) hadrxcom=1;
else if(!hadrxcom)UartRBuf[pUartRbufW++]=SBUF;
}
}
/**************************************************************************
//以下为串口发送子程序,bit Uart_sendS(Uchar *wchar)为发送字符串,
bit Uart_sendC(Uchar wchar)为发送单个字符
bit Uart_sendN(long wnum,char dot)为发送数字
*************************************************************************/
BOOL Uart_SendS(uchar *Wchar)
{
uchar i=0;
for(i=0;Wchar[i]!='\0';i++)
{
Uart_SendC(Wchar[i]);
}
return 1;
}
BOOL Uart_SendC(uchar Wchar)
{
D485WEN=TRUE;
if(SendEndFlag){SBUF=Wchar;SendEndFlag=0;}
else
{
UartWBuf[pUartWBufW]=Wchar;
if(++pUartWBufW>=UART_WBUFLEN)pUartWBufW=0;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -