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

📄 t.src

📁 at89c51 读取写入24c64的C源代码
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; void I2C_Nack(void)
; {
;  Delay_10_uS();
;  I2C_SDA=1;
;  Delay_10_uS();
;  I2C_SCK=1;
;  Delay_10_uS();
;  I2C_SCK=0;
;  Delay_10_uS();
; }
; bit I2C_Send_Byte( uchar d)
; {
;  uchar i = 8;
;  bit bit_ack;
;  while( i-- )
;  {
;   Delay_10_uS();
;   if ( d &0x80 )   I2C_SDA =1;
;   else             I2C_SDA =0;
;   Delay_10_uS();
;   I2C_SCK = 1;
;   Delay_10_uS();
;   I2C_SCK = 0;
;   d = d << 1;
;  }
;  Delay_10_uS();
;  I2C_SDA = 1;
;  Delay_10_uS();
;  I2C_SCK = 1;
;  Delay_10_uS();
;  bit_ack = I2C_SDA;
;  I2C_SCK =0;
;  Delay_10_uS();
;  return bit_ack;
; }
; uchar I2C_Receive_Byte(void)
; {
;  uchar i = 8, d;
;  Delay_10_uS();
;  I2C_SDA = 1;
;  while ( i--)
;  {
;   d = d << 1;
;   Delay_10_uS();
;   I2C_SCK =1;
;   if ( I2C_SDA ) d++;
;   Delay_10_uS();
;   I2C_SCK =0;
;  }
;  return d;
; }
; void AT24C64_W(void *mcu_address,uint AT24C64_address,uint count)
; {
;  //DOG_WDI=!DOG_WDI;
;  //DOGTIME=0;
;  while(count--)
;  {
;   I2C_Start();
;   /*I2C_Send_Byte( 0xa0 + AT24C64_address /256 *2);*/  /* 24C16  USE */
;   I2C_Send_Byte( 0xa0 );
;   I2C_Send_Byte(  AT24C64_address/256 );
;   I2C_Send_Byte( AT24C64_address %256 );
;   I2C_Send_Byte( *(uchar*)mcu_address );
;   I2C_Stop();
;   Delay_N_mS(10);       /* waiting for write cycle to be completed */
;   ((uchar*)mcu_address)++;
;   AT24C64_address++;
;  }
; }
; void AT24C64_R(void *mcu_address,uint AT24C64_address,uint count)
; {
;  //DOG_WDI=!DOG_WDI;
;  //DOGTIME=0;
;  while(count--)
;  {
;   I2C_Start();
;   /*I2C_Send_Byte( 0xa0 + AT24C64_address / 256 *2 );*/   /* 24C16 USE */
;   I2C_Send_Byte( 0xa0 );
;   I2C_Send_Byte( AT24C64_address/256 );
;   I2C_Send_Byte( AT24C64_address % 256 );
;   I2C_Start();
;   /*I2C_Send_Byte( 0xa1 + AT24C64_address /256 *2 );*/
;   I2C_Send_Byte( 0xa1 );
;   *(uchar*)mcu_address = I2C_Receive_Byte();
;   I2C_Nack();
;   I2C_Stop();
;   ((uchar*)mcu_address)++;
;   AT24C64_address++;
;  }
; }
; 
; #else
; 
; void delay()

	RSEG  ?PR?delay?T
delay:
			; SOURCE LINE # 253
; {
			; SOURCE LINE # 254
; _nop_();
			; SOURCE LINE # 255
	NOP  	
; _nop_();
			; SOURCE LINE # 256
	NOP  	
; _nop_();
			; SOURCE LINE # 257
	NOP  	
; _nop_();
			; SOURCE LINE # 258
	NOP  	
; _nop_();
			; SOURCE LINE # 259
	NOP  	
; }
			; SOURCE LINE # 260
	RET  	
; END OF delay

; 
; 
; void delayms (uint x)

	RSEG  ?PR?_delayms?T
