?? #can_t.c
字號:
#include "can.h"
#define LEN 8
void transmit (char MsgNum,char *p,char len)
/*將*p數據寫入can消息發送,len為數據長度*/
{ char i;
SFRPAGE = CAN0_PAGE;
CAN0ADR = IF1CMDMSK;
CAN0DAT = 0x0087;
/* IF1 Command Mask Registers =0x0087
WR/RD=1,Mask=0,Arb=0,Control=0,ClrIntPnd=0,TxRqst=1,DataA=1,DataB=1,一次發送8字節數據*/
CAN0ADR = IF1DATA1;
for(i=0;i<len;i+=2){
CAN0DATH=*p++;
CAN0DATL=*p++;
}
CAN0ADR = IF1CMDRQST;
CAN0DATL = MsgNum;
}
void receive_data (uchar MsgNum,char *p,char len)
/*將接收數據存入*p指針中,len為接收長度*/
{
char i;
SFRPAGE = CAN0_PAGE;
CAN0ADR = IF2CMDMSK;
CAN0DATL = 0x0F;
/* IF1 Command Mask Registers =0xxx1f
WR/RD=0,Mask=0,Arb=0,Control=0,ClrIntPnd=1,TxRqst=1,DataA=1,DataB=1,一次發送8字節數據*/
CAN0ADR = IF2CMDRQST;
CAN0DATL = MsgNum;
CAN0ADR = IF2DATA1;
for(i=0;i<len;i+=2){
*p++=CAN0DATH;
*p++=CAN0DATL;
}
isnewdata=1;
}
void canini(){
clear_msg_objects();
init_msg_object_RX (0x04,1);//初始化發送
init_msg_object_TX (0x02,2);
init_msg_object_TX (0x03,4);
EIE2 |= 0x20;
EA = 1;
SFRPAGE = CAN0_PAGE;
CAN0CN=0X41;
CAN0ADR=BITREG;
CAN0DAT=0X34c0;//調波特率
start_CAN();
}
void delay1ms(uint time){//延遲1ms*time,這不是一個精確值
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;
//交叉開關使能,但沒有進行外圍設備配置
XBR0 = 0x00;
XBR1 = 0x00;
XBR2 = 0x40;
XBR3 = 0x00;
//管腳輸出配置,P0口為開漏輸出,其中P0.6接上拉電阻,P0為數字輸入口
SFRPAGE = 0x0F;
P0MDOUT = 0x00;
P1MDIN = 0xFF;
//晶振配置,采用內部晶振8分頻
SFRPAGE = 0x0F;
CLKSEL = 0x00;
OSCXCN = 0x00;
OSCICN = 0x84;
}
main(){
xdata uchar ss1[8]={0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18};
xdata uchar ss2[8]={0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28};
config();
canini();
transmit(2,ss1,LEN);
transmit(3,ss2,LEN);
while(1);
}
void ISRname (void) interrupt 19
{ temppage=SFRPAGE;
SFRPAGE = CAN0_PAGE;
status = CAN0STA;
if ((status&0x10) != 0){
CAN0STA&=0xef;
// receive_data (0x04);
}
SFRPAGE=temppage;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -