Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Convert port pin into uart(serial) pin

Status
Not open for further replies.

coolvasanth07

Member level 1
Joined
Sep 25, 2012
Messages
37
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,286
Activity points
1,506
Hi, i want to know how to convert portd pin into serial(uart) pin.....in my project i want to take tx & rx pins from portd pins...i am using pic16f877a + hitech c...plz help me,,,it's urgent

>>thanks in advance
 

Attachments

  • untitled.bmp
    1.4 MB · Views: 89

hitech c software uart example code



Code:
/*
 *	Serial port driver (uses bit-banging)
 *	for 16Cxx series parts.
 *
 * 	IMPORTANT: Compile this file with FULL optimization
 *
 *	Copyright (C)1996 HI-TECH Software.
 *	Freely distributable.
 */
#include	<htc.h>
/*
 *	Tunable parameters
 */

/*	Xtal frequency */
#define	XTAL		4000000

/*	Baud rate	*/
#define	BRATE		9600

/*	Transmit and Receive port bits */
#define	TxData		RB6				/* Map TxData to pin */
#define	RxData		RB7				/* Map RxData to pin */
#define	INIT_PORT	TRISB = 1<<7	/* set up I/O direction */

/*	Don't change anything else */
#define SCALER			10000000
#define ITIME			4*SCALER/XTAL	/* Instruction cycle time */
#if BRATE > 1200
	#define	DLY			3				/* cycles per null loop */
	#define	TX_OHEAD	13				/* overhead cycles per loop */
#else
	#define	DLY			9				/* cycles per null loop */
	#define TX_OHEAD	14
#endif
#define	RX_OHEAD		12				/* receiver overhead per loop */

#define	DELAY(ohead)	(((SCALER/BRATE)-(ohead*ITIME))/(DLY*ITIME))

void
putch(char c)
{
	unsigned char	bitno;
#if BRATE > 1200
	unsigned char	dly;
#else
	unsigned int	dly;
#endif

	INIT_PORT;
	TxData = 0;			/* start bit */
	bitno = 12;
	do {
		dly = DELAY(TX_OHEAD);	/* wait one bit time */
		do
			/* waiting in delay loop */ ;
		while(--dly);
		if(c & 1)
			TxData = 1;
		if(!(c & 1))
			TxData = 0;
		c = (c >> 1) | 0x80;
	} while(--bitno);
NOP();
}

char
getch(void)
{
	unsigned char	c, bitno;
#if BRATE > 1200
	unsigned char	dly;
#else
	unsigned int	dly;
#endif

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

char
getche(void)
{
	char c;

	putch(c = getch());
	return c;
}
 

Attachments

  • bitbang.rar
    1.4 KB · Views: 82

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top