📄 can
字号:
C51 COMPILER V8.02 CAN_SHOW 04/21/2009 14:16:07 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE CAN_SHOW
OBJECT MODULE PLACED IN can_show.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE can_show.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
3 //描述:
4 // INT0按键程序+显示程序+CAN收发程序 &
5 // 数码管1-2(从右至左)显示本节点计数结果,数码管3-4显示接收到的数据 &
6 // 十进制显示 &
7 // CAN主要参数: PeliCAN模式,扩展帧EFF模式 &
8 // 29位标示码结构: &
9 // 发送数据结构:计数结果,0x02,0x03,0x04,0x05,0x06,0x07,0x08 &
10 // 接收数据结构: 待显示数据+其它7个字节的数据 &
11 // 本节点的地址: 0x11,0x22,0x33,0x00;可以接收全部节点的数据 &
12 // 目的节点地址:0x01,0x02,0x03,0x00;可以被能接收全部节点数据的节点接收 &
13
14 //提示:如果CAN通讯不正常,会进入一个死循环,显示也不正常
15
16 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
17 //【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! &
18 //【声明】 作者: PIAE小组 &
19
20 #include <reg52.h>
21 #include <intrins.h>
22 #include <can_showdef.h>
23
24 void INT0_Counter( void ) interrupt 0 using 1
25 {//INT0按键为计数按键
26 1 EA = 0;
27 1 Txd_data++; //存储计数结果,并为待发送的数据
28 1 if(Txd_data == 5)
29 1 TXD_flag = 1;//要发送数据标志位
30 1 EA = 1;
31 1 }
32
33 void CAN_RXD( void ) interrupt 2
34 {//接收数据函数,在中断服务程序中调用
35 1
36 1 uchar data Judge;
37 1 EA = 0;//关CPU中断
38 1 IE0 = 0;
39 1
40 1 Judge = IR;
41 1 if( Judge & 0x01)
42 1 {//IR.0 = 1 接收中断
43 2 RX_buffer[0] = RBSR;
44 2 RX_buffer[1] = RBSR1;
45 2 RX_buffer[2] = RBSR2;
46 2 RX_buffer[3] = RBSR3;
47 2 RX_buffer[4] = RBSR4;
48 2 RX_buffer[5] = RBSR5;
49 2 RX_buffer[6] = RBSR6;
50 2 RX_buffer[7] = RBSR7;
51 2 RX_buffer[8] = RBSR8;
52 2 RX_buffer[9] = RBSR9;
53 2 RX_buffer[10] = RBSR10;
54 2 RX_buffer[11] = RBSR11;
55 2 RX_buffer[12] = RBSR12;
C51 COMPILER V8.02 CAN_SHOW 04/21/2009 14:16:07 PAGE 2
56 2 RXD_flag = 1;//置有接收标志
57 2 CMR = 0X04;
58 2 Judge = ALC;//释放仲裁随时捕捉寄存器
59 2 Judge = ECC;//释放错误代码捕捉寄存器
60 2 }
61 1 IER = 0x01;// .0=1--接收中断使能;
62 1 EA = 1;//打开CPU中断
63 1 }
64
65 void main(void)
66 {
67 1 //CPU初始化
68 1 SJA_RST = 1;//CAN总线复位管脚
69 1 SJA_CS = 0;//CAN总线片选有效
70 1 EX1 = 1;
71 1 IT1 = 0;//CAN总线接收中断
72 1 IT0 = 1;//外部中断0负边沿触发
73 1 EX0 = 1;//打开外部中断0
74 1 EA = 1; //打开总中断
75 1 SJA_CS = 1;//CAN总线片选无效,保证数据线上的变化不会影响SJA1000
76 1 //CPU初始化
77 1
78 1 CAN_init( ); //SJA1000初始化,对 SJA1000寄存器的读写是采用外部寄存器寻址方式,所以不需要程序单独控制
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -