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

📄 can.s

📁 LED显示面板
💻 S
📖 第 1 页 / 共 5 页
字号:
	ldi R31,0
	std z+0,R2
	.dbline 120
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDT+1
	ldi R25,>_CANIDT+1
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,242
	ldi R31,0
	std z+0,R2
	.dbline 121
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDT+2
	ldi R25,>_CANIDT+2
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,241
	ldi R31,0
	std z+0,R2
	.dbline 122
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDT+3
	ldi R25,>_CANIDT+3
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,240
	ldi R31,0
	std z+0,R2
	.dbline 123
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDM
	ldi R25,>_CANIDM
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,247
	ldi R31,0
	std z+0,R2
	.dbline 124
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDM+1
	ldi R25,>_CANIDM+1
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,246
	ldi R31,0
	std z+0,R2
	.dbline 125
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDM+2
	ldi R25,>_CANIDM+2
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,245
	ldi R31,0
	std z+0,R2
	.dbline 126
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDM+3
	ldi R25,>_CANIDM+3
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,244
	ldi R31,0
	std z+0,R2
	.dbline 128
	ldi R24,152
	ldi R30,239
	std z+0,R24
	.dbline 129
	nop
	.dbline 130
	lds R24,_Pass_Flag
	subi R24,255    ; addi 1
	sts _Pass_Flag,R24
	.dbline 131
L38:
	.dbline 116
	inc R20
L40:
	.dbline 116
	cpi R20,3
	brsh X3
	xjmp L37
X3:
	.dbline 133
;    {
; 	 CANPAGE = (i<<4);                   //MOb 0,1,2设置为接收模式模式
;      CANIDT1 = CANIDT[i][0];        		//初始化 ID
;      CANIDT2 = CANIDT[i][1];
;      CANIDT3 = CANIDT[i][2];
;      CANIDT4 = CANIDT[i][3];
;      CANIDM1 = CANIDM[i][0];            	//初始化 mask
;      CANIDM2 = CANIDM[i][1];
;      CANIDM3 = CANIDM[i][2];
;      CANIDM4 = CANIDM[i][3];               //0 = ignore bit
;     //CANIDM4 = (1<<IDEMSK);                          //identifier extention mask
;      CANCDMOB = (2<<CONMOB0)|(1<<IDE)|(8<<DLC0);     //reception, ext. ID,rev2.0B
; 	 NOP();
; 	 Pass_Flag = Pass_Flag + 1;		
; 	}
; 	 
; 	  if(Pass_Flag!=0x03)
	lds R24,_Pass_Flag
	cpi R24,3
	breq L47
	.dbline 134
; 	    RESET;
	jmp 0x000
L47:
	.dbline 136
; 		
; 	 WDR();
	wdr
	.dbline 138
; 	 
; 	  Pass_Flag = 0x00;
	clr R2
	sts _Pass_Flag,R2
	.dbline 139
; 	for(i=3;i<6;i++)                       
	ldi R20,3
	xjmp L52
L49:
	.dbline 140
	.dbline 141
	mov R24,R20
	andi R24,#0x0F
	swap R24
	ldi R30,237
	ldi R31,0
	std z+0,R24
	.dbline 142
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDT
	ldi R25,>_CANIDT
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,243
	ldi R31,0
	std z+0,R2
	.dbline 143
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDT+1
	ldi R25,>_CANIDT+1
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,242
	ldi R31,0
	std z+0,R2
	.dbline 144
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDT+2
	ldi R25,>_CANIDT+2
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,241
	ldi R31,0
	std z+0,R2
	.dbline 145
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDT+3
	ldi R25,>_CANIDT+3
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,240
	ldi R31,0
	std z+0,R2
	.dbline 146
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDM
	ldi R25,>_CANIDM
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,247
	ldi R31,0
	std z+0,R2
	.dbline 147
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDM+1
	ldi R25,>_CANIDM+1
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,246
	ldi R31,0
	std z+0,R2
	.dbline 148
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDM+2
	ldi R25,>_CANIDM+2
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,245
	ldi R31,0
	std z+0,R2
	.dbline 149
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_CANIDM+3
	ldi R25,>_CANIDM+3
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,244
	ldi R31,0
	std z+0,R2
	.dbline 150
	ldi R24,24
	ldi R30,239
	std z+0,R24
	.dbline 151
	nop
	.dbline 152
	lds R24,_Pass_Flag
	subi R24,255    ; addi 1
	sts _Pass_Flag,R24
	.dbline 153
L50:
	.dbline 139
	inc R20
L52:
	.dbline 139
	cpi R20,6
	brsh X4
	xjmp L49
X4:
	.dbline 154
