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

📄 commdrv.c

📁 UART library for x51, can be used with any c cross compiler and can be used for X51 uC. I had used k
💻 C
字号:
/****************************************************************************
	Copyright (c) 1999-2003 Grey Matter India Technologies Pvt.Ltd.

Module:
Author:
Created:


Modification History
*****************************************************************************/


#include <Reg51.h>
#include "CommDrv.h"



static void (*CommEvent)(BYTE);

WORD tempvar;

void disable()
{
	EA = 0;
}      

void enable()
{
	EA = 1;
}


void CommInit(void)
{
	PCON |= 0x80;		// Divide by 32.
	TMOD |= 0x20;		// Timer1 Mode 2, 8-bit Reload.
	SCON = 0x50;		// 8-bit, 1 stop bit, REN enable.
	TH1 = (256 - (XTAL/( 12L*16L * BAUDRATE)));	//6 clock periods per machine cycle
	TR1 = 1;			// Start Timer

 	ES = 1;				//Enable serial interrupts
	TI = 0;
}

void BindCommEvent(FunctPtr func)
{
	disable();
	CommEvent = func;
	enable();
}


void WriteComm(char c)
{
	SBUF = c;
//	while(TI != 1);	//wait till the entire byte is transfered &  TI flag is set
	for(tempvar = 0; tempvar < 0xFFFF; tempvar++)
	{
		if(TI == 1)
			break;
	}

	TI = 0;
}


void WriteCommStr(char* str) //reentrant
{
	while(*str != '\0')
	{
		SBUF = *str++;
//		while(TI != 1);
		for(tempvar = 0; tempvar < 0xFFFF; tempvar++)
		{
			if(TI == 1)
				break;
		}

		TI = 0;
	}
}

void WriteCommStrHex(BYTE* hexdata, BYTE len) //reentrant
{
	while(len--)
	{
		WriteCommHex(*hexdata);
		hexdata++;
	}
}


void WriteCommHex(BYTE hexdata) //reentrant
{
	ConvertHex(hexdata >> 4);
	ConvertHex(0x0F & hexdata);

	WriteComm(' ');
}


void ConvertHex(BYTE hex)
{
	switch(hex)
	{
		case 0:
			WriteComm('0');
			break;
		case 1:
			WriteComm('1');
			break;
		case 2:
			WriteComm('2');
			break;
		case 3:
			WriteComm('3');
			break;
		case 4:
			WriteComm('4');
			break;
		case 5:
			WriteComm('5');
			break;
		case 6:
			WriteComm('6');
			break;
		case 7:
			WriteComm('7');
			break;
		case 8:
			WriteComm('8');
			break;
		case 9:
			WriteComm('9');
			break;
		case 10:
			WriteComm('A');
			break;
		case 11:
			WriteComm('B');
			break;
		case 12:
			WriteComm('C');
			break;
		case 13:
			WriteComm('D');
			break;
		case 14:
			WriteComm('E');
			break;
		case 15:
			WriteComm('F');
			break;

	}
}


static void ComISR(void) interrupt 4
{
	char c;

	if(RI)
	{
		c = SBUF;
		RI = 0;
		CommEvent(c);
	}
/*	if(TI != 0)
	{
		TI = 0;
	}
*/
}

⌨️ 快捷键说明

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