📄 can_receive.lst
字号:
C51 COMPILER V7.06 CAN_RECEIVE 05/15/2008 00:51:25 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE CAN_RECEIVE
OBJECT MODULE PLACED IN D:\C51_TEST\INFENION\CAN\CAN_RECEIVE.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D:\C51_TEST\INFENION\CAN\CAN_RECEIVE.C DB SB OE
stmt level source
1 #include<XC886CLM.H>
2 #include<can.h>
3 //#define _can_0_
4 void can_write(uword addr,ulong value)
5 {
6 1 CAN_ADL=(addr>>2)&0xff;
7 1 CAN_ADH=(addr>>10)&0x0f;
8 1 CAN_DATA0=value&0xff;
9 1 CAN_DATA1=(value>>8)&0xff;
10 1 CAN_DATA2=(value>>16)&0xff;
11 1 CAN_DATA3=(value>>24)&0xff;
12 1 CAN_ADCON=0xf1;
13 1 while(BSY==1);
14 1 //BSY=0;
15 1 }
16 //设置相应位
17 void can_set(uword addr,uword value)
18 {
19 1 CAN_ADL=(addr>>2)&0xff;
20 1 CAN_ADH=(addr>>10)&0x0f;
21 1 CAN_DATA2=value&0xff;
22 1 CAN_DATA3=(value>>8)&0xff;
23 1 V2=1;
24 1 V3=1;
25 1 RWEN=1;
26 1 while(BSY==1);
27 1
28 1 }
29 void can_res(uword addr,uword value)
30 {
31 1 CAN_ADL=(addr>>2)&0xff;
32 1 CAN_ADH=(addr>>10)&0x0f;
33 1 CAN_DATA0=value&0xff;
34 1 CAN_DATA1=(value>>8)&0xff;
35 1 V0=1;
36 1 V1=1;
37 1 RWEN=1;
38 1 while(BSY==1);
39 1
40 1 }
41
42 //置位
43 void set_bit(uword addr,uchar bitnum,uchar value)
44 {
45 1 uchar i=1;
46 1 //can_read(addr);
47 1 CAN_ADL=(addr>>2)&0xff;
48 1 CAN_ADH=(addr>>10)&0x0f;
49 1 if(bitnum<8) {
50 2
51 2 if(value)
52 2 CAN_DATA0|=(i<<bitnum);
53 2 else
54 2 CAN_DATA0&=~(i<<bitnum);
55 2 V0=1;
C51 COMPILER V7.06 CAN_RECEIVE 05/15/2008 00:51:25 PAGE 2
56 2 }
57 1 else if(bitnum>=8&&bitnum<16)
58 1 {
59 2
60 2 if(value)
61 2 CAN_DATA1|=(i<<(bitnum-8));
62 2 else
63 2 CAN_DATA1&=~(i<<(bitnum-8));
64 2 V1=1;
65 2 }
66 1 else if(bitnum>=16&&bitnum<24)
67 1 {
68 2
69 2 if(value)
70 2 CAN_DATA2|=(i<<(bitnum-16));
71 2 else
72 2 CAN_DATA2&=~(i<<(bitnum-16));
73 2 V2=1;
74 2 }
75 1 else if(bitnum>=24&&bitnum<32)
76 1 {
77 2
78 2 if(value)
79 2 CAN_DATA3|=(i<<(bitnum-24));
80 2 else
81 2 CAN_DATA3&=~(i<<(bitnum-24));
82 2 V3=1;
83 2 }
84 1
85 1 RWEN=1;
86 1 while(BSY==1);
87 1 }
88
89
90 P3_init1()
91 {
92 1 PORT_PAGE = 0x00;
93 1 P3_DIR = 0xFF; // all output
94 1
95 1
96 1 PORT_PAGE = 0x03;
97 1 P3_OD = 0x00; // normal mode
98 1 PORT_PAGE = 0x01;
99 1 P3_PUDSEL = 0xFF; // pull-up
100 1 P3_PUDEN = 0x01; // pull-up disable
101 1 PORT_PAGE = 0x02;
102 1 P3_ALTSEL0 = 0x00;
103 1 P3_ALTSEL1 = 0x00; // normal GPIO
104 1 }
105
106
107 //reg 0 2 4 8 选择写那个寄存器
108 void can_write_0(uword addr,uchar value,uchar reg)
109 {
110 1 uchar i=1;
111 1 CAN_ADL=(addr>>2)&0xff;
112 1 CAN_ADH=(addr>>10)&0x0f;
113 1 switch (reg)
114 1 {
115 2 case 0:
116 2 V0=1;
117 2 CAN_DATA0=value;break;
C51 COMPILER V7.06 CAN_RECEIVE 05/15/2008 00:51:25 PAGE 3
118 2 case 1:
119 2 V1=1;
120 2 CAN_DATA1=value;break;
121 2 case 2:
122 2 V2=1;
123 2 CAN_DATA2=value;break;
124 2 case 3:
125 2 V3=1;
126 2 CAN_DATA3=value;break;
127 2
128 2 }
129 1 AUAD=0X01;
130 1 RWEN=1;
131 1 while(BSY==1);
132 1 }
133
134
135 void can_read(uword addr)
136 {
137 1 CAN_ADL=(addr>>2)&0xff;
138 1 CAN_ADH=(addr>>10)&0x0f;
139 1 RWEN=0;
140 1 while(BSY==1);
141 1 // BSY=0;
142 1 }
143
144 char read_datalen()
145 {
146 1 can_read(MOFCR0);
147 1 return CAN_DATA3;
148 1 }
149 //读取相应位
150 uchar read_bit(uword addr,uchar bitnum)
151 {
152 1 uchar i=1;
153 1 //can_read(addr);
154 1 CAN_ADL=(addr>>2)&0xff;
155 1 CAN_ADH=(addr>>10)&0x0f;
156 1 RWEN=0;
157 1 while(BSY==1);
158 1 if(bitnum<8) {
159 2 //V0=1;
160 2 return CAN_DATA0&(i<<bitnum) ;
161 2 }
162 1 else if(bitnum>=8&&bitnum<16)
163 1 {
164 2 //V1=1;
165 2 return CAN_DATA1&(i<<(bitnum-8));
166 2
167 2 }
168 1 else if(bitnum>=16&&bitnum<24)
169 1 {
170 2 //V2=1;
171 2 return CAN_DATA2&(i<<(bitnum-16));
172 2 }
173 1 else if(bitnum>=24&&bitnum<32)
174 1 {
175 2 //V3=1;
176 2 return CAN_DATA3&(i<<(bitnum-24));
177 2 }
178 1 }
179
C51 COMPILER V7.06 CAN_RECEIVE 05/15/2008 00:51:25 PAGE 4
180
181 void write_pancom(uchar pancmd,uchar panar1 ,uchar panar2)
182 {
183 1 CAN_ADL=(PANCTR>>2)&0xff;
184 1 CAN_ADH=(PANCTR>>10)&0x0f;
185 1 CAN_DATA0=pancmd;
186 1 CAN_DATA2=panar1;
187 1 CAN_DATA3=panar2;
188 1 CAN_ADCON=0XD5;
189 1 while(BSY==1);
190 1 while(read_bit(PANCTR,0X08)!=0);
191 1 }
192
193
194 void can1_init()
195 {
196 1
197 1 //节点1控制
198 1 //漏极开路选择
199 1 PORT_PAGE = 0x03;
200 1 P1_OD = 0x00;
201 1 PORT_PAGE = 0x00;
202 1 //1.3out,1.4in
203 1 P1_DIR=0x08;
204 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -