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!