一线通数据发送程序求解
我的电池带有一线通,但是新买的电池没有导致无法使用,用逻辑分析抓数据,得到重复发送的数据是0x03,0x01,0x80,0x93,0x63,0x35,0x0F,0x0E,0x00,0x01,0x93,0xd4,但是我用单片机模拟发送电动车不识别,有大神看看我的发送程序有问题吗。#include "STC89C5xRC.H"//#include "intrins.h"
//一线通
#define u8 unsigned char//对数据类型进行声明定义
u8 SIFXOR;
u8SIF[] = {0x03,0x01,0x80,0x93,0x63,0x35,0x0F,0x0E,0x00,0x01,0x93,0xd4};
sbitk4=P1^7;
sbitk3=P1^6;
sbitDQ=P3^3;
void delay500us(void) //误差 0.5ms0us
{
u8 a,b;
for(b=71;b>0;b--)
for(a=2;a>0;a--);
}
void delay16ms(void) //误差 5.5ms0us
{
u8 a,b;
for(b=239;b>0;b--)
for(a=10;a>0;a--);
}
void delay490us(void) //误差 0us
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=242;a>0;a--);
}
void XOR()
{
SIFXOR=SIF^SIF^SIF^SIF^SIF^SIF^SIF^SIF^SIF^SIF^SIF^SIF;
SIF=SIFXOR;
}
void WByte(u8 input)
{
//发送启始位
u8 i=8;
u8 b=0;
while(i--)
{
b=(bit)(input&0x80);
if ( b==1)
{
DQ=0;
delay500us();
DQ=1;
delay500us();
delay500us();
DQ=0;
}
else
{
DQ=0;
delay500us();
delay500us();
DQ=1;
delay490us();
DQ=0;
}
input=input<<1;
// DQ=0;
}
}
void OUTSIF()
{
u8 i=12;
DQ=0;
delay16ms();//同步信号
DQ=1;
delay500us();
while(i--)
{
u8 DAT=0;
WByte(SIF); //先传低位
DAT++;
}
DQ=0;
}
void main(void)
{
// P3M0 |= 0x08; P3M1 &= ~0x08;
XOR();
DQ=1;
delay16ms();delay16ms();delay16ms();delay16ms();
delay16ms();delay16ms();delay16ms();delay16ms();
DQ=0;
delay16ms();delay16ms();delay16ms();delay16ms();delay16ms();delay16ms();
DQ=1;
delay16ms();delay16ms();delay16ms();delay16ms();
delay16ms();delay16ms();delay16ms();delay16ms();
//VV=6;
while(1)
{
//dianlaing ();
//key();
OUTSIF();
delay16ms();delay16ms();delay16ms();delay16ms();
delay16ms();delay16ms();delay16ms();delay16ms();
}
}
一线通协议是SIF协议 <p>估计是先有个握手,一闪而过了,你没捕捉到,只是抓到了握手后的通讯数据。</p>
<p>没有握手成功,车辆肯定不会响应的,有的电池还是加密通讯的,没有具体厂家协议只能猜了。</p>
页:
[1]