?? mul_can_r.c
字號(hào):
///////////多消息can接收程序////////////////
/////////mul_can_r.c///////////////////////
#include "candeal1.h"
#define LEN 8
#define MSGNUMA 2
#define MSGNUMB 5
#define NUMAPEND 0x0002
#define NUMBPEND 0x0010
xdata uchar rr1[LEN];
xdata uchar rr2[LEN];
void canini(){
clear_msg_objects();
init_msg_object_RX (MSGNUMA,2);//初始化發(fā)送
init_msg_object_RX (MSGNUMB,4);
EIE2 |= 0x20;
EA = 1;
SFRPAGE = CAN0_PAGE;
CAN0CN=0X41;
CAN0ADR=BITREG;
CAN0DAT=0X34c0;//調(diào)波特率
start_CAN();
}
void delay1ms(uint time){//延遲1ms*time,這不是一個(gè)精確值
uint i;
uint j;
for (i=0;i<time;i++){
for(j=0;j<300;j++);
}
}
void config(){
//看門狗禁止
WDTCN = 0x07;
WDTCN = 0xDE;
WDTCN = 0xAD;
SFRPAGE = 0x0F;
//交叉開關(guān)使能,但沒有進(jìn)行外圍設(shè)備配置
XBR0 = 0x00;
XBR1 = 0x00;
XBR2 = 0x40;
XBR3 = 0x00;
//管腳輸出配置,P0口為開漏輸出,其中P0.6接上拉電阻,P0為數(shù)字輸入口
SFRPAGE = 0x0F;
P0MDOUT = 0x00;
P1MDIN = 0xFF;
//晶振配置,采用內(nèi)部晶振8分頻
SFRPAGE = 0x0F;
CLKSEL = 0x00;
OSCXCN = 0x00;
OSCICN = 0x84;
}
main(){
uchar i;
config();
for(i=0;i<LEN;i++){
rr1[i]=0;
rr2[i]=0;
}
canini();
while(1);
}
void ISRname (void) interrupt 19
{ uint temp;
temppage=SFRPAGE;
SFRPAGE = CAN0_PAGE;
status = CAN0STA;
if ((status&0x10) != 0){
CAN0STA&=0xef;
CAN0ADR=INTPEND1;
temp=CAN0DAT;
if((temp&NUMAPEND)!=0)/*注意若寫成 if(temp&NUMAPEND!=0)可能會(huì)出現(xiàn)預(yù)料之外的結(jié)果*/
receive_data (MSGNUMA,rr1,LEN);
if((temp&NUMBPEND)!=0)
receive_data (MSGNUMB,rr2,LEN);
}
SFRPAGE=temppage;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -