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

📄 p_test.s

📁 实现mega8的isp操作
💻 S
📖 第 1 页 / 共 4 页
字号:
	ldi R24,78
	std z+0,R24
	.dbline 499
; 			
; 			NowSend=1000;///???????????????????????????
	ldi R24,1000
	ldi R25,3
	sts _NowSend+1,R25
	sts _NowSend,R24
	.dbline 500
; 			NowSend2=NowSend;
	movw R2,R24
	sts _NowSend2+1,R3
	sts _NowSend2,R2
	.dbline 502
; 			
; 			PORTD&=0XEF; //PD4=0;CS=0';
	in R24,0x12
	andi R24,239
	out 0x12,R24
	.dbline 504
; 	
; 	}
L93:
	.dbline 506
; 	
;   SEI();
	sei
	.dbline -2
	.dbline 507
; }
L91:
	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 509
; void WRITEEEPROM()
; {
	.dbline 511
;  	 unsigned char jk,CRC,IDX,temp,k;
; 	 CLI();
	cli
	.dbline 512
; 	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 513
; 	sdelay(200);
	ldi R16,200
	rcall _sdelay
	.dbline 514
; 	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 515
; 	CRC=0;
	clr R20
	.dbline 517
; 	
; 	if(SendSbuf[0]=='S')
	lds R24,_SendSbuf
	cpi R24,83
	breq X4
	rjmp L118
X4:
	.dbline 518
; 	{
	.dbline 519
; 	 		if(!(SendSbuf[13]-0x31))  //频率选择
	lds R24,_SendSbuf+13
	subi R24,49
	brne L120
	.dbline 520
; 			{
	.dbline 521
; 			     PORTD|=(1<<PD4);  //CS=1;
	sbi 0x12,4
	.dbline 522
; 			}
	rjmp L121
L120:
	.dbline 524
; 			else
; 			   PORTD&=0XEF; //PD4=0;CS=0';
	in R24,0x12
	andi R24,239
	out 0x12,R24
L121:
	.dbline 527
; //---确定等待时间----//
; 			
; 			NowSend=SendSbuf[4]-0x30;
	lds R24,_SendSbuf+4
	clr R25
	sbiw R24,48
	sts _NowSend+1,R25
	sts _NowSend,R24
	.dbline 528
; 			NowSend*=10;
	movw R18,R24
	ldi R16,10
	ldi R17,0
	rcall empy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 529
; 			NowSend+=(SendSbuf[5]-0x30);
	lds R24,_SendSbuf+5
	clr R25
	sbiw R24,48
	movw R2,R16
	add R2,R24
	adc R3,R25
	sts _NowSend+1,R3
	sts _NowSend,R2
	.dbline 530
; 			NowSend*=10;
	movw R18,R2
	ldi R16,10
	ldi R17,0
	rcall empy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 531
; 			NowSend+=(SendSbuf[6]-0x30);
	lds R24,_SendSbuf+6
	clr R25
	sbiw R24,48
	movw R2,R16
	add R2,R24
	adc R3,R25
	sts _NowSend+1,R3
	sts _NowSend,R2
	.dbline 533
; 			//NowSend+=10;  //延时后志发送
; 			NowSend*=36;
	movw R18,R2
	ldi R16,36
	ldi R17,0
	rcall empy16s
	sts _NowSend+1,R17
	sts _NowSend,R16
	.dbline 534
; 			NowSend+=1000;
	movw R24,R16
	subi R24,24  ; offset = 1000
	sbci R25,252
	sts _NowSend+1,R25
	sts _NowSend,R24
	.dbline 535
; 			NowSend2=NowSend;
	movw R2,R24
	sts _NowSend2+1,R3
	sts _NowSend2,R2
	.dbline 541
; 
; //-------------			   
; 
; 			
; 			
; 			if(SendSbuf[14]=='G')SendSbuf[15]='G';//最后的
	lds R24,_SendSbuf+14
	cpi R24,71
	brne L126
	.dbline 541
	ldi R24,71
	sts _SendSbuf+15,R24
	rjmp L127
L126:
	.dbline 542
; 			else  SendSbuf[15]=0;   //停止
	clr R2
	sts _SendSbuf+15,R2
L127:
	.dbline 552
; 			
; 			//发送: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 L131
	.dbline 553
; 		 {
	.dbline 554
; 		   IDX=SendSbuf[6];
	lds R22,_SendSbuf+6
	.dbline 555
; 		   I2C_Write(12,IDX);
	mov R18,R22
	ldi R16,12
	rcall _I2C_Write
	.dbline 556
; 		     sdelay(200);
	ldi R16,200
	rcall _sdelay
	.dbline 557
; 		   IDX=SendSbuf[7];
	lds R22,_SendSbuf+7
	.dbline 558
; 		   I2C_Write(14,IDX);
	mov R18,R22
	ldi R16,14
	rcall _I2C_Write
	.dbline 559
; 		      sdelay(200);
	ldi R16,200
	rcall _sdelay
	.dbline 560
; 		   IDX=SendSbuf[8];
	lds R22,_SendSbuf+8
	.dbline 561
; 		   I2C_Write(16,IDX);
	mov R18,R22
	ldi R16,16
	rcall _I2C_Write
	.dbline 562
; 		      sdelay(200);
	ldi R16,200
	rcall _sdelay
	.dbline 563
; 		 }
L131:
	.dbline 568
; 		 
; //-----------------------------------------
; 
; 
; 	 		for(jk=2;jk<5;jk++)  //把要发送的放在发送上
	ldi R24,2
	mov R10,R24
	rjmp L139
L136:
	.dbline 569
	.dbline 571
	ldi R24,<_SendSbuf+6
	ldi R25,>_SendSbuf+6
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldd R22,z+0
	.dbline 572
	ldi R24,2
	mul R24,R10
	mov R24,R0
	subi R24,2
	mov R12,R24
	.dbline 573
	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 574
	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 575
	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 576
	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 578
L137:
	.dbline 568
	inc R10
L139:
	.dbline 568
	mov R24,R10
	cpi R24,5
	brsh X5
	rjmp L136
X5:
	.dbline 580
; 			{
; 			 
; 			   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 581
; 			SendSbuf[11]=SendSbuf[15];
	lds R2,_SendSbuf+15
	sts _SendSbuf+11,R2
	.dbline 582
; 			SendSbuf[12]=0;
	clr R2
	sts _SendSbuf+12,R2
	.dbline 584
; 			//-----
; 			SendSbuf[0]='T';
	ldi R24,84
	sts _SendSbuf,R24
	.dbline 585
; 			SendSbuf[1]='-';
	ldi R24,45
	sts _SendSbuf+1,R24
	.dbline 588
; 			
; 			
; 	}//end  if(SendSbuf[0]=='S')
L118:
	.dbline 591
; 	
; 	
;   SEI();
	sei
	.dbline -2
	.dbline 592
; }
L117:
	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 600
; 
; 
; /************************************************************
; 				PTR2000 SET FUNC
; *******************************************************
; */
; void PTR2K_SEND()
; {
	.dbline 601
;     PORTD|=(1<<PD6)|(1<<PD5);
	in R24,0x12
	ori R24,96
	out 0x12,R24
	.dbline -2
	.dbline 602
; }
L148:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e PTR2K_RECEIVE _PTR2K_RECEIVE fV
	.even
_PTR2K_RECEIVE::
	.dbline -1
	.dbline 605
; 
; void PTR2K_RECEIVE()
; {
	.dbline 606
;     PORTD|=(1<<PD6)|(1<<PD5);
	in R24,0x12
	ori R24,96
	out 0x12,R24
	.dbline 607
; 	PORTD&=0XBF;
	in R24,0x12
	andi R24,191
	out 0x12,R24
	.dbline -2
	.dbline 609
; 	//CS=0/1 在SET-后就设定好,以后不要动 
; }
L149:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e sdelay _sdelay fV
;              k -> R16
	.even
_sdelay::
	.dbline -1
	.dbline 621
; 
; /********************************
; 								 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)
; {
L151:
	.dbline 622
L152:
	.dbline 622
;      while(k--);
	mov R2,R16
	clr R3
	subi R16,1
	tst R2
	brne L151
	.dbline -2
	.dbline 623
; }
L150:
	.dbline 0 ; func end
	ret
	.dbsym r k 16 c
	.dbend
	.dbfunc e I2C_Reset _I2C_Reset fV
	.even
_I2C_Reset::
	.dbline -1
	.dbline 625
; void I2C_Reset()
; {
	.dbline 626
;  	 CSL();
	in R24,0x15
	andi R24,251
	out 0x15,R24
	.dbline 627
; 	 RSTL();
	in R24,0x15
	andi R24,223
	out 0x15,R24
	.dbline 628
; 	 SCLL();
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 629
; 	 sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 630
; 	 RSTH();
	sbi 0x15,5
	.dbline 632
; 	 
; 	 sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 633
; 	 SCLH();
	sbi 0x15,4
	.dbline 634
; 	 sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 635
; 	 SCLL();
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 636
; 	 sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 637
; 	 RSTL();
	in R24,0x15
	andi R24,223
	out 0x15,R24
	.dbline -2
	.dbline 638
; }
L154:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e I2C_Start _I2C_Start fV
	.even
_I2C_Start::
	.dbline -1
	.dbline 640
; void I2C_Start() //9
; {
	.dbline 641
;  	 DDRC=0Xff;
	ldi R24,255
	out 0x14,R24
	.dbline 642
;  	 SDAH();
	sbi 0x15,1
	.dbline 644
; 	//  sdelay(10);
; 	 SCLH();
	sbi 0x15,4
	.dbline 646
; 	 //---------
; 	  sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 647
; 	  SDAL();
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 648
; 	  sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 650
; 	   //----
; 	   SCLL();
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 651
; 	   sdelay(10);
	ldi R16,10
	.dbline -2
	.dbline 653
; 	 
; }
L155:
	.dbline 0 ; func end
	rjmp _sdelay
	.dbend
	.dbfunc e I2C_Stop _I2C_Stop fV
	.even
_I2C_Stop::
	.dbline -1
	.dbline 656
; 
; void I2C_Stop() //8
; {
	.dbline 658
;     //DDRC=0Xff;
; 	SDAL();
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 659
; 	SCLH();
	sbi 0x15,4
	.dbline 660
; 	sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 661
; 	SDAH();
	sbi 0x15,1
	.dbline 662
; 	sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 663
; 	SCLL();
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 664
; 	SDAL();
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 665
; 	sdelay(10);
	ldi R16,10
	.dbline -2
	.dbline 667
; 	
; }
L156:
	.dbline 0 ; func end
	rjmp _sdelay
	.dbend
	.dbfunc e I2C_ACK _I2C_ACK fV
	.even
_I2C_ACK::
	.dbline -1
	.dbline 670
; 
; void I2C_ACK() //7
; {
	.dbline 671
;    SDAL();
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 672
;    SCLH();
	sbi 0x15,4
	.dbline 673
;    sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 674
;    SCLL();
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 675
;    SDAH();
	sbi 0x15,1
	.dbline 676
;    sdelay(10);
	ldi R16,10
	.dbline -2
	.dbline 677
; }
L157:
	.dbline 0 ; func end
	rjmp _sdelay
	.dbend
	.dbfunc e I2C_NACK _I2C_NACK fV
	.even
_I2C_NACK::
	.dbline -1
	.dbline 680
; 
; void I2C_NACK() //66
; {
	.dbline 681
;    SDAH();
	sbi 0x15,1
	.dbline 682
;    SCLH();
	sbi 0x15,4
	.dbline 683
;    sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 684
;    SCLL();
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 685
;    SDAL();
	in R24,0x15
	andi R24,253
	out 0x15,R24
	.dbline 686
;    sdelay(10);
	ldi R16,10
	.dbline -2
	.dbline 688
; 
; }
L158:
	.dbline 0 ; func end
	rjmp _sdelay
	.dbend
	.dbfunc e I2C_CACK _I2C_CACK fV
	.even
_I2C_CACK::
	.dbline -1
	.dbline 690
; void I2C_CACK()   //55
; {
	.dbline 693
; 
;    //SDAH();
;    SCLH();
	sbi 0x15,4
	.dbline 694
;      sdelay(10);
	ldi R16,10
	rcall _sdelay
	.dbline 695
;   SDAIN();//----
	in R24,0x14
	andi R24,223
	out 0x14,R24
	.dbline 696
;      sdelay(10);
	ldi R16,10
	rcall _sdelay
	.dbline 697
;    SCLH();
	sbi 0x15,4
	.dbline 698
;    sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 699
;    SCLL();
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 700
;      sdelay(10);

⌨️ 快捷键说明

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