?? rs232_basiccan.c
字號:
#include<REG52.H>
#include<SJA_BCANCONF.H>
#include<SJA_BCANFUNC.C>
//************************函數聲明*****************************//
void T1_int(void);
void Sja_1000_Init(void);
//************************變量定義*****************************//
unsigned char data send_data[10],rcv_data[10]; //發送和接收數組定義
unsigned char bdata flag_init;
unsigned char j,k=2;
sbit rcv_flag=flag_init^0; //接收中斷標志
sbit err_flag=flag_init^2; //錯誤中斷標志
bit send_flag=0;
sbit CAN_RESET=P2^0;
sbit LED1=P3^4;
sbit LED0=P3^5;
void open_close_led(void)
{
if(rcv_data[4]==0X02)
{LED0=0;} //OPEN THE LIGHT
else if(rcv_data[4]==0X03)
{LED0=1;} //close the light
if(rcv_data[5]==0X02)
{LED1=0;} //OPEN THE LIGHT
else if(rcv_data[5]==0X03)
{LED1=1;} //close the light
}
//***********************主函數*******************************//
void main(void)
{
CAN_RESET=0; //SJA1000退出硬件復位模式
Sja_1000_Init(); //initialize Sja100
T1_int(); //initialize T1
PX0=1; //外部中斷0高優先級
EX0=1; //外部中斷0開放
ES=1; //串口中斷開放
EA=1; //開放全局中斷
flag_init=0x00;
while(1)
{
if(rcv_flag)
{
rcv_flag=0;
BCAN_DATA_RECEIVE(rcv_data); //接收數據
BCAN_CMD_PRG(0x04); //釋放接收緩沖區
ES=0; //串口中斷禁止
for(j=2;j<10;j++) //發送8組數據到串口
{
SBUF=rcv_data[j];
while(TI==0)
{}
TI=0;
}
ES=1; //串口中斷開放
open_close_led();
}
if(send_flag)
{
send_flag=0;
send_data[0]=0xA8;
send_data[1]=0x08; //報文ID:540
BCAN_DATA_WRITE(send_data); //寫入數據到緩沖區函數
BCAN_CMD_PRG(0x01); //調用發送請求
}
if(err_flag) //總線錯誤處理
{
err_flag=0;
Sja_1000_Init();
}
}
}
//******************************外部中斷0*******************//
void ex0_int(void) interrupt 0 using 1
{
SJA_BCANAdr=REG_INTERRUPT;
flag_init=*SJA_BCANAdr;
}
//******************************T1初始化********************//
void T1_int(void)
{
TMOD=0x20; //定時器1設為方式2
TL1=0xFD; //定時器初值
TH1=0xFD;
SCON=0x50; //串口設為方式1,REN=1允許接收
TR1=1; //啟動定時器1
}
void UART_int(void) interrupt 4 using 3/*串口中斷接受數據*/
{
send_data[k]=SBUF; //寫串口數據到發送數組
RI=0; //接收中斷清零
k++; //
if(k==10) //接收到8組數據
{k=2; //
send_flag=1; //置位發送標志
}
}
//******************************SJA1000初始化********************//
void Sja_1000_Init(void)
{ BCAN_ENTER_RETMODEL(); //進入復位
BCAN_SET_BANDRATE(0x0b); //設置波特率800K/S
BCAN_SET_OBJECT(0xaa,0x00); //設置地址ID:550
BCAN_SET_OUTCLK(0xaa,0x48); //設置輸出方式,禁止COLOCKOUT輸出
BCAN_QUIT_RETMODEL(); //退出復位模式
SJA_BCANAdr=REG_CONTROL; //地址指針指向控制寄存器
*SJA_BCANAdr|=0x1e; //開放錯誤\接收\發送中斷
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -