📄 can好文[转载](梦醒了).htm
字号:
XBYTE[SJA_REG_BaseADD + 0x15]<BR> #define REG_DataBuffer2
XBYTE[SJA_REG_BaseADD + 0x16]<BR> #define REG_DataBuffer3
XBYTE[SJA_REG_BaseADD + 0x17]<BR> #define REG_DataBuffer4
XBYTE[SJA_REG_BaseADD + 0x18]<BR> #define REG_DataBuffer5
XBYTE[SJA_REG_BaseADD + 0x19]<BR> #define REG_DataBuffer6
XBYTE[SJA_REG_BaseADD + 0x1a]<BR> #define REG_DataBuffer7
XBYTE[SJA_REG_BaseADD + 0x1b]<BR> #define REG_DataBuffer8
XBYTE[SJA_REG_BaseADD + 0x1c]<BR> <BR> <BR> #define REG_RBSA
XBYTE[SJA_REG_BaseADD + 0x1e]<BR> #define REG_CDR
XBYTE[SJA_REG_BaseADD + 0x1f]<BR> #define REG_Receive_Counter
XBYTE[SJA_REG_BaseADD + 0x1d]<BR> <BR> #define OK 1<BR> #define
Fail 0<BR> #define ON 1<BR> #define OFF 0<BR> #define True
1<BR> #define False 0<BR> <BR> sbit SJARst = P2 ^ 6;
//复位控制<BR> sbit LED0 = P1 ^ 0;<BR> sbit LED1 = P1 ^ 1;<BR> sbit
Key0 = P1 ^ 2;<BR> sbit Key1 = P1 ^ 3;<BR> sbit Key2 = P1 ^
4;<BR> sbit Key3 = P1 ^ 5;<BR> <BR> bit step_flg;<BR> bit
Tx_flg;<BR> bit Rx_flg;<BR> <BR> unsigned char
step_counter;<BR> unsigned char Tx_counter;<BR> unsigned char
PC_RX_Buffer;<BR> unsigned char temp_data1;<BR> unsigned char
Rx_Buffer[6];<BR> <BR> void MCU_Init(void);<BR> void
SJA_Init(void);<BR> void send(unsigned char S_Data);<BR> void
Serial(void);<BR> void Delay(unsigned char Delay_time);<BR> void
step(void);<BR> <BR> <BR> <BR> *******************************************************<BR> <BR> 以下为c的主程序<BR> copyright
by
alloy<BR> <BR> *******************************************************<BR> #include
<stdio.h><BR> #include <string.h><BR> #include
<REG51.h><BR> #include <TxMCU.h><BR> #include
<absacc.h><BR> main()<BR> {<BR> <BR> unsigned char
i;<BR> MCU_Init();<BR> SJA_Init();<BR> REG_MODE = 0x01;
//进入复位模式<BR> <BR> temp_data1 = REG_MODE;<BR> temp_data1 =
temp_data1 & 0x01;<BR> if(temp_data1 == 0x01) //在复位模式中<BR>
{<BR> REG_BTR0 = 0x85;<BR> REG_BTR1 = 0xb4; //100k<BR>
REG_OCR = 0x1a;<BR> REG_CDR = 0xc0;<BR> REG_RBSA =
0x00;<BR> <BR> REG_ACR0 = 0xff;<BR> REG_ACR1 = 0xff;<BR>
REG_ACR2 = 0xff;<BR> REG_ACR3 = 0xff;<BR> <BR> REG_AMR0 =
0xff;<BR> REG_AMR1 = 0xff;<BR> REG_AMR2 = 0xff;<BR> REG_AMR3
= 0xff;<BR> <BR> REG_IR_ABLE = 0xff;<BR> }<BR> REG_MODE =
0x0c; //进入自接收模式<BR> REG_MODE = 0x0c;<BR> <BR> for(i =
0;i<100;i++);<BR> temp_data1 = REG_Receive_Counter;<BR>
send(temp_data1);<BR> for(;;)<BR> {<BR> while(Tx_flg ==
False);<BR> Tx_flg = False;<BR> Tx_counter++;<BR>
send(Tx_counter);<BR> temp_data1 = REG_SR;<BR> while((temp_data1
& 0x10) == 0x10);<BR> temp_data1 = REG_SR;<BR>
if((temp_data1 & 0x04) == 0x04)<BR> {<BR> REG_RxBuffer0 =
0x08; //标准帧,长度为8<BR> REG_RxBuffer1 = 0xff;<BR> REG_RxBuffer2 =
0xff;<BR> <BR> REG_RxBuffer3 = 0x01;<BR> REG_RxBuffer4 =
0x02;<BR> REG_DataBuffer1 = 0x03;<BR> REG_DataBuffer2 =
0x04;<BR> REG_DataBuffer3 = 0x05;<BR> REG_DataBuffer4 =
0x06;<BR> REG_DataBuffer5 = 0x07;<BR> REG_DataBuffer6 =
0x08;<BR> REG_DataBuffer7 = 0x09;<BR> REG_DataBuffer8 =
0x0a;<BR> }<BR> REG_CMD = 0x10;<BR> temp_data1 =
REG_SR;<BR> temp_data1 = temp_data1 & 0x20;<BR>
while(temp_data1 == 0x20) //检查是否发送完成<BR> {<BR>
//send(0xaa);<BR> temp_data1 = REG_ECC;<BR>
send(temp_data1);<BR> temp_data1 = REG_SR;<BR> temp_data1 =
temp_data1 & 0x20;<BR> //send(temp_data1);<BR>
}<BR> <BR> send(0x66);<BR> temp_data1 = REG_ALC;<BR>
send(temp_data1);<BR> temp_data1 = REG_ECC;<BR>
send(temp_data1);<BR> temp_data1 = REG_SR;<BR>
send(temp_data1);<BR> temp_data1 = REG_Receive_Counter;<BR>
send(temp_data1);<BR> <BR> PC_RX_Buffer = 0x77;<BR> LED0 =
~LED0;<BR> <BR> // Tx_counter = 0x00;<BR>
}<BR> }<BR> <BR> void MCU_Init(void)<BR> {<BR> SJARst =
1;<BR> LED0 = OFF;<BR> LED1 = OFF;<BR> PC_RX_Buffer =
0x77;<BR> step_counter = 0x00;<BR> step_flg = False;<BR>
Tx_flg = False;<BR> temp_data1 = 0x00;<BR> TMOD = 0x20;<BR>
TH1 = 0xff;<BR> TL1 = 0xff;<BR> TR1 = 1;<BR> SCON =
0x50;<BR> PCON = 0x80;<BR> EA = 1;<BR> ES = 1;<BR>
Tx_counter = 0x00;<BR> <BR> }<BR> <BR> void
SJA_Init(void)<BR> {<BR> unsigned char i;<BR> for(i = 0;i
< 125;i++);<BR> SJARst = 0;<BR> for(i = 0;i <
125;i++);<BR> SJARst = 1;<BR> for(i = 0;i <
125;i++);<BR> }<BR> <BR> void send(unsigned char
S_Data)<BR> {<BR> SBUF = S_Data;<BR> while(TI == 0);<BR>
TI =0;<BR> }<BR> <BR> void Serial() interrupt 4 using
2<BR> {<BR> <BR> if(RI == 1)<BR> {<BR> PC_RX_Buffer =
SBUF;<BR> RI = 0;<BR> if(PC_RX_Buffer == 0xaa)<BR> {<BR>
send(0x13);<BR> Tx_flg = True;<BR> PC_RX_Buffer = 0x77;<BR>
}<BR> else if(PC_RX_Buffer == 0x55)<BR> {<BR>
send(0x14);<BR> Rx_flg = True;<BR> PC_RX_Buffer = 0x77;<BR>
}<BR> else<BR> {<BR> send(0x15);<BR> PC_RX_Buffer =
0x77;<BR> }<BR> }<BR> <BR> }另外,我给大家推荐一本书,还不错的
北航出版的《现场总线CAN原理与应用技<BR>术》(饶运涛等) <BR><BR>(文章推荐人:ywgcat)
<BR><BR></BLOCKQUOTE></TD></TR>
<TR>
<TD width="100%">
<P align=center> </P></TD></TR></TBODY></TABLE><A
href="http://www.daxia.com/bbs" target=_blank>返回大虾论坛</A> <A
href="http://www.daxia.com/" target=_blank>返回首页</A>
</CENTER></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -