CAN初始化程序代码为:
#include <reg52.h>
#include <stdio.h>
#include <string.h>
#include <absacc.h>
#define byte unsigned char
#define word unsigned int
#define time0 65536-2000
#define BAUD -13
#define MAIN 1 ///定义主机,从机地址
#define ADDR 2
#define READ 'R'
#define WRIT 'W'
#define CAN_PORT P0
#define CAN_CR 0 //控制
#define CAN_CMR 1 //命令
#define CAN_SR 2 //状态
#define CAN_IR 3 //中断
#define CAN_ACR 4 //验收
#define CAN_AMR 5 //屏蔽
#define CAN_BTR0 6 //时序0
#define CAN_BTR1 7 //时序1
#define CAN_OCR 8 //输出
#define CAN_TXB 10 //发送缓冲
#define CAN_RXB 20 //接收缓冲
#define CAN_CDR 31 //分频
sbit CAN_WR = P2^5;
sbit CAN_RD = P2^6;
sbit CAN_ALE = P2^7;
sbit CAN_RST = P1^0;
sbit da_in = P3^7;
sbit da_clk = P3^6;
sbit da_cs = P3^5;
sbit KEY1 = P2^0;
sbit KEY2 = P2^1;
sbit LED1 = P1^3;
sbit LED2 = P1^4;
sbit LED7 = P1^7;
sbit beer = P1^1;
bit CANBUS;
byte bdata Acc ;
sbit Acc7=Acc^7;
byte idataTXB[10]={1,2,3,4,5,6,7,8,9,10}; //第一个为报文标志码
byte idata RXB[10];
void CAN_INI() /*初始化部分*/
{
CANW(CAN_CR,0x01);
CANW(CAN_ACR,MAIN); //验收滤波器需与报文标志码(从机的发送的第一个字节)一致
CANW(CAN_AMR,0x00);
CANW(CAN_BTR0,0x42); //125k-BPS
CANW(CAN_BTR1,0x1c);
CANW(CAN_OCR,0x1A); //0xaa,0xd2,0xfa
CANW(CAN_CR,0x02); //**中断使能
}
4.1.2CAN数据发送
数据发送,现场的各传感器把环境多参数的检测信号(数字量、模拟量、开关量)进行转换处理后,发向CAN控制器的发送缓冲区,然后启动CAN控制器的发送命令,此时CAN控制器将自动向总线发送数据,不再需传感器的微控制器进行干预。
CAN数据发送的程序代码为:
void CANW(byte adr,byte dat)//写CAN数
{
CAN_ALE=1;
CAN_PORT=adr;
CAN_ALE=0;
CAN_WR=0;
CAN_PORT=dat;
CAN_WR=1;
}
byte CANR(byte adr) //读CAN数
{
byte dat;
CAN_ALE=1;
CAN_PORT=adr;
CAN_ALE=0;
CAN_PORT=0xff;
CAN_RD=0;
dat=CAN_PORT;
CAN_RD=1;
return dat;
}
void CAN_SEND() /*发送数据部分*/
{
byte i,p;
p=CANR(CAN_SR);
if (p&0x04)
{
p=CAN_TXB; /*p指向发送缓存首址*/
for(i=0;i<10;i++) CANW(p++,TXB);
CANW(CAN_CMR,0x01); /*请求发送*/
}
}
全部资料51hei下载地址:
智能小区安防系统.7z
(550.97 KB, 下载次数: 14)
|