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

📄 test2.s

📁 实现mega8的isp操作
💻 S
📖 第 1 页 / 共 4 页
字号:
	adc R31,R25
	ldi R24,45
	std z+0,R24
	.dbline 506
; 			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 507
; 			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 508
; 			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 509
; 			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 510
; 			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 511
; 			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 513
; 			
; 			NowSend=2000;///???????????????????????????
	ldi R24,2000
	ldi R25,7
	sts _NowSend+1,R25
	sts _NowSend,R24
	.dbline 514
; 			NowSend2=NowSend;
	mov R2,R24
	mov R3,R25
	sts _NowSend2+1,R3
	sts _NowSend2,R2
	.dbline 516
; 			
; 			PORTD&=0XEF; //PD4=0;CS=0';
	in R24,0x12
	andi R24,239
	out 0x12,R24
	.dbline 518
; 	
; 	}
L115:
	.dbline 520
; 	
;   SEI();
	sei
	.dbline -2
	.dbline 521
; }
L113:
	adiw R28,2
	rcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r CRC 22 c
	.dbsym r temp 10 c
	.dbsym r k 12 c
	.dbsym r jk 20 c
	.dbend
	.dbfunc e WRITEEEPROM _WRITEEEPROM fV
;            IDX -> R22
;            CRC -> R20
;           temp -> R22
;             jk -> R10
;              k -> R12
	.even
_WRITEEEPROM::
	rcall push_gset4
	sbiw R28,2
	.dbline -1
	.dbline 523
; void WRITEEEPROM()
; {
	.dbline 525
;  	 unsigned char jk,CRC,IDX,temp,k;
; 	 CLI();
	cli
	.dbline 526
; 	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 527
; 	sdelay(200);
	ldi R16,200
	rcall _sdelay
	.dbline 528
; 	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 529
; 	CRC=0;
	clr R20
	.dbline 531
; 	
; 	if(SendSbuf[0]=='S')
	lds R24,_SendSbuf
	cpi R24,83
	breq X6
	rjmp L140
X6:
	.dbline 532
; 	{
	.dbline 533
; 	 		if(!(SendSbuf[13]-0x31))  //频率选择
	lds R24,_SendSbuf+13
	subi R24,49
	brne L142
	.dbline 534
; 			{
	.dbline 535
; 			     PORTD|=(1<<PD4);  //CS=1;
	sbi 0x12,4
	.dbline 536
; 			}
	rjmp L143
L142:
	.dbline 538
; 			else
; 			   PORTD&=0XEF; //PD4=0;CS=0';
	in R24,0x12
	andi R24,239
	out 0x12,R24
L143:
	.dbline 541
; //---确定等待时间----//
; 			
; 			NowSend=SendSbuf[4]-0x30;
	lds R24,_SendSbuf+4
	clr R25
	sbiw R24,48
	sts _NowSend+1,R25
	sts _NowSend,R24
	.dbline 542
; 			NowSend*=10;
	mov R18,R24
	mov R19,R25
	ldi R16,10
	ldi R17,0
	rcall mpy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 543
; 			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 544
; 			NowSend*=10;
	mov R18,R2
	mov R19,R3
	ldi R16,10
	ldi R17,0
	rcall mpy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 545
; 			NowSend+=(SendSbuf[6]-0x30);
	lds R24,_SendSbuf+6
	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 547
; 			//NowSend+=10;  //延时后志发送
; 			NowSend*=36;
	mov R18,R2
	mov R19,R3
	ldi R16,36
	ldi R17,0
	rcall mpy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 548
; 			NowSend+=1000;
	mov R24,R16
	mov R25,R17
	subi R24,24  ; offset = 1000
	sbci R25,252
	sts _NowSend+1,R25
	sts _NowSend,R24
	.dbline 549
; 			NowSend2=NowSend;
	mov R2,R24
	mov R3,R25
	sts _NowSend2+1,R3
	sts _NowSend2,R2
	.dbline 555
; 
; //-------------			   
; 
; 			
; 			
; 			if(SendSbuf[14]=='G')SendSbuf[15]='G';//最后的
	lds R24,_SendSbuf+14
	cpi R24,71
	brne L148
	.dbline 555
	ldi R24,71
	sts _SendSbuf+15,R24
	rjmp L149
L148:
	.dbline 556
; 			else  SendSbuf[15]=0;   //停止
	clr R2
	sts _SendSbuf+15,R2
L149:
	.dbline 566
; 			
; 			//发送:T-001-015<CRC> /\: T-001-015<CRC>G  --最后车发送
; //	 		for(jk=0;jk<9;jk++)  //把要发送的放在发送上
; //			{
; 	//		   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 L153
	.dbline 567
; 		 {
	.dbline 568
; 		   IDX=SendSbuf[6];
	lds R22,_SendSbuf+6
	.dbline 569
; 		   I2C_Write(12,IDX);
	mov R18,R22
	ldi R16,12
	rcall _I2C_Write
	.dbline 570
; 		     sdelay(200);
	ldi R16,200
	rcall _sdelay
	.dbline 571
; 		   IDX=SendSbuf[7];
	lds R22,_SendSbuf+7
	.dbline 572
; 		   I2C_Write(14,IDX);
	mov R18,R22
	ldi R16,14
	rcall _I2C_Write
	.dbline 573
; 		      sdelay(200);
	ldi R16,200
	rcall _sdelay
	.dbline 574
; 		   IDX=SendSbuf[8];
	lds R22,_SendSbuf+8
	.dbline 575
; 		   I2C_Write(16,IDX);
	mov R18,R22
	ldi R16,16
	rcall _I2C_Write
	.dbline 576
; 		      sdelay(200);
	ldi R16,200
	rcall _sdelay
	.dbline 577
; 		 }
L153:
	.dbline 582
; 		 
; //-----------------------------------------
; 
; 
; 	 		for(jk=2;jk<5;jk++)  //把要发送的放在发送上
	ldi R24,2
	mov R10,R24
	rjmp L161
L158:
	.dbline 583
	.dbline 585
	ldi R24,<_SendSbuf+6
	ldi R25,>_SendSbuf+6
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldd R22,z+0
	.dbline 586
	mov R24,R10
	subi R24,1
	mov R12,R24
	lsl R12
	.dbline 587
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	mov R24,R22
	swap R24
	andi R24,#0x0F
	subi R24,208    ; addi 48
	std z+0,R24
	.dbline 588
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	eor R20,R2
	.dbline 589
	ldi R24,<_SendSbuf+1
	ldi R25,>_SendSbuf+1
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	mov R24,R22
	andi R24,15
	subi R24,208    ; addi 48
	std z+0,R24
	.dbline 590
	ldi R24,<_SendSbuf+1
	ldi R25,>_SendSbuf+1
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	eor R20,R2
	.dbline 592
L159:
	.dbline 582
	inc R10
L161:
	.dbline 582
	mov R24,R10
	cpi R24,5
	brsh X7
	rjmp L158
X7:
	.dbline 594
; 			{
; 			 
; 			   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,R20
	.dbline 595
; 			SendSbuf[11]=SendSbuf[15];
	lds R2,_SendSbuf+15
	sts _SendSbuf+11,R2
	.dbline 596
; 			SendSbuf[12]=0;
	clr R2
	sts _SendSbuf+12,R2
	.dbline 598
; 			//-----
; 			SendSbuf[0]='T';
	ldi R24,84
	sts _SendSbuf,R24
	.dbline 599
; 			SendSbuf[1]='-';
	ldi R24,45
	sts _SendSbuf+1,R24
	.dbline 602
; 			
; 			
; 	}//end  if(SendSbuf[0]=='S')
L140:
	.dbline 605
; 	
; 	
;   SEI();
	sei
	.dbline -2
	.dbline 606
; }
L139:
	adiw R28,2
	rcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r IDX 22 c
	.dbsym r CRC 20 c
	.dbsym r temp 22 c
	.dbsym r jk 10 c
	.dbsym r k 12 c
	.dbend
	.dbfunc e PTR2K_SEND _PTR2K_SEND fV
	.even
_PTR2K_SEND::
	.dbline -1
	.dbline 614
; 
; 
; /************************************************************
; 				PTR2000 SET FUNC
; *******************************************************
; */
; void PTR2K_SEND()
; {
	.dbline 615
;     PORTD|=(1<<PD6)|(1<<PD5);
	in R24,0x12
	ori R24,96
	out 0x12,R24
	.dbline -2
	.dbline 616
; }
L170:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e PTR2K_RECEIVE _PTR2K_RECEIVE fV
	.even
_PTR2K_RECEIVE::
	.dbline -1
	.dbline 619
; 
; void PTR2K_RECEIVE()
; {
	.dbline 620
;     PORTD|=(1<<PD6)|(1<<PD5);
	in R24,0x12
	ori R24,96
	out 0x12,R24
	.dbline 621
; 	PORTD&=0XBF;
	in R24,0x12
	andi R24,191
	out 0x12,R24
	.dbline -2
	.dbline 623
; 	//CS=0/1 在SET-后就设定好,以后不要动 
; }
L171:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e sdelay _sdelay fV
;              k -> R16
	.even
_sdelay::
	.dbline -1
	.dbline 635
; 
; /********************************
; 								 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)
; {
L173:
	.dbline 636
L174:
	.dbline 636
;      while(k--);
	mov R2,R16
	clr R3
	subi R16,1
	tst R2
	brne L173
	.dbline -2
	.dbline 637
; }
L172:
	.dbline 0 ; func end
	ret
	.dbsym r k 16 c
	.dbend
	.dbfunc e I2C_Reset _I2C_Reset fV
	.even
_I2C_Reset::
	.dbline -1
	.dbline 639
; void I2C_Reset()
; {
	.dbline 640
;  	 CSL();
	in R24,0x15
	andi R24,251
	out 0x15,R24
	.dbline 641
; 	 RSTL();
	in R24,0x15
	andi R24,223
	out 0x15,R24
	.dbline 642
; 	 SCLL();
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 643
; 	 sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 644
; 	 RSTH();
	sbi 0x15,5
	.dbline 646
; 	 
; 	 sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 647
; 	 SCLH();
	sbi 0x15,4
	.dbline 648
; 	 sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 649
; 	 SCLL();
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 650
; 	 sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 651
; 	 RSTL();
	in R24,0x15
	andi R24,223
	out 0x15,R24
	.dbline -2
	.dbline 652
; }
L176:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e I2C_Start _I2C_Start fV
	.even
_I2C_Start::
	.dbline -1
	.dbline 654
; void I2C_Start() //9
; {
	.dbline 655
;  	 DDRC=0Xff;
	ldi R24,255
	out 0x14,R24
	.dbline 656
;  	 SDAH();
	sbi 0x15,1
	.dbline 658
; 	//  sdelay(10);
; 	 SCLH();
	sbi 0x15,4
	.dbline 660
; 	 //---------
; 	  sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 661
; 	  SDAL();
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 662
; 	  sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 664
; 	   //----
; 	   SCLL();
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 665
; 	   sdelay(10);
	ldi R16,10
	.dbline -2
	.dbline 667
; 	 
; }
L177:
	.dbline 0 ; func end
	rjmp _sdelay
	.dbend
	.dbfunc e I2C_Stop _I2C_Stop fV
	.even
_I2C_Stop::
	.dbline -1
	.dbline 670
; 
; void I2C_Stop() //8
; {
	.dbline 672
;     //DDRC=0Xff;
; 	SDAL();
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 673
; 	SCLH();
	sbi 0x15,4
	.dbline 674
; 	sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 675
; 	SDAH();
	sbi 0x15,1
	.dbline 676
; 	sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 677
; 	SCLL();
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 678
; 	SDAL();
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 679
; 	sdelay(10);
	ldi R16,10
	.dbline -2
	.dbline 681
; 	
; }
L178:
	.dbline 0 ; func end
	rjmp _sdelay
	.dbend
	.dbfunc e I2C_ACK _I2C_ACK fV
	.even
_I2C_ACK::
	.dbline -1
	.dbline 684
; 
; void I2C_ACK() //7
; {
	.dbline 685
;    SDAL();
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 686
;    SCLH();
	sbi 0x15,4
	.dbline 687
;    sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 688
;    SCLL();
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 689
;    SDAH();
	sbi 0x15,1
	.dbline 690
;    sdelay(10);
	ldi R16,10
	.dbline -2
	.dbline 691
; }
L179:
	.dbline 0 ; func end
	rjmp _sdelay
	.dbend
	.dbfunc e I2C_NACK _I2C_NACK fV
	.even
_I2C_NACK::
	.dbline -1
	.dbline 694
; 
; void I2C_NACK() //66
; {

⌨️ 快捷键说明

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