; 	{
; 	 CANPAGE = (i<<4);                   //MOb3,4,5设置为发送模式
;      CANIDT1 = CANIDT[i][0];        		//初始化 ID
;      CANIDT2 = CANIDT[i][1];
;      CANIDT3 = CANIDT[i][2];
;      CANIDT4 = CANIDT[i][3];
;      CANIDM1 = CANIDM[i][0];            	//初始化 mask
;      CANIDM2 = CANIDM[i][1];
;      CANIDM3 = CANIDM[i][2];
;      CANIDM4 = CANIDM[i][3];               //0 = ignore bit
;      CANCDMOB = (1<<IDE)|(8<<DLC0);    
; 	 NOP();
; 	  Pass_Flag = Pass_Flag + 1;		
; 	}
; 	   if(Pass_Flag!=0x03)
	lds R24,_Pass_Flag
	cpi R24,3
	breq L59
	.dbline 155
; 	    RESET;
	jmp 0x000
L59:
	.dbline 157
; 		
; 	CANGCON = (1<<ENASTB);                //start CAN interface, enable mod
	ldi R24,2
	ldi R30,216
	ldi R31,0
	std z+0,R24
	.dbline 159
; 	
; 	CANGIE = (1<<ENIT)| (1<<ENRX)|(1<<ENTX);    //enable receive interrupt and transmitte interrupt 
	ldi R24,176
	ldi R30,219
	std z+0,R24
	.dbline 160
; 	CANIE1 = 0x00;                  
	clr R2
	ldi R30,223
	std z+0,R2
	.dbline 161
; 	CANIE2 = 0x3f;                              //enable ALL MObs interrupt
	ldi R24,63
	ldi R30,222
	std z+0,R24
	.dbline 163
;     
; 	 WDR();
	wdr
L61:
	.dbline 164
L62:
	.dbline 164
;     while (!(CANGSTA & (1<<ENFG)));         //wait until module ready
	ldi R30,217
	ldi R31,0
	ldd R2,z+0
	sbrs R2,2
	rjmp L61
	.dbline 166
; 	
;     CANGCON |= (1<<ENA);      //enable CAN controller
	lds R24,216
	ori R24,2
	sts 216,R24
	.dbline 168
; 	
; 	SEI();
	sei
	.dbline -2
L3:
	adiw R28,4
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r temp2 10 i
	.dbsym r temp1 22 i
	.dbsym l temp 0 l
	.dbsym r j 22 c
	.dbsym r i 20 c
	.dbend
	.dbfunc e can_tx _can_tx fV
	.dbstruct 0 12 _VCI_CAN_OBJ
	.dbfield 0 ID L
	.dbfield 4 Data A[8:8]c
	.dbend
;        temp_id -> y+0
;          index -> R14
;      pass_Flag -> R12
;              i -> R12
;            msg -> R10,R11
	.even
_can_tx::
	xcall push_gset5
	movw R10,R16
	sbiw R28,4
	.dbline -1
	.dbline 177
