#i nclude
#i nclude
/*************************函数声明*******************************************/
void Init_T0(void); //初始化单片机T0
void Sja_1000_Init(void); //初始化SJA
//*******************************************************************
bit flag_sec; //发送命令标志
unsigned char da
unsigned char sec_da
unsigned char da
unsigned char bdata flag_init; //中断寄存器数据保存变量
sbit rcv_flag=flag_init^0; //接收中断标志
sbit err_flag=flag_init^2; //错误中断标志
sbit P2_0=P2^0;
sbit P3_4=P3^4;
sbit LED=P3^5; //指示灯
//***********************************************************
void ex0_int(void) interrupt 0 using 1 //外部中断0
{
SJA_BCANAdr=REG_INTERRUPT; //指针指向中断寄存器
flag_init=*SJA_BCANAdr; //保持中断寄存器值
}
//***********************************************************
void T0_int(void) interrupt 1 using 2 //定时器T0中断服务子程序
{
TR0=0; //关闭定时器T0
sec_da
if(sec_da
{
sec_da
TH0=0x80;
TL0=0x60;
flag_sec=1; //设置标志位
second++; //发送的数据加一
}
TR0=1; //启动定时器T0
}
//************************************************************
void Init_T0(void) //初始化定时器0
{
Tmod_da
Tmod_da
Tmod_da
TMOD=Tmod_da
TH0=0x80;
TL0=0x60; //定时器T0初值设置
TR0=1; //开放定时器T0
sec_da
second=0x00; //发送数据初始化清零
}
//***********************************************************
void Sja_1000_Init(void)
{
BCAN_ENTER_RETMODEL(); //进入复位
BCAN_SET_BANDRATE(0x0b); //800K
BCAN_SET_OBJECT(0xaa,0xff); //设置地址ID:557
BCAN_SET_OUTCLK(0xaa,0x48); //设置输出方式,禁止COLOCKOUT输出
BCAN_QUIT_RETMODEL(); //退出复位模式
SJA_BCANAdr=REG_CONTROL; //地址指针指向控制寄存器
*SJA_BCANAdr|=0x1E; //开放错误\接收\发送中断
}
//*******************************************************************
void main(void)
{
P2_0=0; //SJA1000退出硬件复位模式
Sja_1000_Init(); //initialize Sja100
Init_T0(); //initialize T0
PX0=1; //外部中断0高优先级
IT0=1; //开放T0中断
EX0=1; //外部中断0开放
ET0=1; //开放外部中断0
EA=1; //开放全局中断
P3_4=0; //点亮指示灯
flag_init=0x00; //变量清零
while(1)
{
if(rcv_flag) //if there is receive interrupt
{ rcv_flag=0; //接收标志位清零
BCAN_DA
BCAN_CMD_PRG(0x04); //释放接收缓冲区
}
if(flag_sec)
{ flag_sec=0; //发送位清零
send_da
send_da
send_da
send_da
BCAN_DA
BCAN_CMD_PRG(0x01); //置位发送请求位
LED=~LED;
}
if(err_flag) //错误中断
{ err_flag=0; //错误标志位清零
Sja_1000_Init(); //初始化SJA
}
}
}
上一篇:步进电机加速-匀速-减速运行程序(C51源程序)
下一篇:按键处理与按键防抖动例子
推荐阅读最新更新时间:2024-03-16 15:16