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