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

📄 can.s

📁 MCU:ATMEGA8515 Frequence: 16M 描述:利用已有CAN TEST V1.0电路板进行调试, 可靠性测试已通过
💻 S
📖 第 1 页 / 共 2 页
字号:
	sts _TransBuffer+2,R2
	.dbline 145
; 	TransBuffer[3]=0x00;	
	sts _TransBuffer+3,R2
	.dbline 146
; 	TransBuffer[4]=0x00;	
	sts _TransBuffer+4,R2
	.dbline 147
; 	TransBuffer[5]=0x01;	
	ldi R24,1
	sts _TransBuffer+5,R24
	.dbline 148
; 	TransBuffer[6]=0x02;	
	ldi R24,2
	sts _TransBuffer+6,R24
	.dbline 149
; 	TransBuffer[7]=0x03;	
	ldi R24,3
	sts _TransBuffer+7,R24
	.dbline 150
; 	TransBuffer[8]=0x04;	
	ldi R24,4
	sts _TransBuffer+8,R24
	.dbline 151
; 	TransBuffer[9]=0x05;	
	ldi R24,5
	sts _TransBuffer+9,R24
	.dbline 152
; 	TransBuffer[10]=0x06;	
	ldi R24,6
	sts _TransBuffer+10,R24
	.dbline 153
; 	TransBuffer[11]=0x07;	
	ldi R24,7
	sts _TransBuffer+11,R24
	.dbline 154
; 	TransBuffer[12]=0xaa;					  
	ldi R24,170
	sts _TransBuffer+12,R24
L31:
	.dbline 155
L32:
	.dbline 155
; 	while(!(read_sja(SR)&0x04));   //wait until reg2^2==1 ,即判断发送缓冲器的状态
	ldi R16,2
	rcall _read_sja
	sbrs R16,2
	rjmp L31
	.dbline 156
; 	write_sja(TXEFF,TransBuffer[0]);		   //扩展帧,数据长度为8个字节
	lds R18,_TransBuffer
	ldi R16,16
	rcall _write_sja
	.dbline 157
; 	write_sja(TXID0,TransBuffer[1]);
	lds R18,_TransBuffer+1
	ldi R16,17
	rcall _write_sja
	.dbline 158
; 	write_sja(TXID1,TransBuffer[2]);
	lds R18,_TransBuffer+2
	ldi R16,18
	rcall _write_sja
	.dbline 159
; 	write_sja(TXID2,TransBuffer[3]);
	lds R18,_TransBuffer+3
	ldi R16,19
	rcall _write_sja
	.dbline 160
; 	write_sja(TXID3,TransBuffer[4]);
	lds R18,_TransBuffer+4
	ldi R16,20
	rcall _write_sja
	.dbline 161
; 	write_sja(TXDATA0,TransBuffer[5]);
	lds R18,_TransBuffer+5
	ldi R16,21
	rcall _write_sja
	.dbline 162
; 	write_sja(TXDATA1,TransBuffer[6]);
	lds R18,_TransBuffer+6
	ldi R16,22
	rcall _write_sja
	.dbline 163
; 	write_sja(TXDATA2,TransBuffer[7]);
	lds R18,_TransBuffer+7
	ldi R16,23
	rcall _write_sja
	.dbline 164
; 	write_sja(TXDATA3,TransBuffer[8]);
	lds R18,_TransBuffer+8
	ldi R16,24
	rcall _write_sja
	.dbline 165
; 	write_sja(TXDATA4,TransBuffer[9]);
	lds R18,_TransBuffer+9
	ldi R16,25
	rcall _write_sja
	.dbline 166
; 	write_sja(TXDATA5,TransBuffer[10]);
	lds R18,_TransBuffer+10
	ldi R16,26
	rcall _write_sja
	.dbline 167
; 	write_sja(TXDATA6,TransBuffer[11]);
	lds R18,_TransBuffer+11
	ldi R16,27
	rcall _write_sja
	.dbline 168
; 	write_sja(TXDATA7,TransBuffer[12]);
	lds R18,_TransBuffer+12
	ldi R16,28
	rcall _write_sja
	.dbline 169
; 	write_sja(CMR,0x01);		  //发送请求命令
	ldi R18,1
	ldi R16,1
	rcall _write_sja
L46:
	.dbline 170
L47:
	.dbline 170
; 	while(!(read_sja(SR) & 0x08));//检测SR.3位,判断发送是否完成
	ldi R16,2
	rcall _read_sja
	sbrs R16,3
	rjmp L46
	.dbline 171
; 	SEI();				  	  	  //开中断
	sei
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbsym l status 1 c
	.dbend
	.dbfunc e Receive _Receive fc
;         RxData -> y+0
;            sff -> R12
;         number -> R20
;         result -> R22
;         status -> R20
;          prbuf -> R10
;              i -> R12
	.even
_Receive::
	rcall push_gset4
	sbiw R28,13
	.dbline -1
	.dbline 203
; }
; /*
; void Search(void)                 //查询方式接收
; {
;    uchar SearchStatus=read_sja(SR);	//读取状态寄存器
;    if(!(SearchStatus & 0xc3))		//是否存在总线关闭、错误状态、数据溢出、有数据位等状态
;    {
;       if((SearchStatus & 0x80) != 0)//如果总线关闭
; 	  {
; 	     read_sja(IR);	            //读取中断寄存器,清除中断位
; 		 write_sja(MODE,0x08); 
; 	  }
; 	  else
; 	  {
; 	     read_sja(IR);
;          if((read_sja(IR) & 0x08) != 0)//如果有数据溢出
; 		 write_sja(CMR,0x0c);	       //在命令寄存器中清除数据溢出和释放接收缓冲区
; 		 else
; 		 {
; 		    if((read_sja(IR) & 0x01) != 0)//IR.0=1,接收缓冲区有数据
; 			{
; 			    Status_lighting(1);
; 				RevFlag=1;
; 		    }
; 	     }
; 	  }
;    }
; }*/
; 
; 
; uchar Receive(void)
; {
	.dbline 204
;  	uchar result=FALSE;
	clr R22
	.dbline 208
; 	uchar status,number,i,sff;
; 	uchar prbuf;
; 	uchar RxData[13];
; 	status=read_sja(SR);
	ldi R16,2
	rcall _read_sja
	mov R20,R16
	.dbline 209
; 	prbuf=RXEFF;
	ldi R24,16
	mov R10,R24
	.dbline 210
; 	if((status&0xc3)!=0)  		  //读取总线脱离、错误状态、接收溢出、有数据等位
	mov R24,R20
	andi R24,195
	brne X0
	rjmp L50
X0:
	.dbline 211
; 	{
	.dbline 212
; 		if((status&0x80)==0x80)
	mov R24,R20
	andi R24,128
	cpi R24,128
	brne L52
	.dbline 213
; 		{
	.dbline 214
; 			write_sja(MODE,0x00);
	clr R18
	clr R16
	rcall _write_sja
	.dbline 215
; 			return FALSE;
	clr R16
	rjmp L49
L52:
	.dbline 217
; 		}
; 		if((status&0x02)==0x02)
	mov R24,R20
	andi R24,2
	cpi R24,2
	brne L54
	.dbline 218
; 		{
	.dbline 219
; 			write_sja(CMR,0x0c);
	ldi R18,12
	ldi R16,1
	rcall _write_sja
	.dbline 220
; 			return FALSE;
	clr R16
	rjmp L49
L54:
	.dbline 223
; 		}
; 		
; 		if((status&0x01)==0x01)
	mov R24,R20
	andi R24,1
	cpi R24,1
	brne L56
	.dbline 224
; 		{
	.dbline 225
; 			if((read_sja(RXEFF)&0x40)==0x40)  //如果RTR=1,为远程帧
	ldi R16,16
	rcall _read_sja
	mov R24,R16
	andi R24,64
	cpi R24,64
	brne L58
	.dbline 226
; 			{
	.dbline 227
; 				write_sja(CMR,0x04);		  //则释放FXFIFO
	ldi R18,4
	ldi R16,1
	rcall _write_sja
	.dbline 228
; 			}
	rjmp L59
L58:
	.dbline 230
; 			else							  //为0,则是数据帧
; 			{
	.dbline 231
; 				sff=read_sja(prbuf)&0x80;	  //取第一个字节的最高位
	mov R16,R10
	rcall _read_sja
	mov R24,R16
	andi R24,128
	mov R12,R24
	.dbline 232
; 				number=(read_sja(prbuf)&0x0f);//取第一个字节的低四位,即数据长度
	mov R16,R10
	rcall _read_sja
	mov R20,R16
	andi R20,15
	.dbline 233
; 				if ((sff&0x80)==0x80)		  //判断是标准帧还是扩展帧
	mov R24,R12
	andi R24,128
	cpi R24,128
	brne L60
	.dbline 234
; 				number=number+5;			  //扩展帧,则帧的总长度加5(13字节)
	subi R20,251    ; addi 5
	rjmp L61
L60:
	.dbline 236
; 				else
; 				number=number+3;			  //标准帧,则帧的总长度加3(11字节)
	subi R20,253    ; addi 3
L61:
	.dbline 237
; 				for(i=0;i<number;i++)		  //读取数据
	clr R12
	rjmp L65
L62:
	.dbline 238
	.dbline 239
	mov R16,R10
	rcall _read_sja
	ldi R24,<_RxBuffer
	ldi R25,>_RxBuffer
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 240
	inc R10
	.dbline 241
L63:
	.dbline 237
	inc R12
L65:
	.dbline 237
	cp R12,R20
	brlo L62
	.dbline 242
; 				{
; 					RxBuffer[i]=read_sja(prbuf);
; 					prbuf++;
; 				}
; 				result=TRUE;	 		 	  //读取到正确的数据则返回TRUE
	ldi R22,1
	.dbline 243
; 				write_sja(CMR,0x04);		  //最后释放FXFIFO
	ldi R18,4
	ldi R16,1
	rcall _write_sja
	.dbline 244
; 			}
L59:
	.dbline 245
; 		}
L56:
	.dbline 246
; 	}
L50:
	.dbline 247
; 	return result;
	mov R16,R22
	.dbline -2
L49:
	adiw R28,13
	rcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym l RxData 0 A[13:13]c
	.dbsym r sff 12 c
	.dbsym r number 20 c
	.dbsym r result 22 c
	.dbsym r status 20 c
	.dbsym r prbuf 10 c
	.dbsym r i 12 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\罗鹏\工作资料\工作记录\CAN\程序\完成版本\CAN.c
_CanMode::
	.blkb 14
	.dbsym e CanMode _CanMode A[14:14]c
_RevFlag::
	.blkb 1
	.dbsym e RevFlag _RevFlag c
_TransBuffer::
	.blkb 13
	.dbsym e TransBuffer _TransBuffer A[13:13]c
_RxBuffer::
	.blkb 13
	.dbsym e RxBuffer _RxBuffer A[13:13]c

⌨️ 快捷键说明

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