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

📄 p_test.s

📁 实现mega8的isp操作
💻 S
📖 第 1 页 / 共 4 页
字号:
	ldi R16,10
	rcall _sdelay
	.dbline 702
; 	 
;    SDAOUT();
	ldi R24,255
	out 0x14,R24
	.dbline 703
;      sdelay(10);
	ldi R16,10
	.dbline -2
	.dbline 705
; 
; }
L159:
	.dbline 0 ; func end
	rjmp _sdelay
	.dbend
	.dbfunc e I2C_WriteByte _I2C_WriteByte fV
;              k -> <dead>
;              j -> <dead>
;              i -> R22
;          WByte -> R20
	.even
_I2C_WriteByte::
	rcall push_gset2
	mov R20,R16
	.dbline -1
	.dbline 708
; 
; void I2C_WriteByte(unsigned char WByte)  //44
; {
	.dbline 710
;   unsigned char i,j,k;
;   DDRC=0XFF;
	ldi R24,255
	out 0x14,R24
	.dbline 711
;   for(i=0;i<8;i++)
	clr R22
	rjmp L164
L161:
	.dbline 712
;   {
	.dbline 714
;         
;    		if(WByte&0x80) SDAH();
	sbrs R20,7
	rjmp L165
	.dbline 714
	sbi 0x15,1
	rjmp L166
L165:
	.dbline 715
; 		else SDAL();
	in R24,0x15
	andi R24,253
	out 0x15,R24
L166:
	.dbline 716
	ldi R16,10
	rcall _sdelay
	.dbline 717
	sbi 0x15,4
	.dbline 718
	ldi R16,100
	rcall _sdelay
	.dbline 719
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 720
	ldi R16,100
	rcall _sdelay
	.dbline 721
	lsl R20
	.dbline 723
L162:
	.dbline 711
	inc R22
L164:
	.dbline 711
	cpi R22,8
	brlo L161
	.dbline -2
	.dbline 726
; 		sdelay(10);
; 		SCLH();
; 		sdelay(100);
; 		SCLL();
; 		sdelay(100);
; 		WByte<<=1;
;   
;   }
;   
; 
; }
L160:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l k 1 c
	.dbsym l j 1 c
	.dbsym r i 22 c
	.dbsym r WByte 20 c
	.dbend
	.dbfunc e I2C_ReadByte _I2C_ReadByte fc
;              i -> R20
;         RDbyte -> R22
	.even
_I2C_ReadByte::
	rcall push_gset2
	.dbline -1
	.dbline 729
; 
; unsigned char  I2C_ReadByte() //33
; {
	.dbline 731
;    unsigned char i,RDbyte;
;    SDAIN();
	in R24,0x14
	andi R24,223
	out 0x14,R24
	.dbline 732
;   DDRC=0XFD;
	ldi R24,253
	out 0x14,R24
	.dbline 733
;    RDbyte=0;
	clr R22
	.dbline 734
;   for(i=0;i<8;i++)
	clr R20
	rjmp L171
L168:
	.dbline 735
;   {
	.dbline 736
;    		SCLH();
	sbi 0x15,4
	.dbline 737
; 		sdelay(100);
	ldi R16,100
	rcall _sdelay
	.dbline 739
; 		//SDA-->PC1
; 		if(PINC&0X02) //??
	sbis 0x13,1
	rjmp L172
	.dbline 740
; 		 {   RDbyte<<=1;
	.dbline 740
	lsl R22
	.dbline 741
; 		     RDbyte|=0x01;
	ori R22,1
	.dbline 742
; 		 }
	rjmp L173
L172:
	.dbline 744
; 		else
; 		{
	.dbline 745
; 		 RDbyte<<=1;
	lsl R22
	.dbline 746
; 		   RDbyte&=0xfe;
	andi R22,254
	.dbline 747
; 		}
L173:
	.dbline 748
	ldi R16,10
	rcall _sdelay
	.dbline 749
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 751
L169:
	.dbline 734
	inc R20
L171:
	.dbline 734
	cpi R20,8
	brlo L168
	.dbline 753
; 		sdelay(10);
; 		SCLL();
; 		
;   }
;   //SDAOUT();
;   DDRC=0XFF;
	ldi R24,255
	out 0x14,R24
	.dbline 754
;   return RDbyte;
	mov R16,R22
	.dbline -2
L167:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r RDbyte 22 c
	.dbend
	.dbfunc e I2C_Read _I2C_Read fc
;              i -> <dead>
;              k -> R20
;           addr -> R20
	.even
_I2C_Read::
	rcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 758
; }
; 
; unsigned char  I2C_Read(unsigned char addr)  //22
; {
	.dbline 760
;   unsigned char i,k;
;   I2C_Start();
	rcall _I2C_Start
	.dbline 761
;   I2C_WriteByte(0xa0);//写 CONTRL
	ldi R16,160
	rcall _I2C_WriteByte
	.dbline 762
;   I2C_CACK();
	rcall _I2C_CACK
	.dbline 763
;   sdelay(10);
	ldi R16,10
	rcall _sdelay
	.dbline 765
;   
;   I2C_WriteByte(addr);
	mov R16,R20
	rcall _I2C_WriteByte
	.dbline 766
;   I2C_CACK();
	rcall _I2C_CACK
	.dbline 767
;   sdelay(10);
	ldi R16,10
	rcall _sdelay
	.dbline 769
;   
;   I2C_Start();
	rcall _I2C_Start
	.dbline 771
;   
;   I2C_WriteByte(0xa1);//读控制字符 CONTRL
	ldi R16,161
	rcall _I2C_WriteByte
	.dbline 772
;   I2C_CACK();
	rcall _I2C_CACK
	.dbline 773
;   sdelay(10);
	ldi R16,10
	rcall _sdelay
	.dbline 774
;   k=I2C_ReadByte();
	rcall _I2C_ReadByte
	mov R20,R16
	.dbline 775
;   I2C_NACK();
	rcall _I2C_NACK
	.dbline 776
;   I2C_Stop();
	rcall _I2C_Stop
	.dbline 777
;   return k;
	mov R16,R20
	.dbline -2
L174:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l i 1 c
	.dbsym r k 20 c
	.dbsym r addr 20 c
	.dbend
	.dbfunc e I2C_Write _I2C_Write fV
;              k -> <dead>
;              i -> <dead>
;          Wbyte -> R20
;           addr -> R22
	.even
_I2C_Write::
	rcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 781
; }
; //---写I2C
; void I2C_Write(unsigned char addr,unsigned char Wbyte) // 111
; {
	.dbline 783
;  unsigned char i,k;
;   I2C_Start();
	rcall _I2C_Start
	.dbline 784
;   I2C_WriteByte(0xa0);//写 CONTRL
	ldi R16,160
	rcall _I2C_WriteByte
	.dbline 785
;   I2C_CACK();
	rcall _I2C_CACK
	.dbline 786
;   sdelay(10);
	ldi R16,10
	rcall _sdelay
	.dbline 787
;   I2C_WriteByte(addr);
	mov R16,R22
	rcall _I2C_WriteByte
	.dbline 788
;   I2C_CACK();
	rcall _I2C_CACK
	.dbline 789
;   sdelay(10);
	ldi R16,10
	rcall _sdelay
	.dbline 790
;   I2C_WriteByte(Wbyte);
	mov R16,R20
	rcall _I2C_WriteByte
	.dbline 791
;    I2C_CACK();
	rcall _I2C_CACK
	.dbline 792
;    sdelay(10);
	ldi R16,10
	rcall _sdelay
	.dbline 793
;    I2C_Stop();
	rcall _I2C_Stop
	.dbline -2
	.dbline 795
; 
; }
L175:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l k 1 c
	.dbsym l i 1 c
	.dbsym r Wbyte 20 c
	.dbsym r addr 22 c
	.dbend
	.dbfunc e IC_Num_Read _IC_Num_Read fV
;       count_ff -> R22
;            crc -> R20
;          datax -> y+2
;              j -> R10
;              i -> R12
	.even
_IC_Num_Read::
	rcall push_gset4
	sbiw R28,3
	.dbline -1
	.dbline 799
; 
; //----------- IC 卡处理-----------//
; void IC_Num_Read()
; {
	.dbline 804
; //老板,PD3=0,插卡了 ,卡座常闭合
; 		unsigned char datax,count_ff;
; 		unsigned char  j,i,crc;
; 		
; 	if(PIND!=0XA3) ICRead=0;  //IC卡没有了
	in R24,0x10
	cpi R24,163
	breq L177
	.dbline 804
	clr R2
	sts _ICRead,R2
L177:
	.dbline 806
; 	
; 	if((PIND==0XA3)&&(ICRead<5))
	in R24,0x10
	cpi R24,163
	breq X6
	rjmp L179
X6:
	lds R24,_ICRead
	cpi R24,5
	brlo X7
	rjmp L179
X7:
	.dbline 807
; 	{
	.dbline 809
; 	//---关 看门狗--//
; 	WDTCR=(1<<WDCE)|(1<<WDE);
	ldi R24,24
	out 0x21,R24
	.dbline 810
; 	WDTCR=(0<<WDE);
	clr R2
	out 0x21,R2
	.dbline 813
; 	//------------
; 	//	ICRead=0;
; 	    crc=0;
	clr R20
	.dbline 814
; 		T0_Count=0; //0.023 s  add
	sts _T0_Count,R2
L181:
	.dbline 815
L182:
	.dbline 815
; 		while(T0_Count<40);// 延时等待
	lds R24,_T0_Count
	cpi R24,40
	brlo L181
	.dbline 818
; 		//IC卡:2,3,4,5,  司机号保存处
; 		//--写SendSbuf[];
; 		sdelay(200);
	ldi R16,200
	rcall _sdelay
	.dbline 819
; 		CLI();
	cli
	.dbline 820
; 		count_ff=0;
	clr R22
	.dbline 822
; //-----------------	for(j=2;j<6;j++)--------------------//		
; 								for(j=2;j<6;j++)
	ldi R24,2
	mov R10,R24
	rjmp L187
L184:
	.dbline 823
; 								{
	.dbline 827
; 		 													// datax=I2C_Read(j*2);
; 																//  if((datax>47)&&(datax<60)) //是ASCII CODE
; 		  												 //   {//写发送
; 		   												i=2*(j-1);
	ldi R24,2
	mul R24,R10
	mov R24,R0
	subi R24,2
	mov R12,R24
	.dbline 828
; 			   											datax=I2C_Read(j); //I2C_Write(0,0X33);
	mov R16,R10
	rcall _I2C_Read
	std y+2,R16
	.dbline 831
; 																	
; 											//------消除0XFF--------//
; 																	if(datax==0xff) count_ff++;
	cpi R16,255
	brne L188
	.dbline 831
	inc R22
	rjmp L189
L188:
	.dbline 832
;        										else   count_ff=0;
	clr R22
L189:
	.dbline 837
	ldi R16,200
	rcall _sdelay
	.dbline 838
	ldi R16,200
	rcall _sdelay
	.dbline 839
	ldi R16,200
	rcall _sdelay
	.dbline 841
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R18,R28
	subi R18,254  ; offset = 2
	sbci R19,255
	mov R16,R10
	clr R17
	subi R16,250  ; offset = 6
	sbci R17,255
	rcall _EEPROMWriteBytes
	.dbline 842
	ldi R16,200
	rcall _sdelay
	.dbline 843
	ldi R16,200
	rcall _sdelay
	.dbline 844
	ldi R16,200
	rcall _sdelay
	.dbline 845
	ldi R16,200
	rcall _sdelay
	.dbline 847
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,y+2
	swap R24
	andi R24,#0x0F
	std z+0,R24
	.dbline 848
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	mov R2,R12
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	subi R24,208    ; addi 48
	std z+0,R24
	.dbline 850
	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 851
	ldi R24,<_SendSbuf+1
	ldi R25,>_SendSbuf+1
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,y+2
	andi R24,15
	std z+0,R24
	.dbline 852
	ldi R24,<_SendSbuf+1
	ldi R25,>_SendSbuf+1
	mov R2,R12
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	subi R24,208    ; addi 48
	std z+0,R24
	.dbline 854
	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 856
	ldi R16,200
	rcall _sdelay
	.dbline 857
L185:
	.dbline 822
	inc R10
L187:
	.dbline 822
	mov R24,R10
	cpi R24,6
	brsh X8
	rjmp L184
X8:
	.dbline 860
; 											//--------------------------//						
; 					
; 																	//写eeprom-------------
; 																	//T-32324578
; 		 														sdelay(200);	
; 		  													sdelay(200);	
; 		   												sdelay(200);	
;   															//EEPROMWriteBytes(8, &SendSbuf[8], 8);
;  																EEPROMWriteBytes(j+6, &datax, 1);
;  																sdelay(200);	
;   															sdelay(200);	
;    														sdelay(200);	
;     													sdelay(200);		
;  																//--------------------				
; 																		SendSbuf[i]=datax>>4;
; 																		SendSbuf[i]+=0x30;
; 																		//--------
; 																		crc^=SendSbuf[i];
; 																		SendSbuf[i+1]=datax&0x0f;
; 																		SendSbuf[i+1]+=0x30;
; 																		//-------
; 																			crc^=SendSbuf[i+1];
; 					
; 																			sdelay(200);
; 													}//-----------end of	for(j=2;j<6;j++)--------------------//		
; 													
; 				//--------消除 ff---------------//									
; 													if(count_ff<4) ICRead=5;  //只是读一次
	cpi R22,4
	brsh L193
	.dbline 860
	ldi R24,5
	sts _ICRead,R24
	rjmp L194
L193:
	.dbline 861
; 													else  ICRead++;  //ICRead=5,最多5次
	lds R24,_ICRead
	subi R24,255    ; addi 1
	sts _ICRead,R24
L194:
	.dbline 864
	ldi R24,62
	sts _SendSbuf+10,R24
	.dbline 865
	clr R2
	sts _SendSbuf+11,R2
	.dbline 866
	sts _SendSbuf+12,R2
	.dbline 867
	ldi R24,84
	sts _SendSbuf,R24
	.dbline 868
	ldi R24,45
	sts _SendSbuf+1,R24
	.dbline 872
	ldi R16,200
	rcall _sdelay
	.dbline 879
	sei
	.dbline 881
	ldi R24,14
	out 0x21,R24
	.dbline 882
	wdr
	.dbline 884
L179:
	.dbline -2
	.dbline 886
; 				//-----------------------------------------//
; 		
; 													SendSbuf[10]=CarNumber+0x30;//发送分机号码
; 													SendSbuf[11]=0;
; 													SendSbuf[12]=0;
; 													SendSbuf[0]='T';
; 													SendSbuf[1]='-';
; 		
; 	
; 	//	   EEPROMWriteBytes(9, &SendSbuf[9], 1);
; 		   								sdelay(200);
; 	//	   EEPROMWriteBytes(10,&SendSbuf[10],1);
; 		
; 		
;    //END OF:if((PIND==0XA3)&&(ICRead<3))
; 		
; 		
; 		SEI();
; 		//========看,门狗-----------
; 	 WDTCR=(1<<WDE)|(1<<WDP2)|(1<<WDP1);//1024K脉冲数目
; 		WDR(); ///看门狗清零			
; 		//-------------------------
;   }
; 
; }
L176:
	adiw R28,3
	rcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r count_ff 22 c
	.dbsym r crc 20 c
	.dbsym l datax 2 c
	.dbsym r j 10 c
	.dbsym r i 12 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\AVR\P_TEST\P_TEST.C
_kr2::
	.blkb 1
	.dbsym e kr2 _kr2 c
_kr1::
	.blkb 1
	.dbsym e kr1 _kr1 c
_T0_Count::
	.blkb 1
	.dbsym e T0_Count _T0_Count c
_TimeForWDG::
	.blkb 2
	.dbsym e TimeForWDG _TimeForWDG i
_CFM_flag::
	.blkb 1
	.dbsym e CFM_flag _CFM_flag c
_SET_flag::
	.blkb 1
	.dbsym e SET_flag _SET_flag c
_ICRead::
	.blkb 1
	.dbsym e ICRead _ICRead c
_TimeForSend::
	.blkb 2
	.dbsym e TimeForSend _TimeForSend i
_NowSend2::
	.blkb 2
	.dbsym e NowSend2 _NowSend2 i
_NowSend::
	.blkb 2
	.dbsym e NowSend _NowSend i
_TimeForCall::
	.blkb 1
	.dbsym e TimeForCall _TimeForCall c
_Send_flag::
	.blkb 1
	.dbsym e Send_flag _Send_flag c
_SendPoint::
	.blkb 2
	.dbsym e SendPoint _SendPoint pc
_ReceiveSbuf::
	.blkb 20
	.dbsym e ReceiveSbuf _ReceiveSbuf A[20:20]c
_krec::
	.blkb 1
	.dbsym e krec _krec c
_NowSbuf::
	.blkb 20
	.dbsym e NowSbuf _NowSbuf A[20:20]c
_SendSbuf::
	.blkb 20
	.dbsym e SendSbuf _SendSbuf A[20:20]c
_Sbufx::
	.blkb 1
	.dbsym e Sbufx _Sbufx c
	.area data(ram, con, rel)
	.dbfile E:\AVR\P_TEST\P_TEST.C
L29:
	.blkb 12
	.area idata
	.byte 'S,'t,'a,'r,'t,32,48,48,32,13,10,0
	.area data(ram, con, rel)
	.dbfile E:\AVR\P_TEST\P_TEST.C

⌨️ 快捷键说明

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