📄 can_self.lst
字号:
C51 COMPILER V8.12 CAN_SELF 03/09/2009 20:10:07 PAGE 1
C51 COMPILER V8.12, COMPILATION OF MODULE CAN_SELF
OBJECT MODULE PLACED IN can_self.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE can_self.c DEBUG OBJECTEXTEND
line level source
1
2 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
3 //描述: &
4 // CAN自收发程序 &
-
5 // CAN主要参数: PeliCAN模式,扩展帧EFF模式 &
6 // 29位标示码结构: &
7 // 发送数据结构:计数结果,0x02,0x03,0x04,0x05,0x06,0x07,0x08 &
8 // 接收数据结构: 待显示数据+其它7个字节的数据 &
9 // 本节点的地址: 0x11,0x22,0x33,0x00;可以接收全部节点的数据 &
10 // 目的节点地址:0x01,0x02,0x03,0x00;可以被能接收全部节点数据的节点接收 &
11 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
12 #include <ADUC812.H>
13 #include <stdio.h>
14 #include <intrins.h>
15 #include <can_selfdef.h>
16
17 unsigned char Send_CAN_Info_ID[5]={0x88,0x00,0x00,0x2a,0x00};//扩展帧,8个字节数据,发送数据到ID为0000054
-0的节点
18 unsigned char Send_CAN_Data[8]={0x23,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
19
20 unsigned char RX_buffer[13]; //接收的13个字节数据、
21 //unsigned char TX_buffer[13]={0x88,0x11,0x22,0x33,0x44,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88} ; //接收
-的13个字节数据
22 //unsigned char data rcv_data[8];
23 unsigned char j=0;
24
25 bit flag_sec,rcv_flag,err_flag; //发送,接收,错误中断标志
26
27 extern void CAN_Rx_display(void);
28 extern void CAN_Rx_data( void );
29 /******************************************************************************/
30 /* serial_init: initialize serial interface */
31 /******************************************************************************/
32 void Serial_Init (void)
33 {
34 1 SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
35 1 PCON |= 0x00 ;//SMOD=1
36 1
37 1 TMOD &= 0x0F; /*清TMOD高4位 */
38 1 TMOD |= 0x20 ; //方式控制:GATE=0;C/T=0;M1M0=10; timer 1, mode 2, 8-bit reload
39 1
40 1 TH1 = 0xfd ; //Baud: fosc=11.0592MHz ,9600
41 1 TL1 = 0xfd ;
42 1
43 1 TR1 = 1 ; // 启动timer 1 run
44 1 TI = 1;
45 1 //EA=1;
46 1 //ES = 1;
47 1 }
48
49 char _getkey ()
50 {
51 1 char c;
52 1
C51 COMPILER V8.12 CAN_SELF 03/09/2009 20:10:07 PAGE 2
53 1 while (!RI)
54 1 c = SBUF;
55 1 RI = 0;
56 1 return (c);
57 1 }
58
59 //putchar (basic version): expands '\n' into CR LF */
60 char putchar (char c)
61 {
62 1 if (c == '\n')
63 1 {
64 2 while (!TI);
65 2 TI = 0;
66 2 SBUF = 0x0d;
67 2 }
68 1 while (!TI);
69 1 TI = 0;
70 1 return (SBUF = c);
71 1 }
72
73 ///////////////////////////////////////////////
74 //函数:ex0_int
75 //说明:中断服务程序
76 //入口:无
77 //返回:无
78 ///////////////////////////////////////////////
79 //***********************************************************
80 void ex0_int(void) interrupt 0 using 1
81 {
82 1 if(IR&0x01) //产生了接收中断
83 1 { rcv_flag=1; }
84 1 if(IR&0x04) //产生了错误中断
85 1 { err_flag=1; }
86 1 }
87 ///////////////////////////////////////////////
88 //函数:main
89 //说明:主函数
90 //入口:无
91 //返回:无
92 ///////////////////////////////////////////////
93 void main(void)
94 {
95 1 //CPU初始化
96 1 SJA_RST = 0;//CAN总线复位管脚,复位无效
97 1
98 1 Serial_Init();
99 1 PX0=1; //外部中断0高优先级
100 1 IT0=1; //设置INT0为下降沿中断
101 1 EX0=1; //使能INT0中断
102 1 EA=1;
103 1
104 1 SJA_CS_Point=&CAN_SJA_BaseAdr; //设置SJA1000的片选地址
105 1 printf( "SJA1000 Init Start!\n");
106 1 CAN_init( ); //SJA1000初始化,对 SJA1000寄存器的读写是采用外部寄存器寻址方式,所以不需要程序单独控制
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -