📄 rate3.c
字号:
#include<AT89X52.H> //加载头文件
#include<SJA_BCANCONF.H> //加载变量定义模块
#include<SJA_BCANFUNC.C> //加载子程序模块文件
void Init_Cpu(void);
void Init_T0(void);
void Sja_1000_Init(void);
unsigned char data send_data[10],rcv_data[10];//定义变量
unsigned char bdata flag_init;
unsigned int data m=0,n=0,i=0,countnum=0,k1=0,k2=0;
unsigned int sec_data;
unsigned long subn=0;
unsigned long rate=0;
sbit rcv_flag=flag_init^0;
sbit err_flag=flag_init^2;
void main(void)
{
Sja_1000_Init(); //初始化CAN控制器SJA1000
Init_T0(); //初始化定时器2
Init_Cpu(); //初始化单片机
flag_init=0x00;
while(1)
{
if(rcv_flag)
{
rcv_flag=0; //有接收中断,则单片机进行处理
BCAN_DATA_RECEIVE(rcv_data);
BCAN_CMD_PRG(0X04); //清空缓冲区
}
if(err_flag) //err-flag=1表示错误中断
{
err_flag=0;
Sja_1000_Init();
}
}
}
void ex0_int(void) interrupt 0 using 1 //外部中断0服务子程序
{
SJA_BCANAdr=REG_INTERRUPT;
flag_init=*SJA_BCANAdr; //查看保存中断源
}
void Int_T0(void) interrupt 1 using 2 //定时器0中断服务子程序
{
countnum++;
// sec_data--;
if(countnum==70) //1s到了吗?
{
// sec_data=70; //是,则发送处理
send_data[0]=0xaa;
send_data[1]=0x02;
send_data[2]=0x00;
send_data[3]=0x00;
BCAN_DATA_WRITE(send_data);
BCAN_CMD_PRG(0x01); //调发送请求
countnum=0;
}
TH0=0x00; //计数初值为0
TL0=0x00;
TR0=1;
}
void Int1(void) interrupt 2 using 3 //外部中断1服务子程序
{
i++;
if(i==1) TR0=1;
if(i==11)
{
TR0=0;
m=TH0;
n=TL0;
subn=countnum*65536+m*256+n;
rate=552960000/subn;
k1=rate/256;
k2=rate%256;
send_data[0]=0xaa;
send_data[1]=0x02;
send_data[2]=k1;
send_data[3]=k2;
BCAN_DATA_WRITE(send_data);
BCAN_CMD_PRG(0x01); //调发送请求
countnum=0;
TH0=0x00;
TL0=0x00;
i=0;
}
}
void Init_Cpu(void) //开中断
{
EA=1;
EX0=1;
ET0=1;
EX1=1;
IT1=1;
}
void Init_T0(void) //初始化定时器0
{
TMOD=0x01; //定时器0,方式1
TH0=0x00; //计数初值为0
TL0=0x00;
sec_data=70;
}
void Sja_1000_Init(void) //CAN控制器初始化子程序
{
BCAN_ENTER_RETMODEL(); //申请进入复位状态
BCAN_SET_BANDRATE(0x0e); //设置波特率为1000Kb/s
BCAN_SET_OBJECT(0xaa,0xff); //设置ACR AMR
BCAN_SET_OUTCLK(0xaa,0x48); //设置输出方式禁止clkout
BCAN_QUIT_RETMODEL(); //退出复位状态
SJA_BCANAdr=REG_CONTROL; //送控制寄存器地址
*SJA_BCANAdr|=0x1e; //开放错误中断和接收中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -