📄 结点2.lst
字号:
250 C00B RJMP 0x025C
(0335) case 8:
(0336) for (i = 0 ; i < 8 ; i++)
251 2744 CLR R20
252 C004 RJMP 0x0257
(0337) CANMSG = 8;
253 E088 LDI R24,0x8
254 9380 00FA STS 0x00FA,R24
256 9543 INC R20
257 3048 CPI R20,0x8
258 F3D0 BCS 0x0253
(0338) CANCDMOB = 0x48;
259 E488 LDI R24,0x48
25A 9380 00EF STS 0x00EF,R24
(0339) break;
(0340) }
(0341) }
(0342) }
(0343) }
(0344) CHA = CANGIT & 0x7F;
25C 9180 00DA LDS R24,0x00DA
25E 778F ANDI R24,0x7F
25F 9380 0101 STS CHA,R24
(0345) // DISPLAY_LED();
(0346) if (display_mark)
261 9020 0109 LDS R2,display_mark
263 2022 TST R2
264 F041 BEQ 0x026D
(0347) {
(0348) display_mark = FALSE;
265 2422 CLR R2
266 9220 0109 STS display_mark,R2
(0349) DISPLAY_Init(CHA);
268 9100 0101 LDS R16,CHA
26A 2711 CLR R17
26B 940E 02E3 CALL _DISPLAY_Init
(0350) }
(0351) WDR();
26D 95A8 WDR
26E CF48 RJMP 0x01B7
26F 9508 RET
FILE: D:\CANBUS\数据帧\查询\单向通讯\结点2\CAN.C
(0001) //////////////////////////////////////////////////////////
(0002) //单向查询
(0003) //说明:
(0004) // 本程序是结点2,只负责发送
(0005) //////////////////////////////////////////////////////////
(0006)
(0007)
(0008) //-------------------------------------------------------------------
(0009) // 查询发送方式1总结:
(0010) //检测上次发送完成(TXOK)
(0011) //前提条件:CAN_Init()子程序中,必须事先将CANPAGE对象的TXOK位置位
(0012) //-------------------------------------------------------------------
(0013) // IF 上次发送完成(TXOK) THEN
(0014) // (1)、清除TXOK
(0015) // (2)、填写发送数据
(0016) // (3)、启动发送
(0017)
(0018) //-------------------------------------------------------------------
(0019) // 查询发送方式2总结:
(0020) //while (当前发送完成)
(0021) //-------------------------------------------------------------------
(0022) // (1)、填写发送数据
(0023) // (2)、启动发送
(0024) // (3)、while (TXOK)
(0025) // (4)、清除TXOK
(0026)
(0027) #define _CAN_H
(0028) #include "AT90CAN128.H"
(0029)
(0030) uint8 send_Buf[8] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};
(0031)
(0032)
(0033) void CAN_ClrMailBox(void)
(0034) {
(0035) uint8 mob_channel;
(0036) uint8 mob_data;
(0037)
(0038) for (mob_channel = 0 ; mob_channel < 15 ; mob_channel++)
_CAN_ClrMailBox:
mob_channel --> R16
mob_data --> R18
270 2700 CLR R16
271 C023 RJMP 0x0295
(0039) {
(0040) CANPAGE = (mob_channel << 4);
272 2F80 MOV R24,R16
273 708F ANDI R24,0xF
274 9582 SWAP R24
275 9380 00ED STS 0x00ED,R24
(0041) CANIDT4 = 0;
277 2422 CLR R2
278 9220 00F0 STS 0x00F0,R2
(0042) CANIDT3 = 0;
27A 9220 00F1 STS 0x00F1,R2
(0043) CANIDT2 = 0;
27C 9220 00F2 STS 0x00F2,R2
(0044) CANIDT1 = 0;
27E 9220 00F3 STS 0x00F3,R2
(0045) CANIDM4 = 0;
280 9220 00F4 STS 0x00F4,R2
(0046) CANIDM3 = 0;
282 9220 00F5 STS 0x00F5,R2
(0047) CANIDM2 = 0;
284 9220 00F6 STS 0x00F6,R2
(0048) CANIDM1 = 0;
286 9220 00F7 STS 0x00F7,R2
(0049) CANSTMOB = 0;
288 9220 00EE STS 0x00EE,R2
(0050) CANCDMOB = 0;
28A 9220 00EF STS 0x00EF,R2
(0051) for (mob_data = 0; mob_data < 8; mob_data++)
28C 2722 CLR R18
28D C004 RJMP 0x0292
(0052) CANMSG = 0;
28E 2422 CLR R2
28F 9220 00FA STS 0x00FA,R2
291 9523 INC R18
292 3028 CPI R18,0x8
293 F3D0 BCS 0x028E
294 9503 INC R16
295 300F CPI R16,0xF
296 F2D8 BCS 0x0272
297 9508 RET
(0053) }
(0054) }
(0055)
(0056)
(0057) void CAN_Init(void)
(0058) {
(0059) CAN_SOFT_RESET();
_CAN_Init:
298 E081 LDI R24,1
299 9380 00D8 STS 0x00D8,R24
(0060) while (CANGSTA & (1 << ENFG));
29B 9020 00D9 LDS R2,0x00D9
29D FC22 SBRC R2,2
29E CFFC RJMP 0x029B
(0061) CAN_ClrMailBox();
29F DFD0 RCALL _CAN_ClrMailBox
(0062) CANBT1 = 0x02;
2A0 E082 LDI R24,2
2A1 9380 00E2 STS 0x00E2,R24
(0063) CANBT2 = 0x04;
2A3 E084 LDI R24,4
2A4 9380 00E3 STS 0x00E3,R24
(0064) CANBT3 = 0x13;
2A6 E183 LDI R24,0x13
2A7 9380 00E4 STS 0x00E4,R24
(0065) CANTCON = 0xFF;
2A9 EF8F LDI R24,0xFF
2AA 9380 00E5 STS 0x00E5,R24
(0066) CANPAGE = 0x00;
2AC 2422 CLR R2
2AD 9220 00ED STS 0x00ED,R2
(0067) CANSTMOB = 0x00;
2AF 9220 00EE STS 0x00EE,R2
(0068) CANIDT4 = 0x00;
2B1 9220 00F0 STS 0x00F0,R2
(0069) CANIDT3 = 0x00;
2B3 9220 00F1 STS 0x00F1,R2
(0070) CANIDT2 = 0x40;
2B5 E480 LDI R24,0x40
2B6 9380 00F2 STS 0x00F2,R24
(0071) CANIDT1 = 0x02;
2B8 E082 LDI R24,2
2B9 9380 00F3 STS 0x00F3,R24
(0072) CANSTMOB = BIT(TXOK);
2BB E480 LDI R24,0x40
2BC 9380 00EE STS 0x00EE,R24
(0073) CAN_START();
2BE 9180 00D8 LDS R24,0x00D8
2C0 6082 ORI R24,2
2C1 9380 00D8 STS 0x00D8,R24
(0074) while (!(CANGSTA & (1 << ENFG)));
2C3 9020 00D9 LDS R2,0x00D9
2C5 FE22 SBRS R2,2
2C6 CFFC RJMP 0x02C3
2C7 9508 RET
_Separate_Integer_Of_Bit:
Q --> R10
Array --> R14
num --> R12
2C8 940E 0362 CALL push_xgset00FC
2CA 0179 MOVW R14,R18
2CB 0168 MOVW R12,R16
FILE: D:\CANBUS\数据帧\查询\单向通讯\结点2\DISPLAY.C
(0001) #include "AT90CAN128.H"
(0002)
(0003) uint8 dis[2];
(0004) const uint8 NUMBER_ROM[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
(0005)
(0006) void Separate_Integer_Of_Bit(int16 num,uint8 *Array)
(0007) {
(0008) int8 *Q = Array;
2CC 0157 MOVW R10,R14
(0009)
(0010) num %= 100;
2CD E624 LDI R18,0x64
2CE E030 LDI R19,0
2CF 0186 MOVW R16,R12
2D0 940E 0312 CALL mod16s
2D2 0168 MOVW R12,R16
(0011) *Q++ = num / 10;
2D3 E02A LDI R18,0xA
2D4 E030 LDI R19,0
2D5 940E 0316 CALL div16s
2D7 01F5 MOVW R30,R10
2D8 9301 ST R16,Z+
2D9 015F MOVW R10,R30
(0012) *Q = num % 10;
2DA E02A LDI R18,0xA
2DB E030 LDI R19,0
2DC 0186 MOVW R16,R12
2DD 940E 0312 CALL mod16s
2DF 01F5 MOVW R30,R10
2E0 8300 STD Z+0,R16
2E1 940C 034C JMP pop_xgset00FC
_DISPLAY_Init:
i --> Y,+1
digit --> Y,+0
num --> R10
2E3 92AA ST R10,-Y
2E4 92BA ST R11,-Y
2E5 0158 MOVW R10,R16
2E6 9722 SBIW R28,2
(0013) }
(0014)
(0015)
(0016) ///////////////////////////////////////////////////////////////////////////////////////////////
(0017) //1.dot=0 无小数点 2.dot=1 小数点在十位数 3.dot=2 小数点在百位数 4.dot=3 小数点在千位数
(0018) ///////////////////////////////////////////////////////////////////////////////////////////////
(0019) void DISPLAY_Init(int16 num)
(0020) {
(0021) uint8 i;
(0022) uint8 digit[2];
(0023)
(0024) Separate_Integer_Of_Bit(num,digit);
2E7 019E MOVW R18,R28
2E8 0185 MOVW R16,R10
2E9 DFDE RCALL _Separate_Integer_Of_Bit
(0025) if (digit[0] > 0)
2EA E080 LDI R24,0
2EB 8028 LDD R2,Y+0
2EC 1582 CP R24,R2
2ED F440 BCC 0x02F6
(0026) digit[0] = NUMBER_ROM[digit[0]];
2EE E984 LDI R24,0x94
2EF E090 LDI R25,0
2F0 2DE2 MOV R30,R2
2F1 27FF CLR R31
2F2 0FE8 ADD R30,R24
2F3 1FF9 ADC R31,R25
2F4 9026 ELPM R2,0(Z)
2F5 8228 STD Y+0,R2
(0027) digit[1] = NUMBER_ROM[digit[1]];
2F6 E984 LDI R24,0x94
2F7 E090 LDI R25,0
2F8 81E9 LDD R30,Y+1
2F9 27FF CLR R31
2FA 0FE8 ADD R30,R24
2FB 1FF9 ADC R31,R25
2FC 9026 ELPM R2,1(Z)
2FD 8229 STD Y+1,R2
(0028) OS_ENTER_CRITICAL();
2FE 94F8 BCLR 7
(0029) dis[0] = digit[0];
2FF 8028 LDD R2,Y+0
300 9220 0116 STS dis,R2
(0030) dis[1] = digit[1];
302 8029 LDD R2,Y+1
303 9220 0117 STS dis+1,R2
(0031) OS_EXIT_CRITICAL();
305 9478 BSET 7
306 9622 ADIW R28,2
307 90B9 LD R11,Y+
308 90A9 LD R10,Y+
309 9508 RET
(0032) }
(0033)
(0034)
(0035) uint8 DISPLAY_CODE(uint8 ptr)
(0036) {
(0037) return (dis[ptr]);
FILE: <library>
_DISPLAY_CODE:
ptr --> R16
30A E186 LDI R24,0x16
30B E091 LDI R25,1
30C 2FE0 MOV R30,R16
30D 27FF CLR R31
30E 0FE8 ADD R30,R24
30F 1FF9 ADC R31,R25
310 8100 LDD R16,Z+0
311 9508 RET
mod16s:
312 9468 BSET 6
313 92DA ST R13,-Y
314 2ED1 MOV R13,R17
315 C004 RJMP 0x031A
div16s:
316 94E8 BCLR 6
317 92DA ST R13,-Y
318 2ED1 MOV R13,R17
319 26D3 EOR R13,R19
31A FF17 SBRS R17,7
31B C004 RJMP 0x0320
31C 9510 COM R17
31D 9500 COM R16
31E 5F0F SUBI R16,0xFF
31F 4F1F SBCI R17,0xFF
320 FF37 SBRS R19,7
321 C004 RJMP 0x0326
322 9530 COM R19
323 9520 COM R18
324 5F2F SUBI R18,0xFF
325 4F3F SBCI R19,0xFF
326 940E 0333 CALL xdiv16u
328 FED7 SBRS R13,7
329 C004 RJMP 0x032E
32A 9510 COM R17
32B 9500 COM R16
32C 5F0F SUBI R16,0xFF
32D 4F1F SBCI R17,0xFF
32E 90D9 LD R13,Y+
32F 9508 RET
mod16u:
330 9468 BSET 6
331 C001 RJMP xdiv16u
div16u:
332 94E8 BCLR 6
xdiv16u:
333 92EA ST R14,-Y
334 92FA ST R15,-Y
335 938A ST R24,-Y
336 24EE CLR R14
337 24FF CLR R15
338 E180 LDI R24,0x10
339 0F00 LSL R16
33A 1F11 ROL R17
33B 1CEE ROL R14
33C 1CFF ROL R15
33D 16E2 CP R14,R18
33E 06F3 CPC R15,R19
33F F018 BCS 0x0343
340 1AE2 SUB R14,R18
341 0AF3 SBC R15,R19
342 9503 INC R16
343 958A DEC R24
344 F7A1 BNE 0x0339
345 F416 BRTC 0x0348
346 2D0E MOV R16,R14
347 2D1F MOV R17,R15
348 9189 LD R24,Y+
349 90F9 LD R15,Y+
34A 90E9 LD R14,Y+
34B 9508 RET
pop_xgset00FC:
34C 90A9 LD R10,Y+
34D 90B9 LD R11,Y+
34E 90C9 LD R12,Y+
34F 90D9 LD R13,Y+
350 90E9 LD R14,Y+
351 90F9 LD R15,Y+
352 9508 RET
pop_xgsetF0FC:
353 90A9 LD R10,Y+
354 90B9 LD R11,Y+
355 90C9 LD R12,Y+
356 90D9 LD R13,Y+
357 90E9 LD R14,Y+
358 90F9 LD R15,Y+
359 9149 LD R20,Y+
35A 9159 LD R21,Y+
35B 9169 LD R22,Y+
35C 9179 LD R23,Y+
35D 9508 RET
push_xgsetF0FC:
35E 937A ST R23,-Y
35F 936A ST R22,-Y
push_xgset30FC:
360 935A ST R21,-Y
361 934A ST R20,-Y
push_xgset00FC:
362 92FA ST R15,-Y
363 92EA ST R14,-Y
push_xgset003C:
364 92DA ST R13,-Y
365 92CA ST R12,-Y
366 92BA ST R11,-Y
367 92AA ST R10,-Y
368 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -