📄 9300.asm
字号:
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 DELAY1
SETB T_SCL
LCALL DELAY1
CLR T_SCL
LCALL DELAY1
RET
;=================================读入一位数===============================
;功能:MCU从实时时钟接收一位数 |
;入口:NONE 出口:接收位数放在TIMETEMP.0 |
;影响资源:A,TIMETEMP |
;==========================================================================
T_BITIN:
SETB T_SDA
SETB T_SCL
LCALL DELAY1
MOV C,T_SDA
MOV TIMETEMP.0,C
CLR T_SCL
LCALL DELAY1
RET
;============================写状态寄存器程序==============================
;功能:读/写实时时钟状态寄存器,对其进行设置 |
;入口:NONE 出口:NONE |
;影响资源: A,TIMETX |
;==========================================================================
TIMESTATUS_INT12OFF:
LCALL TIMEWRITE_ON
LCALL T_IICSTART
MOV TIMETX,#sd2400_W ;发送时钟sd2400的器件地址(写)
LCALL T_SENDH_L
MOV TIMETX,#10H ;设置时钟数据的内部起始地址为10H
LCALL T_SENDH_L
MOV TIMETX,#10000000B ;向10H寄存器写数据,disable int output
LCALL T_SENDH_L
MOV TIMETX,#00000000B ;向11H寄存器写数据
LCALL T_SENDH_L
MOV TIMETX,#00000000B ;向12H寄存器写数据,TURN OFF INTA/INTB
LCALL T_SENDH_L
MOV TIMETX,#00000000B ;向13H寄存器写数据,TURN OFF INTA/INTB
LCALL T_SENDH_L
LCALL T_IICSTOP
LCALL TIMEWRITE_OFF
RET
;-----------------------------------
TIMEWRITE_ON:
LCALL T_IICSTART
JB FLAG.1,T1_ERR_IICSTOP ;如SDA线被箝位为低电平则退出
MOV TIMETX,#sd2400_W ;发送时钟sd2400的器件地址(写)
LCALL T_SENDH_L
MOV TIMETX,#10H ;设置时钟数据的内部起始地址为10H
LCALL T_SENDH_L ;
MOV TIMETX,#80H ;置10H的WRTC1为1
LCALL T_SENDH_L
LCALL T_IICSTOP ;
LCALL T_IICSTART
JB FLAG.1,T1_ERR_IICSTOP ;如SDA线被箝位为低电平则退出
MOV TIMETX,#sd2400_W ;发送时钟sd2400的器件地址(写)
LCALL T_SENDH_L
MOV TIMETX,#0FH ;设置时钟数据的内部起始地址为0FH
LCALL T_SENDH_L ;
MOV TIMETX,#84H ;置0FH的WRTC2.WRTC3为1
LCALL T_SENDH_L
LCALL T_IICSTOP ;
RET
;-----------------------------------
TIMEWRITE_OFF:
LCALL T_IICSTART
JB FLAG.1,T1_ERR_IICSTOP ;如SDA线被箝位为低电平则退出
MOV TIMETX,#sd2400_W ;发送时钟sd2400的器件地址(写)
LCALL T_SENDH_L
MOV TIMETX,#0FH ;设置时钟数据的内部起始地址为0FH
LCALL T_SENDH_L ;
MOV TIMETX,#0H ;置0FH的为0
LCALL T_SENDH_L
MOV TIMETX,#0H ;置10H的为0
LCALL T_SENDH_L
LCALL T_IICSTOP ;
RET
;-----------------------------------
TIMESTATUS_INT16HZ:
LCALL TIMEWRITE_ON
LCALL T_IICSTART
MOV TIMETX,#sd2400_W ;发送时钟sd2400的器件地址(写)
LCALL T_SENDH_L
MOV TIMETX,#10H ;设置时钟数据的内部起始地址为10H
LCALL T_SENDH_L
MOV TIMETX,#0A1H ;向10H寄存器写数据,频率中断输出
LCALL T_SENDH_L
MOV TIMETX,#06H ;向11H寄存器写数据,16hz
LCALL T_SENDH_L
LCALL T_IICSTOP
LCALL TIMEWRITE_OFF
RET
;-----------------------------------
T1_ERR_IICSTOP:
NOP
RET
;==============================WRITE SRAM/EEPROM ==========================
;功能:把数据储存到sd2400的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 ;sd2400DP
JMP SRAM_WRITE_DE
SRAM_WRITE_NODE1:
CJNE A,#4,SRAM_WRITE_NODE ;sd2400EP
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 ;sd2400DP
JMP SRAM_READ_DE
SRAM_READ_NODE1:
CJNE A,#4,SRAM_READ_NODE ;sd2400EP
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
;==============================WRITE 2K EEPROM ==========================
;功能:把数据储存到sd2400的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 DELAY110MS
DJNZ R1,WRITEEEFL_LOOP
DJNZ R0,WRITEEEFL_PAGES
LCALL T_IICSTOP
RET
;============================短延时子程序==================================
;功能:延时 入口:NONE 出口:NONE |
;影响资源:R7,PSW |
;==========================================================================
DELAY1: MOV R7,#2
DELAY11: NOP
DJNZ R7,DELAY11
RET
;--------
DELAY1_7218:
MOV R7,#10
DELAY11_7218:
NOP
DJNZ R7,DELAY11_7218
RET
LONGDELAY1: ;DELAY1 300MS
MOV R6,#240
LD0: MOV R7,#250 ;5*250*240
LD1: NOP
NOP
NOP
DJNZ R7,LD1
DJNZ R6,LD0
RET
DELAY110MS: ;DELAY1 >10MS
MOV R6,#11
LD00: MOV R7,#250 ;5*250*11
LD10: NOP
NOP
NOP
DJNZ R7,LD10
DJNZ R6,LD00
RET
KEYSCN:
RET
CHTAB:
DB 000H,03EH,051H,049H,045H,03EH,000H,000H ;0
DB 000H,008H,008H,008H,008H,008H,000H,000H ;"-"=0DH
DB 000H,000H,042H,07FH,040H,000H,000H,000H ;"1"=11H
DB 000H,042H,061H,051H,049H,046H,000H,000H ;"2"=12H
DB 000H,021H,041H,045H,04BH,031H,000H,000H ;"3"=13H
DB 000H,018H,014H,012H,07FH,010H,000H,000H ;"4"=14H
DB 000H,027H,045H,045H,045H,039H,000H,000H ;"5"=15H
DB 000H,03CH,04AH,049H,049H,030H,000H,000H ;"6"=16H
DB 000H,001H,001H,079H,005H,003H,000H,000H ;"7"=17H
DB 000H,036H,049H,049H,049H,036H,000H,000H ;"8"
DB 000H,006H,049H,049H,029H,01EH,000H,000H ;"9"=19H
DB 000H,07EH,011H,011H,011H,07EH,000H,000H ;"A"=21H
DB 000H,041H,07FH,049H,049H,036H,000H,000H ;"B"=22H
DB 000H,03EH,041H,041H,041H,022H,000H,000H ;"C"=23H
DB 000H,041H,07FH,041H,041H,03EH,000H,000H ;"D"=24H
DB 000H,07FH,049H,049H,049H,049H,000H,000H ;"E"=25H
DB 000H,07FH,009H,009H,009H,001H,000H,000H ;"F"=26H
DB 000H,03EH,041H,041H,049H,07AH,000H,000H ;"G"=27H
DB 000H,07FH,008H,008H,008H,07FH,000H,000H ;"H"=28H
DB 000H,000H,041H,07FH,041H,000H,000H,000H ;"I"=29H
DB 000H,020H,040H,041H,03FH,001H,000H,000H ;"J"=2AH
DB 000H,07FH,008H,014H,022H,041H,000H,000H ;"K"=2BH
DB 000H,07FH,040H,040H,040H,040H,000H,000H ;"L"=2CH
DB 000H,07FH,002H,00CH,002H,07FH,000H,000H ;"M"=2DH
DB 000H,07FH,006H,008H,030H,07FH,000H,000H ;"N"=2EH
DB 000H,03EH,041H,041H,041H,03EH,000H,000H ;"O"=2FH
DB 000H,07FH,009H,009H,009H,006H,000H,000H ;"P"=30H
DB 000H,03EH,041H,051H,021H,05EH,000H,000H ;"Q"=31H
DB 000H,07FH,009H,019H,029H,046H,000H,000H ;"R"=32H
DB 000H,026H,049H,049H,049H,032H,000H,000H ;"S"=33H
DB 000H,001H,001H,07FH,001H,001H,000H,000H ;"T"=34H
DB 000H,03FH,040H,040H,040H,03FH,000H,000H ;"U"=35H
DB 000H,01FH,020H,040H,020H,01FH,000H,000H ;"V"=36H
DB 000H,07FH,020H,018H,020H,07FH,000H,000H ;"W"=37H
DB 000H,063H,014H,008H,014H,063H,000H,000H ;"X"=38H
DB 000H,007H,008H,070H,008H,007H,000H,000H ;"Y"=39H
DB 000H,061H,051H,049H,045H,043H,000H,000H ;"Z"=3AH
DB 000H,000H,008H,036H,041H,000H,000H,000H ;"{"=5BH
DB 000H,000H,000H,077H,000H,000H,000H,000H ;"|"=5CH
DB 000H,000H,041H,036H,008H,000H,000H,000H ;"}"=5DH
DB 000H,002H,001H,002H,004H,002H,000H,000H ;"~"=5FH
DB 000H,0FFH,0FFH,0FFH,0FFH,0FFH,000H,000H ;" "=60H
;============== 中文字符库 ==================================
CCTAB:
DB 000H ,000H ,00CH ,00CH ,0FCH ,0FCH ,000H ,000H
DB 000H ,000H ,000H ,000H ,000H ,000H ,000H ,000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -