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

📄 serial.c

📁 C51驱动标准PC键盘的程序
💻 C
字号:
#include <Atmel\AT89X52.h>	/* SFR declarations */
#include "serial.h"

#define ESC 0x1b
#define BUFF_SIZE 64

code char CLR[] = {ESC, '[','H', ESC, '[', '2', 'J',0};
unsigned char UART_buffer[BUFF_SIZE];
unsigned char *inptr, *outptr;
unsigned char buff_cnt;


void init_uart(void)
{
	inptr = UART_buffer;
	outptr = UART_buffer;
	buff_cnt = 0;
}


void clr(void)
{
	//puts_P(CLR);	// Send a 'clear screen' to a
			// VT100 terminal
}


int putchar(int c)
{
	if (buff_cnt < BUFF_SIZE)
	{
		*inptr = c;	// Put character into buffer
		inptr++;	// Increment pointer

		buff_cnt++;

		if (inptr >= UART_buffer + BUFF_SIZE)	// Pointer wrapping
			inptr = UART_buffer;

		UCR = 0x28;	// Enable UART Data register

		// empty interrupt
		return 1;
	} else {
		return 0;	// Buffer is full
	}
}


// Interrupt driven transmitter
void UART_UDRE_interrupt(void) interrupt 1 using 1
{
	UDR = *outptr;		// Send next byte
	outptr++;		// Increment pointer

	if (outptr >= UART_buffer + BUFF_SIZE)	// Pointer wrapping
		outptr = UART_buffer;

	if(--buff_cnt == 0)	// If buffer is empty:
		UCR = UCR && (1<<UDRIE);	// disabled interrupt
}

⌨️ 快捷键说明

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