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

📄 12_4.c

📁 单片机学习的例程.rar 学习单片机要从最基本的学起。对于初学者来说很适合的单片机C程序
💻 C
字号:
//串行多机通信

# include <reg51. h>
# define buf 8						/* 定义发送缓冲区大小 */
unsigned char buffer [ 8 ] = [ 'a','b','c','d',
 'e','f','g','h'] ;  				/* 定义发送数据 */
unsigned char p;

main ()
{
	SCON = 0xC0;	 				/* 初始化串行口和波特率发生器 */
	TMOD = 0x20;
	TH1 = 0xFD;
	TR1 = 1;
	ET1 = 0;
	ES = 1;
	EA = 1;
	p = 0;
/* 发送地址帧 */
	TB8 = 1;
	SBUF = 3;  						/* 与3 号从机联系 */
/* 等待全部数据帧发送完毕 */
	while (p <= buf);
}

void send(void) interrupt 4 using 3
{
	TI = 0; 						/* 清发送中断标志 */
    if (pointer < buf) 				/* 如果数据未发送完毕则发送一帧数据 */
		{
		TB8 = 0 ;  					/* 设置数据帧标志*/
       SBUF = buffer[p]; 			/* 启动发送*/
		}
	p++;							/* 修改发送缓冲区当前位置指针 */
}

//3号从机接收数据程序如下:
#include <reg51.h>
#define buf 8
unsigned char buffer[buf]; 			/* 定义接收缓冲区 */
unsigned char p; 					/* 定义当前位置指针*/

main ()
{
/* 初始化串行口和波特率发生器,并允许串行口接收地址帧*/
	SCON = 0xF0;
	TMOD = 0x20;
	TH1 = 0xFD;
	TR1 = 1;
	ET1 = 0;
	ES = 1;
	EA = 1;
	p = 0;
	while (p < buf); 				/* 等待接收地址和全部数据帧*/
}

/* 接收中断服务函数*/
void receive (void) interrupt 4 using 3
{
	RI = 0 ;    					/* 清接收中断标志 */
	if (RB8 = = 1)
		{
		if (SBUF = = 3) 			/* 如果为本地址帧 */
	/* 则置SM = 0 以接收数据帧 */
			SM2 = 0;
			return;
		}
	buffer [p + + ] = SBUF ; 		/* 将接收到的数据帧送接收缓冲区
/* 并修改当前位置指针 */
	if (p > = buf)   				/* 如果已接收完全部数据帧 */
	SM2 = 1;						/* 则此次通信结束,置SM2 = 1 */
/* 准备下一次通信*/
}

⌨️ 快捷键说明

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