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

📄 serial.c

📁 c51串口编程的例子
💻 C
字号:
#include<reg51.h>
#include<string.h>

#include"tdp.h"

#define TBUF_SIZE   256		/* don't update these 2 lines */
#define RBUF_SIZE   256

static xdata unsigned char tbuf [TBUF_SIZE];
static xdata unsigned char rbuf [TBUF_SIZE];
static xdata unsigned char t_in = 0;
static xdata unsigned char t_out = 0;
static xdata unsigned char t_disabled = 0;
static xdata unsigned char r_in = 0;
static xdata unsigned char r_out = 0;

/* Com spot Int Service func.*/
static void com_isr(void) interrupt 4 using 2 {
	if(RI != 0 ) {		/*Receiv processing */
		RI = 0;
		if ((r_in + 1 ) != r_out)
			rbuf[r_in++] =SBUF;
	}

	if(TI != 0) {		/* transm. processing */
		TI = 0;
		if(t_in != t_out)
			SBUF = tbuf[t_out++];
		else
			t_disabled = 1;
	}
}

/* com init.*/
void com_initialize(void) {
	com_baudrate(67500);	
	INT_DISABLE;
	t_in = 0;		/* clr com's buff */
	t_out = 0;
	t_disabled = 1;
	r_in = 0;
	r_out = 0;
	SM0 = 0; SM1 = 1;	/* set com type -- type 1 */
	SM2 = 0;
	REN = 1;			/*rev allowed */
	TI = 0;				/*clr com int flag */
	RI = 0;
	ES = 1;				/* com int allowed */
	PS = 0;				/*set com int level */
	INT_ENABLE;
}

/* set buadrate */
void com_baudrate(unsigned baudrate) {
	INT_DISABLE;
	TI = 0;
	t_in = 0;
	t_out =0;
	t_disabled = 1;
	TR1 = 0;
	ET1 = 0;
	PCON |= 0x80;
	TMOD &= ~0xF0;
	TMOD |= 0x20;
	TH1 = (unsigned char)(256 - (TCLK / (16L * 12L * baudrate)));
	TR1 = 1;
	INT_ENABLE;
}

/* Send char */
char com_putchar(unsigned char c) {
	if((TBUF_SIZE -com_tbuflen()) <= 2)
		return (-1);
	INT_DISABLE;
	tbuf[t_in++] = c;
	if(t_disabled) {
		t_disabled = 0;
		TI = 1;
	}
	INT_ENABLE;
	return(0);
}

char com_puts(char *s) {
	if((TBUF_SIZE - com_tbuflen()) <= strlen(s))
		return(-1);
	INT_DISABLE;
	for (;*s != '\0'; s++)
		tbuf[t_in++] = *s;
	if(t_disabled) {
		t_disabled = 0;
		TI = 1;
	}
	INT_ENABLE;
	return(0);
}

/*rev char*/
int com_getchar(void) {
	xdata int c;
	if(com_rbuflen() == 0)
		return(-1);
		INT_DISABLE;
		c = rbuf[r_out++];
		INT_ENABLE;
		return(0);
}

unsigned char com_rbuflen(void) {		/* calculate in buf len */
	return(r_in -r_out);
}

unsigned char com_tbuflen(void) {		/* calculate out buf len */
	return(t_in - t_out);
}

⌨️ 快捷键说明

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