标题:
单片机多机通讯主机程序
[打印本页]
作者:
12366666
时间:
2017-6-6 19:31
标题:
单片机多机通讯主机程序
从机程序:
http://www.51hei.com/bbs/dpj-87068-1.html
主机程序:
http://www.51hei.com/bbs/dpj-87067-1.html
主机程序:
#include<reg51.h>
#include<string.h>
#define _SUCC_ 0x0f//数据传送成功
#define _ERR_ 0xf0//数据传送失败
unsigned char Table[9]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
unsigned char Buff[20]; //数据缓冲区
unsigned char temp=0xff;
sbit KEY1=P1^6;
sbit KEY2=P1^7;
//unsigned char addr;
//延时1ms函数
void delay_1ms(unsigned int t)
{
unsigned int x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
//缓冲区初始化
void Buff_init()
{
unsigned char i; //将Table里的数据放到缓冲区里
for(i=0;i<9;i++)
{
Buff[i]= Table[i];
delay_1ms(100);
}
}
//串口初始化函数
void serial_init()
{
TMOD=0x20; //定时器1工作于方式2
TH1=0xfd;
TL1=0xfd; //波特率为9600
PCON=0;
SCON=0xd0; //串口工作于方式3
TR1=1; //开启定时器
TI=0;
RI=0;
}
//发送数据函数
void SEND_data(unsigned char *Buff)
{
unsigned char i;
unsigned char lenth;
unsigned char check;
lenth=strlen(Buff); //计算数据长度
check=lenth;
TI=0; //发送数据长度
TB8=0; //发送数据帧
SBUF=lenth;
while(!TI);
TI=0;
for(i=0;i<lenth;i++) //发送数据
{
check=check^Buff[i];
TB8=0;
SBUF=Buff[i];
while(!TI);
TI=0;
}
TB8=0; //发送校验字节
SBUF=check;
while(!TI);
TI=0;
}
//向指定从机地址发送数据
void ADDR_data(unsigned addr)
{
while(temp!=addr) //主机等待从机返回其地址作为应答信号
{
TI=0; //发送从机地址
TB8=1; //发送地址帧
SBUF=addr;
while(!TI);
TI=0;
RI=0;
while(!RI);
temp=SBUF;
RI=0;
}
temp=_ERR_; //主机等待从机数据接收成功信号
while(temp!=_SUCC_)
{
SEND_data(Buff);
RI=0;
while(!RI);
temp=SBUF;
RI=0;
}
}
void main()
{
Buff_init();
serial_init();
while(1)
{
if(KEY1==0)
{
delay_1ms(5);
if(KEY1==0)
{
while(!KEY1);
ADDR_data(0x01);
}
}
if(KEY2==0)
{
delay_1ms(5);
if(KEY2==0)
{
while(!KEY2);
ADDR_data(0x02);
}
}
}
}
复制代码
作者:
wsh123456789
时间:
2021-8-4 13:37
什么型号的单片机?测试通过吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1