;=============================================================================== ; SD2000L EEPROM VER2.0 ; ±¾³ÌÐòÓÃÓÚ²âÊÔʵʱʱÖÓÄ£¿éSD2000µÄEEPROM´æ´¢Æ÷D/EϵÁУ¬ ; ³ÌÐò¹¦ÄÜÈçÏ£º ; 1. ¹Ø±Õ/INT1¼°/INT2µÄÖжÏÊä³ö ; 2. ³õʼ»¯Ê±¼ä(дʱ¼äÊý¾Ý) ; 3. ÔÚBREAKPOINT1Éè¶Ïµãʱ,ÒÀ´Î¶Áʱ¼ä-дEEPROMÊý¾Ý-¶ÁEEPROMÊý¾ÝÑ­»· ; 4. È«ËÙÖ´ÐÐʱ,LEDËÄλ·Ö±ðÏÔʾСʱºÍ·ÖÖÓµÄÖµ ; ; ×¢: µ¥Æ¬»úÊÇAT89C51£¬Íâ¾§ÕñΪ12Mhz,ÔÚÐËÍþ·«¹«Ë¾µÄSD2000ÆÀ¹À°åÉÏÔËÐÐ ; (SD2000µÄON/OFF½Å½ÓµØ)¡£ ; Last update:2003/04/30 ; ±¾³ÌÐò½ö¹©²Î¿¼£¬ÈçÓÐÎÊÌâÇëÁªÏµ£º³Â¹¤³ 0755-83246178,83220794,fax:83225561 ; 13922865036 chendw@whwave.com.cn http://www.whwave.com.cn ;=============================================================================== ;define the general register ;ʱ¼ä¼Ä´æÆ÷ YEAR EQU 20H ;Äê MONTH EQU 21H ;Ô DAY EQU 22H ;ÐÇÆÚ DATE EQU 23H ;ÈÕ HOUR EQU 24H ;Сʱ MINUTE EQU 25H ;·ÖÖÓ SECOND EQU 26H ;Ãë FLAG EQU 27H ;ͨÓñêÖ¾¼Ä´æÆ÷ ;BIT0=1, ACK ERR ;BIT0=0 ,ACK OK ;LEDÏÔʾ¼Ä´æÆ÷ DATA_SEG EQU 40H ;ÏÔʾÊý¾Ý¼Ä´æÆ÷ DIS_REG EQU 41H ;ÏÔʾÊýÂëλÖüĴæÆ÷:1-4 STACK_A EQU 42H ;ÏÔʾÖжÏʱAµÄ»º´æÆ÷ ;µ¥Æ¬»úÓëʵʱʱÖÓ¼äͨÐżĴæÆ÷ TIMETEMP EQU 2FH ;ʱ¼ä±êÖ¾¼Ä´æÆ÷ TIMETX EQU 47H ;ʱ¼äÊý¾Ý·¢ËͼĴæÆ÷ TIMERX EQU 48H ;ʱ¼äÊý¾Ý½ÓÊռĴæÆ÷ ;µ¥Æ¬»úÏòSD2000B/C/D/EÄÚµÄEEPROM´æ´¢Ê±¼äʱʹÓõļĴæÆ÷ STORESIGN EQU 50H SRAMADD_HI EQU 51H SRAMNUM EQU 52H STOREYEAR EQU 53H STOREMONTH EQU 54H STOREDAY EQU 55H STOREDATE EQU 56H STOREHOUR EQU 57H STOREMINUTE EQU 58H STORESECOND EQU 59H SRAMADD_LO EQU 5AH ;--------------------------------------------------------------------------- ;define port bit ;¸÷ͨÐÅ¿Úλ´úºÅ SDA EQU P3.4 ;IICµÄSDA¿ÚÏß SCL EQU P3.5 ;IICµÄSCL¿ÚÏß ;=========================================================================== ORG 0000H ;RESET LJMP START ORG 000BH LJMP LED_DISPLAY ;T0ÖжÏÈë¿Ú ;--------------------------------------------------------------------------- ORG 0100H START: CLR A ;¿ªÊ¼³õʼ»¯¸÷¼Ä´æÆ÷ MOV IE,A ;¹ØÖÐ¶Ï MOV P1,A MOV P2,A ;PORT1,PORT2ÖÃ0 MOV P3,#0FFH ;PORT3ÖÃ1 MOV SP,#60H ;¶¨Òå¶ÑÕ» MOV TMOD,#01H ;¶¨Ê±Æ÷0Ϊ16λ¶¨Ê±Æ÷£¬ MOV TH0,#0F0H ;ÖжÏÖÜÆÚΪ4096us MOV TL0,#0H ; MOV DIS_REG,#00H ; CLR FLAG ;Çå³ý±ê־λ LCALL LONGDELAY ;ÑÓʱ300ms LCALL LONGDELAY ;ÑÓʱ300ms LCALL TIMESTATUS_INT12 ;ÉèÖÃSD2000ʱ¼ä״̬¼Ä´æÆ÷ SETB EA ;¿ªAT89C51ÖÐ¶Ï SETB TR0 ;T0¿ªÊ¼¼ÆÊý INTI_TIME: MOV YEAR,#02H ;É趨¸÷ʱ¼ä¼Ä´æÆ÷³õʼʱ¼ä MOV MONTH,#07H MOV DAY,#15H MOV DATE,#01H MOV HOUR,#17H MOV MINUTE,#59H MOV SECOND,#50H CLR ET0 ;¹Ø±ÕAT89C51µÄTIME0ÖÐ¶Ï LCALL WRITE_TIME ;½«³õʼʱ¼äֵдÈëʱÖÓÄÚ SETB ET0 ;ÔÊÐíAT89C51µÄTIME0ÖÐ¶Ï ;----------------------------------------------------------------- GET_TIME: CLR ET0 ;¹Ø±ÕAT89C51µÄTIME0ÖÐ¶Ï LCALL READ_TIME ;¶ÁSD2000ÄÚµÄʵʱʱÖÓÊý¾Ý JNB SECOND.7,NO_TESTMODE LCALL TIME_TESTMODE ;²âÊÔģʽ½áÊø CLR SECOND.7 ;ÃëµÄ×î¸ßλÆÁ±ÎΪ0 NO_TESTMODE: SETB ET0 ;ÔÊÐíAT89C51µÄTIME0ÖÐ¶Ï MOV SRAMNUM,#07H ;дÈëEEPROMÊý¾ÝµÄ×Ö½ÚÊý MOV SRAMADD_HI,#00H ;дÈëEEPROMµÄÆðʼµØÖ·¸ß°Ëλ MOV SRAMADD_LO,#00H ;дÈëEEPROMµÄÆðʼµØÖ·µÍ°Ëλ MOV A,#YEAR ;дÈëEEPROMµÄÊý¾Ý´ÓAT89C51µÄYEAR¿ªÊ¼....... CLR ET0 ;¹Ø±ÕAT89C51µÄTIME0ÖÐ¶Ï LCALL WRITESRAM ;дÈëEEPROM SETB ET0 ;ÔÊÐíAT89C51µÄTIME0ÖÐ¶Ï LCALL LONGDELAY ;ÑÓʱ300ms,ÕâÀï¿ÉÒÔÊÇÄãµÄ³ÌÐò BREAKPOINT1: NOP ;Éè¶Ïµã MOV SRAMNUM,#07H MOV SRAMADD_HI,#00H ;дÈëEEPROMµÄÆðʼµØÖ·¸ß°Ëλ MOV SRAMADD_LO,#00H ;дÈëEEPROMµÄÆðʼµØÖ·µÍ°Ëλ MOV A,#STOREYEAR CLR ET0 ;¹Ø±ÕAT89C51µÄTIME0ÖÐ¶Ï LCALL READSRAM ;½«´ÓEEPROM¶Á³öÀ´µÄÊý¾Ý·Åµ½´ÓSTOREYEAR¿ªÊ¼µÄλÖà SETB ET0 ;ÔÊÐíAT89C51µÄTIME0ÖÐ¶Ï JMP GET_TIME ;=======================¶¨Ê±/¼ÆÊýÆ÷ÖжÏ×Ó³ÌÐò============================== ;¹¦ÄÜ£ºÔÚËÄλLEDÉÏÏÔʾÊý¾Ý | ;Èë¿Ú£ºÏÔʾÊý¾ÝÔÚDATA1£¬DATA2£¬DATA3£¬DATA4ÖÐ | ;³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºA£¬TEMP£¬P1£¬P3,PSW | ;========================================================================== LED_DISPLAY: MOV STACK_A,A CLR EA ;¹ØÖÐ¶Ï COMPARE: MOV A,DIS_REG CJNE A,#01H,COM1 JMP DISBIT1 COM1: CJNE A,#02H,COM2 JMP DISBIT2 COM2: CJNE A,#03H,COM3 JMP DISBIT3 COM3: MOV DIS_REG,#00H JMP DISBIT4 DISBIT1: MOV A,HOUR SWAP A ANL A,#0FH MOV DATA_SEG,A MOV A,#0FFH MOV P3,A MOV A,DATA_SEG MOV DPTR,#TABLE MOVC A,@A+DPTR ;²é±íÈ¡×ÖÐÍÂë MOV P1,A CLR P3.0 ;ÏÔʾµÚһλÊý¾Ý LJMP DISEND DISBIT2: MOV A,HOUR ;Сʱ ANL A,#0FH MOV DATA_SEG,A MOV A,#0FFH MOV P3,A MOV A,DATA_SEG MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P1,A MOV C,SECOND.0 ;ÃëÉÁ˸ MOV P1.7,C CLR P3.1 ;ÏÔʾµÚ¶þλÊý¾Ý LJMP DISEND DISBIT3: MOV A,MINUTE SWAP A ANL A,#0FH MOV DATA_SEG,A MOV A,#0FFH MOV P3,A MOV A,DATA_SEG MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P1,A CLR P3.2 ;ÏÔʾµÚÈýλÊý¾Ý LJMP DISEND DISBIT4: MOV A,MINUTE ;ÏÔʾ·ÖÖÓ ANL A,#0FH MOV DATA_SEG,A MOV A,#0FFH MOV P3,A MOV A,DATA_SEG MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P1,A CLR P3.3 ;ÏÔʾµÚËÄλÊý¾Ý DISEND: INC DIS_REG MOV TH0,#0F0H ;֨װ¶¨Ê±Æ÷0³õÖµ MOV TL0,#000H ; SETB EA ;¿ªÖÐ¶Ï MOV A,STACK_A RETI TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0A7H,0A1H,86H,8EH ;==================¶ÁʵʱʱÖÓʵʱÊý¾Ý¼Ä´æÆ÷×Ó³ÌÐò========================== ;¹¦ÄÜ£º´ÓʵʱʱÖÓ¶ÁÈ뵱ǰʱ¼äÊý¾Ý | ;Èë¿Ú£ºNONE | ;³ö¿Ú£º½ÓÊÕÊý¾Ý·ÅÔÚÄê¡¢Ô¡¢ÈÕ¡¢ÐÇÆÚ¡¢Ê±¡¢·Ö¡¢Ãë¸÷¼Ä´æÆ÷ | ;Ó°Ïì×ÊÔ´£ºA£¬R0,R3,TIMETX,TIMERX,YEAR,MONTH,DAY,WEEK,HOUR,MINUTE,SECOND | ;========================================================================== READ_TIME: LCALL IICSTART JB FLAG.1,ERR_IICSTOP ;ÈçSDAÏß±»óéλΪµÍµçƽÔòÍ˳ö MOV TIMETX,#65H ;·¢ËͶÁʱÖÓÊý¾ÝÃüÁî LCALL SENDH_L JB FLAG.0,ERR_IICSTOP ;ACKÐźŲ»Õý³£ÔòÍ˳ö. MOV R0,#YEAR MOV R3,#07H RDTIME1: LCALL RXL_H MOV A,TIMERX MOV @R0,A INC R0 DJNZ R3,RDTIME2 ;¶ÁÍêÒ»¸ö×Ö½ÚÊý¾ÝºóÈ·ÈÏÊý¾Ý´«Êä JMP RDTIME3 ;ÈôΪ×îºóÒ»¸ö×Ö½ÚÊý¾ÝÔòΪNOACK RDTIME2: CALL ACK JMP RDTIME1 RDTIME3: CALL NOACK LCALL IICSTOP CLR HOUR.7 ;СʱµÄ×î¸ßλÔÚ24Ð¡Ê±ÖÆÊ±Ã»ÓÐÓÃ,Èç¹ûÊÇ12Ð¡Ê±ÖÆÇëɾµô´ËÐÐ. RDTIME_RET: RET ERR_IICSTOP: LCALL IICSTOP RET ;======================дʵʱʱÖÓÄÚ²¿ÊµÊ±Êý¾Ý¼Ä´æÆ÷³ÌÐò===================== ;¹¦ÄÜ£º½«É趨Äê¡¢Ô¡¢ÈÕ¡¢ÐÇÆÚ¡¢Ê±¡¢·Ö¡¢ÃëÊý¾ÝдÈëʵʱʱÖÓ | ;Èë¿Ú£º·¢ËÍÊý¾Ý·ÅÔÚÄê¡¢Ô¡¢ÈÕ¡¢ÐÇÆÚ¡¢Ê±¡¢·Ö¡¢Ãë¸÷¼Ä´æÆ÷ | ;³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºA£¬R0£¬R1£¬TXBUF,YEAR,MONTH,DATE,DAY,HOUR,MINUTE,SECOND | ;========================================================================== WRITE_TIME: LCALL IICSTART JNB FLAG.1,TIME_WRITE_1 LJMP ERR_IICSTOP ;SDAÏß±»óéλΪµÍµçƽÔòÍ˳ö TIME_WRITE_1: MOV TIMETX,#64H ;·¢ËÍдʵʱÊý¾Ý1ÃüÁî,#64H LCALL SENDH_L JNB FLAG.0,TIME_WRITE_2 LJMP ERR_IICSTOP ;ACKÐźŲ»Õý³£ÔòÍ˳ö´. TIME_WRITE_2: MOV R0,#YEAR MOV R1,#07H WRTIME1:MOV A,@R0 MOV TIMETX,A LCALL SENDL_H INC R0 DJNZ R1,WRTIME1 LCALL IICSTOP RET ;==============================´¢´æÊ±¼ä==================================== ;¹¦ÄÜ:°ÑÓÉʱÖÓоƬ¶ÁÈ¡µÄÊý¾Ý´¢´æµ½SD2000µÄEEPROMÖÐ ;Èë¿Ú:Êý¾ÝÊ×µØÖ·ÔÚAÖÐ,´¢´æÊ×µØÖ·ÔÚSRAMADDÖÐ,Êý¾Ý¸öÊýÔÚSRAMNUMÖÐ ;³ö¿Ú:ʱ¼äÊý¾Ý´¢´æÔÚEEPROMÖÐ ;Ó°Ïì×ÊÔ´:A,TIMETX,SRAMADD,R0,R1,SRAMNUM ;========================================================================== WRITESRAM: MOV R0,A ;Êý¾ÝÊ×µØÖ·ÔÚAÖÐ MOV A,SRAMNUM ;Êý¾Ý¸öÊýÔÚSRAMNUMÖÐ MOV R1,A LCALL IICSTART JNB FLAG.1,SRAM_WRITE_1 LJMP ERR_IICSTOP ;SDAÏß±»óéλΪµÍµçƽÔòÍ˳ö SRAM_WRITE_1: MOV TIMETX,#0A0H LCALL SENDH_L JNB FLAG.0,SRAM_WRITE_2 LJMP ERR_IICSTOP ;ACKÐźŲ»Õý³£ÔòÍ˳ö´. SRAM_WRITE_2: MOV A,SRAMADD_HI ;EEPROMÊ×µØÖ·µÄ¸ß°ËλSRAMADD_HI MOV TIMETX,A LCALL SENDH_L MOV A,SRAMADD_LO ;EEPROMÊ×µØÖ·µÄµÍ°ËλSRAMADD_LO MOV TIMETX,A LCALL SENDH_L WRITESRAM_LOOP: ;Ñ­»·Ð´ÈëÁ¬ÐøÊý¾Ý MOV A,@R0 MOV TIMETX,A LCALL SENDH_L INC R0 DJNZ R1,WRITESRAM_LOOP LCALL IICSTOP RET ;==========================¶ÁÈ¡EEPROM Êý¾Ý×Ó³ÌÐò============================== ;¹¦ÄÜ:´ÓEEPROMÖжÁÈ¡Êý¾Ý ;Èë¿Ú:´¢´æÊý¾ÝÊ×µØÖ·ÔÚAÖÐ,EEPROM¶ÁÈ¡Êý¾ÝÊ×µØÖ·ÔÚSRAMADDÖÐ,Êý¾Ý¸öÊýÔÚSRAMNUMÖÐ ;³ö¿Ú:¶ÁÈ¡Êý¾Ý´¢´æÔÚCPUÖÐ ;Ó°Ïì×ÊÔ´:A,TIMETX,SRAMADD,R0,R1,SRAMNUM,SRAMRX ;=========================================================================== READSRAM: MOV R0,A MOV A,SRAMNUM MOV R1,A LCALL IICSTART ;½øÐÐд²Ù×÷ÒÔÖ¸¶¨EEPROMÖеØÖ·¼ÆÊýÆ÷µÄÖµ JNB FLAG.1,SRAM_READ_1 LJMP ERR_IICSTOP ;SDAÏß±»óéλΪµÍµçƽÔòÍ˳ö SRAM_READ_1: MOV TIMETX,#0A0H ;·¢ËÍд²Ù×÷Ö¸Áî LCALL SENDH_L JNB FLAG.0,SRAM_READ_2 LJMP ERR_IICSTOP ;ACKÐźŲ»Õý³£ÔòÍ˳ö´. SRAM_READ_2: MOV A,SRAMADD_HI ;EEPROMÊ×µØÖ·µÄ¸ß°ËλSRAMADD_HI MOV TIMETX,A LCALL SENDH_L MOV A,SRAMADD_LO ;EEPROMÊ×µØÖ·µÄµÍ°ËλSRAMADD_LO MOV TIMETX,A LCALL SENDH_L LCALL IICSTART MOV A,#0A1H ;·¢ËͶÁ²Ù×÷Ö¸Áî MOV TIMETX,A LCALL SENDH_L READSRAM_LOOP: ;Ñ­»·¶ÁÈ¡Êý¾Ý LCALL RXH_L MOV A,TIMERX MOV @R0,A INC R0 DJNZ R1,READSRAM1 ;¶ÁÍêÒ»¸ö×Ö½ÚÊý¾ÝºóÈ·ÈÏÊý¾Ý´«Êä JMP READSRAM2 ;ÈôΪ×îºóÒ»¸ö×Ö½ÚÊý¾ÝÔò²»ÓÃÈ·ÈÏ READSRAM1: CALL ACK JMP READSRAM_LOOP READSRAM2: CALL NOACK LCALL IICSTOP RET ;============================ACK=========================================== ;¹¦ÄÜ£ºÑÓʱ Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º | ;========================================================================== ACK: CLR TIMETEMP.1 LCALL BITOUT RET ;============================ACK=========================================== ;¹¦ÄÜ£ºÑÓʱ Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º | ;========================================================================== NOACK: SETB TIMETEMP.1 LCALL BITOUT RET ;===============================±£´æ´íÎó´úÂë=============================== ;¹¦ÄÜ£º±£´æMCUÓëIIC½Ó¿ÚͨÐÅʱµÄ´íÎó״̬ | ;Èë¿Ú£ºTIMETEMP.0=ACKλֵ½ | ;³ö¿Ú£ºFLAG.0 =´íÎó´úÂë | ;========================================================================== ACK_ERR: JNB TIMETEMP.0,ACK_ERR_RET ;¼ì²éACKÐźÅÊÇ·ñÕý³£ SETB FLAG.0 ;ÖÃACK³ö´í±ê־λ ACK_ERR_RET: RET ;===============================ÆôÓÃIIC×ÜÏß================================ ;¹¦ÄÜ£º¿ªÆôʵʱʱÖÓµÄIIC×ÜÏß ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE ;Ó°Ïì×ÊÔ´£ºNONE ;========================================================================== IICSTART: CLR FLAG.1 SETB SDA SETB SCL LCALL DELAY JB SDA,IIC_SDAHI SETB FLAG.1 IIC_SDAHI: CLR SDA LCALL DELAY CLR SCL LCALL DELAY RET ;===============================¹Ø±ÕIIC×ÜÏß================================ ;¹¦ÄÜ£º¹Ø±ÕʵʱʱÖÓIIC×ÜÏß ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE ;Ó°Ïì×ÊÔ´£ºNONE ;========================================================================== IICSTOP:CLR SDA SETB SCL LCALL DELAY SETB SDA LCALL DELAY RET ;============================·¢ËÍÒ»¸ö×Ö½Ú£¬Óɸßλµ½µÍλ·¢ËÍ================ ;¹¦ÄÜ£º´ÓMCU·¢ËÍÒ»¸ö×Ö½Ú¸øÊµÊ±Ê±ÖÓ,Óɸßλµ½µÍλ·¢ËÍ | ;Èë¿Ú£º·¢ËÍÊý¾Ý·ÅÔÚTIMETX ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TIMETX | ;========================================================================== SENDH_L:MOV A,TIMETX MOV R2,#08H CLR FLAG.0 SENDH_L1: MOV C,ACC.7 MOV TIMETEMP.1,C LCALL BITOUT RL A DJNZ R2,SENDH_L1 LCALL BITIN LCALL ACK_ERR RET ;==========================·¢ËÍÒ»¸ö×Ö½Ú£¬ÓɵÍλµ½¸ßλ·¢ËÍ================== ;¹¦ÄÜ£º´ÓMCU·¢ËÍÒ»¸ö×Ö½Ú¸øÊµÊ±Ê±ÖÓ,ÓɵÍλµ½¸ßλ·¢ËÍ | ;Èë¿Ú£º·¢ËÍÊý¾Ý·ÅÔÚTIMETX ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TIMETX | ;========================================================================== SENDL_H:MOV A,TIMETX MOV R2,#08H CLR FLAG.0 SENDL_H1: MOV C,ACC.0 MOV TIMETEMP.1,C LCALL BITOUT RR A DJNZ R2,SENDL_H1 LCALL BITIN LCALL ACK_ERR RET ;=================================½ÓÊÕÒ»¸ö×Ö½Ú============================= ;¹¦ÄÜ£ºMCU´ÓIIC×ÜÏß½ÓÊÕÒ»¸ö×Ö½Ú,MSBÔÚǰ,LSBÔÚºó | ;Èë¿Ú£ºNONE ³ö¿Ú£º½ÓÊÕÊý¾Ý·ÅÔÚRXBUFÖÐ | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TIMEBIT£¬RXBUF | ;========================================================================== RXH_L: MOV R2,#08H RXH_L1: LCALL BITIN MOV C,TIMETEMP.0 MOV ACC.7,C RLC A DJNZ R2,RXH_L1 MOV TIMERX,A RET ;=================================½ÓÊÕÒ»¸ö×Ö½Ú============================= ;¹¦ÄÜ£ºMCU´ÓIIC×ÜÏß½ÓÊÕÒ»¸ö×Ö½Ú,LSBÔÚǰ,MSBÔÚºó | ;Èë¿Ú£ºNONE ³ö¿Ú£º½ÓÊÕÊý¾Ý·ÅÔÚRXBUFÖÐ | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TIMEBIT£¬RXBUF | ;========================================================================== RXL_H: MOV R2,#08H RXL_H1: LCALL BITIN MOV C,TIMETEMP.0 RRC A DJNZ R2,RXL_H1 MOV TIMERX,A RET ;================================ËͳöһλÊý================================ ;¹¦ÄÜ£º´ÓMCU·¢ËÍһλÊý¸øÊµÊ±Ê±ÖÓ | ;Èë¿Ú£º·¢ËÍλÊý·ÅÔÚEEPREM.1 ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºA£¬TIMETEMP | ;========================================================================== BITOUT: MOV C,TIMETEMP.1 MOV SDA,C LCALL DELAY SETB SCL LCALL DELAY CLR SCL LCALL DELAY RET ;=================================¶ÁÈëһλÊý=============================== ;¹¦ÄÜ£ºMCU´ÓʵʱʱÖÓ½ÓÊÕһλÊý | ;Èë¿Ú£ºNONE ³ö¿Ú£º½ÓÊÕλÊý·ÅÔÚTIMETEMP.0 | ;Ó°Ïì×ÊÔ´£ºA£¬TIMETEMP | ;========================================================================== BITIN: SETB SDA SETB SCL LCALL DELAY MOV C,SDA MOV TIMETEMP.0,C CLR SCL CLR SDA LCALL DELAY RET ;============================¶ÌÑÓʱ×Ó³ÌÐò================================== ;¹¦ÄÜ£ºÑÓʱ Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºR7,PSW | ;========================================================================== DELAY: MOV R7,#05H DELAY1: NOP DJNZ R7,DELAY1 RET LONGDELAY: ;DELAY 300MS MOV R6,#240 LD0: MOV R7,#250 ;5*250*240 LD1: NOP NOP NOP DJNZ R7,LD1 DJNZ R6,LD0 RET ;============================״̬Òì³£´¦Àí³ÌÐò============================== ;¹¦ÄÜ£ºÔÚ¸ÉÈÅÑÏÖØµÄÇé¿öÏÂ,ʱÖÓ½øÈëÒ쳣״̬µÄ´¦Àí | ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º A£¬TIMETX | ;========================================================================== TIME_TESTMODE: TIME_TESTMODE_LOOP: LCALL IICSTART JNB FLAG.1,TIME_TESTMODE_1 LJMP ERR_IICSTOP ;SDAÏß±»óéλΪµÍµçƽÔòÍ˳ö TIME_TESTMODE_1: MOV TIMETX,#6EH ;·¢ËͲâÊÔģʽ½áÊøÃüÁî,#6EH LCALL SENDH_L LCALL IICSTOP ; JB FLAG.0,TIME_TESTMODE_LOOP;ACKÐźŲ»Õý³£ÔòÖØÐ´. ; RET ;============================д״̬¼Ä´æÆ÷³ÌÐò============================== ;¹¦ÄÜ£º¶Á/дʵʱʱÖÓ״̬¼Ä´æÆ÷£¬¶ÔÆä½øÐÐÉèÖà | ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º A£¬TIMETX | ;========================================================================== TIMESTATUS_INT12: LCALL IICSTART JNB FLAG.1,TIME_SETMODE_1 LJMP ERR_IICSTOP ;SDAÏß±»óéλΪµÍµçƽÔòÍ˳ö TIME_SETMODE_1: MOV TIMETX,#62H ;·¢ËÍдʱÖÓ״̬¼Ä´æÆ÷ÃüÁî LCALL SENDH_L JNB FLAG.0,TIME_SETMODE_2 LJMP ERR_IICSTOP ;ACKÐźŲ»Õý³£ÔòÍ˳ö´. TIME_SETMODE_2: MOV TIMETX,#40H ;24Сʱ½øÖÆ£¬ LCALL SENDL_H ;¹Ø±Õ/INT1¼°/INT2½ÅµÄÊä³ö LCALL IICSTOP ; RET END