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

📄 uart.c

📁 一个以前开发的实际应用的交通灯控制器程序
💻 C
字号:
#include "iic.h"

///////////发送部分////////////
void putchar(unsigned char ch)
{  	
//	ES=0;
	TI=0;
	SBUF=ch;
	while(!TI);
	TI=0;
//	ES=1;
}

void UART_PrintStr(const char Head[])
{
	unsigned char *ptr;
	TxEN=1;
	ptr=Head;
	while(*ptr)
	{
		putchar(*ptr);
		ptr+=1;
	}
	TxEN=0;
}

void UART_PrintNum(unsigned int dat)
{
	unsigned char xdata i;
	TxEN=1;
	while(dat>=1000)
		dat-=1000;

	i=0;
	while(dat>=100)
	{
		i++;
		dat-=100;
	}
	i+='0';
	putchar(i);
	i=0;
	while(dat>=10)
	{
		i++;
		dat-=10;
	}
	i+='0';
	putchar(i);
	dat+='0';
	putchar(dat);
	putchar('\n');
	TxEN=0;
}

////////////协议部分//////////
unsigned char xdata SendBuf[10];

void UART_Ack(unsigned char dat)
{
	//对广播地址的不发响应
	if(RecBuf[0]==0x00)
		return;
	TxEN=1;
	putchar(0xff);
	putchar(0x7f);//head
	putchar(0x01);//destination id:主站地址0x01
	putchar(MacAddr);//Source id
	if(dat==0xff)
		putchar(0xff);
	putchar(dat);
	putchar(0xff);
	putchar(0x01);
	TxEN=0;	
}

unsigned char LastData=0;
unsigned char xdata RecBuf[128];
unsigned char RecCnt=0;
unsigned char RecTemp;//=0;//

void UART_ISR() interrupt INT_SOURCE_SERIAL using 2
{
	if(RI)
	{
		RecTemp=SBUF;
		if(LastData!=0xff)
		{
			RecBuf[RecCnt]=RecTemp;
			LastData=RecTemp;
			RecCnt++;
		}
		else if(LastData==0xff)
		{
			LastData=RecTemp;
			if(RecTemp==0x7f)
				RecCnt=0;//清空队列
			else if(RecTemp==0x01)
				NewPackage=1;
			else if(RecTemp==0xff)
				LastData=0x7f;
			else
			{
				RecBuf[RecCnt]=RecTemp;
				RecCnt++;
			}
		}
		RI=0;
	}
}

⌨️ 快捷键说明

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