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

📄 结点1.lst

📁 不可多得的atmel公司canbus通讯程序(at90can128)
💻 LST
📖 第 1 页 / 共 3 页
字号:
     11E 2422      CLR	R2
     11F 9220 0100 STS	CS,R2
(0184) 	switch (CS)
     121 9140 0100 LDS	R20,CS
     123 2755      CLR	R21
     124 3040      CPI	R20,0
     125 0745      CPC	R20,R21
     126 F029      BEQ	0x012C
     127 3041      CPI	R20,1
     128 E0E0      LDI	R30,0
     129 075E      CPC	R21,R30
     12A F021      BEQ	0x012F
     12B C005      RJMP	0x0131
(0185) 	{
(0186) 		case 0:
(0187) 			CS2_OFF();
     12C 9A46      SBI	0x08,6
(0188) 		 	CS1_ON();
     12D 9847      CBI	0x08,7
(0189) 		    break;
     12E C002      RJMP	0x0131
(0190) 		case 1:
(0191) 		   	CS1_OFF();
     12F 9A47      SBI	0x08,7
(0192) 		 	CS2_ON();
     130 9846      CBI	0x08,6
(0193) 			break;
(0194) 	}  		   
(0195)  	PORTA = ~ExChange(DISPLAY_CODE(CS));
     131 9100 0100 LDS	R16,CS
     133 940E 02E1 CALL	_DISPLAY_CODE
     135 DF7E      RCALL	_ExChange
     136 2E20      MOV	R2,R16
     137 9420      COM	R2
     138 B822      OUT	0x02,R2
     139 9159      LD	R21,Y+
     13A 9149      LD	R20,Y+
     13B 9009      LD	R0,Y+
     13C BE0F      OUT	0x3F,R0
     13D 91F9      LD	R31,Y+
     13E 91E9      LD	R30,Y+
     13F 91B9      LD	R27,Y+
     140 91A9      LD	R26,Y+
     141 9199      LD	R25,Y+
     142 9189      LD	R24,Y+
     143 9139      LD	R19,Y+
     144 9129      LD	R18,Y+
     145 9119      LD	R17,Y+
     146 9109      LD	R16,Y+
     147 9099      LD	R9,Y+
     148 9089      LD	R8,Y+
     149 9079      LD	R7,Y+
     14A 9069      LD	R6,Y+
     14B 9059      LD	R5,Y+
     14C 9049      LD	R4,Y+
     14D 9039      LD	R3,Y+
     14E 9029      LD	R2,Y+
     14F 9019      LD	R1,Y+
     150 9009      LD	R0,Y+
     151 9518      RETI
_TIMER2_COMP_ISR:
     152 922A      ST	R2,-Y
     153 938A      ST	R24,-Y
     154 939A      ST	R25,-Y
     155 B62F      IN	R2,0x3F
     156 922A      ST	R2,-Y
(0196) }
(0197) 
(0198) 
(0199) #pragma interrupt_handler TIMER2_COMP_ISR:iv_TIMER2_COMP
(0200) void TIMER2_COMP_ISR(void)
(0201) {
(0202) 	if (!send_mark)
     157 9020 0107 LDS	R2,send_mark
     159 2022      TST	R2
     15A F469      BNE	0x0168
(0203) 	{
(0204) 		send_time++;
     15B 9180 0109 LDS	R24,send_time
     15D 5F8F      SUBI	R24,0xFF
     15E 9380 0109 STS	send_time,R24
(0205) 		if (send_time >= 100)
     160 3684      CPI	R24,0x64
     161 F030      BCS	0x0168
(0206) 		{
(0207) 			send_mark = TRUE;
     162 E081      LDI	R24,1
     163 9380 0107 STS	send_mark,R24
(0208) 			send_time = 0;
     165 2422      CLR	R2
     166 9220 0109 STS	send_time,R2
(0209) 		}
(0210) 	}
(0211) 	if (!display_mark)
     168 9020 0108 LDS	R2,display_mark
     16A 2022      TST	R2
     16B F469      BNE	0x0179
(0212) 	{
(0213) 			display_time++;
     16C 9180 010A LDS	R24,display_time
     16E 5F8F      SUBI	R24,0xFF
     16F 9380 010A STS	display_time,R24
(0214) 			if (display_time >= 25)
     171 3189      CPI	R24,0x19
     172 F030      BCS	0x0179
(0215) 			{
(0216) 			    display_time = 0;
     173 2422      CLR	R2
     174 9220 010A STS	display_time,R2
(0217) 				display_mark = TRUE;
     176 E081      LDI	R24,1
     177 9380 0108 STS	display_mark,R24
(0218) 			}
(0219) 		}
     179 9029      LD	R2,Y+
     17A BE2F      OUT	0x3F,R2
     17B 9199      LD	R25,Y+
     17C 9189      LD	R24,Y+
     17D 9029      LD	R2,Y+
     17E 9518      RETI
(0220) }
(0221) 
(0222) 
(0223) void CHA_Init(void)
(0224) {
(0225) 		CHA++;
_CHA_Init:
     17F 9180 0101 LDS	R24,CHA
     181 5F8F      SUBI	R24,0xFF
     182 9380 0101 STS	CHA,R24
(0226) 		if (CHA >= 100)
     184 9180 0101 LDS	R24,CHA
     186 3684      CPI	R24,0x64
     187 F018      BCS	0x018B
(0227) 			CHA = 0;
     188 2422      CLR	R2
     189 9220 0101 STS	CHA,R2
     18B 9508      RET
(0228) }
(0229) 
(0230) void main(void)
(0231) {
(0232) 	uint8 i,len;
(0233) 
(0234) 	CLI();
_main:
  len                  --> R22
  i                    --> R20
     18C 94F8      BCLR	7
(0235) 	PORT_Init();
     18D DEEB      RCALL	_PORT_Init
(0236) 	TIMER0_Init();	 
     18E DF02      RCALL	_TIMER0_Init
(0237) 	TIMER2_Init();	 
     18F DF0F      RCALL	_TIMER2_Init
(0238) 	USART1_Init();
     190 940E 0250 CALL	_USART1_Init
(0239) 	TJA1040_DISABLE();
     192 9A5C      SBI	0x0B,4
(0240) 	NOP();
     193 0000      NOP
(0241) 	NOP();   
     194 0000      NOP
(0242) 	TJA1040_ENABLE();
     195 985C      CBI	0x0B,4
(0243) 	NOP();
     196 0000      NOP
(0244) 	NOP();
     197 0000      NOP
(0245) 	CAN_Init();
     198 940E 0219 CALL	_CAN_Init
(0246) 	Watchdog_Init();
     19A DF14      RCALL	_Watchdog_Init
(0247) 	SEI();
     19B 9478      BSET	7
     19C C052      RJMP	0x01EF
(0248) /*
(0249)   00000000:  02 41 00 02 02 00 00 00 00 00 00 00 00 00 00 00   .A..............
(0250)   00000010:  02 42 00 03 03 03 00 00 00 00 00 00 00 00 00 00   .B..............
(0251)   00000020:  02 43 00 04 04 04 04 00 00 00 00 00 00 00 00 00   .C..............
(0252)   00000030:  02 44 00 05 05 05 05 05 00 00 00 00 00 00 00 00   .D..............
(0253)   00000040:  02 45 00 06 06 06 06 06 06 00 00 00 00 00 00 00   .E..............
(0254)   00000050:  02 46 00 07 07 07 07 07 07 07 00 00 00 00 00 00   .F..............
(0255)   00000060:  02 47 00 08 08 08 08 08 08 08 08 00 00 00 00 00   .G..............
(0256)   00000070:  02 48 00 01 00 00 00 00 00 00 00 00 00 00 00 00   .H..............
(0257)   00000080:  02 41 00 02 02 00 00 00 00 00 00 00 00 00 00 00   .A..............
(0258)   00000090:  02 42 00 03 03 03 00 00 00 00 00 00 00 00 00 00   .B..............
(0259)   000000A0:  02 43 00 04 04 04 04 00 00 00 00 00 00 00 00 00   .C..............
(0260)   000000B0:  02 44 00 05 05 05 05 05 00 00 00 00 00 00 00 00   .D..............
(0261)   000000C0:  02 45 00 06 06 06 06 06 06 00 00 00 00 00 00 00   .E..............
(0262)   000000D0:  02 46 00 07 07 07 07 07 07 07 00 00 00 00 00 00   .F..............
(0263)   000000E0:  02 47 00 08 08 08 08 08 08 08 08 00 00 00 00 00   .G..............
(0264)   000000F0:  02 48 00 01 00 00 00 00 00 00 00 00 00 00 00 00   .H..............
(0265)   00000100:  02 41 00 02 02 00 00 00 00 00 00 00 00 00 00 00   .A..............
(0266)   00000110:  02 42 00 03 03 03 00 00 00 00 00 00 00 00 00 00   .B..............
(0267)   00000120:  02 43 00 04 04 04 04 00 00 00 00 00 00 00 00 00   .C..............
(0268)   00000130:  02 44 00 05 05 05 05 05 00 00 00 00 00 00 00 00   .D..............
(0269)   00000140:  02 45 00 06 06 06 06 06 06 00 00 00 00 00 00 00   .E..............
(0270)   00000150:  02 46 00 07 07 07 07 07 07 07 00 00 00 00 00 00   .F..............
(0271)   00000160:  02 47 00 08 08 08 08 08 08 08 08 00 00 00 00 00   .G..............
(0272)   00000170:  02 48 00 01 00 00 00 00 00 00 00 00 00 00 00 00   .H..............
(0273)   00000180:  02 41 00 02 02 00 00 00 00 00 00 00 00 00 00 00   .A..............
(0274)   00000190:  02 42 00 03 03 03 00 00 00 00 00 00 00 00 00 00   .B..............
(0275)   000001A0:  02 43 00 04 04 04 04 00 00 00 00 00 00 00 00 00   .C..............
(0276)   000001B0:  02 44 00 05 05 05 05 05 00 00 00 00 00 00 00 00   .D..............
(0277)   000001C0:  02 45 00 06 06 06 06 06 06 00 00 00 00 00 00 00   .E..............
(0278)   000001D0:  02 46 00 07 07 07 07 07 07 07 00 00 00 00 00 00   .F..............
(0279)   000001E0:  02 47 00 08 08 08 08 08 08 08 08 00 00 00 00 00   .G..............
(0280)   000001F0:  02 48 00 01 00 00 00 00 00 00 00 00 00 00 00 00   .H..............
(0281)   00000200:  02 41 00 02 02 00 00 00 00 00 00 00 00 00 00 00   .A..............
(0282) */  
(0283) 	while (1)
(0284) 	{
(0285) 		CANPAGE = 0x00;
     19D 2422      CLR	R2
     19E 9220 00ED STS	0x00ED,R2
(0286) 		if (CANSTMOB & (1 << RXOK))
     1A0 9020 00EE LDS	R2,0x00EE
     1A2 FE25      SBRS	R2,5
     1A3 C03D      RJMP	0x01E1
(0287) 		{
(0288)     		CANSTMOB &= ~(1 << RXOK);
     1A4 9180 00EE LDS	R24,0x00EE
     1A6 7D8F      ANDI	R24,0xDF
     1A7 9380 00EE STS	0x00EE,R24
(0289) 			for (i = 0 ; i < 16 ; i++)
     1A9 2744      CLR	R20
     1AA C009      RJMP	0x01B4
(0290) 				rec_Buf[i] = 0x00;
     1AB E08D      LDI	R24,0xD
     1AC E091      LDI	R25,1
     1AD 2FE4      MOV	R30,R20
     1AE 27FF      CLR	R31
     1AF 0FE8      ADD	R30,R24
     1B0 1FF9      ADC	R31,R25
     1B1 2422      CLR	R2
     1B2 8220      STD	Z+0,R2
     1B3 9543      INC	R20
     1B4 3140      CPI	R20,0x10
     1B5 F3A8      BCS	0x01AB
(0291) 			rec_Buf[0] = CANIDT1;
     1B6 9020 00F3 LDS	R2,0x00F3
     1B8 9220 010D STS	rec_Buf,R2
(0292) 			rec_Buf[1] = CANIDT2;
     1BA 9020 00F2 LDS	R2,0x00F2
     1BC 9220 010E STS	rec_Buf+1,R2
(0293) 			rec_Buf[2] = CANIDT4;
     1BE 9020 00F0 LDS	R2,0x00F0
     1C0 9220 010F STS	rec_Buf+2,R2
(0294) 			if (rec_Buf[2] & 0x02)
     1C2 FE21      SBRS	R2,1
     1C3 C004      RJMP	0x01C8
(0295) 				rec_Buf[2] = 1;		//	remote frame
     1C4 E081      LDI	R24,1
     1C5 9380 010F STS	rec_Buf+2,R24
     1C7 C003      RJMP	0x01CB
(0296) 			else
(0297) 				rec_Buf[2] = 0;		//	data frame
     1C8 2422      CLR	R2
     1C9 9220 010F STS	rec_Buf+2,R2
(0298) 			len = CANCDMOB & 0x0F;
     1CB 9160 00EF LDS	R22,0x00EF
     1CD 706F      ANDI	R22,0xF
(0299) 			for (i = 0 ; i < len ; i++)
     1CE 2744      CLR	R20
     1CF C00A      RJMP	0x01DA
(0300) 				rec_Buf[3+i] = CANMSG;
     1D0 E180      LDI	R24,0x10
     1D1 E091      LDI	R25,1
     1D2 2FE4      MOV	R30,R20
     1D3 27FF      CLR	R31
     1D4 0FE8      ADD	R30,R24
     1D5 1FF9      ADC	R31,R25
     1D6 9020 00FA LDS	R2,0x00FA
     1D8 8220      STD	Z+0,R2
     1D9 9543      INC	R20
     1DA 1746      CP	R20,R22
     1DB F3A0      BCS	0x01D0
(0301) 			USART1_Begin_Send();
     1DC 940E 0261 CALL	_USART1_Begin_Send
(0302) 			CANCDMOB = 0x88;
     1DE E888      LDI	R24,0x88
     1DF 9380 00EF STS	0x00EF,R24
(0303)         } 
(0304) 		CHA = CANGIT & 0x7F;
     1E1 9180 00DA LDS	R24,0x00DA
     1E3 778F      ANDI	R24,0x7F
     1E4 9380 0101 STS	CHA,R24
(0305) //		DISPLAY_LED();
(0306) //		if (display_mark)
(0307) 		{	
(0308) 			display_mark = FALSE;
     1E6 2422      CLR	R2
     1E7 9220 0108 STS	display_mark,R2
(0309) 			DISPLAY_Init(CHA);
     1E9 9100 0101 LDS	R16,CHA
     1EB 2711      CLR	R17
     1EC 940E 02BA CALL	_DISPLAY_Init
(0310) 		}
(0311) 		WDR();
     1EE 95A8      WDR
     1EF CFAD      RJMP	0x019D
     1F0 9508      RET
FILE: D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\CAN.C
(0001) //////////////////////////////////////////////////////////
(0002) //单向查询
(0003) //说明:
(0004) //		本程序是结点1,只负责接收
(0005) //////////////////////////////////////////////////////////
(0006) #define _CAN_H
(0007) #include "AT90CAN128.H"
(0008) 
(0009) #define SIT0		0
(0010) #define SIT1		1
(0011) #define SIT2		2
(0012) #define SIT3		3
(0013) #define SIT4		4
(0014) #define SIT5		5
(0015) #define SIT6		6
(0016) #define SIT7		7
(0017) 
(0018) void CAN_ClrMailBox(void) 
(0019) { 
(0020) 	uint8 mob_channel;
(0021) 	uint8 mob_data; 
(0022) 
(0023) 	for (mob_channel = 0 ; mob_channel < 15 ; mob_channel++)
_CAN_ClrMailBox:
  mob_channel          --> R16
  mob_data             --> R18
     1F1 2700      CLR	R16
     1F2 C023      RJMP	0x0216
(0024) 	{
(0025) 		CANPAGE = (mob_channel << 4);
     1F3 2F80      MOV	R24,R16
     1F4 708F      ANDI	R24,0xF
     1F5 9582      SWAP	R24
     1F6 9380 00ED STS	0x00ED,R24
(0026) 		CANIDT4        = 0; 
     1F8 2422      CLR	R2
     1F9 9220 00F0 STS	0x00F0,R2
(0027) 		CANIDT3        = 0; 
     1FB 9220 00F1 STS	0x00F1,R2
(0028) 		CANIDT2        = 0; 
     1FD 9220 00F2 STS	0x00F2,R2
(0029) 		CANIDT1        = 0; 
     1FF 9220 00F3 STS	0x00F3,R2
(0030) 		CANIDM4        = 0; 
     201 9220 00F4 STS	0x00F4,R2
(0031) 		CANIDM3        = 0; 
     203 9220 00F5 STS	0x00F5,R2
(0032) 		CANIDM2        = 0; 
     205 9220 00F6 STS	0x00F6,R2
(0033) 		CANIDM1        = 0; 
     207 9220 00F7 STS	0x00F7,R2
(0034) 		CANSTMOB = 0; 
     209 9220 00EE STS	0x00EE,R2
(0035) 		CANCDMOB = 0; 
     20B 9220 00EF STS	0x00EF,R2
(0036) 		for (mob_data = 0; mob_data < 8; mob_data++) 
     20D 2722      CLR	R18
     20E C004      RJMP	0x0213
(0037)    			CANMSG = 0; 
     20F 2422      CLR	R2
     210 9220 00FA STS	0x00FA,R2
     212 9523      INC	R18
     213 3028      CPI	R18,0x8
     214 F3D0      BCS	0x020F
     215 9503      INC	R16
     216 300F      CPI	R16,0xF
     217 F2D8      BCS	0x01F3
     218 9508      RET
(0038) 	}
(0039) } 
(0040) 
(0041) void CAN_Init(void)
(0042) {
(0043) 	uint8 i;
(0044)    
(0045) 	CANGCON = BIT(SWRES);
_CAN_Init:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -