?? remote_can_t.c
字號:
//////////////遠程幀控制發(fā)送程序///////////////
////////////remote_can_t.c/////////////////////
#include "candeal2.h"
#define LEN 8
#define MSGNUMA 2
#define MSGNUMB 5
#define NUMAPEND 0x0002
#define NUMBPEND 0x0010
xdata uchar rr1[LEN];
xdata uchar rr2[LEN];
xdata uchar ss1[LEN]={0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98};
xdata uchar ss2[LEN]={0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8};
bit isupB;
xdata uchar countA;
void canini(){
clear_msg_objects();
remote_rqst_ini(MSGNUMA,4);
remote_send_ini(MSGNUMB,2);
EIE2 |= 0x20;
EA = 1;
SFRPAGE = CAN0_PAGE;
CAN0CN=0X41;
CAN0ADR=BITREG;
CAN0DAT=0X34c0;//調波特率
start_CAN();
}
void config(){
//看門狗禁止
WDTCN = 0x07;
WDTCN = 0xDE;
WDTCN = 0xAD;
SFRPAGE = 0x0F;
//交叉開關使能,但沒有進行外圍設備配置
XBR0 = 0x00;
XBR1 = 0x00;
XBR2 = 0x40;
XBR3 = 0x00;
//管腳輸出配置,P0口為開漏輸出,其中P0.6接上拉電阻,P0為數(shù)字輸入口
SFRPAGE = 0x0F;
P0MDOUT = 0x00;
P1MDIN = 0xFF;
//晶振配置,采用內部晶振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();
remote_send_updata(MSGNUMB,ss1,LEN);
isupB=0;
countA=0;
remote_rqst(MSGNUMA);
while(1);
}
void CAN_ISR(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(countA==0){
receive_data (MSGNUMA,rr1,LEN);
remote_rqst(MSGNUMA);
}
if(countA==1)//總共發(fā)送兩次遠程幀請求
receive_data (MSGNUMA,rr2,LEN);
countA++;
}
}
if ((status&0x08)!=0){
CAN0STA&=0xf7;
CAN0ADR=INTPEND1;
temp=CAN0DAT;
if((temp&NUMBPEND)!=0){
remote_send_updata(MSGNUMB,ss2,LEN);
isupB=1;//主程序中可通過查詢ispuB值檢查數(shù)據(jù)是否更新
}
}
SFRPAGE=temppage;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -