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

📄 kychbiao_36.asm

📁 红外抄表器.rar
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        MOV B,#32
        DIV AB
        MOV R3,A         ;需要的整页数(每页32字节)
        MOV R4,B         ;剩余的字节数
        MOV R0,#DAT
        CJNE R3,#00H,CKPRN02
        LJMP CKPRN03
CKPRN02:MOV COUNT,#32
        LCALL LDDAT       ;此子程序中R0自动调整
        mov a,addrl
        add a,#32
        mov addrl,a
        mov a,addrh
        addc a,#00h
        mov addrh,a       ;调整读E2PROM起始地址
        DJNZ R3,CKPRN02
CKPRN03:CJNE R4,#00H,CKPRN04
        LJMP CMPRN02
CKPRN04:MOV COUNT,R4
        LCALL LDDAT
CMPRN02:MOV A,HUHAO
        JNZ PONE
        LJMP PRNALL
PONE:   MOV A,HUHAO
        DEC A
        MOV B,#3
        MUL AB
        INC A             ;一字节户数
        ADD A,#DAT
        MOV ADDRH,A       ;借用ADDRH存本户整数内存首字节地址
        MOV R0,A          ;本户整数内存地址
        MOV R2,#3
CHECK3: MOV A,@R0
        INC R0
        MOV TMP,A
        ANL A,#0FH
        CJNE A,#0AH,KEY375
KEY375: JC KEY376
        LJMP FAIL3
KEY376: MOV A,TMP
        SWAP A
        ANL A,#0FH
        CJNE A,#0AH,KEY377
KEY377: JC KEY378
        LJMP FAIL3
KEY378: DJNZ R2,CHECK3

COMPRN: LCALL PRNONE
        JNB PERR,SUC3
        CLR PERR
        LJMP FAIL3        ;打印失败
SUC3:   LJMP COMPRN3

PRNALL: MOV R0,#DAT+1
        MOV A,HUSHU
        MOV B,#3
        MUL AB
        MOV R2,A
CHECK23:MOV A,@R0
        INC R0
        MOV TMP,A
        ANL A,#0FH
        CJNE A,#0AH,KEY37A
KEY37A: JC KEY37B
        LJMP FAIL3
KEY37B: MOV A,TMP
        SWAP A
        ANL A,#0FH
        CJNE A,#0AH,KEY37C
KEY37C: JC KEY37D
        LJMP FAIL3
KEY37D: DJNZ R2,CHECK23   ;验证数据正确性

CMPRN3: LCALL PRNMUL      ;打印
        JNB PERR,COMPRN3
        CLR PERR
        LJMP FAIL3        ;打印失败

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      ;"成"
        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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TSTATE4:LCALL SCANKEY     ;联机状态
        MOV A,KEYNUM
        CJNE A,#0FFH,DKEY41
        LCALL DLY10MS
        LJMP SCAN         ;无键按下

DKEY41: CJNE A,#07H,EDSCAN4
CKEY41: LCALL DLY10MS
        LCALL KEXAM       ;返回键
        JNZ CKEY41        ;等键放开
        CLR ES
        CLR EA
        MOV STATE,#00H
        MOV JIHAO,#01H
        MOV HUHAO,#01H
        MOV TMOD,#20H     ;设置定时器1为模式2(自动再装入)
        MOV TH1,#0E8H
        MOV TL1,#0E8H
        SETB TR1;         ;启动定时器1工作
        MOV SCON,#050H    ;设置串行口为模式1, 1起; 8数; 1结束
        MOV PCON,#00H     ;波特率在11.0592M时为1200波特

        SETB SCTRL        ;开启红外通讯
        SETB CTRL232      ;关闭232通讯
        LCALL CLEAR
        LCALL DISTITL
EDSCAN4:LJMP SCAN

BGLIANJ:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOV TMOD,#20H     ;设置定时器1为模式2(自动再装入)
        MOV TH1,#0F4H
        MOV TL1,#0F4H
        SETB TR1;         ;启动定时器1工作
        MOV SCON,#050H    ;设置串行口为模式1, 1起; 8数; 1结束
        MOV PCON,#80H     ;波特率在11.0592M时为4800波特
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        CLR SCTRL         ;关闭红外通讯
        CLR CTRL232       ;开启232通讯
        LCALL CLEAR
        LCALL DISLJ       ;显示正在联机
        LCALL DL100MS
        LCALL DL100MS
        LCALL DL100MS     ;
        MOV R0,#DAT
        MOV SCNT,#10H     ;串行接收计数
        SETB ES
        SETB EA           ;开串行中断
        LJMP SCAN

SFW:    PUSH PSW
        PUSH ACC
        PUSH B
        CLR RI
        CLR RS1
        SETB RS0
        MOV A,SBUF
        MOV @R0,A
        INC R0
        CJNE A,#0FFH,SFW1
        MOV R0,#DAT
        MOV SCNT,#10H
        LJMP EDSFW
SFW1:   CJNE A,#0DH,SFW2
        MOV R0,#DAT
        MOV SCNT,#10H
        MOV A,DAT
        CJNE A,#201,SFW11
SFW11:  JC ISJIHAO        ;开始取数传输
        MOV R0,#DAT       ;机号大于200,出错
        MOV SCNT,#10H
        LJMP EDSFW
SFW2:   DJNZ SCNT,EDSFW
        MOV R0,#DAT
        MOV SCNT,#10H
EDSFW:  POP B
        POP ACC
        POP PSW
        RETI

ISJIHAO:MOV JIHAO,A
        LCALL DISLJ       ;显示正在联机
        MOV A,JIHAO
        DEC A
        MOV B,#128        ;每户128字节
        MUL AB
        MOV ADDRH,B
        MOV ADDRL,A       ;计算起始地址
        MOV COUNT,#1
        MOV R0,#DAT
        LCALL LDDAT       ;读取户数
        MOV A,DAT
        SWAP A
        ANL A,#0FH
        CJNE A,#0AH,CMP50
CMP50:  JC CMP51
        LJMP FAIL4
CMP51:  MOV B,#10
        MUL AB
        MOV TMP,A
        MOV A,DAT
        ANL A,#0FH
        CJNE A,#0AH,CMP52
CMP52:  JC CMP53
        LJMP FAIL4
CMP53:  ADD A,TMP
        MOV HUSHU,A
        CJNE A,#43,KEY473
KEY473: JC KEY474         ;户数大于42,用户数据出错
        MOV HUSHU,#42
        LJMP FAIL4
KEY474: MOV A,HUSHU
        MOV B,#3
        MUL AB
        ADD A,#01H       ;计算总字节数
        MOV B,#32
        DIV AB
        MOV R3,A         ;需要的整页数(每页32字节)
        MOV R4,B         ;剩余的字节数
        MOV R0,#DAT
        CJNE R3,#00H,CKLJ02
        LJMP CKLJ03
CKLJ02: MOV COUNT,#32
        LCALL LDDAT       ;此子程序中R0自动调整
        mov a,addrl
        add a,#32
        mov addrl,a
        mov a,addrh
        addc a,#00h
        mov addrh,a       ;调整读E2PROM起始地址
        DJNZ R3,CKLJ02
CKLJ03: CJNE R4,#00H,CKLJ04
        LJMP COMLJ01
CKLJ04: MOV COUNT,R4
        LCALL LDDAT

comlj01:MOV A,#62H        ;"b"
        MOV SBUF,A
        JNB TI,$
        CLR TI
        LCALL DLY1MS
        MOV A,#65h        ;"e"
        MOV SBUF,A
        JNB TI,$
        CLR TI
        LCALL DLY1MS
        MOV A,#67h        ;"g"
        MOV SBUF,A
        JNB TI,$
        CLR TI
        LCALL DLY1MS      ;"i"
        MOV A,#69h
        MOV SBUF,A
        JNB TI,$
        CLR TI
        LCALL DLY1MS
        MOV A,#6eh        ;"n"
        MOV SBUF,A
        JNB TI,$
        CLR TI
        LCALL DLY1MS
        MOV A,#0DH        ;回车
        MOV SBUF,A
        JNB TI,$
        CLR TI            ;发送begin(ASCII码)
        LCALL DLY1MS

        MOV R2,HUSHU
        MOV R0,#DAT+1
LJSEND: MOV R3,#3
LJSEND1:MOV A,@R0
        INC R0
        MOV TMP,A
        CJNE R3,#3,LJSENDA
        LJMP LJSENDB
LJSENDA:SWAP A
        ANL A,#0FH
        ORL A,#30H
        MOV SBUF,A
        JNB TI,$
        CLR TI
        LCALL DLY1MS
LJSENDB:MOV A,TMP
        ANL A,#0FH
        ORL A,#30H
        MOV SBUF,A
        JNB TI,$
        CLR TI
        LCALL DLY1MS     ;发送整数
        DJNZ R3,LJSEND1
