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

📄 test2.s

📁 实现mega8的isp操作
💻 S
📖 第 1 页 / 共 4 页
字号:
	.dbend
	.area vector(rom, abs)
	.org 22
	rjmp _Receive_using_interrupt
	.area text(rom, con, rel)
	.dbfile E:\AVR\P_TEST\testAVR\TEST2.C
	.dbfunc e Receive_using_interrupt _Receive_using_interrupt fV
;              i -> R16
	.even
_Receive_using_interrupt::
	st -y,R2
	st -y,R3
	st -y,R16
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 304
; 
; //---接收中断--//
; #pragma interrupt_handler Receive_using_interrupt:iv_USART_RX
; void Receive_using_interrupt(void)
; {
	.dbline 307
;  	 //"SET- "-- AND --"CF"
; 	 char i;
; 	 Sbufx=UDR;
	in R2,0xc
	sts _Sbufx,R2
	.dbline 309
; 	 
; 	NowSbuf[0]=NowSbuf[1];
	lds R2,_NowSbuf+1
	sts _NowSbuf,R2
	.dbline 310
; 	NowSbuf[1]=NowSbuf[2];
	lds R2,_NowSbuf+2
	sts _NowSbuf+1,R2
	.dbline 311
; 	NowSbuf[2]=NowSbuf[3];
	lds R2,_NowSbuf+3
	sts _NowSbuf+2,R2
	.dbline 312
; 	NowSbuf[3]=NowSbuf[4];
	lds R2,_NowSbuf+4
	sts _NowSbuf+3,R2
	.dbline 313
; 	NowSbuf[4]=NowSbuf[5];
	lds R2,_NowSbuf+5
	sts _NowSbuf+4,R2
	.dbline 314
; 	NowSbuf[5]=NowSbuf[6];
	lds R2,_NowSbuf+6
	sts _NowSbuf+5,R2
	.dbline 315
; 	NowSbuf[6]=NowSbuf[7];
	lds R2,_NowSbuf+7
	sts _NowSbuf+6,R2
	.dbline 316
; 	NowSbuf[7]=NowSbuf[8];
	lds R2,_NowSbuf+8
	sts _NowSbuf+7,R2
	.dbline 317
; 	NowSbuf[8]=NowSbuf[9];
	lds R2,_NowSbuf+9
	sts _NowSbuf+8,R2
	.dbline 318
; 	NowSbuf[9]=NowSbuf[10];
	lds R2,_NowSbuf+10
	sts _NowSbuf+9,R2
	.dbline 319
; 	NowSbuf[10]=NowSbuf[11];
	lds R2,_NowSbuf+11
	sts _NowSbuf+10,R2
	.dbline 320
; 	NowSbuf[11]=NowSbuf[12];
	lds R2,_NowSbuf+12
	sts _NowSbuf+11,R2
	.dbline 321
; 	NowSbuf[12]=Sbufx;
	lds R2,_Sbufx
	sts _NowSbuf+12,R2
	.dbline 322
; 	 if((NowSbuf[0]=='S')&&(NowSbuf[1]=='E')&&(NowSbuf[2]=='T'))
	lds R24,_NowSbuf
	cpi R24,83
	brne L92
	lds R24,_NowSbuf+1
	cpi R24,69
	brne L92
	lds R24,_NowSbuf+2
	cpi R24,84
	brne L92
	.dbline 323
; 	 {
	.dbline 324
; 	  		SET_flag=1;	
	ldi R24,1
	sts _SET_flag,R24
	.dbline 325
; 			for(i=0;i<13;i++)	
	clr R16
	rjmp L99
L96:
	.dbline 326
	ldi R24,<_NowSbuf
	ldi R25,>_NowSbuf
	mov R30,R16
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_ReceiveSbuf
	ldi R25,>_ReceiveSbuf
	mov R30,R16
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
L97:
	.dbline 325
	inc R16
L99:
	.dbline 325
	cpi R16,13
	brlo L96
	.dbline 329
; 			     ReceiveSbuf[i]=NowSbuf[i];							
; 
; 	   
; 	 }
L92:
	.dbline 331
	lds R24,_NowSbuf
	cpi R24,67
	brne L100
	lds R24,_NowSbuf+1
	cpi R24,70
	brne L100
	lds R24,_NowSbuf+2
	cpi R24,77
	brne L100
	.dbline 332
	.dbline 333
	ldi R24,180
	out 0x23,R24
	.dbline 334
	clr R2
	clr R3
	sts _TimeForSend+1,R3
	sts _TimeForSend,R2
	.dbline 335
	ldi R24,10
	out 0x25,R24
	.dbline 336
L100:
	.dbline -2
	.dbline 371
; 	 //-SEND SIGNED
; 	 if((NowSbuf[0]=='C')&&(NowSbuf[1]=='F')&&(NowSbuf[2]=='M'))
; 	 {
; 	        OCR2=180;  //90;//0.2ms,
; 			TimeForSend=0;  //30<=>12ms
; 	   		TCCR2=(1<<WGM21)|(1<<CS21); //8分频率 ,TCT比较输出MODE
; 	 }
; 	 
; 	// else  SET_flag=0;
; 	 
; /*	
; 	 if(Sbufx==CF[kr1]){kr1++; kr2+=2;}
; 	 else if(Sbufx==SET[kr1]){kr1++; kr2--;}
; 	 
; 	 if((Sbufx=='C')||(Sbufx=='S'))
; 	    {
; 		   kr1=1;
; 		   krec=0;
; 		   ReceiveSbuf[0]=Sbufx;
; 		   kr2=100;
; 		}
; 	
; 	// if(krec>18)kcr=0;
; 	 if((Sbufx>9)&&(Sbufx<128))
; 	  {
; 	   	 if(krec<19) ReceiveSbuf[krec]=Sbufx;
; 		  krec++;
; 	     // UDR=Sbufx; ///把收到的马上发送给COMPUTER   test only
; 	  }
; */  
; /*
; 	  if((Sbufx=='M')&&(kr2>101))  //--同步定时信号,T2
; 	  {
; 	   		kr2=100;
; 	   		TCNT2=0;
; 			
; 			//--PTR2000 SEND MODE--//
; 		//	PTR2K_SEND();  //启动发送
; 	  }
; */
; 	 
; }
L67:
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R16,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym r i 16 c
	.dbend
	.area vector(rom, abs)
	.org 18
	rjmp _Timer0_interrupt
	.area text(rom, con, rel)
	.dbfile E:\AVR\P_TEST\testAVR\TEST2.C
	.dbfunc e Timer0_interrupt _Timer0_interrupt fV
	.even
