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

📄 yjp_nxsx.asm

📁 一个液晶驱动程序,配合计算机软件可方便的制作文本显示器用于工控场合
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	   INC DPTR
	   MOVX A,@DPTR
	   LCALL SDA2_BCD_HEX	 ;分
	   MOV DPH,#01H
	   MOVX @DPTR,A
	   MOV DPH,#02H
	   INC DPTR
	   MOV A,#0
	   MOVX @DPTR,A
	   INC DPTR
	   MOVX A,@DPTR
	   ANL A,#7FH
	   LCALL SDA2_BCD_HEX	 ;秒
	   MOV DPH,#01H
	   MOVX @DPTR,A
	   RET
;;===================================================================
SDA2_HEXZH:
	   MOV R0,#MW00 	 ;MW00
	   MOV A,R0
	   MOV DPL,A
	   MOV DPH,#01H
	   INC DPTR
	   MOVX A,@DPTR
	   LCALL SDA2_HEX_BCD	 ;年
	   MOV DPH,#02H
	   MOVX @DPTR,A
	   MOV DPH,#01H
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   LCALL SDA2_HEX_BCD	 ;月
	   MOV DPH,#02H
	   MOVX @DPTR,A
	   MOV DPH,#01H
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   LCALL SDA2_HEX_BCD	 ;日
	   MOV DPH,#02H
	   MOVX @DPTR,A
	   MOV DPH,#01H
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   LCALL SDA2_HEX_BCD	 ;星期
	   MOV DPH,#02H
	   MOVX @DPTR,A
	   MOV DPH,#01H
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   LCALL SDA2_HEX_BCD	 ;时
	   MOV DPH,#02H
	   MOVX @DPTR,A
	   MOV DPH,#01H
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   LCALL SDA2_HEX_BCD	 ;分
	   MOV DPH,#02H
	   MOVX @DPTR,A
	   MOV DPH,#01H
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   LCALL SDA2_HEX_BCD	 ;秒
	   MOV DPH,#02H
	   MOVX @DPTR,A
	   RET
;;===================================================================
;名称:SDA2_HEX_BCD
;描述:单字节16进制数转化为单字节压缩BCD码
;      使用 A,B
;--------------------------------------------------------------------
SDA2_HEX_BCD:
	   MOV B,#10
	   DIV AB
	   SWAP A
	   ORL A,B
	   RET
;;===================================================================
;名称:SDA2_BCD_HEX
;描述:单字节16进制数转化为单字节压缩BCD码
;      使用 A,B,R4
;--------------------------------------------------------------------
SDA2_BCD_HEX:
	   MOV R4,A
	   ANL A,#0F0H
	   SWAP A
	   MOV B,#10
	   MUL AB
	   MOV B,A
	   MOV A,R4
	   ANL A,#0FH
	   ADD A,B
	   RET
;;===================================================================
RD_TIME:
	   LCALL SDA2_RCVDATA
	   LCALL SDA2_BCDZH
	   RET
;;===================================================================
SETUP_SDA2:
	   LCALL SDA2_START
	   MOV A,#62H
	   LCALL SDA2_SENTBYTEHL ;发送被控器总线地址
	   JB F0,SDA2_SETRETURN
	   MOV A,#0C0H
	   LCALL SDA2_SENTBYTELH
	   JB F0,SDA2_SETRETURN
	   LCALL SDA2_STOP
SDA2_SETRETURN:
	   RET
;;===================================================================
JDTIME:    MOV A,#MW23
	   MOV DPL,A
	   MOV DPH,#01H
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R0,A
	   LCALL PDSD_1
	   LCALL PDSD_2
	   LCALL PDSD_3
	   LCALL PDSD_4
	   RET
;;...................................................................
PDSD_1:    MOV A,R0
	   JNB ACC.0,PDSD_1A
	   MOV R7,#0
	   LCALL PTIME1
	   MOV A,R7
	   JNZ PDSD_1B
PDSD_1A:   MOV A,#MW60	;时间未落在该时段或该时段不允许定时,清零对应位
	   MOV DPL,A
	   MOV DPH,#01H
	   MOV A,#0
	   MOVX @DPTR,A
	   INC DPTR
	   MOVX A,@DPTR
	   ANL A,#0FH
	   ANL A,#0EH
	   MOVX @DPTR,A
	   RET
PDSD_1B:   MOV A,#MW60	;已落在该时段,置位对应开关
	   MOV DPL,A
	   MOV DPH,#01H
	   MOV A,#0
	   MOVX @DPTR,A
	   INC DPTR
	   MOVX A,@DPTR
	   ANL A,#0FH
	   ORL A,#01H
	   MOVX @DPTR,A
	   RET
;;...................................................................
PDSD_2:    MOV A,R0
	   JNB ACC.1,PDSD_2A
	   MOV R7,#0
	   LCALL PTIME2
	   MOV A,R7
	   JNZ PDSD_2B
PDSD_2A:   MOV A,#MW60
	   MOV DPL,A
	   MOV DPH,#01H
	   MOV A,#0
	   MOVX @DPTR,A
	   INC DPTR
	   MOVX A,@DPTR
	   ANL A,#0FH
	   ANL A,#0DH
	   MOVX @DPTR,A
	   RET
PDSD_2B:   MOV A,#MW60
	   MOV DPL,A
	   MOV DPH,#01H
	   MOV A,#0
	   MOVX @DPTR,A
	   INC DPTR
	   MOVX A,@DPTR
	   ANL A,#0FH
	   ORL A,#02H
	   MOVX @DPTR,A
	   RET
;;...................................................................
PDSD_3:    MOV A,R0
	   JNB ACC.2,PDSD_3A
	   MOV R7,#0
	   LCALL PTIME3
	   MOV A,R7
	   JNZ PDSD_3B
PDSD_3A:   MOV A,#MW60
	   MOV DPL,A
	   MOV DPH,#01H
	   MOV A,#0
	   MOVX @DPTR,A
	   INC DPTR
	   MOVX A,@DPTR
	   ANL A,#0FH
	   ANL A,#0BH
	   MOVX @DPTR,A
	   RET
PDSD_3B:   MOV A,#MW60
	   MOV DPL,A
	   MOV DPH,#01H
	   MOV A,#0
	   MOVX @DPTR,A
	   INC DPTR
	   MOVX A,@DPTR
	   ANL A,#0FH
	   ORL A,#04H
	   MOVX @DPTR,A
	   RET
;;...................................................................
PDSD_4:    MOV A,R0
	   JNB ACC.3,PDSD_4A
	   MOV R7,#0
	   LCALL PTIME4
	   MOV A,R7
	   JNZ PDSD_4B
PDSD_4A:   MOV A,#MW60
	   MOV DPL,A
	   MOV DPH,#01H
	   MOV A,#0
	   MOVX @DPTR,A
	   INC DPTR
	   MOVX A,@DPTR
	   ANL A,#0FH
	   ANL A,#07H
	   MOVX @DPTR,A
	   RET
PDSD_4B:   MOV A,#MW60
	   MOV DPL,A
	   MOV DPH,#01H
	   MOV A,#0
	   MOVX @DPTR,A
	   INC DPTR
	   MOVX A,@DPTR
	   ANL A,#0FH
	   ORL A,#08H
	   MOVX @DPTR,A
	   RET
;;...................................................................
PTIME1:    MOV A,#MW07
	   MOV DPL,A
	   MOV DPH,#01H
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R1,A    ;定时开时
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R2,A    ;定时开分
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R3,A    ;定时关时
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R4,A    ;定时关分
	   LCALL PTIME ;开始判断
	   RET
;;...................................................................
PTIME2:    MOV A,#MW11
	   MOV DPL,A
	   MOV DPH,#01H
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R1,A    ;定时开时
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R2,A    ;定时开分
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R3,A    ;定时关时
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R4,A    ;定时关分
	   LCALL PTIME ;开始判断
	   RET
;;...................................................................
PTIME3:    MOV A,#MW15
	   MOV DPL,A
	   MOV DPH,#01H
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R1,A    ;定时开时
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R2,A    ;定时开分
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R3,A    ;定时关时
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R4,A    ;定时关分
	   LCALL PTIME ;开始判断
	   RET
;;...................................................................
PTIME4:    MOV A,#MW19
	   MOV DPL,A
	   MOV DPH,#01H
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R1,A    ;定时开时
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R2,A    ;定时开分
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R3,A    ;定时关时
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R4,A    ;定时关分
	   LCALL PTIME ;开始判断
	   RET
