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

📄 receive_data.c

📁 用于两单片机利用串口通信。有完整的原理图、仿真、程序。
💻 C
字号:
/*****************************************/
/* 湖南师范大学  工学院    
/* All rights reserved. 
/* 程序名:receive_data.c
/* 时  间:2007-12-26 
/* 作  者:wangguangxi11@163.com
/* 程序功能:多机通信,接收功能(先接收地址)					 
/*****************************************/	
#include "receive_data.h"
/*************** 延时t毫秒 ***************/
void delay(uint t)
{
	uint i;
	while(t--)
	{
		/* 对于11.0592M时钟,约延时1ms */
		for (i=0;i<125;i++)
		{}
	}
} 

/************* 接收数据函数 ****************/
uchar recvdata()
{
	while(!RI);
	if (RB8==1)
	return 0xee;				// 若接收的为地址帧,则返回0xee
	buf = SBUF;	
	RI = 0;	
	return 0;					// 返回0
}

/*************串口初始化函数 ****************/
void init()
{
	TMOD = 0x20;				// 定时器T1使用工作方式2
	TH1 = 250;
	TL1 = 250;
	TR1 = 1;					// 开始计时
	PCON = 0x80;				// SMOD = 1
	SCON = 0xd0;				// 工作方式,9位数据位,波特率9600kbit/s,允许接收 
}

/**************** 主程序***************/
void main()
{ 
	uchar i = 0;
	uchar tmp = 0xff;
	P1= 0xff;
	addr = P1&0x0f;				// 获取本机地址
	P23 = 1;					// 发光管不亮
	
	init();			        	// 串口初始化 
   	EA = 1;						// 关闭所有中断
	while(1)					// 进入设备应答 
	{
		SM2 = 1;				// 只接收地址帧
		
		while (tmp!=addr)	   	// 如果接收到的地址帧不是本机地址,则继续等待
		{
			RI = 0;
			while(!RI)
			tmp = SBUF;
			RI = 0;
		}	
		SM2 = 0;				//允许接收数据
		tmp= recvdata();		//数据接收
	   
	    
		if (tmp==0x00)	
		{		 
	   	     P0=buf;
			 P23 = 0;			//绿灯亮,持续500ms,表示接收数据成功
			delay(30);
			P23 = 1;
			
		}	    
		// 如果接收数据时发现地址帧,则重新开始整个接收过程
	}
}

⌨️ 快捷键说明

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