📄 pmpdatar.c
字号:
#include "PMPDataR.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_serial()
{
TMOD = 0x20; // 定时器T1使用工作方式2
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1; // 开始计时
PCON = 0x00; // SMOD = 1
SCON = 0xf0; // 工作方式,9位数据位,波特率9600kbit/s,允许接收
}
/* 主程序 */
void main()
{
uchar i = 0;
uchar tmp = 0xff;
P1= 0xff;
addr = P1&0x0f; // 获取本机地址
P23 = 1; // 发光管不亮
init_serial(); // 串口初始化
EA = 1; // 关闭所有中断
/* 进入设备应答 */
while(1)
{
SM2 = 1; // 只接收地址帧
/* 如果接收到的地址帧不是本机地址,则继续等待 */
while (tmp!=addr)
{
RI = 0;
while(!RI)
tmp = SBUF;
RI = 0;
}
SM2 = 0; // 允许接收数据
/* 数据接收 */
tmp = recvdata();
//if(buf!=0x00)
if (tmp==0x00)
{
P0=buf;
/* 绿灯亮,持续500ms,表示接收数据成功 */
P23 = 0;
delay(30);
P23 = 1;
}
// 如果接收数据时发现地址帧,则重新开始整个接收过程
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -