⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sd2304.asm

📁 sd2304时钟芯片的读写程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
        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 ==========================
;功能:把数据储存到SD2300的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	       ;SD2300DP
        JMP	 SRAM_WRITE_DE
SRAM_WRITE_NODE1:
        CJNE     A,#4,SRAM_WRITE_NODE	       ;SD2300EP
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	     ;SD2300DP
        JMP	 SRAM_READ_DE
SRAM_READ_NODE1:
        CJNE     A,#4,SRAM_READ_NODE	     ;SD2300EP
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 2K EEPROM   ==========================
;功能:把数据储存到SD2300的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
;===========================设置SD2300系列型号子程序=======================
;功能:设置SD2300系列型号子程序          	                          |
;入口:NONE           出口:NONE                                          |
;影响资源: A                                                             |
;==========================================================================
SET_TYPE:
        MOV     TYPE,#1			;型号为1="SD2300BP"

        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
	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
        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
        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 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		;SD2300BP
        MOV     DIG8,#7FH		;"BP"
        MOV     DIG7,#73H		; 1
        MOV     SRAMADD_HI,#02H         ;SRAM的地址高八位
TYPE_LED2:
        CJNE    A,#2,TYPE_LED3		;SD2300CP
        MOV     DIG8,#39H		;"CP"
        MOV     DIG7,#73H		;2
        MOV     SRAMADD_HI,#08H         ;SRAM的地址高八位
TYPE_LED3:
        CJNE    A,#3,TYPE_LED4		;SD2300DP
        MOV     DIG8,#3FH		;"DP"
        MOV     DIG7,#73H		;3
        MOV     SRAMADD_HI,#32          ;SRAM的地址高八位
TYPE_LED4:
        CJNE    A,#4,TYPE_LED5		;SD2300EP
        MOV     DIG8,#79H		;"EP"
        MOV     DIG7,#73H		;4
        MOV     SRAMADD_HI,#128         ;SRAM的地址高八位
TYPE_LED5:
        CJNE    A,#5,TYPE_LED6		;SD2300FLP
        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		;SD2300BLP
        MOV     DIG8,#7FH		;"BL"
        MOV     DIG7,#38H		;6
        MOV     SRAMADD_HI,#2           ;SRAM的地址高八位
TYPE_LED7:
        CJNE    A,#7,TYPE_LED8		;SD2300CLP
        MOV     DIG8,#39H		;"CL"
        MOV     DIG7,#38H		;7
        MOV     SRAMADD_HI,#8           ;SRAM的地址高八位
TYPE_LED8:
        CJNE    A,#8,TYPE_LED9		;SD2300DLP
        MOV     DIG8,#3FH		;"DL"
        MOV     DIG7,#38H		;8
        MOV     SRAMADD_HI,#32          ;SRAM的地址高八位
TYPE_LED9:
        CJNE    A,#9,TYPE_LED10		;SD2300ELP
        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



        END



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -