⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 结点2.lst

📁 不可多得的atmel公司canbus通讯程序(at90can128)
💻 LST
📖 第 1 页 / 共 3 页
字号:
     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 + -