📄 sd2304.asm
字号:
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 + -