我的电池带有一线通,但是新买的电池没有导致无法使用,用逻辑分析抓数据,得到重复发送的数据是0x03,0x01,0x80,0x93,0x63,0x35,0x0F,0x0E,0x00,0x01,0x93,0xd4,但是我用单片机模拟发送电动车不识别,有大神看看我的发送程序有问题吗。
- #include "STC89C5xRC.H"
- //#include "intrins.h"
- //一线通
- #define u8 unsigned char //对数据类型进行声明定义
-
-
-
- u8 SIFXOR;
- u8 SIF[] = {0x03,0x01,0x80,0x93,0x63,0x35,0x0F,0x0E,0x00,0x01,0x93,0xd4};
- sbit k4=P1^7;
- sbit k3=P1^6;
- sbit DQ=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[0]^SIF[1]^SIF[2]^SIF[3]^SIF[4]^SIF[5]^SIF[6]^SIF[7]^SIF[8]^SIF[9]^SIF[10]^SIF[11];
- SIF[12]=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]); //先传低位
- 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();
-
-
- }
- }
复制代码
|