📄 serial.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 + -