_Timer0_interrupt::
	st -y,R24
	st -y,R25
	in R24,0x3f
	st -y,R24
	.dbline -1
	.dbline 378
; 
; 
; ///====定时器0中断函数====//
; #pragma interrupt_handler Timer0_interrupt:iv_TIMER0_OVF
; 
; void  Timer0_interrupt(void)
; {
	.dbline 379
;  	  TCNT0=238;//256-(baud/1024)/200;  //定时0.005s 
	ldi R24,238
	out 0x32,R24
	.dbline 380
; 	  T0_Count++;
	lds R24,_T0_Count
	subi R24,255    ; addi 1
	sts _T0_Count,R24
	.dbline 382
; 	  
; 	 TimeForCall++;
	lds R24,_TimeForCall
	subi R24,255    ; addi 1
	sts _TimeForCall,R24
	.dbline 386
; 	
; 	   
; 	 // if(TimeForCall>596)
; 	  {//PTR2000,从接收改为发送//
	.dbline 388
; 	  
; 	  }
	.dbline -2
	.dbline 390
; 	  
; }
L104:
	ld R24,y+
	out 0x3f,R24
	ld R25,y+
	ld R24,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e Timer2_initial _Timer2_initial fV
	.even
_Timer2_initial::
	.dbline -1
	.dbline 394
; 
; //--定时器2精确定时用---//
; void Timer2_initial()
; {
	.dbline 395
;  	 OCR2=180;//90;//0.2ms--180=>0.4ms
	ldi R24,180
	out 0x23,R24
	.dbline 397
; 	  //=x1;
; 	 TCNT2=0;
	clr R2
	out 0x24,R2
	.dbline 398
; 	 TIMSK|=(1<<OCIE2); //匹配中断使能
	in R24,0x39
	ori R24,128
	out 0x39,R24
	.dbline 400
; 	// TCCR2=(1<<WGM21)|(1<<CS21); //8分频率 ,TCT比较输出MODE
; 	 TimeForSend=0;
	clr R3
	sts _TimeForSend+1,R3
	sts _TimeForSend,R2
	.dbline -2
	.dbline 401
; }
L105:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 6
	rjmp _Timer2_interrupt
	.area text(rom, con, rel)
	.dbfile E:\AVR\P_TEST\testAVR\TEST2.C
	.dbfunc e Timer2_interrupt _Timer2_interrupt fV
	.even
_Timer2_interrupt::
	rcall push_lset
	.dbline -1
	.dbline 406
; 
; //---定时器2中断--//
; #pragma interrupt_handler Timer2_interrupt:iv_TIMER2_COMP
; void Timer2_interrupt(void)
; {
	.dbline 410
; //unsigned int nowSend;
;    
;    // nowSend=NowSend*30-1;
;  	 TimeForSend++;
	lds R24,_TimeForSend
	lds R25,_TimeForSend+1
	adiw R24,1
	sts _TimeForSend+1,R25
	sts _TimeForSend,R24
	.dbline 413
; 	// PORTC=0XFF;  ///test USE NowSend
; 
; 	if(!(NowSend-TimeForSend-400))
	mov R2,R24
	mov R3,R25
	lds R24,_NowSend
	lds R25,_NowSend+1
	sub R24,R2
	sbc R25,R3
	subi R24,144
	sbci R25,1
	brne L107
X1:
	.dbline 414
; 	              PTR2K_SEND();  //提前 100ms启动发送
	rcall _PTR2K_SEND
L107:
	.dbline 416
; 	
; 	if(!(NowSend-TimeForSend)) //定时时间到
	lds R2,_TimeForSend
	lds R3,_TimeForSend+1
	lds R4,_NowSend
	lds R5,_NowSend+1
	sub R4,R2
	sbc R5,R3
	brne L109
X2:
	.dbline 417
; 	{
	.dbline 420
; 	   //  
; 		   
; 	 		SendPoint=SendSbuf;
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	sts _SendPoint+1,R25
	sts _SendPoint,R24
	.dbline 421
; 	    	UDR=*SendPoint; //启动发送
	mov R30,R24
	mov R31,R25
	ldd R2,z+0
	out 0xc,R2
	.dbline 422
; 			SendPoint++;								
	adiw R24,1
	sts _SendPoint+1,R25
	sts _SendPoint,R24
	.dbline 431
; 
;  
; 	   		
; 	    //   TimeForSend=0;
; 			///test use
; 			//UDR=NowSend>>8;
; 			// PORTC=0;
; 			//PORTC=~PORTC;
; 	}
L109:
	.dbline 432
	lds R24,_TimeForSend
	lds R25,_TimeForSend+1
	subi R24,144
	sbci R25,1
	lds R2,_NowSend
	lds R3,_NowSend+1
	sub R2,R24
	sbc R3,R25
	brne L111
X3:
	.dbline 433
	.dbline 434
	rcall _PTR2K_RECEIVE
	.dbline 435
	clr R2
	clr R3
	sts _TimeForSend+1,R3
	sts _TimeForSend,R2
	.dbline 436
	out 0x25,R2
	.dbline 437
L111:
	.dbline -2
	.dbline 438
; 	if(!(NowSend-(TimeForSend-400)))
; 	{
; 	              PTR2K_RECEIVE();  //延时100ms启动接收
; 				  TimeForSend=0;
; 				  TCCR2=0;  //关定时器2
; 	}
; }
L106:
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e ReadEEPROM _ReadEEPROM fV
;            CRC -> R22
;           temp -> R10
;              k -> R12
;             jk -> R20
	.even
