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

📄 sd2200读写c51演示程序.txt

📁 实时时钟芯片2200系列C语言程序
💻 TXT
📖 第 1 页 / 共 4 页
字号:
        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
        LCALL	LED_TYPE
        LCALL   TEST_LEDBUF
        JMP	WAIT_KEY_RELEASE
RAM_TEST_KEY:
        CJNE    A,#55H,DISP_TIME_YEARWEEK
        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
	LCALL   TIMESTATUS_INT12ON
        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
	LCALL   TIMESTATUS_INT12OFF



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

⌨️ 快捷键说明

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