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

📄 usart.c

📁 MICROCHIP PIC16F6XX USART DRIVER
💻 C
字号:
#include <htc.h>
#include <stdio.h>
#include "dtypes.h"
#include "usart.h"

void USART_Init(void)
{
	RX_PIN = 1;			/* set RX_PIN as input */
	TX_PIN = 0;			/* set TX_PIN as output */
	ANSELH = 0x00;		/* config analog chanel as digital input */
	SPBRG = DIVIDER;	/* baudrate */
	RCSTA = (NINE_BITS | 0x90);		/* 9-bit receive enable/disable */
	TXSTA = (SPEED | NINE_BITS);	/* config speed and 9-bit transmit enable/disable*/
	SPEN = 1;		/* serial port enable */
	SYNC = 0;		/* asynchronous */
	TXEN = 1;		/* enable TX */
	CREN = 1;		/* enable RX */
}

void USART_PutByte(u8 byte)
{
	while (!TXIF)	/* set when register is empty */
		continue;
	TXREG = byte;

	return;
}

u8 USART_GetByte(void)
{
	while (!RCIF)	/* set when register is not empty */
		continue;

	return RCREG;	/* RXD9 and FERR are gone now */
}

u8 USART_CheckOERR(void)
{
	if (OERR)	/* re-enable after overrun error */
	{
		CREN = 0;
		CREN = 1;
		return 1;
	}
	
	return 0;
}

#define USART_PutNinth(bitnine)	(TX9D = bitnine ? 1 : 0)

u8 USART_GetNinth(void)
{
	while (!RCIF)
		continue;
	
	return RX9D;	/* RCIF is not cleared until RCREG is read */
}

u8 USART_GetFERR(void)
{
	while (!RCIF)
		continue;
	
	return FERR;	/* RCIF is not cleared until RCREG is read */
}

void putch(u8 byte) 
{
	/* output one byte */
	while (!TXIF)	/* set when register is empty */
		continue;
	TXREG = byte;
}

u8 getch(void)
{
	/* retrieve one byte */
	while (!RCIF)	/* set when register is not empty */
		continue;
	return RCREG;	
}

u8 getche(void)
{
	u8 c;
	putch(c = getch());
	return c;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -