- 积分
- 588
- 在线时间
- 762 小时
- 最后登录
- 2022-2-20
- 阅读权限
- 50
- 精华
- 3
- UID
- 12668
- 帖子
- 320
- 精华
- 3
- 经验
- 588 点
- 金钱
- 325 ¥
- 注册时间
- 2006-9-24
|
楼主 |
发表于 2016-3-15 18:33
|
显示全部楼层
以前一直用汇编写程序的,刚刚学习了C语言10天,用C语言另外写了破解CD机一小时限制,程序可以正常破解,,已经实测了,,程序如下(C语言刚刚学习没几天,水平有限,将就看看)
#include<INTRINS.H>
#include<STC15F2K60S2.H>
#define WRITE_DATA 0x02
#define READ_DATA 0x03
/////////////////////////////////////////
#define RXM0SIDH 0x20
#define RXM0SIDL 0x21
#define RXM1SIDH 0x24
#define RXM1SIDL 0x27
#define RXF0SIDH 0x00
#define RXF0SIDL 0x01
#define RXF1SIDH 0x04
#define RXF1SIDL 0x05
//////////////////////////////////////////////////////////////////
#define CANCTRL 0x0F//////CAN 控制寄存器REQOP2 REQOP1 REQOP0 ABAT OSM CLKEN CLKPRE1 CLKPRE0
#define CANSTAT 0x0E////CAN 状态寄存器OPMOD2 OPMOD1 OPMOD0 — ICOD2 ICOD1 ICOD0
#define CANINTE 0x2B//////中断使能寄存器(地址:2Bh)
#define CANINTF 0x2C/////中断标志寄存器(地址:2Ch)
#define CN1 0x2A
#define CN2 0x29
#define CN3 0x28
#define TXRTSCTRL 0x0D
#define TXB0CTRL 0x30
///////////////////////////////////
#define TXB0SIDH 0x31
#define TXB0SIDL 0x32
#define TXB0EID8 0x33
#define TXB0EID0 0x34
#define TXB0DLC 0x35
#define TXB0D0 0x36
#define TXB0D1 0x37
#define TXB0D2 0x38
#define TXB0D3 0x39
#define TXB0D4 0x3A
#define TXB0D5 0x3B
#define TXB0D6 0x3C
#define TXB0D7 0x3D
///////////////////////////////////////////////////////////
#define BFPCTRL 0x0C//RXnBF 引脚控制寄存器和状态寄存器(地址:0Ch)
#define RXB0CTRL 0x60////接收缓冲器0 控制寄存器(地址:60h)
#define RXB0SIDH 0x61//接收缓冲器0 标准标识符高位
#define RXB0SIDL 0x62//接收缓冲器0 标准标识符低位
#define RXB0EID8 0x63//接收缓冲器0 扩展标识符高位
#define RXB0EID0 0x64//接收缓冲器0 扩展标识符低位
#define RXB0DLC 0x65///接收缓冲器0 数据长度码
#define RXB0D0 0x66//接收缓冲器0 数据字段字节0-7
#define RXB0D1 0x67
#define RXB0D2 0x68
#define RXB0D3 0x69
#define RXB0D4 0x6A
#define RXB0D5 0x6B
#define RXB0D6 0x6C
#define RXB0D7 0x6D
////////////
#define RXB1CTRL 0x70////////接收缓冲器1 控制寄存器(地址:70h)
#define RXB1SIDH 0x71//接收缓冲器1 标准标识符高位
#define RXB1SIDL 0x72//接收缓冲器1 标准标识符低位
#define RXB1EID8 0x73//接收缓冲器1 扩展标识符高位
#define RXB1EID0 0x74//接收缓冲器1 扩展标识符低位
#define RXB1DLC 0x75///接收缓冲器1 数据长度码
#define RXB1D0 0x76//接收缓冲器1 数据字段字节0-7
#define RXB1D1 0x77
#define RXB1D2 0x78
#define RXB1D3 0x79
#define RXB1D4 0x7A
#define RXB1D5 0x7B
#define RXB1D6 0x7C
#define RXB1D7 0x7D
////////////////////////////////////////////////////////
unsigned char temp_data;
unsigned char jj;
//////////////////////////////////////////////////
unsigned char RXIDSIDH;
unsigned char RXIDSIDL;
unsigned char up ;
////////////////////////////////////////////////////////////
////定义端口
sfr INT2_P36 =0x8F;
sbit ACC_0 = 0xE0^0;
sfr key =0x80;
//sbit LED_1 =P4^6;
sbit LED_2 =P4^5;
///////////////////////////////////////
//sbit MCP2515_INT =P3^6;
//sbit MCP2515_SCK =P0^4;
//sbit MCP2515_MISI =P0^1;
//sbit MCP2515_MISO =P0^0;
//sbit MCP2515_CS =P0^2;
///////////////////////////////////
sbit MCP2515_INT =P3^6;
sbit MCP2515_SCK =P3^5;
sbit MCP2515_MISI =P3^4;
sbit MCP2515_MISO =P3^3;
sbit MCP2515_CS =P3^2;
////////////////////////////////////////
sbit LED_12V = P1^1;
sbit LED_9V = P1^0;
sbit K6 =P3^2;
sbit K5 =P3^3;
//sbit out_12v =P1^1;
//sbit out_9v =P1^0;
//sbit out_5v =P1^2;
/////////////////////////////////////////////
/////////////////////////////////;//////////////////////
void MCP2515_spi_set();//*************进入配置模式************
void MCP2515_spi_reset();//************MCP2515复位指令**************************
void TXD_DATA ();
void spi_write(unsigned char x);
void delay(unsigned int k);
unsigned spi_read(void);
void CANINTF_RX0IF();
void UartInit(void);
void READchange ( RXIDSIDH , RXIDSIDL );
////////////////////////////////////////////////////
///////////////////////////////////////////////////////
void INT2() interrupt 10
{
//LED_9V = 1;
}
///////////////////////////////////////////////////////
///////////////////////////////////////
void UartInit(void) //115200bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0xE8; //设定定时初值
TH1 = 0xFF; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////
main()
{
UartInit() ;
//////////////////////////////////
//key=~key;
P2=0x00;
delay(200);
P2=0xff;
//////////////////////
MCP2515_spi_reset();
delay(200);
P2=0xff;
MCP2515_spi_set();
delay(2);
INT2_P36 |=0x10;
EA=0 ;
////////////////////////////////////
while(1)
{
unsigned aa;
_nop_();
TXD_DATA ();
spi_write(0x81);
MCP2515_CS =1;
//delay(30);
/////////////////////////////////////////
////////////////////////////////////////////////////
for( aa=0 ; aa<254 ; aa++)
{
_nop_();
_nop_();
_nop_();
_nop_();
spi_write(0xA0);
spi_read() ;
jj=temp_data;
spi_read() ;
jj=temp_data;
MCP2515_CS =1;
jj=jj&0x01;
///////////////////////////////////////////
if ( jj==0x01)
{
/////////////////////////////
unsigned char a ;
char b[] ={RXB0SIDH , RXB0SIDL , RXB0DLC , RXB0D0 , RXB0D1 , RXB0D2 , RXB0D3 , RXB0D4 , RXB0D5 , RXB0D6 , RXB0D7 };
char c[11] ;
for (a=0 ; a<11 ; a++)
{
spi_write(READ_DATA);
spi_write(b[a]); ///////61
spi_read();
c[a]=temp_data;
MCP2515_CS =1;
}
//////////////////////////////////////
READchange (RXIDSIDH=c[0] , RXIDSIDL=c[1] );
////////////////////////////////////
LED_12V = 1;
////////////////////////////
// TI=0;
// SBUF=c[2]; ////////////c[2]是DLC数据长度
// while(TI==0);
//TI=0;
// SBUF= SBUF=c[3];////////////c[3]是数据D0
// while(TI==0);
// TI=0;
// SBUF= SBUF=c[4];//////////c[4]是数据D1
// while(TI==0);
// TI=0;
// SBUF= SBUF=c[5]; //////////c[5]是数据D2
// while(TI==0);
//TI=0;
// SBUF= SBUF=c[6]; //////////c[6]是数据D3
// while(TI==0);
// TI=0;
// SBUF= SBUF=c[7]; //////////c[7]是数据D4
// while(TI==0);
// TI=0;
// SBUF= SBUF=c[8]; //////////c[8]是数据D5
// while(TI==0);
// TI=0;
// SBUF= SBUF=c[9]; //////////c[9]是数据D6
// while(TI==0);
// TI=0;
// SBUF= SBUF=c[10]; //////////c[10]是数据D7
// while(TI==0);
///////////////////////////////////////////////////////////////////////////////////////
if (c[0]==0x5C)
{
if (c[1]==0x60)
{if (c[3]==0x02)
{LED_9V=1;
}
else
{
LED_9V=0;
}
}
}
//////////////////////////////
if (c[0]==0x5B)
{
if (c[1]==0x00)
{
switch ( c[4] )
{
case 0x00 :
P2=0xFF;
break;
case 0x08 :
P2=0xFE;
break;
case 0x10 :
P2=0xFC;
break;
case 0x18 :
P2=0xF8;
break;
case 0x20 :
P2=0xF0;
break;
case 0x28 :
P2=0xE0;
break;
case 0x30 :
P2=0xC0;
break;
case 0x38 :
P2=0x80;
break;
case 0x40 :
P2=0x00;
break;
}
}
}
///////////////////////////////////////
LED_12V = 0;
CANINTF_RX0IF();
////////////////////////////
}
}
}
}
/////////////////////////////////////////////////////////////#define RXF0SIDH 0X00
//#define RXF0SIDL 0X01
//*************进入配置模式******;MCP2515初始化(16M晶振,波特率为125K)******
void MCP2515_spi_set()
{
unsigned char i;
char a[]={0x80, 0x03, 0xF1, 0x05, 0x00, 0xFF, 0xFF, 0x00, 0x00 , 0x5B, 0x00 , 0x5C, 0x60, 0x00 , 0x01 , 0x00 , 0x00 , 0x20 , 0x20 };
char b[]={CANCTRL, CN1, CN2, CN3, TXRTSCTRL, RXM0SIDH, RXM0SIDL, RXM1SIDH , RXM1SIDL , RXF0SIDH, RXF0SIDL, RXF1SIDH, RXF1SIDL ,CANCTRL , CANINTE , CANINTF , BFPCTRL , RXB0CTRL ,RXB1CTRL };
for(i=0 ;i<19 ;i++)
{ spi_write(0x02);
spi_write(b[i]);
spi_write(a[i]);
MCP2515_CS =1;
delay(10);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
/////////////*****************ACC-ON(开钥匙)报文ID:00000285 数据:20 02 5E
void TXD_DATA ()
{
unsigned char i;
char c[]={TXB0SIDH, TXB0SIDL, TXB0EID8, TXB0EID0, TXB0DLC, TXB0D0, TXB0D1 , TXB0D2};
char d[]={ 0x50, 0xA0, 0x00, 0x00, 0x03, 0x20 , 0x02 , 0x5E };
spi_write(0x05);///////TXB0CTRL置1
spi_write(TXB0CTRL);
spi_write(0x08);
spi_write(0x08);
MCP2515_CS =1;
delay(1);
for (i=0 ; i<8 ;i++)
{
spi_write(WRITE_DATA);
spi_write(c[i]);
spi_write(d[i]);
MCP2515_CS =1;
_nop_();
_nop_();
}
}
///////////////////////////////////////////////////////
///************MCP2515复位指令**************************
void MCP2515_spi_reset()
{
spi_write(WRITE_DATA);
spi_write(0xc0);
MCP2515_CS =1;
}
////////////////////////////////
///**********SPI写操作*****************
void spi_write(unsigned char a)
{
unsigned char i;
MCP2515_SCK=0;
_nop_();
_nop_();
MCP2515_CS =0;
_nop_();
for (i=0;i<8;i++)
{
MCP2515_SCK=0;
if((a & 0x80)==0x80)
MCP2515_MISI=1;
else
MCP2515_MISI=0;
MCP2515_SCK =1;
a=(a<<1);
}
MCP2515_SCK=0;
}
/////////////////////////////////////////////////////////////
///**********SPI读操作*****************
unsigned spi_read(void)
//模拟SPI 读1个字节
{
bit read_bit;
unsigned char i;
MCP2515_CS =0;
for(i=0 ; i<8 ; i++)
{
MCP2515_SCK=0;
_nop_();
_nop_();
_nop_();
read_bit=MCP2515_MISO ;
_nop_();
_nop_();
_nop_();
MCP2515_SCK=1;
temp_data<<=1;
if(read_bit)
{
temp_data|=0x01;
}
}
MCP2515_SCK=0;
return temp_data;
}
///////////////////////////////////////////////////
void CANINTF_RX0IF()
{
spi_write(0x05);///////RX0IF置1
spi_write(CANINTF);
spi_write(0x01);
spi_write(0x00);
MCP2515_CS =1;
}
///////////////////////////////////////////////
/////********************报文ID变换函数********************
///////
void READchange (RXIDSIDH , RXIDSIDL )
{
unsigned char read_buff_a ;
unsigned char read_buff_b;
unsigned char read_buff_c;
unsigned char read_buff_d;
read_buff_a = RXIDSIDL >> 0x05;
read_buff_a = read_buff_a & 0x07;
read_buff_b = RXIDSIDH << 0x03 ;
read_buff_b = read_buff_b & 0xF8 ;
read_buff_c = read_buff_a | read_buff_b ;
read_buff_d = RXIDSIDH >> 0x05 ;
read_buff_d= read_buff_d & 0x0F ;
TI=0;
SBUF=read_buff_d;
while(TI==0);
TI=0;
SBUF=read_buff_c;
while(TI==0);
///////////////
}
//////////////////////////////////////////////////////////
/*******延时函数*************/
/*******延时函数*************/
void delay(unsigned int k)
{
unsigned char i, j;
for(k ; k>0 ; k--)
{
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
} |
|