;        MOV A,#2EH
;        MOV SBUF,A
;        JNB TI,$
;        CLR TI
;        LCALL DLY1MS     ;发送"."
;        MOV A,@R1
;        INC R1
;        MOV TMP,A
;        SWAP A
;        ANL A,#0FH
;        ORL A,#30H
;        MOV SBUF,A
;        JNB TI,$
;        CLR TI
;        LCALL DLY1MS
;        MOV A,TMP
;        ANL A,#0FH
;        ORL A,#30H
;        MOV SBUF,A
;        JNB TI,$
;        CLR TI
;        LCALL DLY1MS     ;发送小数
        MOV A,#0DH         ;发送完一户数据回车
        MOV SBUF,A
        JNB TI,$
        CLR TI
        LCALL DLY1MS
        DJNZ R2,LJSEND

        MOV A,#65H
        MOV SBUF,A
        JNB TI,$
        CLR TI
        LCALL DLY1MS     ;"e"
        MOV A,#6EH
        MOV SBUF,A
        JNB TI,$
        CLR TI
        LCALL DLY1MS     ;"n"
        MOV A,#64H
        MOV SBUF,A
        JNB TI,$
        CLR TI
        LCALL DLY1MS     ;"d"
        MOV A,#0DH
        MOV SBUF,A
        JNB TI,$
        CLR TI
        LCALL DLY1MS
        LCALL LJSUC
        LJMP EDSFW

FAIL4:  LCALL LJFAIL
        LJMP EDSFW

DISLJ:  LCALL CLEAR
        MOV O_YL,#02H
        MOV O_XL,#00H
        MOV CODE,#0AH
        LCALL CCW_PR      ;"正"
        MOV O_YL,#02H
        MOV O_XL,#10H
        MOV CODE,#0BH
        LCALL CCW_PR      ;"在"
        MOV O_YL,#02H
        MOV O_XL,#20H
        MOV CODE,#16H
        LCALL CCW_PR      ;"联"
        MOV O_YL,#02H
        MOV O_XL,#30H
        MOV CODE,#1DH
        LCALL CCW_PR      ;"机"
        MOV O_YL,#00H
        MOV O_XL,#00H
        MOV CODE,#16H
        LCALL CCW_PR      ;"联"
        MOV O_YL,#00H
        MOV O_XL,#10H
        MOV CODE,#1DH
        LCALL CCW_PR      ;"机"
        RET


LJSUC:  CLR DISMOD
        MOV O_YL,#02H
        MOV O_XL,#00H
        MOV CODE,#16H
        LCALL CCW_PR      ;"联"
        MOV O_YL,#02H
        MOV O_XL,#10H
        MOV CODE,#1DH
        LCALL CCW_PR      ;"机"
        MOV O_YL,#02H
        MOV O_XL,#20H
        MOV CODE,#0FH
        LCALL CCW_PR      ;"成"
        MOV O_YL,#02H
        MOV O_XL,#30H
        MOV CODE,#10H
        LCALL CCW_PR      ;"功"
        RET


LJFAIL: MOV O_YL,#02H
        MOV O_XL,#00H
        MOV CODE,#16H
        LCALL CCW_PR      ;"联"
        MOV O_YL,#02H
        MOV O_XL,#10H
        MOV CODE,#1DH
        LCALL CCW_PR      ;"机"
        MOV O_YL,#02H
        MOV O_XL,#20H
        MOV CODE,#11H
        LCALL CCW_PR      ;"失"
        MOV O_YL,#02H
        MOV O_XL,#30H
        MOV CODE,#12H
        LCALL CCW_PR      ;"败"
        RET

EDSCAN: LCALL DL100MS
        LCALL DL100MS
        LCALL DL100MS
        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
        MOV @R0,A
        inc r0
        LCALL ATW3
        RET

;所有参数写入AT24C64,共32字节;
WRDAT:  LCALL AT1         ;START
	MOV A,#0A0H
	LCALL ATW2        ;写器件寻址00H(第一片AT24C64)
	JB PSW.5,WRDAT
	MOV A,ADDRH
        LCALL ATW2
	JB PSW.5,WRDAT
	MOV A,ADDRL
	LCALL ATW2        ;存储单元地址
	JB PSW.5,WRDAT
        MOV R7,COUNT
WRDAT0: MOV A,@R0
	LCALL ATW2        ;写入数据

⌨️ 快捷键说明

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