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

📄 实验1-缺联机.asm

📁 红外抄表器.rar
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        MOV JIHAOH,#00H
        MOV JIHAOL,#01H
        CLR ES
        CLR EA
        LCALL CLEAR
        LCALL DISTITL
        LJMP SCAN

DKEY27: CJNE A,#08H,KEYLS1
;-----------------------------------------------------------查询状态-确定键---------------------------------------
        LJMP KEYLS2
KEYLS1: LJMP SCAN
KEYLS2:JNB FINISH,LS01
        JNB SUCCESS,REINQ
REINQ:
        CLR FINISH
        CLR SUCCESS
        LCALL CLEAR
        CLR DISMOD
        LCALL DISJH
        SETB DISMOD
        LCALL DISJIHAO
        CLR DISMOD
        MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#1BH
        LCALL CCW_PR      ;"查"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#1CH
        LCALL CCW_PR      ;"询"
        LJMP SCAN
LS01:   LJMP BGINQ


;========================================================================================设置状态=========================
TSTATE3:CJNE A,#03H,TSTAT30
        LJMP DSTATE3
TSTAT30:LJMP SCAN;TSTATE4
DSTATE3:LCALL SCANKEY     ;设置状态
        MOV A,KEYNUM
        CJNE A,#0FFH,DKEY31
        LCALL DLY10MS
        LJMP SCAN         ;无键按下

DKEY31: CJNE A,#02H,DKEY32
;-----------------------------------------------------------------------设置状态-设置键-----------------------
CKEY31:
        JB FINISH,KEY311
        LJMP BGPRN          ;调设置程序
KEY311: LJMP SCAN

DKEY32: CJNE A,#03H,DKEY33
;-----------------------------------------------------------------------设置状态-百位键-----------------------
        JNB FINISH,KEY321
        LJMP EDSCAN
KEY321: LCALL KEYBW ;调百位键处理函数
        LJMP EDSCAN         ;户号百位无效


DKEY33: CJNE A,#04H,DKEY34
;-----------------------------------------------------------------------设置状态-十位键------------------------
        JNB FINISH,KEY331
        LJMP EDSCAN
KEY331: LCALL KEYSW     ;调十位键处理函数
        LJMP EDSCAN

DKEY34: CJNE A,#05H,DKEY35
;-----------------------------------------------------------------------设置状态-个位键--------------------------
        JNB FINISH,KEY341  ;个位键
        LJMP EDSCAN
KEY341: LCALL KEYGW     ;调个位键处理函数
        LJMP EDSCAN

DKEY35: CJNE A,#06H,DKEY36
;----------------------------------------------------------------------设置状态-清除键----------------------------
CKEY35:
        JNB FINISH,KEY351
        LJMP SCAN
KEY351: MOV JIHAOH,#00H
        MOV JIHAOL,#01H
        SETB DISMOD
        LCALL DISJIHAO
        LJMP SCAN

DKEY36: CJNE A,#07H,DKEY37
;---------------------------------------------------------------------设置状态-返回键--------------------------
CKEY36:
        MOV STATE,#00H
        MOV JIHAOH,#00H
        MOV JIHAOL,#01H
        CLR ES
        CLR EA
        LCALL CLEAR
        LCALL DISTITL
        LJMP SCAN

DKEY37: CJNE A,#08H,KEY370
;---------------------------------------------------------------------设置状态-确认键--------------------
        LJMP CKEY37
KEY370: LJMP SCAN
CKEY37:
        JNB FINISH,KEY372
        JNB SUCCESS,REPRN
REPRN:  CLR FINISH
        CLR SUCCESS
        LCALL CLEAR
        CLR DISMOD
        LCALL DISJH
        SETB DISMOD
        LCALL DISJIHAO
        CLR DISMOD
        MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#13H
        LCALL CCW_PR      ;"设"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#14H
        LCALL CCW_PR      ;"置"
        LJMP SCAN

KEY372:
        LJMP BGPRN

;#######################设置子程序################################

BGPRN:
        SETB FINISH
        CLR SUCCESS
        clr DISMOD
        lcall DISJIHAO
        MOV A,JIHAOH
        JNZ BGPRN1
        MOV A,JIHAOL
        JNZ BGPRN1
        LJMP FAIL3
BGPRN1: MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#0AH
        LCALL CCW_PR      ;"正"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#0BH
        LCALL CCW_PR      ;"在"
        MOV O_YL,#00H
        MOV O_XL,#20H
        MOV CODE,#13H
        LCALL CCW_PR      ;"设"
        MOV O_YL,#00H
        MOV O_XL,#30H
        MOV CODE,#14H
        LCALL CCW_PR      ;"置"

        MOV R3,#32H
		 MOV R4,#03H
		 LCALL IRT     	;调红外发射程序

		 COMPRN3:SETB SUCCESS
        CLR DISMOD
        MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#13H
        LCALL CCW_PR      ;"设"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#14H
        LCALL CCW_PR      ;"置"
        MOV O_YL,#00H
        MOV O_XL,#20H
        MOV CODE,#15H
        LCALL CCW_PR      ;"完"
        MOV O_YL,#00H
        MOV O_XL,#30H
        MOV CODE,#0FH
        LCALL CCW_PR      ;"成"

	    LCALL DISJH
		setb DISMOD
		LCALL DISJIHAO
		 CLR DISMOD
        LJMP SCAN

FAIL3:  CLR DISMOD
        MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#13H
        LCALL CCW_PR      ;"设"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#14H
        LCALL CCW_PR      ;"置"
        MOV O_YL,#00H
        MOV O_XL,#20H
        MOV CODE,#11H
        LCALL CCW_PR      ;"失"
        MOV O_YL,#00H
        MOV O_XL,#30H
        MOV CODE,#12H
        LCALL CCW_PR      ;"败"
        LJMP SCAN














