hi.... i am facing problem while using aduc812 internal i2c controller for rtc interface please send me asm code also.i am using ds1307 rtc controller
NAME I2C $INCLUDE(HEADER.H) $INCLUDE(ADUC812.H) I2C SEGMENT CODE RSEG I2C EXTRN CODE (DISPLAY_LCD,HEXTOASCII) PUBLIC I2C_START,DELAYMS,I2C_STOP,SENDBYTE,I2C_READ,DELAY1,I2C_INIT,SCL_HIGH,ACK,SENDACK,READBYTE,DELAYI2C
I2C_START: SETB MDE; ENABLE MASTER DATA OUTPUT SETB MDO; SETB MCO; JNB MDO,$; JNB MCO,$; NOP NOP CLR MDO CALL DELAY1; CLR MCO; CLR MDE
RET; I2C_STOP:SETB MDE; SETB MCO; CLR MDO; // NOP // NOP
CALL DELAY1; SETB MDO // CALL DELAY1; CLR MCO; CLR MDE RET; ;NO_ACK:SETB MDE; ;SETB MDI; ; CLR MCO; ; LCALL DELAY; ; SETB MCO; ; MOV C,MDI; ; JNC GODOWN; ; MOV ACK,#0X01; ;JMP DOWN; ;GODOWN:MOV ACK,#0X00; ; DOWN:RET; SENDBYTE://SETB I2CM MOV A,I2CDATA; MOV I2CCOUNT,#08; CLR C; SETB MDE; CLR MDO; CLR MCO; LOOP:RLC A; MOV MDO,C; SETB MCO; CALL DELAY1 CLR MCO //CALL DELAY1; //CALL SCL_HIGH // CALL DELAY1 // CLR MCO; //CALL DELAY1; //CLR MCO; DJNZ I2CCOUNT,LOOP; // CALL ACK // PUSH ACC CLR MDE; RELEASE DATALINE FOR ACKNOWLEDGE SETB MCO; CALL DELAY1; JB MDI,GO1 MOV L_DATA,#'N'; CALL DISPLAY_LCD JMP GO2 // SETB E_FLAG; //NEXT :CLR MCO; //POP ACC GO1:MOV L_DATA,#'E' CALL DISPLAY_LCD GO2: RET;
READBYTE: //SETB I2CM MOV I2CCOUNT,#08H;
CLR A; CLR MDE SETB MCO SETB MDI; LOOP2:;CALL SCL_HIGH //SETB MCO //CALL DELAY1;
MOV C,MDI; SETB MCO CALL DELAY1; CLR MCO RLC A; //CLR MCO; // NOP; // CALL DELAY1 DJNZ I2CCOUNT,LOOP2; SETB MDO SETB MDE; RELEASE DATALINE FOR ACKNOWLEDGE // CLR I2CM SETB MCO; SETB MDO CALL DELAY1; CLR MCO //JNB MDI,NEXT2; //SETB NOACK; //NEXT2:CLR MCO; RET;
//MOV I2CREADDATA,ACC; //RET; ;------------------------------------- DELAY1: MOV R2,#0FFH UP:MOV R3,#124 HERE_1:DJNZ R3,HERE_1 DJNZ R2,UP RET DELAYMS: MOV R2,#04H UP5:MOV R3,0FFH HERE_2:DJNZ R3,HERE_2 DJNZ R2,UP5 RET DELAYI2C:MOV R2,#0FFH UP6:MOV R3,0FFH HERE_3:DJNZ R3,HERE_3 DJNZ R2,UP6 ;----------------I2C_INIT-------------- I2C_INIT: //MOV SP,#040H; CLR SPE // SETB I2CM; // Set master mode SETB MDO; // Set the data bit to HIGH //CLR MDE ; // We are not using the pin yet SETB MCO ; MOV I2CCON,#0A8h RET; SCL_HIGH:SETB MCO JNB MCO,$ RET
ACK://MOV PRX_TOH,#05FH //MOV PRX_TOL,#0FFH
CLR MDE SETB MDI CALL SCL_HIGH; CALL DELAY1 CLR MCO CALL DELAY1 CALL SCL_HIGH // MOV C,MDI JB MDI,GODOWN CLR E_FLAG JMP DOWN1 GODOWN:SETB E_FLAG; //JB MDI,$; //CHK_ACK1:JNB MDI,OKCOUNT1 // DJNZ PRX_TOH,CHK_ACK1 // DJNZ PRX_TOL ,CHK_ACK1 // SETB ERROR_FLAG // OKCOUNT1:CLR MCO DOWN1: RET SENDACK:SETB MDE CLR MDO; CALL SCL_HIGH; CALL DELAY1 CLR MCO; CLR MDE RET // I2C_WRITE://MOV A,I2CDATA // CALL I2C_START // MOV I2CDATA,#0D0H // CALL SENDBYTE; // MOV I2CDATA,#DS1307_RAM_ADD // CALL SENDBYTE; // MOV I2CDATA,#I2CDATA_USER // CALL SENDBYTE //CALL ACK // CALL I2C_STOP // RET I2C_READ:CALL I2C_START MOV I2CDATA,#0D0H CALL SENDBYTE; MOV I2CDATA,#DS1307_RAM_ADD; CALL SENDBYTE CALL DELAYI2C CALL I2C_START MOV I2CDATA, #0D1H; CALL SENDBYTE CALL READBYTE; CALL HEXTOASCII MOV I2CREADDATA,A MOV TX_DATA,A CALL I2C_STOP RET
END
Please tell me: Are you able to read that code?
Do you think that there may be a reason why the posting instructions specifically mentions how to post source code?
Do read the information available just above the text-box where you write your messages...
<extract> //JB MDI,$; //CHK_ACK1:JNB MDI,OKCOUNT1 // DJNZ PRX_TOH,CHK_ACK1 // DJNZ PRX_TOL ,CHK_ACK1 // SETB ERROR_FLAG // OKCOUNT1:CLR MCO DOWN1: RET SENDACK:SETB MDE CLR MDO; CALL SCL_HIGH; CALL DELAY1 CLR MCO; CLR MDE RET </extract>
The technical word for this code is: Rubbish.
There is an alternative word, but I don't want to be chastised!