;;...................................................................
;;
;;INPUT:  T_HOUR_ON->R1  T_MINUTE_ON->R2
;;	  T_HOUR_OFF->R3 T_MINUTE_OFF->R4
;;OUTPUT: R7=1 TIME ON ::R7=0 TIME OFF
;;...................................................................
PTIME:	   MOV A,#MW04
	   MOV DPL,A
	   MOV DPH,#01H
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R5,A	  ;;实时时间时
	   INC DPTR
	   INC DPTR
	   MOVX A,@DPTR
	   MOV R6,A	  ;;实时时间分

	   MOV A,R1
	   MOV B,A
	   MOV A,R5
	   CLR C
	   SUBB A,B
	   JC PTIMEEND
	   JZ PTIME_M
	   MOV A,R3
	   MOV B,A
	   MOV A,R5
	   CLR C
	   SUBB A,B
	   JC GTIMEON
	   JZ PTIMEMOFF
PTIMEEND:  RET
PTIME_M:
	   MOV A,R2
	   MOV B,A
	   MOV A,R6
	   CLR C
	   SUBB A,B
	   JC PTIMEEND
	   JZ GTIMEON
	   MOV A,R3
	   MOV B,A
	   MOV A,R5
	   CLR C
	   SUBB A,B
	   JC GTIMEON
	   JZ PTIMEMOFF
	   RET
GTIMEON:   MOV R7, #01
	   RET
PTIMEMOFF:
	   MOV A,R4
	   MOV B,A
	   MOV A,R6
	   CLR C
	   SUBB A,B
	   JC GTIMEON
	   RET
;;===================================================================
;CAT24C021 应用设计
;;===================================================================
;;以下为AT24C021 I2C存储芯片操作子程序
;;-------------------------------------------------------------------
;复位看门狗
RST_WDOG:
	   CLR	A24C_SDA
	   DB 0,0,0,0
	   SETB A24C_SDA
	   RET
;;===================================================================
;名称:STR_24C021
;描述:启动I2C总线子程序-发送I2C起始条件
;--------------------------------------------------------------------
STR_24C021:
	   SETB A24C_SDA     ;发送起始条件数据信号
	   DB 0,0,0,0,0
	   DB 0,0,0,0,0
	   SETB A24C_SCL     ;发送起始条件的时钟信号
	   DB 0,0,0,0,0
	   DB 0,0,0,0,0      ;起始条件锁定时间大于4.7us
	   CLR	A24C_SDA     ;发送起始信号
	   DB 0,0,0,0,0      ;起始条件锁定时间大于4.7us
	   DB 0,0,0,0,0
	   CLR	A24C_SCL     ;钳住I2C总线,准备发送或接收数据
	   DB 0,0,0,0,0
	   RET
;;===================================================================
;名称:STOP_24C021
;描述:停止I2C总线子程序-发送I2C总线停止条件
;--------------------------------------------------------------------
STOP_24C021:
	   CLR	A24C_SDA   ;发送停止条件的数据信号
	   DB 0,0,0,0,0
	   DB 0,0,0,0,0
	   SETB A24C_SCL   ;发送停止条件的时钟信号
	   DB 0,0,0,0,0    ;起始条件建立时间大于4.7us
	   DB 0,0,0,0,0
	   SETB A24C_SDA   ;发送I2C总线停止信号
	   DB 0,0,0,0,0
	   DB 0,0,0,0,0
	   RET
;;===================================================================
RD24C021:
	   MOV R3,#2
	   ACALL STR_24C021	;I2C 总线开始信号
	   MOV A,#0A0H		;被控器CAT24WC02 I2C 总线地址(写模式
	   ACALL WBYTE_24C021	;发送被控器地址
	   JC ReadFail
	   MOV A,R0		;取单元地址
	   ACALL WBYTE_24C021	;发送单元地址
	   JC ReadFail
	   ACALL STR_24C021	;I2C 总线开始信号
	   MOV A,#0A1H		;被控器CAT24WC02 I2C 总线地址读模式
	   ACALL WBYTE_24C021	;发送被控器地址
	   JC ReadFail
	   CLR F0
	   MOV A,R0
	   MOV DPL,A
	   MOV DPH,#01H
	   DJNZ R3,RD24C021_NEXT ;重复操作
	   SJMP RD24C021_LAST
RD24C021_NEXT:
	   ACALL RDBYTE_24C021	 ;接收数据
	   MOVX @DPTR,A
	   INC DPTR
	   DJNZ R3,RD24C021_NEXT ;重复操作
;;===================================================================
RD24C021_LAST:
	   SETB F0 ;不发送应答位
	   ACALL RDBYTE_24C021
	   MOVX @DPTR,A
	   ACALL STOP_24C021 ;I2C 总线停止信号
	   RET
ReadFail:
	   ACALL STOP_24C021
	   RET