_delayms:
	USING	0
			; SOURCE LINE # 263
;---- Variable 'j?449' assigned to Register 'R5' ----
;---- Variable 'x?448' assigned to Register 'R6/R7' ----
; {
			; SOURCE LINE # 264
?C0042:
;  byte j;
;  while(x--){
			; SOURCE LINE # 266
	MOV  	A,R7
	DEC  	R7
	MOV  	R2,AR6
	JNZ  	?C0076
	DEC  	R6
?C0076:
	ORL  	A,R2
	JZ   	?C0047
;     for(j=0;j<125;j++){;}
			; SOURCE LINE # 267
	CLR  	A
	MOV  	R5,A
?C0044:
	MOV  	A,R5
	CLR  	C
	SUBB 	A,#07DH
	JNC  	?C0042
	INC  	R5
	SJMP 	?C0044
;       }
			; SOURCE LINE # 268
; }
			; SOURCE LINE # 269
?C0047:
	RET  	
; END OF _delayms

; 
; void I2C_Start()                      //I2C START

	RSEG  ?PR?I2C_Start?T
I2C_Start:
			; SOURCE LINE # 271
; {
			; SOURCE LINE # 272
;  SDA=1;
			; SOURCE LINE # 273
	SETB 	P3_5
;  _nop_();
			; SOURCE LINE # 274
	NOP  	
;   SCL=1;
			; SOURCE LINE # 275
	SETB 	P3_4
;   delay();
			; SOURCE LINE # 276
	LCALL	delay
;    SDA=0;
			; SOURCE LINE # 277
	CLR  	P3_5
;    delay();
			; SOURCE LINE # 278
	LCALL	delay
;   SCL=0;
			; SOURCE LINE # 279
	CLR  	P3_4
;   _nop_();
			; SOURCE LINE # 280
	NOP  	
; }
			; SOURCE LINE # 281
	RET  	
; END OF I2C_Start

; 
; void I2C_Stop()             //I2C STOP

	RSEG  ?PR?I2C_Stop?T
I2C_Stop:
			; SOURCE LINE # 283
; {
			; SOURCE LINE # 284
; SDA=0;
			; SOURCE LINE # 285
	CLR  	P3_5
; _nop_();
			; SOURCE LINE # 286
	NOP  	
; SCL=1;
			; SOURCE LINE # 287
	SETB 	P3_4
; delay();
			; SOURCE LINE # 288
	LCALL	delay
; SDA=1;
			; SOURCE LINE # 289
	SETB 	P3_5
; delay();
			; SOURCE LINE # 290
	LJMP 	delay
; END OF I2C_Stop

; }
; 
; bit  I2C_ReceiveAck() 

	RSEG  ?PR?I2C_ReceiveAck?T
L?0080:
	USING	0
	MOV  	R7,AR4
	LCALL	_I2C_SendByte
I2C_ReceiveAck:
			; SOURCE LINE # 293
; {
			; SOURCE LINE # 294
; bit ck;
; SDA=1;                  //THE HOST RELEASE THE BUS
			; SOURCE LINE # 296
	SETB 	P3_5
; _nop_();
			; SOURCE LINE # 297
	NOP  	
; _nop_();
			; SOURCE LINE # 298
	NOP  	
; SCL=1;           
			; SOURCE LINE # 299
	SETB 	P3_4
; _nop_();
			; SOURCE LINE # 300
	NOP  	
; _nop_();
			; SOURCE LINE # 301
	NOP  	
; ck=SDA;
			; SOURCE LINE # 302
	MOV  	C,P3_5
	MOV  	ck?750,C
; _nop_();
			; SOURCE LINE # 303
	NOP  	
; _nop_();
			; SOURCE LINE # 304
	NOP  	
; SCL=0;
			; SOURCE LINE # 305
	CLR  	P3_4
; _nop_();
			; SOURCE LINE # 306
	NOP  	
; return(ck);
			; SOURCE LINE # 307
	MOV  	C,ck?750
; }
			; SOURCE LINE # 308
?C0050:
	RET  	
; END OF I2C_ReceiveAck

; 
; 
; void I2C_SendAck()

	RSEG  ?PR?I2C_SendAck?T
I2C_SendAck:
			; SOURCE LINE # 311
; 
; {
			; SOURCE LINE # 313
; SDA=0;
			; SOURCE LINE # 314
	CLR  	P3_5
; _nop_();
			; SOURCE LINE # 315
	NOP  	
; _nop_();
			; SOURCE LINE # 316
	NOP  	
; SCL=1;
			; SOURCE LINE # 317
	SETB 	P3_4
; delay();          //remain
			; SOURCE LINE # 318
	LCALL	delay
; SCL=0;
			; SOURCE LINE # 319
	CLR  	P3_4
; _nop_();
			; SOURCE LINE # 320
	NOP  	
; _nop_();
			; SOURCE LINE # 321
	NOP  	
; }
			; SOURCE LINE # 322
	RET  	
; END OF I2C_SendAck

; 
; void I2C_SendNoAck()

	RSEG  ?PR?I2C_SendNoAck?T
I2C_SendNoAck:
			; SOURCE LINE # 324
; 
; {
			; SOURCE LINE # 326
; SDA=1;
			; SOURCE LINE # 327
	SETB 	P3_5
; _nop_();
			; SOURCE LINE # 328
	NOP  	
; _nop_();
			; SOURCE LINE # 329
	NOP  	
; SCL=1;
			; SOURCE LINE # 330
	SETB 	P3_4
; delay();   //remain
			; SOURCE LINE # 331
	LCALL	delay
; SCL=0;
			; SOURCE LINE # 332
	CLR  	P3_4
; _nop_();
			; SOURCE LINE # 333
	NOP  	
; _nop_();
			; SOURCE LINE # 334
	NOP  	
; }
			; SOURCE LINE # 335
	RET  	
; END OF I2C_SendNoAck

; 
; void I2C_SendByte(byte SData)

	RSEG  ?PR?_I2C_SendByte?T
_I2C_SendByte:
	USING	0
			; SOURCE LINE # 337
;---- Variable 'SData?1051' assigned to Register 'R7' ----
; {uchar i;
			; SOURCE LINE # 338
; for(i=0;i<8;i++)
			; SOURCE LINE # 339
;---- Variable 'i?1052' assigned to Register 'R6' ----
	CLR  	A
	MOV  	R6,A
?C0053:
; {  SDA=(bit)(SData&0x80);
			; SOURCE LINE # 340
	MOV  	A,R7
	RLC  	A
	MOV  	P3_5,C
;    SData=SData<<1;
			; SOURCE LINE # 341
	MOV  	A,R7
	ADD  	A,ACC
	MOV  	R7,A
;    SCL=1;
			; SOURCE LINE # 342
	SETB 	P3_4
;    delay();
			; SOURCE LINE # 343
	LCALL	delay
;    SCL=0;
			; SOURCE LINE # 344
	CLR  	P3_4
; }
			; SOURCE LINE # 345
	INC  	R6
	CJNE 	R6,#08H,?C0053
; }
			; SOURCE LINE # 346
?C0056:
	RET  	
; END OF _I2C_SendByte

; 
; byte I2C_ReceiveByte()

	RSEG  ?PR?I2C_ReceiveByte?T
I2C_ReceiveByte:
	USING	0
			; SOURCE LINE # 348
; {uchar i;
			; SOURCE LINE # 349
;  byte RData;
;  RData=0;
			; SOURCE LINE # 351
;---- Variable 'RData?1154' assigned to Register 'R7' ----
	CLR  	A
	MOV  	R7,A
; 
; for(i=0;i<8;i++)
			; SOURCE LINE # 353
;---- Variable 'i?1153' assigned to Register 'R6' ----
	MOV  	R6,A
?C0057:
; {  SDA=1;
			; SOURCE LINE # 354
	SETB 	P3_5
;   _nop_();
			; SOURCE LINE # 355
	NOP  	
;   SCL=1;
			; SOURCE LINE # 356
	SETB 	P3_4
;   _nop_();
			; SOURCE LINE # 357
	NOP  	
;   _nop_();
			; SOURCE LINE # 358
	NOP  	
;   RData=RData<<1;
			; SOURCE LINE # 359
	MOV  	A,R7
	ADD  	A,ACC
	MOV  	R7,A
;   RData=RData|SDA;
			; SOURCE LINE # 360
	MOV  	C,P3_5
	CLR  	A
	RLC  	A
	ORL  	AR7,A
;   _nop_();
			; SOURCE LINE # 361
	NOP  	
;   _nop_();
			; SOURCE LINE # 362
	NOP  	
;   SCL=0;
			; SOURCE LINE # 363
	CLR  	P3_4
; }
			; SOURCE LINE # 364
	INC  	R6
	CJNE 	R6,#08H,?C0057
?C0058:
; return(RData);
			; SOURCE LINE # 365
; }
			; SOURCE LINE # 366
?C0060:
	RET  	
; END OF I2C_ReceiveByte

; 
; void I2C_SendToSubAddress(byte SlaveAddress,uint SubAddress,byte *pSData,uchar N)

	RSEG  ?PR?_I2C_SendToSubAddress?T
_I2C_SendToSubAddress:
	USING	0
			; SOURCE LINE # 368
	MOV  	pSData?1257,R3
	MOV  	pSData?1257+01H,R2
	MOV  	pSData?1257+02H,R1
;---- Variable 'SubAddress?1256' assigned to Register 'R4/R5' ----
;---- Variable 'SlaveAddress?1255' assigned to Register 'R7' ----
; {uchar i;
			; SOURCE LINE # 369
; I2C_Start();
			; SOURCE LINE # 370
	LCALL	I2C_Start
; I2C_SendByte(SlaveAddress);    //send slave address(write device)
			; SOURCE LINE # 371
	LCALL	_I2C_SendByte
; I2C_ReceiveAck();
			; SOURCE LINE # 372
	LCALL	I2C_ReceiveAck
; 
; I2C_SendByte(SubAddress/256);    //send sub address
			; SOURCE LINE # 374
; I2C_ReceiveAck();
			; SOURCE LINE # 375
	LCALL	L?0080
; 
; I2C_SendByte(SubAddress%256);    //send sub address
			; SOURCE LINE # 377
	MOV  	R7,AR5
	LCALL	_I2C_SendByte
; I2C_ReceiveAck();
			; SOURCE LINE # 378
	LCALL	I2C_ReceiveAck
; 
; /*
; I2C_SendByte(SubAddress);    
; I2C_ReceiveAck();
; 
; */
; for(i=0;i<N;i++)
			; SOURCE LINE # 385
;---- Variable 'i?1259' assigned to Register 'R5' ----
	CLR  	A
	MOV  	R5,A
?C0061:
	MOV  	A,R5
	CLR  	C
	SUBB 	A,N?1258
	JNC  	?C0062
; { do{
			; SOURCE LINE # 386
?C0066:
;   I2C_SendByte(pSData[i]);
			; SOURCE LINE # 387
	MOV  	R3,pSData?1257
	MOV  	R2,pSData?1257+01H
	MOV  	R1,pSData?1257+02H
	MOV  	DPL,R5
	MOV  	DPH,#00H
	LCALL	?C?CLDOPTR
	MOV  	R7,A
	LCALL	_I2C_SendByte
;   }while(I2C_ReceiveAck()==1); 
			; SOURCE LINE # 388
	LCALL	I2C_ReceiveAck
	JC   	?C0066
; }
			; SOURCE LINE # 389
	INC  	R5
	SJMP 	?C0061
?C0062:
; I2C_Stop();
			; SOURCE LINE # 390
	LJMP 	I2C_Stop
; END OF _I2C_SendToSubAddress

; }
; void I2C_ReceiveFromSubAddress(byte SlaveAddress,uint SubAddress,byte *pRData,uchar N)

	RSEG  ?PR?_I2C_ReceiveFromSubAddress?T
_I2C_ReceiveFromSubAddress:
	USING	0
			; SOURCE LINE # 392
	MOV  	SlaveAddress?1360,R7
	MOV  	pRData?1362,R3
	MOV  	pRData?1362+01H,R2
	MOV  	pRData?1362+02H,R1
;---- Variable 'SubAddress?1361' assigned to Register 'R4/R5' ----
; {uchar i;
			; SOURCE LINE # 393
; I2C_Start();
			; SOURCE LINE # 394
	LCALL	I2C_Start
; I2C_SendByte(SlaveAddress);    //send slave address(write device)
			; SOURCE LINE # 395
	MOV  	R7,SlaveAddress?1360
	LCALL	_I2C_SendByte
; I2C_ReceiveAck();
			; SOURCE LINE # 396
	LCALL	I2C_ReceiveAck
; I2C_SendByte(SubAddress/256);    //send sub address
			; SOURCE LINE # 397
; I2C_ReceiveAck();
			; SOURCE LINE # 398
	LCALL	L?0080
; I2C_SendByte(SubAddress%256);    //send sub address
			; SOURCE LINE # 399
	MOV  	R7,AR5
	LCALL	_I2C_SendByte
; I2C_ReceiveAck();
			; SOURCE LINE # 400
	LCALL	I2C_ReceiveAck
; 
; /*
; I2C_SendByte(SubAddress);    //send sub address
; I2C_ReceiveAck();
; */
; I2C_Start();                              //I2C Start Again!
			; SOURCE LINE # 406
	LCALL	I2C_Start
; I2C_SendByte(SlaveAddress+1);    //send slave address(read device)
			; SOURCE LINE # 407
	MOV  	A,SlaveAddress?1360
	INC  	A
	MOV  	R7,A
	LCALL	_I2C_SendByte
; I2C_ReceiveAck();
			; SOURCE LINE # 408
	LCALL	I2C_ReceiveAck
; for(i=0;i<N-1;i++)
			; SOURCE LINE # 409
;---- Variable 'i?1364' assigned to Register 'R5' ----
	CLR  	A
	MOV  	R5,A
?C0068:
	MOV  	A,N?1363
	DEC  	A
	MOV  	R7,A
	MOV  	A,R5
	CLR  	C
	SUBB 	A,R7
	JNC  	?C0069
; {
			; SOURCE LINE # 410
;    pRData[i]=I2C_ReceiveByte();
			; SOURCE LINE # 411
	LCALL	I2C_ReceiveByte
	MOV  	R3,pRData?1362
	MOV  	R2,pRData?1362+01H
	MOV  	R1,pRData?1362+02H
	MOV  	DPL,R5
	MOV  	DPH,#00H
	MOV  	A,R7
	LCALL	?C?CSTOPTR
;    I2C_SendAck();
			; SOURCE LINE # 412
	LCALL	I2C_SendAck
; }
			; SOURCE LINE # 413
	INC  	R5
	SJMP 	?C0068
?C0069:
; pRData[i]=I2C_ReceiveByte();
			; SOURCE LINE # 414
	LCALL	I2C_ReceiveByte
	MOV  	R3,pRData?1362
	MOV  	R2,pRData?1362+01H
	MOV  	R1,pRData?1362+02H
	MOV  	R6,AR5
	MOV  	DPL,R6
	MOV  	DPH,#00H
	MOV  	A,R7
	LCALL	?C?CSTOPTR
; I2C_SendNoAck();
			; SOURCE LINE # 415
	LCALL	I2C_SendNoAck
; I2C_Stop();
			; SOURCE LINE # 416
	LJMP 	I2C_Stop
; END OF _I2C_ReceiveFromSubAddress

	END

⌨️ 快捷键说明

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