微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC C18自带串口程序

PIC C18自带串口程序

时间:11-13 来源:互联网 点击:
官方写的串口程序,值得学习一下!
(串口无论接收还是发送都有轮询法和中断法)

读一个字节

#include

#include

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

* Function Name: ReadUSART *

* Return Value: char: received data *

* Parameters: void *

* Description: This routine reads the data from the USART *

* and records the status flags for that byte *

* in USART_Status (Framing and Overrun). *

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

#if defined (AUSART_V1) || defined (EAUSART_V3) || defined (EAUSART_V4) || defined (EAUSART_V5)

char ReadUSART(void) //this function can be removed by macro #define ReadUSART RCREG

{

char data; // Holds received data

USART_Status.val &= 0xf2; // Clear previous status flags

if(RCSTAbits.RX9) // If 9-bit mode

{

USART_Status.RX_NINE = 0; // Clear the receive bit 9 for USART

if(RCSTAbits.RX9D) // according to the RX9D bit

USART_Status.RX_NINE = 1;

}

if(RCSTAbits.FERR) // If a framing error occured

USART_Status.FRAME_ERROR = 1; // Set the status bit

if(RCSTAbits.OERR) // If an overrun error occured

USART_Status.OVERRUN_ERROR = 1; // Set the status bit

data = RCREG; // Read data

return (data); // Return the received data

}

#endif

获取字符串

#include

#include

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

* Function Name: getsUSART *

* Return Value: void *

* Parameters: buffer: pointer to string *

* len: length of characters to receive *

* Description: This routine receives a string of characters *

* from the USART of length specified by len. *

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

#if defined (AUSART_V1) || defined (EAUSART_V3) || defined (EAUSART_V4) || defined (EAUSART_V5)

void getsUSART(char *buffer, unsigned char len)

{

char i; // Length counter

unsigned char data;

for(i=0;i

{

while(!DataRdyUSART());// Wait for data to be received

data = getcUSART(); // Get a character from the USART =ReadUSART(void)

// and save in the string

*buffer = data;

buffer++; // Increment the string pointer

}

}

#endif

写一个字符

#include

#include

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

* Function Name: WriteUSART *

* Return Value: none *

* Parameters: data: data to transmit *

* Description: This routine transmits a byte out the USART. *

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

#if defined (AUSART_V1) || defined (EAUSART_V3) || defined (EAUSART_V4) || defined (EAUSART_V5)

void WriteUSART(char data)

{

if(TXSTAbits.TX9) // 9-bit mode?

{

TXSTAbits.TX9D = 0; // Set the TX9D bit according to the

if(USART_Status.TX_NINE) // USART Tx 9th bit in status reg

TXSTAbits.TX9D = 1;

}

TXREG = data; // Write the data byte to the USART

}

#endif
写一个字符串

#include

#include

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

* Function Name: putsUSART *

* Return Value: void *

* Parameters: data: pointer to string of data *

* Description: This routine transmits a string of characters *

* to the USART including the null. *

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

#if defined (AUSART_V1) || defined (EAUSART_V3) || defined (EAUSART_V4) || defined (EAUSART_V5)

void putsUSART( char *data)

{

do

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top