; }
; 
; 
; 
; /*******************************************************************
; CAN transmission via mailbox 1 (polling)
; *******************************************************************/
; void can_tx (VCI_CAN_OBJ msg)
; {
	.dbline 181
;     unsigned char i,index,pass_Flag;
; 	long temp_id;
; 	
; 	pass_Flag = 0x01;
	clr R12
	inc R12
	.dbline 182
; 	pass_Flag <<= 1;
	lsl R12
	.dbline 183
; 	msg.ID <<= 3;    
	ldi R24,3
	ldi R25,0
	movw R30,R10
	ldd R16,z+0
	ldd R17,z+1
	ldd R18,z+2
	ldd R19,z+3
	st -y,R24
	xcall lsl32
	movw R30,R10
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 184
; 	temp_id = msg.ID&0x0f000000 ;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,15
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	and R2,R20
	and R3,R21
	and R4,R22
	and R5,R23
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	.dbline 185
; 	index =( unsigned char )(temp_id>>24);
	ldi R24,24
	ldi R25,0
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	st -y,R24
	xcall asr32
	mov R14,R16
	.dbline 186
; 	index = index + 3;
	mov R24,R14
	subi R24,253    ; addi 3
	mov R14,R24
	.dbline 187
;     CANPAGE = (index<<4);
	andi R24,#0x0F
	swap R24
	ldi R30,237
	ldi R31,0
	std z+0,R24
	.dbline 188
;     CANCDMOB = (1<<IDE) |(8<<DLC0);   
	ldi R24,24
	ldi R30,239
	std z+0,R24
	.dbline 189
; 	pass_Flag <<= 1;                                               
	lsl R12
	.dbline 190
;     CANIDT4 = (unsigned char) (msg.ID&0xF8);
	ldi R20,248
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R10
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	and R2,R20
	and R3,R21
	and R4,R22
	and R5,R23
	ldi R30,240
	ldi R31,0
	std z+0,R2
	.dbline 191
;     CANIDT3 = (unsigned char) (msg.ID>>8);
	ldi R24,8
	ldi R25,0
	movw R30,R10
	ldd R16,z+0
	ldd R17,z+1
	ldd R18,z+2
	ldd R19,z+3
	st -y,R24
	xcall asr32
	ldi R30,241
	ldi R31,0
	std z+0,R16
	.dbline 192
;     CANIDT2 = (unsigned char) (msg.ID>>16);
	movw R30,R10
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R2,R4
	ldi R30,242
	ldi R31,0
	std z+0,R2
	.dbline 193
; 	pass_Flag <<= 1;
	lsl R12
	.dbline 194
;     CANIDT1 = (unsigned char) (msg.ID>>24);
	ldi R24,24
	ldi R25,0
	movw R30,R10
	ldd R16,z+0
	ldd R17,z+1
	ldd R18,z+2
	ldd R19,z+3
	st -y,R24
	xcall asr32
	ldi R30,243
	ldi R31,0
	std z+0,R16
	.dbline 195
; 	if(pass_Flag!=0x08)
	mov R24,R12
	cpi R24,8
	breq L65
	.dbline 196
; 	  RESET;
	jmp 0x000
L65:
	.dbline 197
;     for(i=0;i<8;i++)                               
	clr R12
	xjmp L70
L67:
	.dbline 198
	.dbline 200
	movw R24,R10
	adiw R24,4
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R30,250
	ldi R31,0
	std z+0,R2
	.dbline 201
L68:
	.dbline 197
	inc R12
L70:
	.dbline 197
	mov R24,R12
	cpi R24,8
	brlo L67
	.dbline 202
;       {
; 	   
;        CANMSG = msg.Data[i];
; 	  }        
;     CANCDMOB |= (1<<CONMOB0);           //enable transmission
	lds R24,239
	ori R24,64
	sts 239,R24
	.dbline -2
L64:
	adiw R28,4
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym l temp_id 0 L
	.dbsym r index 14 c
	.dbsym r pass_Flag 12 c
	.dbsym r i 12 c
	.dbsym r msg 10 pS[_VCI_CAN_OBJ]
	.dbend
	.area vector(rom, abs)
	.org 72
	jmp _can_ReceiveData
	.area text(rom, con, rel)
	.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
	.dbfunc e can_ReceiveData _can_ReceiveData fV
	.area func_lit(rom, con, rel)
L461:
	.word `L107
	.word `L113
	.word `L120
	.word `L127
	.word `L134
	.word `L141
	.word `L148
	.word `L155
	.word `L162
	.word `L169
	.word `L176
	.word `L183
	.word `L190
	.word `L197
	.word `L204
	.word `L211
	.word `L218
	.word `L225
	.word `L232
	.word `L239
	.word `L246
	.word `L253
	.word `L260
	.word `L267
	.word `L274
	.word `L281
	.word `L288
	.word `L295
	.word `L302
	.word `L309
	.word `L316
	.word `L323
	.word `L330
	.word `L337
	.word `L344
	.word `L351
	.word `L358
	.word `L365
	.word `L372
	.word `L379
	.word `L386
	.word `L393
	.word `L400
	.word `L407
	.word `L414
	.word `L421
	.word `L428
	.word `L435
	.word `L442
	.area text(rom, con, rel)
	.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\can.c
;       err_temp -> R10
;       sta_temp -> R10
;             jj -> R14
;        RCtemp2 -> y+9
;            RCF -> y+7
;          tempp -> y+5
;        id_temp -> y+0
;              i -> y+4
;        nb_data -> R12
	.even
_can_ReceiveData::
	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
	xcall push_gset5
	sbiw R28,11
	.dbline -1
	.dbline 208
; }
; 
; 
; #pragma interrupt_handler can_ReceiveData:19
; void can_ReceiveData (void)             //receive interrupt 
; {
	.dbline 214
; 	unsigned char nb_data;
; 	unsigned char i,err_temp,sta_temp,jj;
; 	unsigned int  RCtemp2,tempp,RCF;
; 	long id_temp;
; 	
; 	WDR();
	wdr
	.dbline 215
;     CANGIE &= ~((1<<ENRX)|(1<<ENTX));                  //关接收中断
	lds R24,219
	andi R24,207
	sts 219,R24
	.dbline 216
; 	RCtemp2=CANSIT2;                       //读取中断信息
	ldi R30,224
	ldi R31,0
	ldd R2,z+0
	clr R3
	std y+10,R3
	std y+9,R2
	.dbline 217
; 	err_temp = CANTEC;                     //读取发送错误计数器
	ldi R30,234
	ldd R10,z+0
	.dbline 219
; 	
; 	if(err_temp>96)                       
	ldi R24,96
	cp R24,R10
	brsh L72
	.dbline 220
; 	RESET;
	jmp 0x000
L72:
	.dbline 222
; 	

⌨️ 快捷键说明

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