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

📄 mainbd.s

📁 实现mega8的isp操作
💻 S
📖 第 1 页 / 共 3 页
字号:
	rjmp _Timer2_interrupt
	.area text(rom, con, rel)
	.dbfile E:\AVR\P_TEST\MainBd.c
	.dbfunc e Timer2_interrupt _Timer2_interrupt fV
	.even
_Timer2_interrupt::
	rcall push_lset
	.dbline -1
	.dbline 320
; 
; //---定时器2中断--//
; #pragma interrupt_handler Timer2_interrupt:iv_TIMER2_COMP
; void Timer2_interrupt(void)
; {
	.dbline 322
;  
;  	 TimeForSend++;
	lds R24,_TimeForSend
	lds R25,_TimeForSend+1
	adiw R24,1
	sts _TimeForSend+1,R25
	sts _TimeForSend,R24
	.dbline 323
; 	if(!(NowSend-TimeForSend-100)) PTR2K_SEND();  //启动发送
	mov R2,R24
	mov R3,R25
	lds R24,_NowSend
	lds R25,_NowSend+1
	sub R24,R2
	sbc R25,R3
	subi R24,100
	sbci R25,0
	brne L46
X1:
	.dbline 323
	rcall _PTR2K_SEND
L46:
	.dbline 325
	lds R2,_TimeForSend
	lds R3,_TimeForSend+1
	lds R4,_NowSend
	lds R5,_NowSend+1
	sub R4,R2
	sbc R5,R3
	brne L48
X2:
	.dbline 326
	.dbline 329
	ldi R24,3
	out 0x17,R24
	.dbline 330
	in R24,0x18
	andi R24,253
	out 0x18,R24
	.dbline 333
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	sts _SendPoint+1,R25
	sts _SendPoint,R24
	.dbline 334
	mov R30,R24
	mov R31,R25
	ldd R2,z+0
	out 0xc,R2
	.dbline 335
	adiw R24,1
	sts _SendPoint+1,R25
	sts _SendPoint,R24
	.dbline 337
	clr R2
	clr R3
	sts _TimeForSend+1,R3
	sts _TimeForSend,R2
	.dbline 339
L48:
	.dbline -2
	.dbline 340
; 	
; 	if(!(NowSend-TimeForSend)) //定时时间到
; 	{
; 	   //   TCCR2=0;  //关定时器2
; 	   //---------选择PTR2000+ 发送---PB1=0;PB0=1
; 	       DDRB=0X03;
; 		   PORTB&=0XFD;
; 	   //---------------------------
; 		   
; 	 		SendPoint=SendSbuf;
; 	    	UDR=*SendPoint; //启动发送
; 			SendPoint++;								
;   		
; 	       TimeForSend=0;
; 			
; 	}
; }
L45:
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e ReadEEPROM _ReadEEPROM fV
;            CRC -> R22
;             jk -> R20
	.even
_ReadEEPROM::
	rcall push_gset2
	sbiw R28,2
	.dbline -1
	.dbline 346
; /*---***********************************
; 	 		读EEPROM
; ***********************************
; */
; void ReadEEPROM()
; {
	.dbline 348
;  	 unsigned char jk,CRC;
; 	 CLI();
	cli
	.dbline 349
; 	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 350
; 	CRC=0;
	clr R22
	.dbline 352
; 	
; 	if(SendSbuf[0]=='S')
	lds R24,_SendSbuf
	cpi R24,83
	breq X3
	rjmp L51
X3:
	.dbline 353
; 	{
	.dbline 354
; 	 		if(!(SendSbuf[12]-0x30)) //频率选择
	lds R24,_SendSbuf+12
	subi R24,48
	brne L53
	.dbline 355
; 			{
	.dbline 356
; 			   PORTD&=0XEF; //PD4=0;CS=0';
	in R24,0x12
	andi R24,239
	out 0x12,R24
	.dbline 357
; 			}
	rjmp L54
L53:
	.dbline 359
; 			else
; 			   PORTD|=(1<<PD4);  //CS=1;
	sbi 0x12,4
L54:
	.dbline 362
; 			 
; 			
; 			if(SendSbuf[14]=='G')SendSbuf[15]='G';//最后的
	lds R24,_SendSbuf+14
	cpi R24,71
	brne L56
	.dbline 362
	ldi R24,71
	sts _SendSbuf+15,R24
	rjmp L57
L56:
	.dbline 363
; 			else  SendSbuf[15]=0;   //停止
	clr R2
	sts _SendSbuf+15,R2
L57:
	.dbline 366
; 			
; 			//发送:T-001-015<CRC> /\: T-001-015<CRC>G  --最后车发送
; 	 		for(jk=0;jk<9;jk++)  //把要发送的放在发送上
	clr R20
	rjmp L64
L61:
	.dbline 367
	.dbline 368
	ldi R24,<_SendSbuf+2
	ldi R25,>_SendSbuf+2
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 369
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	eor R22,R2
	.dbline 370
L62:
	.dbline 366
	inc R20
L64:
	.dbline 366
	cpi R20,9
	brlo L61
	.dbline 372
; 			{
; 			   SendSbuf[jk]=SendSbuf[jk+2];
; 			   CRC^=SendSbuf[jk];
; 			 }
; 			 
; 			 SendSbuf[jk]=CRC;  //jk=9;
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R22
	.dbline 373
; 			SendSbuf[10]=SendSbuf[15];
	lds R2,_SendSbuf+15
	sts _SendSbuf+10,R2
	.dbline 374
; 			SendSbuf[11]=0;
	clr R2
	sts _SendSbuf+11,R2
	.dbline 376
; 			
; 			NowSend=SendSbuf[2]-0x30;
	lds R24,_SendSbuf+2
	clr R25
	sbiw R24,48
	sts _NowSend+1,R25
	sts _NowSend,R24
	.dbline 377
; 			NowSend*=10;
	mov R18,R24
	mov R19,R25
	ldi R16,10
	ldi R17,0
	rcall mpy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 378
; 			NowSend+=(SendSbuf[3]-0x30);
	lds R24,_SendSbuf+3
	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 379
; 			NowSend*=10;
	mov R18,R2
	mov R19,R3
	ldi R16,10
	ldi R17,0
	rcall mpy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 380
; 			NowSend+=(SendSbuf[4]-0x30);
	lds R24,_SendSbuf+4
	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 382
; 			//===
; 			NowSend*=36;
	mov R18,R2
	mov R19,R3
	ldi R16,36
	ldi R17,0
	rcall mpy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 384
; 			
; 	}//end  if(SendSbuf[0]=='S')
	rjmp L52
L51:
	.dbline 385
; 	else{  //没有时候的默认值SET-001-000-0,1号车
	.dbline 386
; 	       jk=0;
	clr R20
	.dbline 387
; 	        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 388
; 			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 389
; 			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 390
; 			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 391
; 			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 392
; 			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 393
; 			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 394
; 			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 395
; 			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 396
; 			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 397
; 			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 398
; 			SendSbuf[jk++]='N';
	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,78
	std z+0,R24
	.dbline 400
; 			
; 			NowSend=36;///???????????????????????????
	ldi R24,36
	ldi R25,0
	sts _NowSend+1,R25
	sts _NowSend,R24
	.dbline 402
; 			
; 			PORTD&=0XEF; //PD4=0;CS=0';
	in R24,0x12
	andi R24,239
	out 0x12,R24
	.dbline 404
; 	
; 	}
L52:
	.dbline 406
; 	
;   SEI();
	sei
	.dbline -2
	.dbline 407
; }
L50:
	adiw R28,2
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r CRC 22 c
	.dbsym r jk 20 c
	.dbend
	.dbfunc e WRITEEEPROM _WRITEEEPROM fV
;            IDX -> R10
;            CRC -> R22
;             jk -> R20
	.even
_WRITEEEPROM::
	rcall push_gset3
	sbiw R28,2
	.dbline -1
	.dbline 409
; void WRITEEEPROM()
; {
	.dbline 411
;  	 unsigned char jk,CRC,IDX;
; 	 CLI();
	cli
	.dbline 412
; 	EEPROMWriteBytes(0, ReceiveSbuf, 18);
	ldi R24,18
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_ReceiveSbuf
	ldi R19,>_ReceiveSbuf
	clr R16
	clr R17
	rcall _EEPROMWriteBytes
	.dbline 413
; 	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 414
; 	CRC=0;
	clr R22
	.dbline 416
; 	
; 	if(SendSbuf[0]=='S')
	lds R24,_SendSbuf
	cpi R24,83
	breq X4
	rjmp L73
X4:
	.dbline 417
; 	{
	.dbline 418
; 	 		if(SendSbuf[12]-0x30)  //频率选择
	lds R24,_SendSbuf+12
	subi R24,48
	breq L75
	.dbline 419
; 			{
	.dbline 420
; 			   PORTD|=(1<<PD4);  //CS=1;
	sbi 0x12,4
	.dbline 421
; 			}
	rjmp L76
L75:
	.dbline 423
; 			else
; 			    PORTD&=0XEF; //PD4=0;CS=0';
	in R24,0x12
	andi R24,239
	out 0x12,R24
L76:
	.dbline 426
; 			
; 			
; 			if(SendSbuf[14]=='G')SendSbuf[15]='G';//最后的
	lds R24,_SendSbuf+14
	cpi R24,71
	brne L78
	.dbline 426
	ldi R24,71
	sts _SendSbuf+15,R24
	rjmp L79
L78:
	.dbline 427
; 			else  SendSbuf[15]=0;   //停止
	clr R2
	sts _SendSbuf+15,R2
L79:
	.dbline 430
; 			
; 			//发送:T-001-015<CRC> /\: T-001-015<CRC>G  --最后车发送
; 	 		for(jk=0;jk<9;jk++)  //把要发送的放在发送上
	clr R20
	rjmp L86
L83:
	.dbline 431
	.dbline 432
	ldi R24,<_SendSbuf+2
	ldi R25,>_SendSbuf+2
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 433
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	eor R22,R2
	.dbline 434
L84:
	.dbline 430
	inc R20
L86:
	.dbline 430
	cpi R20,9
	brlo L83
	.dbline 437
; 			{
; 			   SendSbuf[jk]=SendSbuf[jk+2];
; 			   CRC^=SendSbuf[jk];
; 			 }
; //------------------写 IC 卡= 司机号--------
;          //  I2C_Write(0,0X33); 12,14,16 IC卡存放处
; 		 if(!(PIND&0X08)) // IC IN 
	sbic 0x10,3
	rjmp L88
	.dbline 438
; 		 {
	.dbline 439
; 		   IDX=SendSbuf[6];
	lds R10,_SendSbuf+6
	.dbline 440
; 		   I2C_Write(12,IDX);
	mov R18,R10
	ldi R16,12
	rcall _I2C_Write
	.dbline 441
; 		     sdelay(200);
	ldi R16,200
	rcall _sdelay
	.dbline 442
; 		   IDX=SendSbuf[7];
	lds R10,_SendSbuf+7
	.dbline 443
; 		   I2C_Write(14,IDX);
	mov R18,R10
	ldi R16,14
	rcall _I2C_Write
	.dbline 444
; 		      sdelay(200);
	ldi R16,200
	rcall _sdelay
	.dbline 445
; 		   IDX=SendSbuf[8];
	lds R10,_SendSbuf+8
	.dbline 446
; 		   I2C_Write(16,IDX);
	mov R18,R10
	ldi R16,16
	rcall _I2C_Write
	.dbline 447
; 		      sdelay(200);
	ldi R16,200
	rcall _sdelay
	.dbline 448
; 		 }
L88:
	.dbline 452
; 		 
; //-----------------------------------------
; 			 
; 			SendSbuf[jk]=CRC;  //jk=9;
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R22
	.dbline 453
; 			SendSbuf[++jk]=SendSbuf[15];
	mov R24,R20
	subi R24,255    ; addi 1
	mov R2,R24
	mov R20,R24
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	lds R2,_SendSbuf+15
	std z+0,R2
	.dbline 454
; 			SendSbuf[++jk]=0;
	mov R24,R20
	subi R24,255    ; addi 1
	mov R2,R24
	mov R20,R24
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 455
; 			NowSend=SendSbuf[2]-0x30;
	lds R24,_SendSbuf+2
	clr R25
	sbiw R24,48
	sts _NowSend+1,R25
	sts _NowSend,R24
	.dbline 456
; 			NowSend*=10;
	mov R18,R24
	mov R19,R25
	ldi R16,10
	ldi R17,0
	rcall mpy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 457
; 			NowSend+=(SendSbuf[3]-0x30);
	lds R24,_SendSbuf+3
	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 458
; 			NowSend*=10;
	mov R18,R2
	mov R19,R3
	ldi R16,10
	ldi R17,0
	rcall mpy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 459
; 			NowSend+=(SendSbuf[4]-0x30);
	lds R24,_SendSbuf+4
	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 460
; 			NowSend*=36;
	mov R18,R2
	mov R19,R3
	ldi R16,36
	ldi R17,0
	rcall mpy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 462
; 			
; 	}//end  if(SendSbuf[0]=='S')
L73:
	.dbline 465
; 	
; 	
;   SEI();
	sei
	.dbline -2
	.dbline 466
; }
L72:
	adiw R28,2
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r IDX 10 c
	.dbsym r CRC 22 c
	.dbsym r jk 20 c
	.dbend
	.dbfunc e PTR2K_SEND _PTR2K_SEND fV
	.even
_PTR2K_SEND::
	.dbline -1
	.dbline 474
; 
; 
; /************************************************************
; 				PTR2000 SET FUNC
; *******************************************************
; */
; void PTR2K_SEND()
; {
	.dbline 475
;     PORTD|=(1<<PD6)|(1<<PD5);
	in R24,0x12
	ori R24,96
	out 0x12,R24
	.dbline -2
	.dbline 476
; }
L97:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e PTR2K_RECEIVE _PTR2K_RECEIVE fV
	.even
_PTR2K_RECEIVE::
	.dbline -1
	.dbline 479
; 
; void PTR2K_RECEIVE()
; {
	.dbline 480
;     PORTD|=(1<<PD6)|(1<<PD5);
	in R24,0x12
	ori R24,96
	out 0x12,R24
	.dbline 481
; 	PORTD&=0XBF;
	in R24,0x12
	andi R24,191
	out 0x12,R24
	.dbline -2
	.dbline 483
; 	//CS=0/1 在SET-后就设定好,以后不要动 
; }
L98:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e sdelay _sdelay fV
;              k -> R16
	.even
_sdelay::
	.dbline -1
	.dbline 495
; 
; /********************************
; 								 I2C 模拟
; 
; *************************************************************/
; //--i2c \
; 
; //#define Start()    	  (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
; //#define Stop()     	  (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
; //#define Wait()	   	  {while(!(TWCR&(1<<TWINT)));}
; void sdelay(unsigned char k)
; {
L100:
	.dbline 496
L101:

⌨️ 快捷键说明

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