📄 file.asm.txt
字号:
;功能: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 + -