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

📄 uart0.c

📁 C8051F120与串口、并口、D12、USB、LCD应用
💻 C
字号:
#include <C8051F120.h>
#include <stdlib.h>
#include <string.h>
#include <uart0.h>

#define MAXLEN 10


u8 trdata[MAXLEN];                 //要接收/发送的字符所存放的缓冲区
u8 txCounts = 0;					   //已发送的字符个数	
u8 lxCounts = 0;                     //剩余未发送的字节个数
u8 len = 0;                          //要发送的数据的长度
u8 rpointer = 0;                    //读指针位置,指向要读的位
u8 wpointer = 0;                    //写指针位置,指向要写的位


//将要发送的数据放到缓冲区中
void SendBuf(u8 *tx)
{
	u8 m = 0;
	u8 i;
	len = strlen(tx);
	while(m < len)
	{
		i = 0;
		lxCounts = len - m;
		while ((m < len)&&(i < MAXLEN))
		{
			trdata[i] = *(tx + m);
			i++;
			m++;
		}		
		TI0 = 1;	
	 }	
}


//发送单个字符
void Send_Char(u8 txch)
{	
	SBUF0 = txch;
	while (TI0 == 0);      //等待发送完毕
	TI0 = 0;               //软件清零
}


//发送字符串,调用Send_Char() len字符串长度
void Send_String(u8 *str)
{
	u8 temp;
	txCounts = 0;
	while ((txCounts < len)&&(txCounts < MAXLEN)&&(txCounts < lxCounts)) 
	{
		temp = *(str + txCounts);
		Send_Char(temp);
		txCounts++;
	}
}
/*
//--------------------------------------------------------------------------------------
//监听串口是否收到数据,读写指针不相等的话,缓冲区里有数据
u8 Listen(void)
{
	if (rpointer != wpointer) return 1;
}


//返回缓冲区中数据长度
u8 SizeOfBuf(void)
{
    return (wpointer - rpointer);
}
*/

//实现从循环数组中读取数据
//实现原理:由rpointer追赶wpointer,两者相等后都进行求模
//参数:'size'指要读取的数据的个数,receive[]指读出的数据所存放的地方
/*u8 ReadBuf(u8 size, u8 receive[])
{
	u8 i = 0;
	while ((i < size)&&(rpointer < wpointer))
	{
		receive[i] = trdata[rpointer % MAXLEN];
		rpointer++;
		i++;
		if (rpointer == wpointer)
 	    {
		    rpointer = rpointer % MAXLEN;
			wpointer = rpointer;
		}
	}
	return i;
	
}*/

//将从串口中读到的数据写到缓冲区中
//实现原理:如果(wpointer - rpointer) < MAXLEN,就说明缓冲区中还有空间存放数据
//返回'1'则说明写入一个数据,返回'0'则说明没有空间,写数据失败
u8 WriteBuf(u8 rxch)
{
    if ((wpointer - rpointer) < MAXLEN)
	{
		trdata[wpointer % MAXLEN] = rxch;           //存入缓冲区
		wpointer++;
		return 1;
	} else  return 0;
}

void inter() interrupt 4
{
	if (TI0)
	{
		TI0 = 0;
        Send_String(trdata);
	}
	if (RI0)
	{
		u8 rxch;
		RI0 = 0;                           //软件清零
       	rxch = SBUF0;                      //读缓冲
		WriteBuf(rxch);
	}
}

⌨️ 快捷键说明

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