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