XX 郵電 XX
科技创新实验报告
题 目:基于
CAN
的分布式监控系统
———温度节点
系 别:信息与控制系
专 业:自动化
班 级:0402
班
学生姓名:XXX
导师姓名:XXX
起 止 时 间 : 2007-7-3
至 2007-10-
15
目 录
第一章 序言.............................................................................................................................................11
1.1 课题背景........................................................................................................................................11
1.2 开发意义........................................................................................................................................11
1.3 课题完成功能................................................................................................................................12
第二章 系统各模块介绍........................................................................................................................12
2.1 PHILIPS 半导体公司 的 CAN 控制器 SJA1000.........................................................................12
2.1.1 主要性能特点.......................................................................................12
2.1.2 SJA1000 工作原理和通信协议...............................................................12
2.1.3 SJA1000 的方框图和帧结构...................................................................13
2.2 P89C51RD+单片机.......................................................................................................................14
2.2.1 功能特性概述.......................................................................................14
·外部中断可以从掉电模式中唤醒.....................................................................15
2.2.2 引脚功能说明.......................................................................................15
2.3 CTM1050T 高速 CAN 隔离收发器.............................................................................................17
2.3.1 功能特性概述.......................................................................................17
2.3.2 引脚功能说明.......................................................................................18
...................................................................................................................18
...................................................................................................................19
第三章 系统硬件设计............................................................................................................................20
3.1 SJA1000 硬件接口............................................................................................................................20
3.2 CTM1050T 硬件接口.......................................................................................................................21
3.3 P89C51RD2HBP 硬件接口.............................................................................................................22
3.4 系统硬件电路图............................................................................................................................23
以上章节我们对系统中各个硬件模块进行的详细的介绍,并给出了相应的常用硬件接口电路,
可知最终电路图如下:.....................................................................................................................23
第四章 系统软件设计............................................................................................................................24
4.1 软件流程图....................................................................................................................................24
.............................................................................................................................................................25
.............................................................................................................................................................25
主程序流程图.....................................................................................................................................25
4.2 系统软件程序...............................................................................................................................26
#INCLUDE<REG51.H>...........................................................................................................................26
XX 邮电 XX 信息与控制系科技创新实验报告
#INCLUDE<INTRINS.H>.........................................................................................................................26
#INCLUDE"SJA1000.H"........................................................................................................................26
#DEFINE UINT UNSIGNED INT................................................................................................................26
#DEFINE UCHAR UNSIGNED CHAR.........................................................................................................26
#DEFINE ULONG UNSIGNED LONG.........................................................................................................26
#DEFINE ID 0X02..................................................................................................................................26
#DEFINE TOID 0X00............................................................................................................................26
STATIC UCHAR DATA CANBUF[13]; //接受、发送缓冲区....................................................................26
SBIT LED = P1^4; //指示灯...................................................................................................................26
//定义按键..........................................................................................................................................26
SBIT KEY1 = P1^2;..............................................................................................................................26
SBIT KEY2 = P1^3;..............................................................................................................................26
SBIT KEY3 = P1^0;..............................................................................................................................26
UCHAR BDATA FLAG1,FLAG2; //标志位................................................................................................26
SBIT RECIVEOK = FLAG1^0; //成功接收报文标志.............................................................................26
SBIT HUISONG = FLAG1^1; //报文是否要回送标志...........................................................................26
SBIT F_NO1 = FLAG1^2; //发送到 NO1................................................................................................26
SBIT F_NO2 = FLAG1^3; //发送到 NO2................................................................................................26
SBIT F_NO3 = FLAG1^4; //广播标志....................................................................................................26
/**************************************************************************........26
函数名称:CAN 初始化函数...........................................................................................................26
函数功能:初始化 SJA1000.............................................................................................................26
入口参数:无....................................................................................................................................26
返回参数:无....................................................................................................................................26
*****************************************************************************/. .26
VOID CAN_INIT(VOID)...........................................................................................................................26
{............................................................................................................................................................26
UCHAR I;..............................................................................................................................................26
SJA_ADR=MODE; *SJA_ADR=0X01; //进入复位模式....................................................................26
WHILE(!(*SJA_ADR&0X01)); //等待进入复位模式..........................................................................26
SJA_ADR=CDR; *SJA_ADR=0X88; //指向时钟分频器,PELICAN 模式、关闭时钟输出............26
SJA_ADR=IER; *SJA_ADR=0X0D; //中断允许寄存器,开放接受、溢出、错误告警中断..........26
SJA_ADR=AMR;.................................................................................................................................26
FOR(I=0;I<4;I++) *(SJA_ADR+I)=0X00;//所有代码参与验收...........................................................27
SJA_ADR=ACR; *SJA_ADR=0X00; //指向接受代码寄存器 0.........................................................27
SJA_ADR=ACR+1; *SJA_ADR=0X00; //指向接受代码寄存器 1.....................................................27
SJA_ADR=ACR+2; *SJA_ADR=0X00; //指向接受代码寄存器 2.....................................................27
SJA_ADR=ACR+3; *SJA_ADR=ID; //指向接受代码寄存器 3.........................................................27
SJA_ADR=BTR0; *SJA_ADR=0X00; //波特率设定 500KPS.............................................................27
SJA_ADR=BTR1; *SJA_ADR=0X1C;..................................................................................................27
SJA_ADR=OCR; *SJA_ADR=0XAA; //输出允许寄存器,正常输出...............................................27
SJA_ADR=RBSA; *SJA_ADR=0X00; //接受缓冲区首址,0............................................................27
SJA_ADR=TXERR; *SJA_ADR=0X00; //清除发送错误寄存器.......................................................27
SJA_ADR=ECC; I=*SJA_ADR; //通过读清除错误代码捕捉寄存器................................................27
3
XX 邮电 XX 信息与控制系科技创新实验报告
SJA_ADR=MODE; *SJA_ADR=0X00; //双滤波接受、返回工作状态............................................27
}............................................................................................................................................................27
/**************************************************************************........27
函数名称:CAN 发送函数...............................................................................................................27
函数功能:........................................................................................................................................27
入口参数:CANBUF...........................................................................................................................27
返回参数:无....................................................................................................................................27
*****************************************************************************/. .27
VOID TDATA_CAN(VOID).......................................................................................................................27
{............................................................................................................................................................27
UCHAR ST,I,TT;....................................................................................................................................27
SJA_ADR =SR;....................................................................................................................................27
DO........................................................................................................................................................27
{...........................................................................................................................................................27
ST=*SJA_ADR;....................................................................................................................................27
}...........................................................................................................................................................27
WHILE(ST&0X10);...............................................................................................................................27
DO........................................................................................................................................................27
{...........................................................................................................................................................27
ST=*SJA_ADR;....................................................................................................................................27
}...........................................................................................................................................................27
WHILE(!(ST&0X08));...........................................................................................................................27
DO........................................................................................................................................................27
{...........................................................................................................................................................27
ST=*SJA_ADR;....................................................................................................................................27
}...........................................................................................................................................................27
WHILE(!(ST&0X04));...........................................................................................................................27
SJA_ADR=TXB;..................................................................................................................................28
*SJA_ADR=TT=CANBUF[0];................................................................................................................28
TT=TT&0X0F;......................................................................................................................................28
TT+=4;.................................................................................................................................................28
FOR(I=1;I<=TT;I++).............................................................................................................................28
*(SJA_ADR+I)=CANBUF[I];.................................................................................................................28
SJA_ADR=CMR;.................................................................................................................................28
*SJA_ADR=0X01;...............................................................................................................................28
.............................................................................................................................................................28
}............................................................................................................................................................28
/**************************************************************************........28
函数名称:CAN 发送节点确认函数...............................................................................................28
函数功能:根据标志位发送节点数据............................................................................................28
入口参数:FLAG1..............................................................................................................................28
返回参数:无....................................................................................................................................28
*****************************************************************************/. .28
VOID SEND(VOID).................................................................................................................................28
4
XX 邮电 XX 信息与控制系科技创新实验报告
{............................................................................................................................................................28
SWITCH(FLAG1&0X1C)........................................................................................................................28
{...........................................................................................................................................................28
CASE 0X04:..........................................................................................................................................28
CANBUF[0]=0X88;...............................................................................................................................28
CANBUF[1]=0;.....................................................................................................................................28
CANBUF[2]=0XA0;...............................................................................................................................28
CANBUF[3]=0;.....................................................................................................................................28
CANBUF[4]=ID;...................................................................................................................................28
CANBUF[5]=0X01;...............................................................................................................................28
TDATA_CAN();......................................................................................................................................28
BREAK;................................................................................................................................................28
CASE 0X08:..........................................................................................................................................28
CANBUF[0]=0X88;...............................................................................................................................28
CANBUF[1]=0;.....................................................................................................................................28
CANBUF[2]=0XA1;...............................................................................................................................28
CANBUF[3]=0;.....................................................................................................................................28
CANBUF[4]=ID;...................................................................................................................................28
CANBUF[5]=0X02;...............................................................................................................................28
TDATA_CAN();......................................................................................................................................28
BREAK;................................................................................................................................................28
CASE 0X10:..........................................................................................................................................28
CANBUF[0]=0X88;...............................................................................................................................28
CANBUF[1]=0;.....................................................................................................................................29
CANBUF[2]=0;.....................................................................................................................................29
CANBUF[3]=0;.....................................................................................................................................29
CANBUF[4]=ID;...................................................................................................................................29
CANBUF[5]=0X03;...............................................................................................................................29
TDATA_CAN();......................................................................................................................................29
BREAK;................................................................................................................................................29
.............................................................................................................................................................29
}...........................................................................................................................................................29
.............................................................................................................................................................29
}............................................................................................................................................................29
/**************************************************************************........29
函数名称:报文回送函数................................................................................................................29
函数功能:向发送报文节点返回接受到的报文,以便发送节点确认并决定是否重发............29
入口参数:无....................................................................................................................................29
返回参数:无....................................................................................................................................29
*****************************************************************************/. .29
VOID TRDATA_CAN(VOID).....................................................................................................................29
{............................................................................................................................................................29
CANBUF[1]=0X55;...............................................................................................................................29
CANBUF[2]=0X55;...............................................................................................................................29
5