?? t.src
字號(hào):
; 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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -