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

📄 9300.asm

📁 带遥控 带128*64LCD 带电子开关
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        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 + -