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

📄 serial.c

📁 Real Time Operating System for Hi-Tech C compiler.
💻 C
字号:
/************************************************************ 
Copyright (C) 1995-2002 Pumpkin, Inc. and its
Licensor(s). Freely distributable.

$Source: C:\\RCS\\d\\salvo\\demo\\d1\\serial.c,v $
$Author: aek $
$Revision: 3.8 $
$Date: 2003-07-17 23:47:36-07 $

Source for demo programs.

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

#include	<salvo.h>

/*	Transmit and Receive port bits */

#define	TX_BUFF_SIZE	10

#if defined(SYSA)
#include	<conio.h>
bank2 unsigned char txCount;
bank2 unsigned char txInPtr, txOutPtr;
bank2 unsigned char txBuff[TX_BUFF_SIZE];
#define bitGIE			GIE
#define	bitRCIE			RCIE
#define	bitTXIE			TXIE

#elif defined(SYSE)
unsigned char txCount;
unsigned char txInPtr, txOutPtr;
unsigned char txBuff[TX_BUFF_SIZE];
#define bitGIE 			INTCONbits.GIE
#define bitRCIE 		PIE1bits.RCIE
#define bitTXIE 		PIE1bits.TXIE
#define const			rom const

#elif defined(SYSF)
#include	<conio.h>
unsigned char txCount;
unsigned char txInPtr, txOutPtr;
unsigned char txBuff[TX_BUFF_SIZE];
#define bitGIE			GIE
#define	bitRCIE			RCIE
#define	bitTXIE			TXIE

#endif

#if defined(SYSA) || defined(SYSE) || defined(SYSF)
void InitTx( void )
{
	/* reset Tx ring buffer pointers. */
	txCount = 0;
	txInPtr = 0;
	txOutPtr = 0;
	
	/* PORTC is output on pin 6, rest is input. 	*/
	/* Set PORTC high to avoid bad chars.			*/
	PORTC |= 0x40; /* 01000000 */
	TRISC  = 0xBF; /* 10111111 */
	
	/* Serial Port is ON, 8-bit data reception, 	*/
	/*  continuous receive.							*/
	RCSTA =  0x90;	/* 10x1xxxx */
	
	/* force Tx ints off now to avoid spurious		*/
	/*  outgoing chars when transmitter is enabled.	*/
	bitTXIE = 0;
	
	/* enable receiver */
	bitRCIE = 1;
	
	/* 8-bit transmit, Tx enabled, Async, BRGH=1	*/
	TXSTA =  0x24;	/* x010x100 */
	
	/* 9600 baud at 4MHz clock.						*/
	SPBRG = 25;
}


void putch( char c )
{
	for ( ; ; )
	{
		/* as long as there's room ... */
		if ( txCount < TX_BUFF_SIZE )
		{
			/* insert char into Tx buffer and	*/
			/*  wrap pointer if necessary.		*/
			txBuff[txInPtr++] = (unsigned) c;
			if ( txInPtr > TX_BUFF_SIZE-1 )
				txInPtr = 0;
			
			/* must protect txCount from ISR,	*/
			/*  don't re-enable ints if they're	*/
			/*  already disabled.				*/ 
			if ( bitGIE )
			{
				OSDi();
				bitTXIE = 1;
				txCount++;
				OSEi();
			}
			else
			{
				bitTXIE = 1;
				txCount++;
			}
			break;
		}
	}
}

#elif defined(SYST)
void InitTx( void )
{
	/* use BUFFALO */
	;
}

void putch( char c )
{
	/* use BUFFALO's OUTA utility subroutine. */
	/*  expects char to be sent in A, so need */
	/*  to transfer it from B.                */
	asm(" tba");
	asm(" jsr 0xFFB8");
}

#endif

void putstr ( const char * cP )
{
	while ( *cP )
	{
		putch((char) *cP);
		cP++;
	}
}


#if 0 /* no longer used ...  */
void putASCIIHex ( char c )
{
	char hexChar;
		
	hexChar = (char) (c & 0x0F);
	
	if ( hexChar < 0x0A )
		putch((char) (hexChar + '0'));
	else
		putch((char) (hexChar + '7'));
}
#endif
			




⌨️ 快捷键说明

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