📄 12_4.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 + -