_ReadEEPROM::
	rcall push_gset4
	sbiw R28,2
	.dbline -1
	.dbline 444
; /*---***********************************
; 	 		读EEPROM
; ***********************************
; */
; void ReadEEPROM()
; {
	.dbline 446
;  	 unsigned char jk,k,CRC,temp;
; 	 CLI();
	cli
	.dbline 447
; 	EEPROMReadBytes(0, SendSbuf, 18);
	ldi R24,18
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_SendSbuf
	ldi R19,>_SendSbuf
	clr R16
	clr R17
	rcall _EEPROMReadBytes
	.dbline 448
; 	CRC=0;
	clr R22
	.dbline 450
; 	
; 	if(SendSbuf[0]=='S')
	lds R24,_SendSbuf
	cpi R24,83
	breq X4
	rjmp L114
X4:
	.dbline 451
; 	{
	.dbline 452
; 	 		if(!(SendSbuf[12]-0x31)) //频率选择
	lds R24,_SendSbuf+12
	subi R24,49
	brne L116
	.dbline 453
; 			{
	.dbline 454
; 			    PORTD|=(1<<PD4);  //CS=1;
	sbi 0x12,4
	.dbline 455
; 			}
	rjmp L117
L116:
	.dbline 457
; 			else
; 			    PORTD&=0XEF; //PD4=0;CS=0';
	in R24,0x12
	andi R24,239
	out 0x12,R24
L117:
	.dbline 460
; 			 
; 			
; 			if(SendSbuf[14]=='G')SendSbuf[15]='G';//最后的
	lds R24,_SendSbuf+14
	cpi R24,71
	brne L119
	.dbline 460
	ldi R24,71
	sts _SendSbuf+15,R24
	rjmp L120
L119:
	.dbline 461
; 			else  SendSbuf[15]=0;   //停止
	clr R2
	sts _SendSbuf+15,R2
L120:
	.dbline 465
; 			
; 			//发送:T-001-015<CRC> /\: T-001-015<CRC>G  --最后车发送
; 			//--求车辆等待时间 ---
; 			NowSend=SendSbuf[4]-0x30;
	lds R24,_SendSbuf+4
	clr R25
	sbiw R24,48
	sts _NowSend+1,R25
	sts _NowSend,R24
	.dbline 466
; 			NowSend*=10;
	mov R18,R24
	mov R19,R25
	ldi R16,10
	ldi R17,0
	rcall mpy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 467
; 			NowSend+=(SendSbuf[5]-0x30);
	lds R24,_SendSbuf+5
	clr R25
	sbiw R24,48
	mov R2,R16
	mov R3,R17
	add R2,R24
	adc R3,R25
	sts _NowSend+1,R3
	sts _NowSend,R2
	.dbline 469
; 			//NowSend*=10;
; 			NowSend+=(SendSbuf[6]-0x30);
	lds R24,_SendSbuf+6
	clr R25
	sbiw R24,48
	add R2,R24
	adc R3,R25
	sts _NowSend+1,R3
	sts _NowSend,R2
	.dbline 471
; 			
; 			NowSend*=36;
	mov R18,R2
	mov R19,R3
	ldi R16,36
	ldi R17,0
	rcall mpy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 472
; 			NowSend+=1000;
	mov R24,R16
	mov R25,R17
	subi R24,24  ; offset = 1000
	sbci R25,252
	sts _NowSend+1,R25
	sts _NowSend,R24
	.dbline 473
; 			NowSend2=NowSend;
	mov R2,R24
	mov R3,R25
	sts _NowSend2+1,R3
	sts _NowSend2,R2
	.dbline 475
; 			
; 	 		for(jk=2;jk<5;jk++)  //把要发送的放在发送上
	ldi R20,2
	rjmp L130
L127:
	.dbline 476
	.dbline 479
	ldi R24,<_SendSbuf+6
	ldi R25,>_SendSbuf+6
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R10,z+0
	.dbline 480
	mov R24,R20
	subi R24,1
	mov R12,R24
	lsl R12
	.dbline 481
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	mov R24,R10
	swap R24
	andi R24,#0x0F
	subi R24,208    ; addi 48
	std z+0,R24
	.dbline 482
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	eor R22,R2
	.dbline 483
	ldi R24,<_SendSbuf+1
	ldi R25,>_SendSbuf+1
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	mov R24,R10
	andi R24,15
	subi R24,208    ; addi 48
	std z+0,R24
	.dbline 484
	ldi R24,<_SendSbuf+1
	ldi R25,>_SendSbuf+1
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	eor R22,R2
	.dbline 486
L128:
	.dbline 475
	inc R20
L130:
	.dbline 475
	cpi R20,5
	brsh X5
	rjmp L127
X5:
	.dbline 488
; 			{
; 			  // SendSbuf[jk]=SendSbuf[jk+2];
; 			   //CRC^=SendSbuf[jk];
; 			   temp=SendSbuf[jk+6];
; 			   k=2*(jk-1);
; 			   SendSbuf[k]=(temp>>4)+0x30;
; 			   CRC^=SendSbuf[k];
; 			   SendSbuf[k+1]=(temp&0x0f)+0x30;
; 			   CRC^=SendSbuf[k+1];
; 			   
; 			 }
; 			 
; 			SendSbuf[10]=CRC;  //jk=9;
	sts _SendSbuf+10,R22
	.dbline 489
; 			SendSbuf[11]=SendSbuf[15];
	lds R2,_SendSbuf+15
	sts _SendSbuf+11,R2
	.dbline 490
; 			SendSbuf[12]=0;
	clr R2
	sts _SendSbuf+12,R2
	.dbline 492
; 			//-----
; 			SendSbuf[0]='T';
	ldi R24,84
	sts _SendSbuf,R24
	.dbline 493
; 			SendSbuf[1]='-';
	ldi R24,45
	sts _SendSbuf+1,R24
	.dbline 497
; 			
; 			
; 			
; 	}//end  if(SendSbuf[0]=='S')
	rjmp L115
L114:
	.dbline 498
; 	else{  //没有时候的默认值SET-001-000-0,1号车
	.dbline 499
; 	       jk=0;
	clr R20
	.dbline 500
; 	        SendSbuf[jk++]='T';
	mov R2,R20
	clr R3
	subi R20,255    ; addi 1
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,84
	std z+0,R24
	.dbline 501
; 			SendSbuf[jk++]='-';
	mov R2,R20
	clr R3
	subi R20,255    ; addi 1
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,45
	std z+0,R24
	.dbline 502
; 			SendSbuf[jk++]='0';
	mov R2,R20
	clr R3
	subi R20,255    ; addi 1
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,48
	std z+0,R24
	.dbline 503
; 			SendSbuf[jk++]='0';
	mov R2,R20
	clr R3
	subi R20,255    ; addi 1
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,48
	std z+0,R24
	.dbline 504
; 			SendSbuf[jk++]='1';
	mov R2,R20
	clr R3
	subi R20,255    ; addi 1
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,49
	std z+0,R24
	.dbline 505
; 			SendSbuf[jk++]='-';
	mov R2,R20
	clr R3
	subi R20,255    ; addi 1
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R2
	clr R31
	add R30,R24

⌨️ 快捷键说明

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