CAN自收发程序.docVIP

  • 87
  • 0
  • 约9.54千字
  • 约 20页
  • 2016-11-21 发布于河南
  • 举报
CAN自收发程序

CAN自收发程序 // //描述: // INT0按键程序+显示程序+CAN自收发程序 // 数码管1-2(从右至左)显示本节点计数结果,数码管3-4显示接收到的数据 // 十进制显示 // CAN主要参数: PeliCAN模式,扩展帧EFF模式 // 29位标示码结构: // 发送数据结构:计数结果,0x02,0x03,0x04,0x05,0x06,0x07,0x08 // 接收数据结构: 待显示数据+其它7个字节的数据 // 本节点的地址: 0x11,0x22,0x33,0x00;可以接收全部节点的数据 // 目的节点地址:0x01,0x02,0x03,0x00;可以被能接收全部节点数据的节点接收 // //【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! //【声明】 作者: PIAE小组 #include reg52.h #include intrins.h #include can_selfdef.h void INT0_Counter( void ) interrupt 0 using 1 {//INT0按键为计数按键 EA = 0; Txd_data++; //存储计数结果,并为待发送的数据 TXD_flag = 1;//要发送数据标志位 EA = 1; } void CAN_RXD( void ) interrupt 2 {//接收数据函数,在中断服务程序中调用 uchar data Judge; EA = 0;//关CPU中断 IE0 = 0; Judge = IR; if( Judge 0x01) {//IR.0 = 1 接收中断 RX_buffer[0] = RBSR; RX_buffer[1] = RBSR1; RX_buffer[2] = RBSR2; RX_buffer[3] = RBSR3; RX_buffer[4] = RBSR4; RX_buffer[5] = RBSR5; RX_buffer[6] = RBSR6; RX_buffer[7] = RBSR7; RX_buffer[8] = RBSR8; RX_buffer[9] = RBSR9; RX_buffer[10] = RBSR10; RX_buffer[11] = RBSR11; RX_buffer[12] = RBSR12; RXD_flag = 1;//置有接收标志 CMR = 0X04; Judge = ALC;//释放仲裁随时捕捉寄存器 Judge = ECC;//释放错误代码捕捉寄存器 } IER = 0x01;// .0=1--接收中断使能; EA = 1;//打开CPU中断 } void main(void) { //CPU初始化 SJA_RST = 1;//CAN总线复位管脚,复位无效 SJA_CS = 0;//CAN总线片选有效 EX1 = 1; IT1 = 0;//CAN总线接收中断 IT0 = 1;//外部中断0负边沿触发 EX0 = 1;//打开外部中断0 EA = 1; //打开总中断 SJA_CS = 1;//CAN总线片选无效,使对数据总线的操作不会影响SJA1000。 //CPU初始化 CAN_init( ); //SJA1000初始化,对 SJA1000寄存器的读写是采用外部寄存器寻址方式,所以不需要程序单独控制片选有效无效 _nop_(); _nop_(); while(1) { _nop_(); _nop_(); Rxd_deal();//接收处理程序 Txd_deal();//发送处理程序 led_seg7(1,Txd_data); led_seg7(3,Rxd_data); } } //*********************处理函数*****************************

文档评论(0)

1亿VIP精品文档

相关文档