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

📄 串口.c

📁 利用DS18B20测量出温度
💻 C
字号:
#include<reg51.h>
#include<stdio.h>
#include<string.h>
#define uchar unsigned char
/*计算机链接的控制代码*/
#define 	STX	0X02		//文本发送开始
#define	ETX	0X03		//文本结束
#define	EOT	0x04		//发送结束
#define	ENQ	0x05		//请求
#define	ACK	0X06		//确认
#define	LF		0X0A		//换行
#define	CL		0x0C		//清除
#define	CR		0X0D		//回车
#define	NAK	0x15		//不能确认

typedef struct
{
char	InBuf[8];			//接收缓冲区
char	OutBuf[8];			//发送缓冲区
unsigned	InPoint	:4;	//接收指针
unsigned OutCount :4;	//发送计数器
unsigned	OutPoint	:4;	//发送指针
unsigned	InSta		:1;	//接收缓冲区状态标志
unsigned	OutSta	:1;	//发送状态标志,0=空闲,1=正在发送
}COMM;

extern uchar disp_buf[8];
COMM	comm;
sbit	LED=P1^0;
/*串口初始化*/
void init_serial(void)
{
   SCON=0X50;  
   TMOD|=0X20;
   TH1=0xE8;		//波特率1200bit/s
   TL1=0XE8;
   TR1=1;
	ES=1;
	EA=1;
	comm.OutPoint=0;
	comm.OutCount=0;
	comm.InSta=0;
	comm.OutSta=0;
}
/*********发送函数**********/
bit send(char  *p,char len)
{
	char i;
	unsigned char sum;
	if(comm.OutSta)return 0;		//正在发送,本次发送失败
	
	for(i=0,sum=0;i<len;i++)
		{
		sum+=*p;			//产生校验和
		comm.OutBuf[i]=*p++;
		}
//	comm.OutBuf[i++]=sum|0X80;	//校验和最高位为1,避免跟控制符混淆
	comm.OutBuf[i]=EOT;		//添加结束符
	comm.OutCount=len+1;
	comm.OutPoint=0;
	comm.OutSta=1;
	SBUF=STX;		//发送起始符
	return 1;		//发送成功
}
/*处理接收到的数据*/
void	receive_serve()
{	
	uchar arr[8];
	if(!comm.InSta)return;
	switch(comm.InBuf[0])
		{
		case	't':
			arr[0]=disp_buf[5]+'0';		//发送温度
			arr[1]=disp_buf[6]+'0';
			arr[2]='.';
			arr[3]=disp_buf[7]+'0';
			send(arr,4);
			break;
		case '0':
			LED=0;
			break;
		case '1':
			LED=1;
		}
	comm.InPoint=0;
	comm.InSta=0;

}
/*串口中断*/
void serial_int(void) interrupt 4 using 1
{
	if(TI)
		{//发送中断
		TI=0;
		if(comm.OutPoint<comm.OutCount)
			{
			SBUF=comm.OutBuf[comm.OutPoint++];
			}
		else 
			{
			comm.OutSta=0;			//发送完毕
			}
		}
	else
		{//接收中断
		RI=0;
		if(SBUF==EOT)
			{//接收到结束符
			comm.InSta=1;	
			}
		else
			{
			if(comm.InPoint<8)
				{
				comm.InBuf[comm.InPoint++]=SBUF;
				}
			}
		}
}

⌨️ 快捷键说明

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