保捱科技网
您的当前位置:首页串口通信主机程序与从机程序

串口通信主机程序与从机程序

来源:保捱科技网


串口通信 主机程序与从机程序

串口通信

主机程序:

#include "config.h"

#define UART_BPS 115200 // 定义通讯波特率

uint8 const SEND_STRING[] = "Hello World!";

/****************************************************************************

* 名 称:DelayNS()

* 功 能:长软件延时

* 入口参数:dly 延时参数,值越大,延时越久

* 出口参数:无

****************************************************************************/

void DelayNS(uint32 dly)

{ uint32 i;

for(; dly>0; dly--)

{

for(i=0; i<5000; i++);

}

}

/****************************************************************************

* 名 称:UART0_Ini()

* 功 能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200

* 入口参数:无

* 出口参数:无

****************************************************************************/

void UART0_Init(void)

{ uint16 Fdiv;

U0LCR = 0x83; // DLAB = 1,可设置波特率

Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率

U0DLM = Fdiv / 256;

U0DLL = Fdiv % 256;

U0LCR = 0x03;

}

/****************************************************************************

* 名 称:UART0_SendByte()

* 功 能:向串口发送字节数据,并等待发送完毕。

* 入口参数:data 要发送的数据

* 出口参数:无

****************************************************************************/

void UART0_SendByte(uint8 data)

{

U0THR = data; // 发送数据

while( (U0LSR&0x40)==0 ); // 等待数据发送完毕

}

/****************************************************************************

* 名 称:UART0_SendStr()

* 功 能:向串口发送一字符串

* 入口参数:srt 要发送的字符串的指针

* 出口参数:无

****************************************************************************/

void UART0_SendStr(uint8 const *str)

{

while(1)

{

if( *str == '\\0' ) break;

UART0_SendByte(*str++); // 发送数据

}

}

/****************************************************************************

* 名 称:main()

* 功 能:向串口UART0发送字符串"Hello World!"

****************************************************************************/

int main(void)

{

PINSEL0 = 0x00000005; // 设置I/O连接到UART0

UART0_Init();

UART0_SendByte('Y');

if( 0x04==(U0IIR&0x0F) ) rcv_new = 1;

while(U0RBR!='Y');

while(1)

{

UART0_SendStr(SEND_STRING);

DelayNS(10);

if( 0x04==(U0IIR&0x0F) ) rcv_new = 1;

while(U0RBR!='T');

}

return(0);

}

从机程序

#include "config.h"

#include "strings.h"

uint8 rcv_buf[13]; // UART0数据接收缓冲区

uint8 strings[]=''Hello World!";

volatile uint8 rcv_new; // 接收新数据标志

/*****************************

***********************************************

* 名 称:Rev_UART0()

* 功 能:串口UART0接收。

* 入口参数:无

* 出口参数:无

****************************************************************************/

void Rev_UART0(void)

{

uint8 i;

if( 0x04==(U0IIR&0x0F) ) rcv_new = 1; // 设置接收到新的数据标志

for(i=0; i<13; i++)

{

rcv_buf[i] = U0RBR; // 读取数据

}

}

/****************************************************************************

* 名 称:SendByte()

* 功 能:向串口UART0发送字节数据。

* 入口参数:data 要发送的数据

* 出口参数:无

****************************************************************************/

void SendByte(uint8 data)

{

U0THR = data; // 发送数据

}

/****************************************************************************

* 名 称:UART0_Ini()

* 功 能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200

* 入口参数:无

* 出口参数:无

****************************************************************************/

void UART0_Init(void)

{ uint16 Fdiv;

U0LCR = 0x83; // DLAB = 1,可设置波特率

Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率

U0DLM = Fdiv / 256;

U0DLL = Fdiv % 256;

U0LCR = 0x03;

}

main(void)

{

PINSEL0 = 0x00000005; // 设置I/O连接到UART0

UART0_Init();

while( 0x04==(U0IIR&0x0F) )

{

if(U0RBR='Y') UART0_SendByte('Y');

else UART0_SendByte('N');

}

while(1)

{

Rev_UART0();

if(strcmp(strings,rcv_buf)) UART0_SendByte('T');

else

{

UART0_SendByte('F');

rcv_buf[]={0};

}

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容