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

📄 serial_s.c

📁 一位十年经验美国工程师的工程代码
💻 C
字号:
/*
 *	Serial port driver for 16Cxx chips
 *	using software delays.
 *
 *	Copyright (C)1996 HI-TECH Software.
 *	Freely distubutable.
 */

/*
 *	Tunable parameters
 */

#include	<pic.h>
#include	<conio.h>

/*	Transmit and Receive port bits */

//static bit	TxData @ (unsigned)&PORTA*8+3;		/* bit3 in port A */
//static bit	RxData @ (unsigned)&PORTA*8+2;		/* bit2 in port A */
static bit	TxData @ (unsigned)&PORTB*8+1;		/* bit1 in port B */
static bit	RxData @ (unsigned)&PORTB*8+0;		/* bit0 in port B */


//#define	INIT_PORT	TRISA = 7			/* set up I/O direction */
#define	INIT_PORT	TRISB &= 0xFB			/* set up I/O direction */

/*	Xtal frequency */

//#define	XTAL	4000000
#define	XTAL	10000000

/*	Baud rate	*/

//#define	BRATE	9600
#define	BRATE	19200

/*	Don't change anything else */

#define	DLY		3		/* cycles per null loop */
#define	TX_OHEAD	13		/* overhead cycles per loop */
#define	RX_OHEAD	12		/* receiver overhead per loop */

#define	DELAY(ohead)	(((XTAL/4/BRATE)-(ohead))/DLY)

void
putch(char c)
{
	unsigned char	dly, bitno;

	bitno = 11;

	INIT_PORT;
	TxData = 0;			/* start bit */
	bitno = 12;
	do {
		dly = DELAY(TX_OHEAD);	/* wait one bit time */
		do
			/* nix */ ;
		while(--dly);
		if(c & 1)
			TxData = 1;
		if(!(c & 1))
			TxData = 0;
		c = (c >> 1) | 0x80;
	} while(--bitno);
	TxData=1;                //--- Ensure Pin Is HIGH when Finished!!!
}

char
getch(void)
{
	unsigned char	c, bitno, dly;

	for(;;) {
		while(RxData)
			continue;	/* wait for start bit */
		dly = DELAY(3)/2;
		do
			/* nix */;
		while(--dly);
		if(RxData)
			continue;	/* twas just noise */
		bitno = 8;
		c = 0;
		do {
			dly = DELAY(RX_OHEAD);
			do
				/* nix */;
			while(--dly);
			c = (c >> 1) | (RxData << 7);
		} while(--bitno);
		return c;
	}
}

//--------- Added by Mike pearce ---------------
void puts(const char *str)
{
	while(*str !=0)
	{
  putch(*str);
  str++;
	}
}




⌨️ 快捷键说明

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