;;;;;;;;;;;查询;;;;;;;;;;;;;;;;;;;;;;;;
BGINQ:  ;CLR FLAG
        SETB FINISH
        CLR SUCCESS
        clr DISMOD
        lcall DISJIHAO
        MOV A,JIHAOH
        JNZ BGINQ1
        MOV A,JIHAOL
        JNZ BGINQ1
        LJMP FAIL2
BGINQ1:
		 MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#0AH
        LCALL CCW_PR      ;"正"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#0BH
        LCALL CCW_PR      ;"在"
        MOV O_YL,#00H
        MOV O_XL,#20H
        MOV CODE,#1BH
        LCALL CCW_PR      ;"查"
        MOV O_YL,#00H
        MOV O_XL,#30H
        MOV CODE,#1CH
        LCALL CCW_PR      ;"询"



		 MOV A,JIHAOH
        MOV R5,A
        MOV A,JIHAOL
        MOV R4,A
        LCALL BCD4B        ;两压缩BCD码转16进制,转换后高位存R5中,低位存R4中
        MOV A,R5
        MOV DAT16H,A
        MOV A,R4
        MOV DAT16L,A
        CLR C
        SUBB A,#01H
        JC SUC1_11
        MOV R4,A
        MOV A,DAT16H
        MOV R5,A
        LJMP SUC1_22
SUC1_11: MOV A,DAT16H
        CLR C
        SUBB A,#01H
        MOV R5,A
        MOV R4,#0FFH
SUC1_22: LCALL BINRL   ;左移一位
        LCALL BINRL
        MOV A,R5
        MOV ADDRH,A     ;每户分配4字节存储空间,两位地址号,两位总用电量
        MOV A,R4
        MOV ADDRL,A     ;计算本户在24C64中的首地址




		 MOV COUNT,#04H	;取出数据字节数
        MOV R0,#DAT		;地址
        LCALL LDDAT



        MOV A,DAT
		 XRL A,JIHAOH
		 JZ HX00;
		 LJMP FAIL2
HX00:	 MOV A,DAT+1
		 XRL A,JIHAOL
		 JZ HX01
		 LJMP FAIL2
HX01:
		 SETB SUCCESS      ;查询结束
        CLR DISMOD
        MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#19H
        LCALL CCW_PR      ;"用"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#1AH
        LCALL CCW_PR      ;"量"
        MOV O_YL,#00H
        MOV O_XL,#20H
        MOV A,DAT+2
        SWAP A
        ANL A,#0FH     	;保留高4位
        MOV KINBUF,A      ;暂存
        MOV A,DAT+2
        ANL A,#0FH        ;保留低4位
        MOV KINBUF+1,A    ;暂存
        MOV A,DAT+3
        SWAP A
        ANL A,#0FH			;保留高4位
        MOV KINBUF+2,A	;暂存
        MOV A,DAT+3
        ANL A,#0FH			;保留低4位
        MOV KINBUF+3,A	;暂存
        ;LCALL CALNUM
        MOV O_YL,#00H
        MOV O_XL,#20H
        MOV CODE,KINBUF
        LCALL CNW_PR
        MOV O_YL,#00H
        MOV O_XL,#28H
        MOV CODE,KINBUF+1
        LCALL CNW_PR
        MOV O_YL,#00H
        MOV O_XL,#30H
        MOV CODE,KINBUF+2
        LCALL CNW_PR      ;显示电量
        MOV O_YL,#00H
        MOV O_XL,#38H
        MOV CODE,KINBUF+3
        LCALL CNW_PR
        LJMP SCAN

FAIL2:  CLR DISMOD
        MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#1BH
        LCALL CCW_PR      ;"查"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#1CH
        LCALL CCW_PR      ;"询"
        MOV O_YL,#00H
        MOV O_XL,#20H
        MOV CODE,#11H
        LCALL CCW_PR      ;"失"
        MOV O_YL,#00H
        MOV O_XL,#30H
        MOV CODE,#12H
        LCALL CCW_PR      ;"败"
        LJMP SCAN




LDDAT:  LCALL AT1         ;START
	MOV A,#0A0H
	LCALL ATW2        ;虚写操作器件寻址00H(第一片AT24C64)
	JB PSW.5,LDDAT
	MOV A,ADDRH
        LCALL ATW2        ;
	JB PSW.5,LDDAT
	MOV A,ADDRL
        LCALL ATW2        ;虚写存储单元地址
	JB PSW.5,LDDAT
        ;以上为先初始化一个读数据地址
        LCALL AT1         ;START
	MOV A,#0A1H
	LCALL ATW2        ;读操作器件寻址00H(第一片AT24C64)
	JB PSW.5,LDDAT
        MOV R7,COUNT
        CJNE R7,#01,LD01
        LJMP LDDAT1
LD01:   DEC R7
LDDAT0: LCALL ATR2        ;现行地址读(0000H)
        MOV @R0,A
        INC R0
        DJNZ R7,LDDAT0
LDDAT1: LCALL ATR3  		;读最后一字节,读完后给AT24C64发停止信号
        MOV @R0,A
        inc r0
        LCALL ATW3			;停止信号
        RET










 ;;;;;;;;;;;抄表;;;;;;;;;;;;;;;;;;;;;;;;
BGNCB:  ;CLR FLAG
        SETB FINISH
        CLR SUCCESS
        clr DISMOD
        LCALL DISJIHAO    ;刷新机号显示(非反白)
        MOV A,JIHAOH
        JNZ BGNCB1
        MOV A,JIHAOL
        JNZ BGNCB1

⌨️ 快捷键说明

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