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)
2019-5-17 06:11 上傳
點擊文件名下載附件
安防pdf 下載積分: 黑幣 -5
|