This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

i am facing problem while using aduc812 i2c for rtc interface

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

  • What problem are you facing?

    What code have you written?

    WHy do you need to use assembler?

  • you seem to have a problem but you won't tell what it is. you want code that does - what? why do you want turn-key solutions rather than to try to solve it yourself (you would probably spend the next having to solve problems - better be ready for it!) ? what have you done so far? how can we help except giving you the code?

  • but now, you have to implement.

    so can you tell me from where you have to start.

    i have made interfacing of 4 serial keys and LCD with my aduc812 successfully.
    i have tested code on circuit also and working properly.

    you have to take 4 switches for following purpose:

    1- Up,
    2- Down,
    3- Set-time,
    4-Set-Alarm.

    now the only thing is left RTC interface.

  • 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!