;;===================================================================
WR24C021:
	   MOV R3,#2
	   ACALL STR_24C021	 ;I2C 总线开始信号
	   MOV A,#0A0H		 ;被控器CAT24WC02 I2C 总线地址写模式
	   ACALL WBYTE_24C021	 ;发送被控器地址
	   JC WriteFail
	   MOV A,R0		 ;取单元地址
	   ACALL WBYTE_24C021	 ;发送单元地址
	   JC WriteFail
	   MOV A,R0
	   MOV DPL,A
	   MOV DPH,#01H
WR24C021_NEXT:
	   MOVX A,@DPTR 	 ;取所发送数据的地址
	   ACALL WBYTE_24C021	 ;发送数据
	   JC WriteFail
	   INC DPTR		   ;取下一个数据
	   DJNZ R3,WR24C021_NEXT ;重复操作
	   ACALL STOP_24C021	 ;I2C 总线停止信号
	   RET
WriteFail:
	   ACALL STOP_24C021
	   RET
;;===================================================================
DELAY_10MS:		     ;延时10ms
	   MOV R7,#60H
DELAY2:    MOV R6,#34H
	   DJNZ R6,$
	   DJNZ R7,DELAY2
	   RET
;;===================================================================
WBYTE_24C021:			 ;写操作
	   MOV R7,#08H
WBY0:
	   RLC A
	   JC WBY_ONE
	   CLR A24C_SDA
	   SJMP WBY_ZERO
WBY_ONE:			 ;发送数据位"1"
	   SETB A24C_SDA
	   DB 0,0
WBY_ZERO:			 ;发送数据位"0"
	   DB 0,0
	   SETB A24C_SCL
	   DB 0,0,0,0
	   DB 0,0,0,0
	   CLR A24C_SCL
	   DJNZ R7,WBY0
	   MOV R6,#5		 ;等待应答信号
WaitLoop:
	   SETB A24C_SDA
	   DB 0,0,0,0
	   SETB A24C_SCL
	   DB 0,0,0,0,0,0
	   JB A24C_SDA,NOACK
	   CLR C     ;HAVE ACK
	   CLR A24C_SCL
	   RET
NoAck:	   DJNZ R6,WaitLoop
	   SETB C     ;NO ACK
	   CLR A24C_SCL
	   RET
;;===================================================================
RDBYTE_24C021:		     ;读操作
	   SETB A24C_SDA
	   MOV R7,#08H	     ;字节为8 位
RD24C021_CY1:		     ;读数据位
	   DB 0,0
	   CLR A24C_SCL 	;准备读
	   DB 0,0,0,0
	   DB 0,0,0,0
	   SETB A24C_SCL	 ;读数据
	   DB 0,0,0,0
	   CLR C
	   JNB A24C_SDA,RD24C021_ZERO ;读数据位"0"
	   SETB C		 ;读数据位"1"
;;===================================================================
RD24C021_ZERO:
	   RLC A
	   DB 0,0,0,0
	   DJNZ R7,RD24C021_CY1  ;重复操作
	   CLR A24C_SCL
	   DB 0,0,0,0,0,0
	   CLR A24C_SDA
	   JNB F0,RD_ACK
	   SETB A24C_SDA     ;无应答
RD_ACK: 		     ;发送应答信号
	   DB 0,0,0,0
	   SETB A24C_SCL
	   DB 0,0,0,0,0,0
	   CLR A24C_SCL
	   DB 0,0,0,0
	   CLR F0
	   CLR A24C_SDA
	   RET
;;===================================================================
SAVE_TIKEYEND:RET
SAVE_TIKEY:MOV A,#MW25
	   MOV DPL,A
	   MOV DPH,#01H
	   INC DPTR
	   MOVX A,@DPTR
	   MOV B,A
	   MOV A,#MW23
	   MOV DPL,A
	   MOV DPH,#01H
	   INC DPTR
	   MOVX A,@DPTR
	   XRL A,B
	   JZ SAVE_TIKEYEND
	   MOV A,B
	   MOVX @DPTR,A
	   MOV R0,#MW23
	   LCALL WR24C021
	   RET
;;===================================================================
RD_SET_DATA:
	   MOV R1,#16
	   MOV R0,#MW07
RD_SET1:   LCALL RD24C021
	   INC R0
	   INC R0
	   DJNZ R1,RD_SET1
	   LCALL CK_DATA2 ;;校验时段数据
	   MOV R0,#MW23   ;;读时段允许开关位内容
	   LCALL RD24C021
	   MOV A,#MW23
	   MOV DPL,A
	   MOV DPH,#01H

⌨️ 快捷键说明

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