📄 8279.asm
字号:
;****************功能键-读************************
RD_FUNC: CLR WR_FLAG
MOV NUM_COUNTER,#4
ACALL GET_DPTR
JNB RD_FLAG,FIRST_RD
INC DPTR ;RD_FALG为1,读下一个地址的内容
FIRST_RD: ACALL DISP_DPTR ;标志位0,则是第一次按RD功能键
ACALL DATA_DISP
MOV A,#90H
ACALL WRITE_CMD
CLR TEMP_FLAG
SETB RD_FLAG
LJMP RE_SCAN
;****************功能键-写************************
WR_FUNC: CLR RD_FLAG
MOV NUM_COUNTER,#4 ;此后输入的数据必在数据LED显示
ACALL GET_DPTR
ACALL DISP_DPTR
ACALL WR_DATALED
ACALL WR_OVER
ACALL DELAY250MS
; JNB WR_FLAG,FIRST_WR
INC DPTR
FIRST_WR: ACALL DISP_DPTR ;显示下一个地址
ACALL DATA_DISP
CLR TEMP_FLAG
SETB WR_FLAG
LJMP RE_SCAN
;将数据数码管的数据写到前四个确定的地址内
WR_DATALED: ACALL GET_DPTR ;
MOV A,#4H ;取数据数码管显示的数据写到前4位显示的地址中
ACALL GET_LED
SWAP A ;取第5个数码管的数据作为高四位存于R2
MOV B,A
MOV A,#5
ACALL GET_LED
ORL A,B
MOVX @DPTR,A
RET
;****************功能键-执行***********************
EXE: ACALL GET_DPTR
LCALL DISP_DPTR
CLR A
JMP @A+DPTR
;8155
CSEG AT 1000H
LCALL CLEAR
LCALL TEST8155RAM
JNC ERR8155_1
LCALL OK1
LCALL DELAY500MS
SJMP IO8155
ERR8155_1: LCALL ERR_SHOW
LCALL ALARM
LCALL DELAY500MS
LCALL DELAY500MS
IO8155: MOV A,#0C1H ;方式字设置8155PA输出,PB、PC口均为输入
LCALL INIT8155
MOV R6,#6
MOV DPTR,#TAB232
REP8155: CLR A
MOVC A,@A+DPTR
PUSH DPL
PUSH DPH
LCALL TEST8155IO
POP DPH
POP DPL
JNC ERR8155
INC DPTR
DJNZ R6,REP8155
LCALL OK1
SJMP RE9
ERR8155: LCALL ERR_SHOW
LCALL ALARM
RE9: LCALL SCAN_KEY
CJNE A,#0FFH,EXIT8 ;任意键退出
SJMP RE9
EXIT8: LJMP MON
;A_D
CSEG AT 1100H
LCALL CLEAR
MOV A,#90H
LCALL WRITE_CMD
MOV A,#0AH ;显示"AD"字符
LCALL LED_DISP
MOV A,#0DH
LCALL LED_DISP
RE_SCAN33: MOV DATA_LED,#84H
MOV NUM_COUNTER,#0
RE_SCAN3: LCALL SCAN_KEY
CJNE A,#0FFH,KEY_DEPR3
SJMP RE_SCAN3
KEY_DEPR3: LCALL KEY_NUM
CJNE A,#10H,$+3 ;判断是否为功能键
JC LOW3
CJNE A,#16,NEXT3
LJMP MON
NEXT3: CJNE A,#19,RE_SCAN3
MOV A,NUM_COUNTER
CJNE A,#2,$+3
JC RE_SCAN3
MOV A,#4
LCALL GET_LED
SWAP A
MOV R4,A ;暂存于R4
MOV A,#5
LCALL GET_LED
ORL A,R4
LCALL A_D
MOV DPH,R6
MOV DPL,R7
LCALL DISP_DPTR
MOV A,#83H
LCALL WRITE_CMD
MOV A,#0FFH
LCALL WRITE_DATA
LCALL CL_DATALED
JMP RE_SCAN33
LOW3: MOV B,A ; 暂存A
MOV A,DATA_LED
LCALL WRITE_CMD
MOV A,B
LCALL LED_DISP
INC NUM_COUNTER
MOV A,DATA_LED
CPL ACC.0 ;在84H和85H中循环修改
MOV DATA_LED,A
JMP RE_SCAN3
;D_A
CSEG AT 1200H
DA_START: LCALL CLEAR
MOV A,#90H
LCALL WRITE_CMD
MOV A,#0DH ;显示DA
LCALL LED_DISP
MOV A,#0AH
LCALL LED_DISP
MOV R6,#0H ;COUNTER
MOV R7,#0H
MOV A,#90H
LCALL WRITE_CMD
RE_SCAN2: LCALL SCAN_KEY
CJNE A,#0FFH,KEY_DEPR2
SJMP RE_SCAN2
KEY_DEPR2: LCALL KEY_NUM
CJNE A,#10H,$+3 ;判断是否为功能键
JC LOW12
CJNE A,#16,NEXT12 ;判断是否为退出键
LJMP MON
NEXT12: CJNE R6,#2,$+3
JC RE_SCAN2 ;R6<2,还没有输入两个数,忽略按功能键
CJNE A,#19,RE_SCAN2 ;输入了两个数,可以按功能键
MOV A,#0 ;取出前3个数码管的数
LCALL GET_LED
SWAP A
MOV R4,A ;暂存于R4
MOV A,#1
LCALL GET_LED
ORL A,R4 ;从数码管取出的数送A
LCALL D_A
LCALL WR_OVER
LCALL DELAY250MS
JMP DA_START
LOW12: CJNE R6,#0,PASS1
LCALL CLEAR
PASS1: LCALL LED_DISP
INC R6
INC R7
CJNE R7,#2,RE_SCAN2 ;只能写到前两位数码管
MOV A,#90H
LCALL WRITE_CMD
MOV R7,#0
JMP RE_SCAN2
;光藕
CSEG AT 1300H
LCALL CLEAR
MOV A,#55H
MOV DPTR,#0FCFFH ;低速输入输出地址
MOVX @DPTR,A
mov a,#20h ;延时
djnz acc,$
MOVX A,@DPTR
ANL A,#0FH
CJNE A,#05H,ERR_PHO
MOV A,#0AAH
MOVX @DPTR,A
mov a,#20h ;延时
djnz acc,$
MOVX A,@DPTR
ANL A,#0FH
CJNE A,#0AH,ERR_PHO
MOV A,#55H
MOV DPTR,#0F9FFH ;高速输入输出地址
MOVX @DPTR,A
MOVX A,@DPTR
ANL A,#0FH
CJNE A,#05H,ERR_PHO
MOV A,#0AAH
MOVX @DPTR,A
MOVX A,@DPTR
ANL A,#0FH
CJNE A,#0AH,ERR_PHO
LCALL OK1
SJMP RE5
ERR_PHO: LCALL ERR_SHOW
LCALL ALARM
RE5: LCALL SCAN_KEY
CJNE A,#0FFH,EXIT5 ;任意键退出
SJMP RE5
EXIT5: LJMP MON
DELAY1MS: MOV R5,#2
DL12: MOV R4,#240
DL11: DJNZ R4,DL11
DJNZ R5,DL12
RET
;RS232
CSEG AT 1400H
LCALL CLEAR
MOV TMOD,#20H
MOV TH1,#0F4H ;设置波特率为4800
MOV TL1,#0F4H
SETB TR1
MOV SCON,#050H
MOV R7,#6
MOV DPTR,#TAB232
REP232: CLR A
MOVC A,@A+DPTR
LCALL Send_Receive0
JNZ ERR232
DJNZ R7,REP232
LCALL OK1
SJMP EXIT3
ERR232: LCALL ERR_SHOW
LCALL ALARM
EXIT3: CLR TR1
RE6: LCALL SCAN_KEY
CJNE A,#0FFH,EXIT6 ;任意键退出
SJMP RE6
EXIT6: LJMP MON
TAB232: DB 55H,0AAH,01H,80H,00H,0FFH
;RS485
CSEG AT 1500H
LCALL CLEAR
MOV TMOD,#20H ;定时器选用工作模式2
MOV TH1,#0FAH ;设定波特率为4800
MOV TL1,#0FAH
SETB TR1 ;
MOV SCON,#50H ;串口工作模式1
MOV R7,#6
MOV DPTR,#TAB485
REP485: CLR A
MOVC A,@A+DPTR
LCALL R485_Send_Receive0
JNZ ERR485
DJNZ R7,REP485
LCALL OK1
SJMP EXIT4
ERR485: LCALL ERR_SHOW
LCALL ALARM
EXIT4: CLR TR1
RE8: LCALL SCAN_KEY
CJNE A,#0FFH,EXIT485 ;任意键退出
SJMP RE8
EXIT485: LJMP MON
TAB485: DB 55H,0AAH,01H,80H,00H,0FFH
;12887
CSEG AT 1600H
RE_DISP: MOV R0,#30H
LCALL Read_Time
MOV R6,#3
MOV R0,#32H
MOV A,#90H
LCALL WRITE_CMD
NEXT_LED: MOV A,@R0
MOV R2,A
SWAP A
ANL A,#0FH
LCALL LED_DISP
MOV A,R2
ANL A,#0FH
LCALL LED_DISP
DEC R0
DJNZ R6,NEXT_LED
LCALL SCAN_KEY
CJNE A,#0FFH,JUDGE2
JMP RE_DISP
JUDGE2: CJNE A,#0C3H,RE_DISP
LJMP MON
;61C1024
CSEG AT 1700H
MOV B,#55H
LCALL T_61C1024
JC ERROR1
MOV B,#0AAH
LCALL T_61C1024
JC ERROR1
CALL OK1
RE7: LCALL SCAN_KEY
CJNE A,#0FFH,EXIT7 ;任意键退出
SJMP RE7
EXIT7: LJMP MON
ERROR1: CALL ERR_SHOW
CALL ALARM
LJMP RE_SCAN
;X5045
CSEG AT 1800H
LCALL T_25045
JC ERR5045
LCALL OK1
SJMP RE11
ERR5045: LCALL ERR_SHOW
LCALL ALARM
RE11: LCALL SCAN_KEY
CJNE A,#0FFH,EXIT5045 ;任意键退出
SJMP RE11
EXIT5045: LJMP MON
;8250
CSEG AT 1900H
LCALL START_8250
JC ERR16C550
LCALL OK1
JMP RE11
ERR16C550: JMP ERR5045
CSEG AT 1950H
LCALL CLEAR
MOV A,#90H
LCALL WRITE_CMD
MOV A,#0BEH
LCALL WRITE_DATA
MOV A,#0F8H
LCALL WRITE_DATA
MOV A,#0BAH
LCALL WRITE_DATA
LJMP START0
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -