你的那个电线拔了不能用,可能是没有电池的,或者电池不行了,转发一个有电池的用法吧。
暖手宝热水袋使用说明:
1、接通电源后,指示灯亮,暖袋即开始工作,温度到达设定后即灯熄灭;也可根据个人需要温度进行充电;
2、充电完毕后请断开电源,不可即电暖袋与电源线长期连接,并将电源线拨离电源插座;
3、充电时心里在旁等候,以免充电时间过长发生意外。
receve.c
#include
#define uchar unsigned char
#define SLAVE 0x01
#define BN 4
uchar idata tdata[1]={0x0f};
uchar idata rdata[4];
bit trdy;
bit rrdy;
void delay(unsigned int tc) //显示延时程序
{
while(tc!= 0 )
{
unsigned int i;
for(i=0; i<100; i++);
tc--;
}
}
void main()
{
uchar kk;
TMOD = 0X20; //定时器T1为模式2
TL1 = 0XFD;
TH1 = 0XFD;
PCON = 0X00;
TR1 = 1;
SCON = 0XF8; //串口方式3
ES=1; //开串口中断
EA=1;
P0=0xff;
while(1) //准备好发送和接收
{
trdy = 1;
rrdy = 1;
P2=0xff;
for(kk=0;kk<4;kk++)
{
P1=rdata[kk];
delay(20);
}
}
}
void slave(void) interrupt 4
{
void str();
void sre();
uchar a;
RI=0;
ES=0; //关串口中断
if(SBUF!=SLAVE) //接收到非本机地址,从机复位继续监听
{
// SBUF=0X88;
// while(TI!=1);
// TI=0;
ES=1;
goto reti1;
}
SM2=0; //取消监听状态
SBUF =SLAVE; //发送回从机地址
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
if(RB8 == 1) //确认地址不符,从机复位
{
SM2=1;
ES=1;
goto reti1;
}
a=SBUF; //接收命令
if(a==0x01) //从机接收主机的数据
{
if(rrdy == 1) SBUF= 0x01; //接收准备好,发回0x01
else SBUF = 0x00;
while(TI!=1);
TI=0;
// while(RI!=1);
// RI=0;
// if(RB8 == 1)
// {
// SM2=1;
// ES=1;
// goto reti;
// }
sre(); //接收数据
}
else
{
if(a == 0x02) //从机向主机发送数据
{
if(trdy == 1) SBUF=0X02; //发送准备好
else SBUF = 0X00;
while(TI!=1);
TI=0;
// while(RI!=1);
// TI=0;
// if(RB8 == 1)
// {
// SM2=1;
// ES=1;
// goto reti;
// }
str(); //发送数据
}
else
{
// SBUF = 0X08; //命令非法
// while(TI!=1);
TI=0;
SM2=1; //恢复监听
ES=1;
}
}
reti1:;
}
void str() //发送数据函数
{
uchar p,i;
trdy=0;
do{
p=0; //初始化校验和为0
for(i=0;i
SBUF= tdata[i]; //发送数据
p+=tdata[i];
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
}
SBUF=p; //发送校验和
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
}while(SBUF!=0); //主机接收不正确,重新发送
SM2=1;
ES=1;
}
void sre() //接收数据函数
{
uchar p,i;
rrdy=0;
while(1)
{
p=0; //初始化校验和为0
for(i=0;i
while(RI!=1);
RI=0;
if(RB8 == 1) //判断接收到的信息是否为复位指令,是立即复位,否则保存;
{
SM2=1;
ES=1;
goto reti2;
}
rdata[i]=SBUF; //接收数据
p+=rdata[i];
SBUF=0x11;
while(TI!=1);
TI=0;
}
while(RI!=1);
RI=0;
if(SBUF==p) //校验和相同,发0x00
{
SBUF=0X00;
break;
}
else //校验和不同,发0xff,重新接收
{
SBUF=0XFF;
while(TI!=1);
TI=0;
}
}
reti2:;
SM2=1;
ES=1;
}
main.c
#include
#define uchar unsigned char
#define BN 4 //传送一次的字节数
#define Receve 0x01
#define Send 0x02
uchar SLAVE = 0x01; //从机地址
uchar idata rdata0[1]; //接收从机0返回的数据
uchar idata tdata0[4]={1,2,3,4}; //向从机0发送的数据
uchar idata rdata1[1]; //接收从机1返回的数据
uchar idata tdata1[4]={0,15,0,15}; //向从机1发送的数据
uchar idata rdata2[1]; //接收从机2返回的数据
uchar idata tdata2[1]; //向从机2发送的数据
/****************************************************
函数名称:延时
功能:
****************************************************/
void delay(unsigned int tc) //显示延时程序
{
while(tc!= 0 )
{
unsigned int i;
for(i=0; i<100; i++);
tc--;
}
}
/****************************************************
函数名称:发送错误标志函数
功能:
****************************************************/
void error()
{
SBUF = 0xff; //发给从机数据出错标志
while(TI!=1); //等待发送完毕
TI = 0;
}
/****************************************************
函数名称:收、发函数
功能:addrs:从机地址 comd:从机工作方式命令 send[]:发送数据 receve[]:接收数据
****************************************************/
uchar master (uchar addrs,uchar comnd,uchar send[],uchar receve[])
{
uchar a,i,p;
while(1)
{
SBUF=SLAVE; //发呼叫地址
while(TI!=1); //等待发送完毕
TI = 0;
while(RI!=1) //等待从机应答
{
delay(5);
if(RI!=1) goto reti; //等待一段时间无从机回复则跳过
};
RI = 0;
if(SBUF!=addrs) {error();break;} //若地址出错,发出错标志,从机复位,主机跳出此次发送
else
{
TB8 = 0; //清地址标志位,准备接收数据
SBUF = comnd; //发命令帧
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
a=SBUF; //接收从机的返回地址帧
if((a&0x80) == 0x80) //若主机非法,发复位信号给从机
{
TB8=1;
error();
break;
}
else
{
if(comnd == 0x01) //主机发送的命令是请求从机接收数据
{
if((a&0x01) == 0x01) //从机准备接收就绪
{
do{
p=0; //清校验和
for(i=0;i
SBUF=send[i]; //发送数据
p=p+send[i]; //计算校验和
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
}
SBUF = p; //发送校验和给从机
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
}while(SBUF!=0); //从机接收不正确,主机从新发送
TB8=1; //重置地址标志位
return(0);
}
}
else
{
if(comnd == 0x02) //主机发送的是接收数据命令,从机发送数据
{
if((a&0x02) == 0x02) //从机准备发送就绪
{
// P0=0x0f;
// delay(2000);
while(1)
{
p=0;
for(i=0;i
while(RI!=1);RI=0;
receve[i]=SBUF; //从从机接收数据
p+=receve[i];
SBUF=0x11;
while(TI!=1);
TI=0;
}
while(RI==0);
RI=0;
if(SBUF == p)
{
SBUF = 0x00; //校验和相同,发0x00给从机
while(TI!=1);
TI=0;
break;
}
else
{
SBUF=0x0f; //校验和不同,发0x0f给从机
while(TI!=1);
TI=0;
}
}
TB8=1; //重置地址标志位
return(0);
}
}
}
}
}
}
reti:;
}
/****************************************************
函数名称:主函数
功能:
****************************************************/
void main()
{
TMOD = 0x20; //定时器T1定义为模式2
TL1=0xfd; //初值
TH1=0xfd;
PCON=0x00;
TR1=1;
SCON=0XD8; //设置串口控制字,方式3,允许接收,TB8=1,发地址;
master(SLAVE,Receve,tdata0,rdata0);
delay(10000);
master(SLAVE,Receve,tdata1,rdata0);
while(1);
}
对啊,因为里面没有续电电池的,必须接线噢