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

📄 file.asm.txt

📁 本程序用于测试LED显示/键盘芯片SD7218的功能
💻 TXT
📖 第 1 页 / 共 2 页
字号:
;功能: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
	SETB	SCL
	LCALL	DELAY
	CLR	SCL
        LCALL   DELAY
	RET
;=================================读入一位数===============================
;功能:MCU从实时时钟接收一位数                                            |
;入口:NONE       出口:接收位数放在IICTEMP.0                             |
;影响资源:A,IICTEMP                                                     |
;==========================================================================
BITIN:
        SETB	SDA
        SETB    SCL
	LCALL	DELAY
	MOV	C,SDA
        MOV	IICTEMP.0,C
	CLR	SCL
        CLR     SDA
        LCALL   DELAY
	RET

;============================短延时子程序==================================
;功能:延时         入口:NONE             出口:NONE                     |
;影响资源:R7,PSW                                                         |
;==========================================================================
DELAY:	MOV	R7,#15
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



;============================写八位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      01H,02H,03H,04H,05H,06H,07H,08H

;==================读实时时钟实时数据寄存器子程序==========================
;功能:从实时时钟读入当前时间数据                                         |
;入口:NONE                                                               |
;出口:接收数据放在年、月、日、星期、时、分、秒各寄存器                   |
;影响资源:A,R0,R3,TIMETX,TIMERX,YEAR,MONTH,DAY,WEEK,HOUR,MINUTE,SECOND  |
;==========================================================================
READ_TIME:
RDTIME_LOOP:
	LCALL	T_IICSTART
        JB      FLAG.1,T_ERR_IICSTOP      ;如SDA线被箝位为低电平则退出
	MOV	TIMETX,#65H               ;发送读时钟数据命令
	LCALL	T_SENDH_L
        JB      FLAG.0,T_ERR_IICSTOP      ;ACK信号不正常则退出.
	MOV	R0,#YEAR
	MOV	R3,#07H
T_RDTIME1:
	LCALL	T_RXL_H
	MOV	A,TIMERX
	MOV	@R0,A
	INC	R0
 	DJNZ	R3,RDTIME2              ;读完一个字节数据后确认数据传输
        JMP     RDTIME3                 ;若为最后一个字节数据则为NOACK
RDTIME2:
        CALL    T_ACK
        JMP     T_RDTIME1
RDTIME3:
        CALL    T_NOACK
        LCALL   T_IICSTOP
        CLR     DIG6                    ;小时的最高位在24小时制时没有用,如果是12小时制请删掉此行.
RDTIME_RET:
        RET

T_ERR_IICSTOP:
        LCALL   T_IICSTOP
        RET
;============================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_LED:
	MOV	A,DAY
	SWAP	A
	ANL	A,#0FH
	MOV	DIG8,A
	MOV	A,DAY
        ANL     A,#0FH
        MOV     DIG7,A
	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
        END

⌨️ 快捷键说明

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