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

📄 at90can128.s

📁 不可多得的atmel公司canbus通讯程序(at90can128)
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbfunc e TIMER0_COMP_ISR _TIMER0_COMP_ISR fV
	.even
_TIMER0_COMP_ISR::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R6
	st -y,R7
	st -y,R8
	st -y,R9
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	st -y,R26
	st -y,R27
	st -y,R30
	st -y,R31
	in R0,0x3f
	st -y,R0
	st -y,R20
	st -y,R21
	.dbline -1
	.dbline 180
; }
; 
; 
; #pragma interrupt_handler TIMER0_COMP_ISR:iv_TIMER0_COMP
; void TIMER0_COMP_ISR(void)
; {
	.dbline 181
; 	CS++;
	lds R24,_CS
	subi R24,255    ; addi 1
	sts _CS,R24
	.dbline 182
; 	if (CS > 1)
	ldi R24,1
	lds R2,_CS
	cp R24,R2
	brsh L36
X9:
	.dbline 183
; 		CS = 0;
	clr R2
	sts _CS,R2
L36:
	.dbline 184
; 	switch (CS)
	lds R20,_CS
	clr R21
	cpi R20,0
	cpc R20,R21
	breq L41
X10:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L42
X11:
	xjmp L38
L41:
	.dbline 187
; 	{
; 		case 0:
; 			CS2_OFF();
	sbi 0x8,6
	.dbline 188
; 		 	CS1_ON();
	cbi 0x8,7
	.dbline 189
; 		    break;
	xjmp L39
L42:
	.dbline 191
; 		case 1:
; 		   	CS1_OFF();
	sbi 0x8,7
	.dbline 192
; 		 	CS2_ON();
	cbi 0x8,6
	.dbline 193
; 			break;
L38:
L39:
	.dbline 195
; 	}  		   
;  	PORTA = ~ExChange(DISPLAY_CODE(CS));
	lds R16,_CS
	xcall _DISPLAY_CODE
	xcall _ExChange
	mov R2,R16
	com R2
	out 0x2,R2
	.dbline -2
L35:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ld R0,y+
	out 0x3f,R0
	ld R31,y+
	ld R30,y+
	ld R27,y+
	ld R26,y+
	ld R25,y+
	ld R24,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R9,y+
	ld R8,y+
	ld R7,y+
	ld R6,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	reti
	.dbend
	.area vector(rom, abs)
	.org 36
	jmp _TIMER2_COMP_ISR
	.area text(rom, con, rel)
	.dbfile D:\CANBUS\数据帧\查询\单向通讯\结点1-串口\AT90CAN128.C
	.dbfunc e TIMER2_COMP_ISR _TIMER2_COMP_ISR fV
	.even
_TIMER2_COMP_ISR::
	st -y,R2
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 201
; }
; 
; 
; #pragma interrupt_handler TIMER2_COMP_ISR:iv_TIMER2_COMP
; void TIMER2_COMP_ISR(void)
; {
	.dbline 202
; 	if (!send_mark)
	lds R2,_send_mark
	tst R2
	brne L44
X12:
	.dbline 203
; 	{
	.dbline 204
; 		send_time++;
	lds R24,_send_time
	subi R24,255    ; addi 1
	sts _send_time,R24
	.dbline 205
; 		if (send_time >= 100)
	cpi R24,100
	brlo L46
X13:
	.dbline 206
; 		{
	.dbline 207
; 			send_mark = TRUE;
	ldi R24,1
	sts _send_mark,R24
	.dbline 208
; 			send_time = 0;
	clr R2
	sts _send_time,R2
	.dbline 209
; 		}
L46:
	.dbline 210
; 	}
L44:
	.dbline 211
; 	if (!display_mark)
	lds R2,_display_mark
	tst R2
	brne L48
X14:
	.dbline 212
; 	{
	.dbline 213
; 			display_time++;
	lds R24,_display_time
	subi R24,255    ; addi 1
	sts _display_time,R24
	.dbline 214
; 			if (display_time >= 25)
	cpi R24,25
	brlo L50
X15:
	.dbline 215
; 			{
	.dbline 216
; 			    display_time = 0;
	clr R2
	sts _display_time,R2
	.dbline 217
; 				display_mark = TRUE;
	ldi R24,1
	sts _display_mark,R24
	.dbline 218
; 			}
L50:
	.dbline 219
; 		}
L48:
	.dbline -2
L43:
	.dbline 0 ; func end
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R2,y+
	reti
	.dbend
	.dbfunc e CHA_Init _CHA_Init fV
	.even
_CHA_Init::
	.dbline -1
	.dbline 224
; }
; 
; 
; void CHA_Init(void)
; {
	.dbline 225
; 		CHA++;
	lds R24,_CHA
	subi R24,255    ; addi 1
	sts _CHA,R24
	.dbline 226
; 		if (CHA >= 100)
	lds R24,_CHA
	cpi R24,100
	brlo L53
X16:
	.dbline 227
; 			CHA = 0;
	clr R2
	sts _CHA,R2
L53:
	.dbline -2
L52:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;            len -> R22
;              i -> R20
	.even
_main::
	.dbline -1
	.dbline 231
; }
; 
; void main(void)
; {
	.dbline 234
; 	uint8 i,len;
; 
; 	CLI();
	cli
	.dbline 235
; 	PORT_Init();
	xcall _PORT_Init
	.dbline 236
; 	TIMER0_Init();	 
	xcall _TIMER0_Init
	.dbline 237
; 	TIMER2_Init();	 
	xcall _TIMER2_Init
	.dbline 238
; 	USART1_Init();
	xcall _USART1_Init
	.dbline 239
; 	TJA1040_DISABLE();
	sbi 0xb,4
	.dbline 240
; 	NOP();
	nop
	.dbline 241
; 	NOP();   
	nop
	.dbline 242
; 	TJA1040_ENABLE();
	cbi 0xb,4
	.dbline 243
; 	NOP();
	nop
	.dbline 244
; 	NOP();
	nop
	.dbline 245
; 	CAN_Init();
	xcall _CAN_Init
	.dbline 246
; 	Watchdog_Init();
	xcall _Watchdog_Init
	.dbline 247
; 	SEI();
	sei
	xjmp L57
L56:
	.dbline 284
; /*
;   00000000:  02 41 00 02 02 00 00 00 00 00 00 00 00 00 00 00   .A..............
;   00000010:  02 42 00 03 03 03 00 00 00 00 00 00 00 00 00 00   .B..............
;   00000020:  02 43 00 04 04 04 04 00 00 00 00 00 00 00 00 00   .C..............
;   00000030:  02 44 00 05 05 05 05 05 00 00 00 00 00 00 00 00   .D..............
;   00000040:  02 45 00 06 06 06 06 06 06 00 00 00 00 00 00 00   .E..............
;   00000050:  02 46 00 07 07 07 07 07 07 07 00 00 00 00 00 00   .F..............
;   00000060:  02 47 00 08 08 08 08 08 08 08 08 00 00 00 00 00   .G..............
;   00000070:  02 48 00 01 00 00 00 00 00 00 00 00 00 00 00 00   .H..............
;   00000080:  02 41 00 02 02 00 00 00 00 00 00 00 00 00 00 00   .A..............
;   00000090:  02 42 00 03 03 03 00 00 00 00 00 00 00 00 00 00   .B..............
;   000000A0:  02 43 00 04 04 04 04 00 00 00 00 00 00 00 00 00   .C..............
;   000000B0:  02 44 00 05 05 05 05 05 00 00 00 00 00 00 00 00   .D..............
;   000000C0:  02 45 00 06 06 06 06 06 06 00 00 00 00 00 00 00   .E..............
;   000000D0:  02 46 00 07 07 07 07 07 07 07 00 00 00 00 00 00   .F..............
;   000000E0:  02 47 00 08 08 08 08 08 08 08 08 00 00 00 00 00   .G..............
;   000000F0:  02 48 00 01 00 00 00 00 00 00 00 00 00 00 00 00   .H..............
;   00000100:  02 41 00 02 02 00 00 00 00 00 00 00 00 00 00 00   .A..............
;   00000110:  02 42 00 03 03 03 00 00 00 00 00 00 00 00 00 00   .B..............
;   00000120:  02 43 00 04 04 04 04 00 00 00 00 00 00 00 00 00   .C..............
;   00000130:  02 44 00 05 05 05 05 05 00 00 00 00 00 00 00 00   .D..............
;   00000140:  02 45 00 06 06 06 06 06 06 00 00 00 00 00 00 00   .E..............
;   00000150:  02 46 00 07 07 07 07 07 07 07 00 00 00 00 00 00   .F..............
;   00000160:  02 47 00 08 08 08 08 08 08 08 08 00 00 00 00 00   .G..............
;   00000170:  02 48 00 01 00 00 00 00 00 00 00 00 00 00 00 00   .H..............
;   00000180:  02 41 00 02 02 00 00 00 00 00 00 00 00 00 00 00   .A..............
;   00000190:  02 42 00 03 03 03 00 00 00 00 00 00 00 00 00 00   .B..............
;   000001A0:  02 43 00 04 04 04 04 00 00 00 00 00 00 00 00 00   .C..............
;   000001B0:  02 44 00 05 05 05 05 05 00 00 00 00 00 00 00 00   .D..............
;   000001C0:  02 45 00 06 06 06 06 06 06 00 00 00 00 00 00 00   .E..............
;   000001D0:  02 46 00 07 07 07 07 07 07 07 00 00 00 00 00 00   .F..............
;   000001E0:  02 47 00 08 08 08 08 08 08 08 08 00 00 00 00 00   .G..............
;   000001F0:  02 48 00 01 00 00 00 00 00 00 00 00 00 00 00 00   .H..............
;   00000200:  02 41 00 02 02 00 00 00 00 00 00 00 00 00 00 00   .A..............
; */  
; 	while (1)
; 	{
	.dbline 285
; 		CANPAGE = 0x00;
	clr R2
	sts 237,R2
	.dbline 286
; 		if (CANSTMOB & (1 << RXOK))
	lds R2,238
	sbrs R2,5
	rjmp L59
X17:
	.dbline 287
; 		{
	.dbline 288
;     		CANSTMOB &= ~(1 << RXOK);
	lds R24,238
	andi R24,223
	sts 238,R24
	.dbline 289
; 			for (i = 0 ; i < 16 ; i++)
	clr R20
	xjmp L64
L61:
	.dbline 290
; 				rec_Buf[i] = 0x00;
	ldi R24,<_rec_Buf
	ldi R25,>_rec_Buf
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
L62:
	.dbline 289
	inc R20
L64:
	.dbline 289
	cpi R20,16
	brlo L61
X18:
	.dbline 291
; 			rec_Buf[0] = CANIDT1;
	lds R2,243
	sts _rec_Buf,R2
	.dbline 292
; 			rec_Buf[1] = CANIDT2;
	lds R2,242
	sts _rec_Buf+1,R2
	.dbline 293
; 			rec_Buf[2] = CANIDT4;
	lds R2,240
	sts _rec_Buf+2,R2
	.dbline 294
; 			if (rec_Buf[2] & 0x02)
	sbrs R2,1
	rjmp L67
X19:
	.dbline 295
; 				rec_Buf[2] = 1;		//	remote frame
	ldi R24,1
	sts _rec_Buf+2,R24
	xjmp L68
L67:
	.dbline 297
; 			else
; 				rec_Buf[2] = 0;		//	data frame
	clr R2
	sts _rec_Buf+2,R2
L68:
	.dbline 298
; 			len = CANCDMOB & 0x0F;
	lds R22,239
	andi R22,15
	.dbline 299
; 			for (i = 0 ; i < len ; i++)
	clr R20
	xjmp L75
L72:
	.dbline 300
; 				rec_Buf[3+i] = CANMSG;
	ldi R24,<_rec_Buf+3
	ldi R25,>_rec_Buf+3
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lds R2,250
	std z+0,R2
L73:
	.dbline 299
	inc R20
L75:
	.dbline 299
	cp R20,R22
	brlo L72
X20:
	.dbline 301
; 			USART1_Begin_Send();
	xcall _USART1_Begin_Send
	.dbline 302
; 			CANCDMOB = 0x88;
	ldi R24,136
	sts 239,R24
	.dbline 303
;         } 
L59:
	.dbline 304
; 		CHA = CANGIT & 0x7F;
	lds R24,218
	andi R24,127
	sts _CHA,R24
	.dbline 307
; //		DISPLAY_LED();
; //		if (display_mark)
; 		{	
	.dbline 308
; 			display_mark = FALSE;
	clr R2
	sts _display_mark,R2
	.dbline 309
; 			DISPLAY_Init(CHA);
	lds R16,_CHA
	clr R17
	xcall _DISPLAY_Init
	.dbline 310
; 		}
	.dbline 311
; 		WDR();
	wdr
	.dbline 312
; 	}
L57:
	.dbline 283
	xjmp L56
X21:
	.dbline -2
L55:
	.dbline 0 ; func end
	ret
	.dbsym r len 22 c
	.dbsym r i 20 c
	.dbend
; }
; 
; 
; //熔丝位配置(打勾表示0,不打勾表示1)
; //                 1                              0
; //WDTON	        WDT关闭	                        WDT打开
; //CKDIV8	禁止系统时钟8分频	           允许系统时钟8分频
; //EESAVE	全片擦除时擦除EERROM数据	全片擦除时保留EERROM数据	
; //DWEN	       禁止单线调试					  使能单线调试	
; 
; //BOD检测电平选择:
; //BODLEVEL2..0	BOD门槛电压
; //111	BOD禁止
; //110	1.8V
; //101	2.7V
; //100	4.3V   			   (选择4.3V)
; //其余	保留
; 
; //时钟源选择:
; //系统时钟源	CKSEL3..0
; //低功耗晶振(小振幅)	1111-1000
; //大振幅晶振	0111-0110
; //低频晶振	0101-0100
; //128kHz内部RC振荡	0011
; //可校准内部RC振荡	0010
; //外部时钟	0000
; //保留选项	0001	

⌨️ 快捷键说明

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