;=============================================================================== ; SD2100ϵÁÐSRAM/EEPROM¹¦ÄܲâÊÔ³ÌÐò VER1.00 ; ; ; ±¾³ÌÐò¹¦ÄÜÈçÏ£º ; ;£¨1£© µçÔ´Éϵ磬LEDÏÔʾ"TS21V1.00"°æ±¾ºÅ ;£¨2£© °´K66¼ü½øÈëÑ¡ÔñÐͺÅ״̬£¬LEDÏÔʾ"BP0001--"£¬ÆäÖÐLED8¼°LED7ÔÚÉÁ˸ÏÔʾ"BP"¡£ ; ´Ëʱ°´K88ÏòÏÂÑ¡Ðͺţ¬ÒÀ´ËΪ"BP-EL-DL-CL-BL-FL-EP-DP-CP-BP"Ñ­»· ; ´Ëʱ°´K77ÏòÉÏÑ¡ÐͺÅ, ÒÀ´ËΪ"BP-CP-DP-EP-FL-BL-CL-DL-EL-BP"Ñ­»· ; ·Ö±ð±íʾ£ºBP=SD2100BP/SD2101BP/SD2102BP ; CP= SD2100CP/SD2101CP/SD2102CP ; DP= SD2100DP/SD2101DP/SD2102DP ; EP= SD2100EP/SD2101EP/SD2102EP ; FL= SD2100FLP/SD2101FLP/SD2102FLP ; BL= SD2100BLP/SD2101BLP/SD2102BLP ; CL= SD2100CLP/SD2101CLP/SD2102CLP ; DL= SD2100DLP/SD2101DLP/SD2102DLP ; EL= SD2100ELP/SD2101ELP/SD2102ELP ; ÔÙ°´K66È·¶¨Ðͺš£ ; ×¢£ºSD2100A/SD2101A/SD2102A¿ÉÒÔÑ¡ÓÃ"BP"À´²âÊÔ£¬Ö»ÊDzâÊÔʱ²»ÓÃRAM²âÊÔ ; ¹¦ÄܶøÒÑ¡£ ;£¨3£© °´K55¼ü½øÈëRAM/EEPROM²âÊÔ¹¦ÄÜ: ; ²âÊÔ¹ý³ÌÖÐLED2¡¢LED1ÉÁ˸ÏÔʾ"--"; ; ²âÊÔ½áÊøÈçRAM/EEPROMÎÞÎÊÌâÔòÏÔʾ"OK"£» ; ²âÊÔ½áÊøÈçRAM/EEPROMÓÐÎÊÌâÔòÏÔʾ"EE" ;£¨4£© °´K44¼üÇåLED2¡¢LED1ÏÔʾΪ"--"¡£ ;£¨5£© °´K33¼üÏÔʾ´ÓSD2100оƬÖжÁµ½µÄʱ¼ä"Äê¡¢Ô¡¢ÈÕ¡¢ÐÇÆÚ",/INT½ÅÊä³ö32768HZ¡£ ;£¨6£© °´K22¼üÏÔʾ´ÓSD2100оƬÖжÁµ½µÄʱ¼ä" Сʱ¡¢·ÖÖÓ¡¢Ãë"£¬ÃëÊýËæÊ±¼ä²»¶Ï ; ±ä»¯,½ûÖ¹/INTÊä³ö¡£´ËʱֻÏìÓ¦K22¼ü. ; ÖØ°´K22¼üÍ£Ö¹¶ÁÈ¡" Сʱ¡¢·ÖÖÓ¡¢Ãë"£¬´Ëʱ¿ÉÏìÓ¦¼üK55¡¢K44¡¢K33¡¢K22¡¢ ; K11. ; (7) °´K11¼ü¹¦Äܸ´Î»£¬´Ó±¾½ÚµÚÒ»Ìõ²Ù×÷ÖØÐÂÖ´ÐС£ ; ; ×¢: µ¥Æ¬»úÊÇAT89C51£¬Íâ¾§ÕñΪ12Mhz,ÔÚÐËÍþ·«¹«Ë¾µÄSD7218ÆÀ¹À°å(ver2.00)ÉÏ ; ÔËÐÐ,Ô­Àíͼ¼°PCBͼÇë´ÓÍøÉÏÏÂÔØ. ; Last updated:2004/07/08 ; ±¾³ÌÐò½ö¹©²Î¿¼£¬ÈçÓÐÎÊÌâÇëÁªÏµ£º³Â¹¤ 0755-83246178,fax:83225561 ; 13922865036 chendw@whwave.com.cn http://www.whwave.com.cn ;=============================================================================== ;define the general register ;LED¼Ä´æÆ÷ DIG1 EQU 20H ;LEDµÚһλ»º³åÆ÷ DIG2 EQU 21H ; DIG3 EQU 22H ; DIG4 EQU 23H ; DIG5 EQU 24H ; DIG6 EQU 25H ; DIG7 EQU 26H ; DIG8 EQU 27H FLAG EQU 28H ;ͨÓñêÖ¾¼Ä´æÆ÷ ;BIT0=1, ACK ERR ;BIT0=0 ,ACK OK YEAR EQU 30H ;Äê MONTH EQU 31H ;Ô DAY EQU 32H ;ÈÕ WEEK EQU 33H ;ÐÇÆÚ HOUR EQU 34H ;Сʱ MINUTE EQU 35H ;·ÖÖÓ SECOND EQU 36H ;Ãë ;µ¥Æ¬»úÓëʵʱʱÖÓ¼äͨÐżĴæÆ÷ TIMETEMP EQU 2EH ;ʱ¼äÊý¾Ý»º´æÆ÷ TIMETX EQU 43H ;ʱ¼äÊý¾Ý·¢ËͼĴæÆ÷ TIMERX EQU 44H ;ʱ¼äÊý¾Ý½ÓÊռĴæÆ÷ ;µ¥Æ¬»úÓëIICͨÐżĴæÆ÷ IICTEMP EQU 2FH ;IIC±êÖ¾¼Ä´æÆ÷ SLAVE_ADD EQU 40H ;SD7218µØÖ·¼Ä´æÆ÷ DATAI1 EQU 41H DATAI2 EQU 42H TXBUF EQU 47H ;IICÊý¾Ý·¢ËͼĴæÆ÷ RXBUF EQU 48H ;IICÊý¾Ý½ÓÊռĴæÆ÷ KEYBUF EQU 49H ;¼üÅÌÊý¾Ý»º³åÆ÷ READDATA EQU 4FH ;ζÈÊý¾Ý¼Ä´æÆ÷ TEMPHI EQU 50H ;ζȸß×Ö½Ú TEMPLO EQU 51H ;ζȵÍ×Ö½Ú ;SRAM¼Ä´æÆ÷ SRAMADD_LO EQU 52H ;SRAMµØÖ·µÍ8λ SRAMADD_HI EQU 53H ;SRAMµØÖ·¸ß8λ SRAMDATA EQU 54H ;дÈëSRAMÄÚµÄÊý¾Ý VERIFY_LO EQU 55H ;УÑé´ÎÊýµÍ°Ëλ VERIFY_HI EQU 56H ;УÑé´ÎÊý¸ß°Ëλ TYPE EQU 57H ;SD2100ÐͺżĴæÆ÷ EE_PAGE EQU 58H TEMP EQU 5CH ; ;--------------------------------------------------------------------------- ;define port bit ;¸÷ͨÐÅ¿Úλ´úºÅ SDA EQU P3.1 ;IICµÄSDA¿ÚÏß SCL EQU P3.2 ;IICµÄSCL¿ÚÏß KEY EQU P3.0 ;¼üÅÌÖжÏÐźÅÏß T_SDA EQU P3.4 ;SD2100ÖÐSRAMµÄSDAÏß T_SCL EQU P3.5 ;SD2100ÖÐSRAMµÄSCLÏß SIO EQU P3.4 ;SD2100µÄSIOÏß SCK EQU P3.5 ;SD2100µÄSCKÏß CS EQU P3.6 ;SD2100µÄCSÏß ;=========================================================================== ; *** IICÃüÁÒå *** ;=========================================================================== COMMAND_RESET EQU 68H COMMAND_TEST EQU 6AH COMMAND_SHIFT_LEFT EQU 61H COMMAND_SHIFT_RIGHT EQU 62H COMMAND_SHIFT_ROUND_LEFT EQU 63H COMMAND_SHIFT_ROUND_RIGHT EQU 64H COMMAND_UPDATE_DISP_DECODE EQU 40H COMMAND_UPDATE_DISP EQU 50H COMMAND_FLASH_CONTROL EQU 78H COMMAND_HIDE_CONTROL EQU 79H COMMAND_SEGMENT_ON EQU 08H COMMAND_SEGMENT_OFF EQU 09H COMMAND_READ_KEY_VALUE EQU 10H COMMAND_RW_RAM_VALUE EQU 80H COMMAND_LED_HEXS_WR EQU 40H ;=========================================================================== ; *** ³£Êý¶¨Òå *** ;=========================================================================== SLAVE2_RD EQU 51H ;sd7218 ver2.0 SLAVE2_WR EQU 50H ;=========================================================================== ORG 0000H ;RESET LJMP START ;--------------------------------------------------------------------------- ORG 0100H START: CLR A ;¿ªÊ¼³õʼ»¯¸÷¼Ä´æÆ÷ MOV IE,A ;¹ØÖÐ¶Ï MOV SP,#60H ;¶¨Òå¶ÑÕ» CLR FLAG ;Çå³ý±ê־λ LCALL INIT_LEDBUF ;³õʼ»¯LEDÊý¾Ý»º³åÆ÷,"TS21 V1.00" LCALL LONGDELAY LCALL LONGDELAY MOV SLAVE_ADD,#SLAVE2_WR LCALL WRITE_LED8 WAIT_KEY: LCALL SET_TYPE ;ÉèÖòâÊÔÐͺŠ;----------------------------------------------------------------- GET_KEY: SETB KEY NOP JB KEY,$; ;µÈ´ýSD7218µÄ¼üÅÌÊäÈëÐźŠ;----------------------------------------------------------------- MOV SLAVE_ADD,#SLAVE2_RD LCALL READ_KEY ;¶ÁSD7218ÄڵļüÖµ MOV A,KEYBUF CJNE A,#44H,RAM_TEST_KEY ;K44,ÏÔʾÇåÆÁ LCALL LED_TYPE LCALL TEST_LEDBUF ; LCALL TIME_RESET ;¸ÃÐпÉÑ¡ÓÃ,¸´Î»Ê±ÖÓ JMP WAIT_KEY_RELEASE RAM_TEST_KEY: CJNE A,#55H,DISP_TIME_YEARWEEK ;K55,²âÊÔRAM/EEPROM LCALL LED_TYPE LCALL TEST_LEDBUF MOV SLAVE_ADD,#SLAVE2_WR LCALL WRITE_LED8 LCALL RAM_TEST JMP WAIT_KEY_RELEASE DISP_TIME_YEARWEEK: CJNE A,#33H,DISP_TIME_HOURSECOND ;K33,ÏÔʾÄê.ÔÂ.ÈÕ.ÐÇÆÚ LCALL TIMESTATUS_INT12ON ;/INT½ÅÊä³ö32768HZ·½²¨ LCALL READ_TIME LCALL BCD_LEDYEARWEEK MOV SLAVE_ADD,#SLAVE2_WR LCALL WRITE_LED8_DECODE JMP WAIT_KEY_RELEASE1 DISP_TIME_HOURSECOND: CJNE A,#22H,RAM_TEST_RESET_KEY ;K22,ÏÔʾСʱ.·ÖÖÓ.Ãë. LCALL TIMESTATUS_INT12OFF ;½ûÖ¹/INT½ÅÊä³ö DISP_HOURSECOND_LOOP: SETB KEY DISP_KEY_RELEASE1: JNB KEY,$ LCALL READ_TIME LCALL BCD_LEDHOURSECOND; MOV DIG7,#0 MOV DIG8,#0 ;HIGH BIT DISPLAY "00",NO USED MOV SLAVE_ADD,#SLAVE2_WR LCALL WRITE_LED8_DECODE MOV SLAVE_ADD,#SLAVE2_RD LCALL READ_KEY ;¶ÁSD7218ÄڵļüÖµ MOV A,KEYBUF CJNE A,#22H,DISP_HOURSECOND_LOOP JMP WAIT_KEY_RELEASE1 RAM_TEST_RESET_KEY: CJNE A,#11H,WAIT_KEY_RELEASE1 JMP START ;RESET SHIFT_ROUND_LEFT_KEY: WAIT_KEY_RELEASE: MOV SLAVE_ADD,#SLAVE2_WR LCALL WRITE_LED8 WAIT_KEY_RELEASE1: JNB KEY,$ JMP GET_KEY ;==================¶Á¼üÖµ×Ó³ÌÐò=========================================== ;¹¦ÄÜ£º | ;Èë¿Ú£ºNONE | ;³ö¿Ú£º | ;Ó°Ïì×ÊÔ´£º | ;========================================================================== READ_KEY: LCALL IICSTART JB FLAG.1,ERR_IICSTOP ;ÈçSDAÏß±»óéλΪµÍµçƽÔòÍ˳ö MOV A,SLAVE_ADD MOV TXBUF,A ;ËÍSD7218µØÖ· LCALL SENDH_L JB FLAG.0,ERR_IICSTOP ;ACKÐźŲ»Õý³£ÔòÍ˳ö. MOV TXBUF,#COMMAND_READ_KEY_VALUE LCALL SENDH_L ;ËͶÁ¼üÃüÁî RD_KEY1: LCALL RXH_L MOV A,RXBUF MOV KEYBUF,A RD_KEY2: CALL NOACK LCALL IICSTOP RD_KEY_RET: RET ERR_IICSTOP: LCALL IICSTOP RET ;======================д8¸öLED8Êý¾Ý³ÌÐò==================================== ;¹¦ÄÜ£º | ;Èë¿Ú£º | ;³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º | ;=========================================================================== WRITE_LED8: LCALL IICSTART JNB FLAG.1,LED8_WRITE_1 LJMP ERR_IICSTOP ;SDAÏß±»óéλΪµÍµçƽÔòÍ˳ö LED8_WRITE_1: MOV A,SLAVE_ADD MOV TXBUF,A ;ËÍSD7218µØÖ· LCALL SENDH_L JNB FLAG.0,LED8_WRITE_2 LJMP ERR_IICSTOP ;ACKÐźŲ»Õý³£ÔòÍ˳ö´. LED8_WRITE_2: MOV TXBUF,#COMMAND_UPDATE_DISP LCALL SENDH_L ;ËͶà×Ö½ÚÏÂÔØÊý¾Ýµ«²»ÒëÂëÃüÁî MOV R0,#DIG1 MOV R1,#08H LED8_WRITE_3: MOV A,@R0 MOV TXBUF,A LCALL SENDH_L INC R0 DJNZ R1,LED8_WRITE_3 LCALL IICSTOP RET ;======================д8¸öLED8Êý¾Ý³ÌÐò==================================== ;¹¦ÄÜ£º | ;Èë¿Ú£º | ;³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º | ;=========================================================================== WRITE_LED8_DECODE: LCALL IICSTART JNB FLAG.1,LED8_WRITE_1D LJMP ERR_IICSTOP ;SDAÏß±»óéλΪµÍµçƽÔòÍ˳ö LED8_WRITE_1D: MOV A,SLAVE_ADD MOV TXBUF,A ;ËÍSD7218µØÖ· LCALL SENDH_L JNB FLAG.0,LED8_WRITE_2D LJMP ERR_IICSTOP ;ACKÐźŲ»Õý³£ÔòÍ˳ö´. LED8_WRITE_2D: MOV TXBUF,#COMMAND_UPDATE_DISP_DECODE LCALL SENDH_L ;ËͶà×Ö½ÚÏÂÔØÊý¾Ýµ«²»ÒëÂëÃüÁî MOV R0,#DIG1 MOV R1,#08H LED8_WRITE_3D: MOV A,@R0 MOV TXBUF,A LCALL SENDH_L INC R0 DJNZ R1,LED8_WRITE_3D LCALL IICSTOP RET ;====================== LED FLASH ======================================= ;¹¦ÄÜ£º | ;Èë¿Ú£º | ;³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º | ;=========================================================================== LED_FLASH: LCALL IICSTART LED_FLASH_1: MOV A,SLAVE_ADD MOV TXBUF,A ;ËÍSD7218µØÖ· LCALL SENDH_L LED8_FLASH_2: MOV TXBUF,#COMMAND_FLASH_CONTROL LCALL SENDH_L ;ËÍÉÁ˸ÃüÁî MOV A,TEMP ;FLASH DATA MOV TXBUF,A LCALL SENDH_L LCALL IICSTOP RET ;======================дµ¥¸öBYTEÊý¾Ý³ÌÐò================================= ;¹¦ÄÜ£º | ;Èë¿Ú£º | ;³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º | ;========================================================================= WRITE_BYTE: LCALL IICSTART JNB FLAG.1,BYTE_WRITE_1 LJMP ERR_IICSTOP ;SDAÏß±»óéλΪµÍµçƽÔòÍ˳ö BYTE_WRITE_1: MOV A,SLAVE_ADD MOV TXBUF,A ;ËÍSD7218µØÖ· LCALL SENDH_L JNB FLAG.0,BYTE_WRITE_2 LJMP ERR_IICSTOP ;ACKÐźŲ»Õý³£ÔòÍ˳ö´. BYTE_WRITE_2: MOV A,DATAI1 MOV TXBUF,A LCALL SENDH_L ;Ë͵¥×Ö½ÚÃüÁî MOV A,DATAI2 MOV TXBUF,A LCALL SENDH_L ;Ë͵¥×Ö½ÚÃüÁî LCALL IICSTOP RET ;============================ACK=========================================== ;¹¦ÄÜ£ºÑÓʱ Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º | ;========================================================================== ACK: CLR IICTEMP.1 LCALL BITOUT RET ;============================ACK=========================================== ;¹¦ÄÜ£ºÑÓʱ Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º | ;========================================================================== NOACK: SETB IICTEMP.1 LCALL BITOUT RET ;===============================±£´æ´íÎó´úÂë=============================== ;¹¦ÄÜ£º±£´æMCUÓëIIC½Ó¿ÚͨÐÅʱµÄ´íÎó״̬ | ;Èë¿Ú£ºIICTEMP.0=ACKλֵ½ | ;³ö¿Ú£ºFLAG.0 =´íÎó´úÂë | ;========================================================================== ACK_ERR: JNB IICTEMP.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_7218 JB SDA,IIC_SDAHI SETB FLAG.1 IIC_SDAHI: CLR SDA LCALL DELAY_7218 CLR SCL LCALL DELAY_7218 RET ;===============================¹Ø±ÕIIC×ÜÏß================================ ;¹¦ÄÜ£º¹Ø±ÕʵʱʱÖÓIIC×ÜÏß ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE ;Ó°Ïì×ÊÔ´£ºNONE ;========================================================================== IICSTOP:CLR SDA SETB SCL LCALL DELAY_7218 SETB SDA LCALL DELAY_7218 RET ;============================·¢ËÍÒ»¸ö×Ö½Ú£¬Óɸßλµ½µÍλ·¢ËÍ================ ;¹¦ÄÜ£º´ÓMCU·¢ËÍÒ»¸ö×Ö½Ú¸øÊµÊ±Ê±ÖÓ,Óɸßλµ½µÍλ·¢ËÍ | ;Èë¿Ú£º·¢ËÍÊý¾Ý·ÅÔÚTXBUF ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TXBUF | ;========================================================================== SENDH_L:MOV A,TXBUF MOV R2,#08H CLR FLAG.0 SENDH_L1: MOV C,ACC.7 MOV IICTEMP.1,C LCALL BITOUT RL A DJNZ R2,SENDH_L1 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,IICTEMP.0 MOV ACC.7,C RLC A DJNZ R2,RXH_L1 MOV RXBUF ,A RET ;=================================½ÓÊÕÒ»¸ö×Ö½Ú============================= ;¹¦ÄÜ£ºMCU´ÓIIC×ÜÏß½ÓÊÕÒ»¸ö×Ö½Ú,LSBÔÚǰ,MSBÔÚºó | ;Èë¿Ú£ºNONE ³ö¿Ú£º½ÓÊÕÊý¾Ý·ÅÔÚRXBUFÖÐ | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TIMEBIT£¬RXBUF | ;========================================================================== RXL_H: MOV R2,#08H RXL_H1: LCALL BITIN MOV C,IICTEMP.0 RRC A DJNZ R2,RXL_H1 MOV RXBUF ,A RET ;================================ËͳöһλÊý================================ ;¹¦ÄÜ£º´ÓMCU·¢ËÍһλÊý¸øÊµÊ±Ê±ÖÓ | ;Èë¿Ú£º·¢ËÍλÊý·ÅÔÚEEPREM.1 ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºA£¬IICTEMP | ;========================================================================== BITOUT: MOV C,IICTEMP.1 MOV SDA,C LCALL DELAY_7218 SETB SCL LCALL DELAY_7218 CLR SCL LCALL DELAY_7218 RET ;=================================¶ÁÈëһλÊý=============================== ;¹¦ÄÜ£ºMCU´ÓʵʱʱÖÓ½ÓÊÕһλÊý | ;Èë¿Ú£ºNONE ³ö¿Ú£º½ÓÊÕλÊý·ÅÔÚIICTEMP.0 | ;Ó°Ïì×ÊÔ´£ºA£¬IICTEMP | ;========================================================================== BITIN: SETB SDA SETB SCL LCALL DELAY_7218 MOV C,SDA MOV IICTEMP.0,C CLR SCL CLR SDA LCALL DELAY_7218 RET ;============================¶ÌÑÓʱ×Ó³ÌÐò================================== ;¹¦ÄÜ£ºÑÓʱ Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºR7,PSW | ;========================================================================== DELAY: MOV R7,#2 DELAY1: NOP DJNZ R7,DELAY1 RET ;-------- DELAY_7218: MOV R7,#15 DELAY1_7218: NOP DJNZ R7,DELAY1_7218 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 DELAY10MS: ;DELAY >10MS MOV R6,#11 LD00: MOV R7,#250 ;5*250*11 LD10: NOP NOP NOP DJNZ R7,LD10 DJNZ R6,LD00 RET ;============================д°ËλLEDÊý¾Ý»º³åÆ÷³ÌÐò======================= ;¹¦ÄÜ£ºÐ´°ËλLEDÊý¾Ý»º³åÆ÷ | ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º A | ;========================================================================== INIT_LEDBUF: MOV R0,#DIG8 MOV R3,#8 INIT_LEDBUF_LOOP: MOV A,R3 DEC A MOV DPTR,#TABLE MOVC A,@A+DPTR ;²é±íÈ¡LEDÏÔʾÊý¾Ý MOV @R0,A DEC R0 DJNZ R3,INIT_LEDBUF_LOOP ;¸³ÖµÍê°Ë¸öLEDÊý¾Ý? RET TABLE: DB 3FH,3FH,86H,3EH,06H,5BH,6DH,31H ;"TS21 V1.00" ;============================ACK=========================================== ;¹¦ÄÜ£ºÑÓʱ Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º | ;========================================================================== T_ACK: CLR TIMETEMP.1 LCALL T_BITOUT RET ;============================ACK=========================================== ;¹¦ÄÜ£ºÑÓʱ Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º | ;========================================================================== T_NOACK: SETB TIMETEMP.1 LCALL T_BITOUT RET ;===============================±£´æ´íÎó´úÂë=============================== ;¹¦ÄÜ£º±£´æMCUÓëIIC½Ó¿ÚͨÐÅʱµÄ´íÎó״̬ | ;Èë¿Ú£ºTIMETEMP.0=ACKÎ»çÆ½ | ;³ö¿Ú£ºFLAG.0 =´íÎó´úÂë | ;========================================================================== T_ACK_ERR: JNB TIMETEMP.0,T_ACK_ERR_RET ;¼ì²éACKÐźÅÊÇ·ñÕý³£ SETB FLAG.0 ;ÖÃACK³ö´í±ê־λ T_ACK_ERR_RET: RET ;===============================ÆôÓÃIIC×ÜÏß================================ ;¹¦ÄÜ£º¿ªÆôʵʱʱÖÓµÄIIC×ÜÏß ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE ;Ó°Ïì×ÊÔ´£ºNONE ;========================================================================== T_IICSTART: CLR FLAG.1 SETB T_SDA SETB T_SCL LCALL DELAY JB T_SDA,T_IIC_SDAHI SETB FLAG.1 T_IIC_SDAHI: CLR T_SDA LCALL DELAY CLR T_SCL LCALL DELAY RET ;===============================¹Ø±ÕIIC×ÜÏß================================ ;¹¦ÄÜ£º¹Ø±ÕʵʱʱÖÓIIC×ÜÏß ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE ;Ó°Ïì×ÊÔ´£ºNONE ;========================================================================== T_IICSTOP:CLR T_SDA SETB T_SCL LCALL DELAY SETB T_SDA LCALL DELAY RET ;============================·¢ËÍÒ»¸ö×Ö½Ú£¬Óɸßλµ½µÍλ·¢ËÍ================ ;¹¦ÄÜ£º´ÓMCU·¢ËÍÒ»¸ö×Ö½Ú¸øÊµÊ±Ê±ÖÓ,Óɸßλµ½µÍλ·¢ËÍ | ;Èë¿Ú£º·¢ËÍÊý¾Ý·ÅÔÚTIMETX ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TIMETX | ;========================================================================== T_SENDH_L:MOV A,TIMETX MOV R2,#08H CLR FLAG.0 T_SENDH_L1: MOV C,ACC.7 MOV TIMETEMP.1,C LCALL T_BITOUT RL A DJNZ R2,T_SENDH_L1 LCALL T_BITIN LCALL T_ACK_ERR RET ;==========================·¢ËÍÒ»¸ö×Ö½Ú£¬ÓɵÍλµ½¸ßλ·¢ËÍ================== ;¹¦ÄÜ£º´ÓMCU·¢ËÍÒ»¸ö×Ö½Ú¸øÊµÊ±Ê±ÖÓ,ÓɵÍλµ½¸ßλ·¢ËÍ | ;Èë¿Ú£º·¢ËÍÊý¾Ý·ÅÔÚTIMETX ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TIMETX | ;========================================================================== T_SENDL_H:MOV A,TIMETX MOV R2,#08H CLR FLAG.0 T_SENDL_H1: MOV C,ACC.0 MOV TIMETEMP.1,C LCALL T_BITOUT RR A DJNZ R2,T_SENDL_H1 LCALL T_BITIN LCALL T_ACK_ERR RET ;=================================½ÓÊÕÒ»¸ö×Ö½Ú============================= ;¹¦ÄÜ£ºMCU´ÓIIC×ÜÏß½ÓÊÕÒ»¸ö×Ö½Ú,MSBÔÚǰ,LSBÔÚºó | ;Èë¿Ú£ºNONE ³ö¿Ú£º½ÓÊÕÊý¾Ý·ÅÔÚRXBUFÖÐ | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TIMEBIT£¬RXBUF | ;========================================================================== T_RXH_L:MOV R2,#08H T_RXH_L1: LCALL T_BITIN MOV C,TIMETEMP.0 MOV ACC.7,C RLC A DJNZ R2,T_RXH_L1 MOV TIMERX,A RET ;=================================½ÓÊÕÒ»¸ö×Ö½Ú============================= ;¹¦ÄÜ£ºMCU´ÓIIC×ÜÏß½ÓÊÕÒ»¸ö×Ö½Ú,LSBÔÚǰ,MSBÔÚºó | ;Èë¿Ú£ºNONE ³ö¿Ú£º½ÓÊÕÊý¾Ý·ÅÔÚRXBUFÖÐ | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TIMEBIT£¬RXBUF | ;========================================================================== T_RXL_H:MOV R2,#08H T_RXL_H1: LCALL T_BITIN MOV C,TIMETEMP.0 RRC A DJNZ R2,T_RXL_H1 MOV TIMERX,A RET ;================================ËͳöһλÊý================================ ;¹¦ÄÜ£º´ÓMCU·¢ËÍһλÊý¸øÊµÊ±Ê±ÖÓ | ;Èë¿Ú£º·¢ËÍλÊý·ÅÔÚEEPREM.1 ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºA£¬TIMETEMP | ;========================================================================== T_BITOUT: MOV C,TIMETEMP.1 MOV T_SDA,C LCALL DELAY SETB T_SCL LCALL DELAY CLR T_SCL LCALL DELAY RET ;=================================¶ÁÈëһλÊý=============================== ;¹¦ÄÜ£ºMCU´ÓʵʱʱÖÓ½ÓÊÕһλÊý | ;Èë¿Ú£ºNONE ³ö¿Ú£º½ÓÊÕλÊý·ÅÔÚTIMETEMP.0 | ;Ó°Ïì×ÊÔ´£ºA£¬TIMETEMP | ;========================================================================== T_BITIN: SETB T_SDA SETB T_SCL LCALL DELAY MOV C,T_SDA MOV TIMETEMP.0,C CLR T_SCL CLR T_SDA LCALL DELAY RET ;---------------------------------------------------- BCD_LEDHOURSECOND: MOV A,HOUR SWAP A ANL A,#0FH MOV DIG6,A MOV A,HOUR ANL A,#0FH MOV DIG5,A MOV A,MINUTE SWAP A ANL A,#0FH MOV DIG4,A MOV A,MINUTE ANL A,#0FH MOV DIG3,A MOV A,SECOND SWAP A ANL A,#0FH MOV DIG2,A ; MOV A,SECOND ANL A,#0FH MOV DIG1,A RET BCD_LEDYEARWEEK: MOV A,YEAR SWAP A ANL A,#0FH MOV DIG8,A MOV A,YEAR ANL A,#0FH MOV DIG7,A MOV A,MONTH SWAP A ANL A,#0FH MOV DIG6,A MOV A,MONTH ANL A,#0FH MOV DIG5,A MOV A,DAY SWAP A ANL A,#0FH MOV DIG4,A MOV A,DAY ANL A,#0FH MOV DIG3,A MOV A,WEEK SWAP A ANL A,#0FH MOV DIG2,A ; MOV A,WEEK ANL A,#0FH MOV DIG1,A RET ;==============================WRITE SRAM/EEPROM ========================== ;¹¦ÄÜ:°ÑÊý¾Ý´¢´æµ½sd2100µÄSRAMµÄÈ«²¿µØÖ·ÖÐÈ¥ ;Èë¿Ú:Êý¾ÝÊ×µØÖ·ÔÚAÖÐ,´¢´æÊ×µØÖ·ÔÚSRAMADDÖÐ,Êý¾Ý¸öÊýÔÚSRAMNUMÖÐ ;³ö¿Ú:ÎÞ ;Ó°Ïì×ÊÔ´:A,TIMETX,SRAMADD,R0,R1,SRAMNUM ;========================================================================== WRITESRAM: LCALL T_IICSTART JNB FLAG.1,SRAM_WRITE_1 LJMP SRAM_ERROR ;SDAÏß±»óéλΪµÍµçƽÔòÍ˳ö SRAM_WRITE_1: MOV TIMETX,#0A0H ;A2A1A0="000" LCALL T_SENDH_L ;SLAVE ADDRESS JNB FLAG.0,SRAM_WRITE_2 LJMP SRAM_ERROR ;ACKÐźŲ»Õý³£ÔòÍ˳ö´. SRAM_WRITE_2: MOV A,SRAMADD_LO ;RAMÊ×µØÖ·ÔÚSRAMADD_LOÖÐ MOV TIMETX,A ;WORD ADDRESS LCALL T_SENDH_L MOV A,TYPE CJNE A,#3,SRAM_WRITE_NODE1 ;SD2100DP JMP SRAM_WRITE_DE SRAM_WRITE_NODE1: CJNE A,#4,SRAM_WRITE_NODE ;SD2100EP SRAM_WRITE_DE: MOV A,#0 ;RAMÊ×µØÖ·µÄµÍ°Ëλ MOV TIMETX,A ;WORD ADDRESS LCALL T_SENDH_L SRAM_WRITE_NODE: MOV A,SRAMADD_HI ;RAMÒ³µØÖ·ÔÚSRAMADD_HIÖÐ MOV R0,A WRITESRAM_PAGES: MOV A,#0 MOV R1,A ; WRITESRAM_LOOP: ;Ñ­»·Ð´ÈëÁ¬ÐøÊý¾Ý MOV A,SRAMDATA MOV TIMETX,A LCALL T_SENDH_L DJNZ R1,WRITESRAM_LOOP DJNZ R0,WRITESRAM_PAGES LCALL T_IICSTOP RET ;==========================¶ÁÈ¡SRAM Êý¾Ý×Ó³ÌÐò============================== ;¹¦ÄÜ:´ÓSRAMÖжÁÈ¡Êý¾Ý ;Èë¿Ú:´¢´æÊý¾ÝÊ×µØÖ·ÔÚAÖÐ,SRAM¶ÁÈ¡Êý¾ÝÊ×µØÖ·ÔÚSRAMADDÖÐ,Êý¾Ý¸öÊýÔÚSRAMNUMÖÐ ;³ö¿Ú:¶ÁÈ¡Êý¾Ý´¢´æÔÚCPUÖÐ ;Ó°Ïì×ÊÔ´:A,TIMETX,SRAMADD,R0,R1,SRAMNUM,SRAMRX ;=========================================================================== READSRAM: LCALL T_IICSTART JNB FLAG.1,SRAM_READ_1 LJMP SRAM_ERROR ;SDAÏß±»óéλΪµÍµçƽÔòÍ˳ö SRAM_READ_1: MOV TIMETX,#0A0H ;A2A1A0="000" LCALL T_SENDH_L ;SLAVE ADDRESS JNB FLAG.0,SRAM_READ_2 LJMP SRAM_ERROR ;ACKÐźŲ»Õý³£ÔòÍ˳ö´. SRAM_READ_2: MOV A,SRAMADD_LO ;RAMÊ×µØÖ·ÔÚSRAMADD_LOÖÐ MOV TIMETX,A ;WORD ADDRESS LCALL T_SENDH_L MOV A,TYPE CJNE A,#3,SRAM_READ_NODE1 ;SD2100DP JMP SRAM_READ_DE SRAM_READ_NODE1: CJNE A,#4,SRAM_READ_NODE ;SD2100EP SRAM_READ_DE: MOV A,#0 ;RAMÊ×µØÖ·µÄµÍ°Ëλ MOV TIMETX,A ;WORD ADDRESS LCALL T_SENDH_L SRAM_READ_NODE: LCALL T_IICSTART MOV A,#0A1H ;·¢ËͶÁ²Ù×÷Ö¸Áî MOV TIMETX,A LCALL T_SENDH_L MOV A,SRAMADD_HI ;RAMÒ³µØÖ·ÔÚSRAMADD_HIÖÐ MOV R0,A CLR FLAG.7 ;Çå³ýRAM´íÎó±êÖ¾ MOV A,#0 MOV R1,A READSRAM_LOOP: ;Ñ­»·¶ÁÈ¡Êý¾Ý LCALL T_RXH_L MOV A,TIMERX CJNE A,SRAMDATA,SRAM_ERROR DJNZ R1,READSRAM_NEXT ;¶ÁÍêÒ»¸ö×Ö½ÚÊý¾ÝºóÈ·ÈÏÊý¾Ý´«Êä JMP READSRAM2 READSRAM_NEXT: CALL T_ACK JMP READSRAM_LOOP READSRAM2: DJNZ R0,READSRAM_NEXT ;PAGES READSRAM_INT: CALL T_NOACK LCALL T_IICSTOP RET SRAM_ERROR: SETB FLAG.7 JMP READSRAM_INT ;============================д°ËλLEDÊý¾Ý»º³åÆ÷³ÌÐò======================= ;¹¦ÄÜ£ºÐ´°ËλLEDÊý¾Ý»º³åÆ÷ | ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º A | ;========================================================================== BIN_BCD: CLR DATAI1 CLR DATAI2 MOV A,TEMP MOV B,#10 DIV AB MOV DATAI1,A MOV DATAI2,B RET ;==============================WRITE EEPROM ========================== ;¹¦ÄÜ:°ÑÊý¾Ý´¢´æµ½SD2100µÄEEPROMµÄÈ«²¿µØÖ·ÖÐÈ¥ ;Èë¿Ú:Êý¾ÝÊ×µØÖ·ÔÚAÖÐ,´¢´æÊ×µØÖ·ÔÚSRAMADDÖÐ,Êý¾Ý¸öÊýÔÚSRAMNUMÖÐ ;³ö¿Ú:ÎÞ ;Ó°Ïì×ÊÔ´:A,TIMETX,SRAMADD,R0,R1,SRAMNUM ;========================================================================== WRITE_EEFL: MOV R4,#0 ;PAGE SELECT WRITE_EEFL_LOOP: LCALL T_IICSTART JNB FLAG.1,EEFL_WRITE_1 LJMP SRAM_ERROR ;SDAÏß±»óéλΪµÍµçƽÔòÍ˳ö EEFL_WRITE_1: MOV A,R4 RL A ORL A,#0A0H ;&A2A1A0 MOV TIMETX,A LCALL T_SENDH_L ;SLAVE ADDRESS JNB FLAG.0,EEFL_WRITE_2 LJMP SRAM_ERROR ;ACKÐźŲ»Õý³£ÔòÍ˳ö´. EEFL_WRITE_2: MOV A,SRAMADD_LO ;RAMÊ×µØÖ·ÔÚSRAMADD_LOÖÐ MOV TIMETX,A ;WORD ADDRESS LCALL T_SENDH_L MOV A,SRAMADD_HI ;RAMÒ³µØÖ·ÔÚSRAMADD_HIÖÐ MOV R0,A WRITEEEFL_PAGES: MOV A,#0 MOV R1,A ; WRITEEEFL_LOOP: ;Ñ­»·Ð´ÈëÁ¬ÐøÊý¾Ý MOV A,SRAMDATA MOV TIMETX,A LCALL T_SENDH_L LCALL DELAY10MS DJNZ R1,WRITEEEFL_LOOP DJNZ R0,WRITEEEFL_PAGES LCALL T_IICSTOP RET ;============================RAM¹¦ÄܲâÊÔ³ÌÐò=============================== ;¹¦ÄÜ£ºRAM¹¦ÄܲâÊÔ³ÌÐò | ; È«RAMÇøÏÈд00£¬ÔÙдFF£¬·Ö±ð¶Á³ö±È½Ï | ; | ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º A | ;========================================================================== RAM_TEST: MOV TEMP,#03H ;FLASH DIG3,4 MOV SLAVE_ADD,#SLAVE2_WR LCALL LED_FLASH MOV SRAMADD_LO,#00H ;SRAMµÄµØÖ·µÍ°Ëλ MOV VERIFY_LO,#01H ;УÑé´ÎÊýµÍ°Ëλ MOV VERIFY_HI,#00H ;УÑé´ÎÊý¸ß°Ëλ MOV SRAMDATA,#000H ;дÈëSRAMÊý¾ÝµÄÊý¾Ý LCALL WRITESRAM ;дÈëSRAM NOP LCALL LONGDELAY LCALL READSRAM ;½«´ÓSRAM¶Á³öÀ´µÄÊý¾Ý·Åµ½´ÓSTOREYEAR¿ªÊ¼µÄλÖà JB FLAG.7,RAM_BAD ;NO ERROR, JUMP MOV SRAMDATA,#0FFH ;дÈëSRAMÊý¾ÝµÄÊý¾Ý LCALL WRITESRAM ;дÈëSRAM NOP LCALL LONGDELAY LCALL READSRAM ;½«´ÓSRAM¶Á³öÀ´µÄÊý¾Ý·Åµ½´ÓSTOREYEAR¿ªÊ¼µÄλÖà JB FLAG.7,RAM_BAD ;NO ERROR, JUMP MOV SRAMDATA,#0AAH ;дÈëSRAMÊý¾ÝµÄÊý¾Ý LCALL WRITESRAM ;дÈëSRAM NOP LCALL LONGDELAY LCALL READSRAM ;½«´ÓSRAM¶Á³öÀ´µÄÊý¾Ý·Åµ½´ÓSTOREYEAR¿ªÊ¼µÄλÖà JB FLAG.7,RAM_BAD ;NO ERROR, JUMP MOV SRAMDATA,#055H ;дÈëSRAMÊý¾ÝµÄÊý¾Ý LCALL WRITESRAM ;дÈëSRAM NOP LCALL LONGDELAY LCALL READSRAM ;½«´ÓSRAM¶Á³öÀ´µÄÊý¾Ý·Åµ½´ÓSTOREYEAR¿ªÊ¼µÄλÖà JB FLAG.7,RAM_BAD ;NO ERROR, JUMP MOV DIG2,#3FH MOV DIG1,#70H ;"OK",NO BAD EEPROM JNB FLAG.7,RAM_OK ;NO ERROR, JUMP RAM_BAD: MOV DIG2,#79H MOV DIG1,#79H ;"EE",ERROR RAM_OK: MOV TEMP,#000H ;FLASH DIG3,4 MOV SLAVE_ADD,#SLAVE2_WR LCALL LED_FLASH RET ;============================д°ËλLEDÊý¾Ý»º³åÆ÷³ÌÐò======================= ;¹¦ÄÜ£ºÐ´°ËλLEDÊý¾Ý»º³åÆ÷ | ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º A | ;========================================================================== TEST_LEDBUF: MOV DIG1,#40H MOV DIG2,#40H RET ;===========================ÉèÖÃSD2100ϵÁÐÐͺÅ×Ó³ÌÐò======================= ;¹¦ÄÜ£ºÉèÖÃSD2100ϵÁÐÐͺÅ×Ó³ÌÐò | ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º A | ;========================================================================== SET_TYPE: MOV TYPE,#1 ;ÐͺÅΪ1="SD2100BP" MOV DIG6,#3FH ;0 MOV DIG5,#3FH ;0 MOV DIG4,#3FH ;0 MOV DIG3,#06H ;1 MOV DIG2,#40H ;"-" MOV DIG1,#40H ;"-" SET_TYPE_WAIT: SETB KEY NOP JB KEY,$; ;µÈ´ýSD7218µÄ¼üÅÌÊäÈëÐźŠ;----------------------------------------------------------------- MOV SLAVE_ADD,#SLAVE2_RD LCALL READ_KEY ;¶ÁSD7218ÄڵļüÖµ MOV A,KEYBUF CJNE A,#66H,SET_TYPE_WAIT ;K66 SETB KEY JNB KEY,$ MOV TEMP,#0C0H ;FLASH DIG7,8 MOV SLAVE_ADD,#SLAVE2_WR LCALL LED_FLASH SET_TYPE_KEYLOOP: LCALL LED_TYPE MOV SLAVE_ADD,#SLAVE2_WR LCALL WRITE_LED8 ; SETB KEY NOP JB KEY,$; ;µÈ´ýSD7218µÄ¼üÅÌÊäÈëÐźŠMOV SLAVE_ADD,#SLAVE2_RD LCALL READ_KEY ;¶ÁSD7218ÄڵļüÖµ MOV A,KEYBUF CJNE A,#88H,SET_TYPE_UP ;K88,SELECT KEY-DOWN MOV A,TYPE CJNE A,#1,SET_TYPE_DOWN1 MOV TYPE,#10 SET_TYPE_DOWN1: DEC TYPE SET_TYPE_UP: MOV A,KEYBUF CJNE A,#77H,SET_TYPE_END ;K77,SELECT KEY-UP MOV A,TYPE CJNE A,#9,SET_TYPE_UP1 MOV TYPE,#0 SET_TYPE_UP1: INC TYPE SET_TYPE_END: SETB KEY JNB KEY,$ MOV A,KEYBUF CJNE A,#66H,SET_TYPE_KEYLOOP MOV TEMP,#00H ;TURN OFF THE FLASH DIG5,6 MOV SLAVE_ADD,#SLAVE2_WR LCALL LED_FLASH LCALL LED_TYPE MOV SLAVE_ADD,#SLAVE2_WR LCALL WRITE_LED8 RET ;------------------------------------------------------------------ LED_TYPE: MOV DIG6,#3FH ;0 MOV DIG5,#3FH ;0 MOV DIG4,#3FH ;0 MOV DIG3,#06H ;1 MOV DIG2,#40H ;"-" MOV DIG1,#40H ;"-" MOV A,TYPE CJNE A,#1,TYPE_LED2 ;SD2100BP MOV DIG8,#7FH ;"BP" MOV DIG7,#73H ; 1 MOV SRAMADD_HI,#02H ;SRAMµÄµØÖ·¸ß°Ëλ TYPE_LED2: CJNE A,#2,TYPE_LED3 ;SD2100CP MOV DIG8,#39H ;"CP" MOV DIG7,#73H ;2 MOV SRAMADD_HI,#08H ;SRAMµÄµØÖ·¸ß°Ëλ TYPE_LED3: CJNE A,#3,TYPE_LED4 ;SD2100DP MOV DIG8,#3FH ;"DP" MOV DIG7,#73H ;3 MOV SRAMADD_HI,#32 ;SRAMµÄµØÖ·¸ß°Ëλ TYPE_LED4: CJNE A,#4,TYPE_LED5 ;SD2100EP MOV DIG8,#79H ;"EP" MOV DIG7,#73H ;4 MOV SRAMADD_HI,#128 ;SRAMµÄµØÖ·¸ß°Ëλ TYPE_LED5: CJNE A,#5,TYPE_LED6 ;SD2100FLP MOV DIG8,#71H ;"FL" MOV DIG7,#38H ;5 MOV SRAMADD_LO,#8 ;8BYTES=ONE PAGE MOV SRAMADD_HI,#32 ;EEµÄÒ³Êý,8x32 MOV EE_PAGE,#1 ;PAGE SELECT TYPE_LED6: CJNE A,#6,TYPE_LED7 ;SD2100BLP MOV DIG8,#7FH ;"BL" MOV DIG7,#38H ;6 MOV SRAMADD_HI,#2 ;SRAMµÄµØÖ·¸ß°Ëλ TYPE_LED7: CJNE A,#7,TYPE_LED8 ;SD2100CLP MOV DIG8,#39H ;"CL" MOV DIG7,#38H ;7 MOV SRAMADD_HI,#8 ;SRAMµÄµØÖ·¸ß°Ëλ TYPE_LED8: CJNE A,#8,TYPE_LED9 ;SD2100DLP MOV DIG8,#3FH ;"DL" MOV DIG7,#38H ;8 MOV SRAMADD_HI,#32 ;SRAMµÄµØÖ·¸ß°Ëλ TYPE_LED9: CJNE A,#9,TYPE_LED10 ;SD2100ELP MOV DIG8,#79H ;"EL" MOV DIG7,#38H ;9 MOV SRAMADD_HI,#128 ;SRAMµÄµØÖ·¸ß°Ëλ TYPE_LED10: RET ;====================== RESER LED ======================================= ;¹¦ÄÜ£º | ;Èë¿Ú£º | ;³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º | ;=========================================================================== LED_RESET: LCALL IICSTART MOV A,SLAVE_ADD MOV TXBUF,A ;ËÍSD7218µØÖ· LCALL SENDH_L MOV TXBUF,#79H ;COMMAND_RESET LCALL SENDH_L ;ËÍRESETÃüÁî MOV A,#0H ;RESET DATA MOV TXBUF,A LCALL SENDH_L LCALL IICSTOP RET ;==================¶ÁʵʱʱÖÓʵʱÊý¾Ý¼Ä´æÆ÷×Ó³ÌÐò========================== ;¹¦ÄÜ£º´ÓʵʱʱÖÓ¶ÁÈ뵱ǰʱ¼äÊý¾Ý | ;Èë¿Ú£ºNONE | ;³ö¿Ú£º½ÓÊÕÊý¾Ý·ÅÔÚÄê¡¢Ô¡¢ÈÕ¡¢ÐÇÆÚ¡¢Ê±¡¢·Ö¡¢Ãë¸÷¼Ä´æÆ÷ | ;Ó°Ïì×ÊÔ´£ºA£¬R0,R3,TIMETX,TIMERX,YEAR,MONTH,DAY,WEEK,HOUR,MINUTE,SECOND | ;========================================================================== READ_TIME: RDTIME_LOOP: LCALL SPI_START MOV TIMETX,#65H ;·¢ËͶÁʱÖÓÊý¾ÝÃüÁî1 LCALL SPI_SENDH_L MOV R0,#YEAR MOV R3,#07H SPI_RDTIME1: LCALL SPI_RXL_H MOV A,TIMERX MOV @R0,A INC R0 DJNZ R3,SPI_RDTIME1 ;¶ÁÍêÒ»¸ö×Ö½ÚÊý¾ÝºóÈ·ÈÏÊý¾Ý´«Êä LCALL SPI_STOP RDTIME_RET: RET ;===============================ÆôÓÃIIC×ÜÏß================================ ;¹¦ÄÜ£º¿ªÆôʵʱʱÖÓµÄIIC×ÜÏß ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE ;Ó°Ïì×ÊÔ´£ºNONE ;========================================================================== SPI_START: SETB CS LCALL DELAY CLR SCK RET ;===============================¹Ø±ÕIIC×ÜÏß================================ ;¹¦ÄÜ£º¹Ø±ÕʵʱʱÖÓIIC×ÜÏß ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE ;Ó°Ïì×ÊÔ´£ºNONE ;========================================================================== SPI_STOP: SETB SCK LCALL DELAY CLR CS RET ;============================·¢ËÍÒ»¸ö×Ö½Ú£¬Óɸßλµ½µÍλ·¢ËÍ================ ;¹¦ÄÜ£º´ÓMCU·¢ËÍÒ»¸ö×Ö½Ú¸øÊµÊ±Ê±ÖÓ,Óɸßλµ½µÍλ·¢ËÍ | ;Èë¿Ú£º·¢ËÍÊý¾Ý·ÅÔÚTIMETX ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TIMETX | ;========================================================================== SPI_SENDH_L: MOV A,TIMETX MOV R2,#08H CLR FLAG.0 SPI_SENDH_L1: MOV C,ACC.7 MOV TIMETEMP.1,C LCALL SPI_BITOUT RL A DJNZ R2,SPI_SENDH_L1 RET ;==========================·¢ËÍÒ»¸ö×Ö½Ú£¬ÓɵÍλµ½¸ßλ·¢ËÍ================== ;¹¦ÄÜ£º´ÓMCU·¢ËÍÒ»¸ö×Ö½Ú¸øÊµÊ±Ê±ÖÓ,ÓɵÍλµ½¸ßλ·¢ËÍ | ;Èë¿Ú£º·¢ËÍÊý¾Ý·ÅÔÚTIMETX ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TIMETX | ;========================================================================== SPI_SENDL_H: MOV A,TIMETX MOV R2,#08H CLR FLAG.0 SPI_SENDL_H1: MOV C,ACC.0 MOV TIMETEMP.1,C LCALL SPI_BITOUT RR A DJNZ R2,SPI_SENDL_H1 RET ;=================================½ÓÊÕÒ»¸ö×Ö½Ú============================= ;¹¦ÄÜ£ºMCU´ÓIIC×ÜÏß½ÓÊÕÒ»¸ö×Ö½Ú,MSBÔÚǰ,LSBÔÚºó | ;Èë¿Ú£ºNONE ³ö¿Ú£º½ÓÊÕÊý¾Ý·ÅÔÚRXBUFÖÐ | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TIMEBIT£¬RXBUF | ;========================================================================== SPI_RXH_L:MOV R2,#08H SPI_RXH_L1: LCALL SPI_BITIN MOV C,TIMETEMP.0 MOV ACC.7,C RLC A DJNZ R2,SPI_RXH_L1 MOV TIMERX,A RET ;=================================½ÓÊÕÒ»¸ö×Ö½Ú============================= ;¹¦ÄÜ£ºMCU´ÓIIC×ÜÏß½ÓÊÕÒ»¸ö×Ö½Ú,LSBÔÚǰ,MSBÔÚºó | ;Èë¿Ú£ºNONE ³ö¿Ú£º½ÓÊÕÊý¾Ý·ÅÔÚRXBUFÖÐ | ;Ó°Ïì×ÊÔ´£ºA£¬R2£¬TIMEBIT£¬RXBUF | ;========================================================================== SPI_RXL_H:MOV R2,#08H SPI_RXL_H1: LCALL SPI_BITIN MOV C,TIMETEMP.0 RRC A DJNZ R2,SPI_RXL_H1 MOV TIMERX,A RET ;================================ËͳöһλÊý================================ ;¹¦ÄÜ£º´ÓMCU·¢ËÍһλÊý¸øÊµÊ±Ê±ÖÓ | ;Èë¿Ú£º·¢ËÍλÊý·ÅÔÚEEPREM.1 ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£ºA£¬TIMETEMP | ;========================================================================== SPI_BITOUT: CLR SCK MOV C,TIMETEMP.1 MOV SIO,C LCALL DELAY SETB SCK LCALL DELAY RET ;=================================¶ÁÈëһλÊý=============================== ;¹¦ÄÜ£ºMCU´ÓʵʱʱÖÓ½ÓÊÕһλÊý | ;Èë¿Ú£ºNONE ³ö¿Ú£º½ÓÊÕλÊý·ÅÔÚTIMETEMP.0 | ;Ó°Ïì×ÊÔ´£ºA£¬TIMETEMP | ;========================================================================== SPI_BITIN: SETB SIO CLR SCK LCALL DELAY SETB SCK MOV C,SIO MOV TIMETEMP.0,C LCALL DELAY RET ;============================¸´Î»Ê±ÖÓ×Ó³ÌÐò ============================== ;¹¦ÄÜ£ºÊ±ÖÓ¸´Î»,ÄêÔÂÈÕÐÇÆÚСʱ·ÖÖÓÃë·Ö±ðΪ:0,1,1,0,0,0,0 | ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º A£¬TIMETX ,ʱÖÓÄÚ²¿Äê.ÔÂ.ÈÕ.ÐÇÆÚ.Сʱ.·ÖÖÓ.ÃëÊý¾Ý | ;========================================================================== TIME_RESET: LCALL SPI_START TIME_RESESPI_1: MOV TIMETX,#60H ;·¢ËÍдʱÖÓ״̬¼Ä´æÆ÷ÃüÁî LCALL SPI_SENDH_L TIME_RESESPI_2: MOV TIMETX,#03H ;RESETʱÖÓ LCALL SPI_SENDL_H LCALL SPI_STOP RET ;============================д״̬¼Ä´æÆ÷³ÌÐò============================== ;¹¦ÄÜ£º¶Á/дʵʱʱÖÓ״̬¼Ä´æÆ÷£¬¶ÔÆä½øÐÐÉèÖà | ;Èë¿Ú£ºNONE ³ö¿Ú£ºNONE | ;Ó°Ïì×ÊÔ´£º A£¬TIMETX | ;========================================================================== TIMESTATUS_INT12ON: TIME_SETMODE_1: LCALL SPI_START MOV TIMETX,#60H ;·¢ËÍдʱÖÓ״̬¼Ä´æÆ÷_1ÃüÁî LCALL SPI_SENDH_L MOV TIMETX,#02H ;24Сʱ½øÖÆ LCALL SPI_SENDL_H ; LCALL SPI_STOP TIME_SETMODE_2: LCALL SPI_START MOV TIMETX,#62H ;·¢ËÍдʱÖÓ״̬¼Ä´æÆ÷_2ÃüÁî LCALL SPI_SENDH_L MOV TIMETX,#08H ;/INTÊä³ö32768hz·½²¨ LCALL SPI_SENDL_H ; LCALL SPI_STOP RET ;----------------------------------- TIMESTATUS_INT12OFF: LCALL SPI_START MOV TIMETX,#62H ;·¢ËÍдʱÖÓ״̬¼Ä´æÆ÷1ÃüÁî LCALL SPI_SENDH_L MOV TIMETX,#00H ;¹Ø±Õ/INT1ºÍ/INT2½ÅµÄÊä³ö LCALL SPI_SENDL_H ; LCALL SPI_STOP RET END