📄 pm521.asm
字号:
SETB P1.6 ;发停机信号
SETB 08H ;置位停机标志
CLR 07H
CLR 15H
LJMP XCLG
XCLB:JNB ACC.5,XCLC
MOV BIAZ,#05 ;超限(左)
SETB P1.3 ;黄灯亮
SETB P1.4 ;红灯亮
SETB P1.6 ;发停机信号
SETB 08H ;置位停机标志
CLR 07H
CLR 15H
LJMP XCLG
XCLC:JNB ACC.2,XCLD
MOV BIAZ,#02 ;报警(右)
SETB P1.3 ;黄灯亮
LJMP XCLG
XCLD:JNB ACC.3,XCLE
MOV BIAZ,#03 ;报警(左)
SETB P1.3 ;黄灯亮
LJMP XCLG
XCLE:JNB ACC.0,XCLF
MOV BIAZ,#00 ;纠偏(右)
SETB P1.2
LJMP XCLG
XCLF:MOV BIAZ,#01 ;纠偏(左)
SETB P1.2
XCLG:JB 0FH,ENXC ;有查询标志,返回
LCALL TRBH ;送入下位机编号
XCLH:MOV DPTR,#TAS0 ;查状态信息显示ROM首地址
MOV A,BIAZ
MOV B,#10
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOV R0,#96H ;状态信息送显示缓冲区(BUFA)对应位置
MOV B,#10
LCALL RIMV
MOV R0,#BUFA
MOV B,#16
MOV A,#98H ;显示下位机位置和状态(L4)
LCALL SENC
LCALL DSIL
ENXC:RET
NOP
NOP
NOP
TRNX:MOV A,@R0 ;下位机状态显示(查询用)
JNB ACC.5,TRN1
MOV BIAZ,#05 ;超限(左)
SJMP TRN6
TRN1:JNB ACC.4,TRN2
MOV BIAZ,#04 ;超限(右)
SJMP TRN6
TRN2:JNB ACC.3,TRN3
MOV BIAZ,#03 ;报警(左)
SJMP TRN6
TRN3:JNB ACC.2,TRN4
MOV BIAZ,#02 ;报警(右)
SJMP TRN6
TRN4:JNB ACC.1,TRN5
MOV BIAZ,#01 ;纠偏(左)
SJMP TRN6
TRN5:MOV BIAZ,#00 ;纠偏(右)
TRN6:LCALL XCLH ;查ROM,显示下位机状态(L4)
RET
NOP
NOP
NOP
TRBH:MOV A,BIAZ ;取下位机状态
CJNE A,#07,TRBO
LJMP ENRB ;正常,本次访问的下位机编号不显示
TRBO:MOV A,XBHA ;取下位机编号
TRBN:MOV B,#100 ;单字节二进制-->三字节BCD
DIV AB ;(A)-->(R4R5R6)
MOV R4,A ;商(百位)送R4
MOV A,B ;取余数
MOV B,#10
DIV AB
MOV R5,A ;十位送R5
MOV R6,B ;个位送R6
MOV R0,#91H ;指向显示缓冲区(BUFA)对应位置
MOV A,R4 ;BCD-->ASCII
ADD A,#30H
MOV @R0,A
INC R0
MOV A,R5
ADD A,#30H
MOV @R0,A
INC R0
MOV A,R6
ADD A,#30H
MOV @R0,A
ENRB:RET
NOP
NOP
NOP
XXMV:MOV R7,#252 ;将外部RAM(0100H)数据移到(0200H)
MOV DPTR,#0200H ;字节数R7=105个
MOV R0,#00H
XMVL:MOV P2,#01H
MOVX A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R7,XMVL
RET
NOP
NOP
NOP
IXMV:MOV A,@R0 ;内部RAM数据移到外部RAM
MOVX @DPTR,A ;(R0)-->(DPTR),字节数在B中
DEC R0
DEC DPL
DJNZ B,IXMV
RET
NOP
NOP
NOP
SAVE:MOV P2,#01H ;(0100H)共35组内容向下移7字节
MOV R7,#35 ;空出7字节
MOV R1,#0FBH
MOV R0,#0F4H
DWL1:MOV R6,#07
DWL2:MOVX A,@R0
MOVX @R1,A
DEC R0
DEC R1
DJNZ R6,DWL2
DJNZ R7,DWL1
MOV DPTR,#0106H ;向空出存储单元送新内容
MOV A,BUFF
MOVX @DPTR,A ;状态
DEC DPL
MOV A,XBHA ;编号
MOVX @DPTR,A
DEC DPL
MOV R0,#CTSE ;时间
MOV B,#05
LCALL IXMV
RET
NOP
NOP
NOP
DSIL:MOV A,@R0 ;将RAM内容送显示
LCALL SEND ;内容(R0),字节数(B)
INC R0
DJNZ B,DSIL
RET
NOP
NOP
NOP
TINC:MOV R0,#CTMH ;月日时分秒送工作区(WOK1)
MOV R1,#WOK1
MOV B,#05
LCALL IIMV
TRTM:MOV R0,#WOK1 ;二进制数转换成两个单字节BCD码
MOV R1,#WOK2 ;(WOK1)-->(WOK2),字节数在R7中
MOV R7,#05
TICL:MOV A,@R0
MOV B,#10
DIV AB
MOV @R1,A
INC R1
MOV @R1,B
INC R0
INC R1
DJNZ R7,TICL
MOV R0,#WOK2 ;月日时分秒送LCD显示
MOV B,#10
DSL1:MOV A,@R0 ;BCD码转换成ASCII码
ADD A,#30H ;共10字节
MOV @R0,A
INC R0
DJNZ B,DSL1
MOV R0,#WOK2 ;将时间ASCII码送显示缓冲区
MOV R1,#BUFD
MOV B,#05
DSL2:INC R1
MOV A,@R0
MOV @R1,A
INC R0
INC R1
MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ B,DSL2
MOV R0,#BUFD
MOV B,#16
MOV A,#90H ;显示时间' **.** **:**:** '(L2)
LCALL SENC
LCALL DSIL
RET
NOP
NOP
NOP
SEPC:MOV DPTR,#0100H ;将发送内容送工作区(WOK3)
MOV R1,#WOK3+1
MOV B,#07
LCALL XIMV
MOV A,#0FFH ;第一个引导符'0FFH'
MOV WOK3,A
MOV R0,#WOK3
MOV B,#08
SEP1:JNB P1.5,SEP1 ;等发送就绪
MOV DPTR,#8200H
MOV A,@R0
MOVX @DPTR,A ;发出一个字节
INC R0
DJNZ B,SEP1 ;顺序:'引导符,月,日,时,分,秒,编号,状态'
RET
NOP
NOP
NOP
;*************************
ITP0:PUSH ACC ;INT0中断服务子程序
PUSH DPH ;(与PC通信)
PUSH DPL
PUSH PSW
MOV PSW,#08H
MOV DPTR,#8200H ;从8251取数
MOVX A,@DPTR
CJNE A,#55H,ENTP ;判本机地址(55H)
ITP1:JNB P1.5,ITP1 ;等发送信号
MOV DPTR,#8200H ;回送地址
MOVX @DPTR,A
ITP2:JNB P1.5,ITP2
MOV A,#0BBH ;发送信息
MOVX @DPTR,A
ENTP:POP PSW
POP DPL
POP DPH
POP ACC
RETI
;*************************
PKEY:PUSH ACC ;INT1中断服务子程序
PUSH DPH ;(键盘)
PUSH DPL
PUSH PSW
MOV DPTR,#8001H
MOV A,#40H
MOVX @DPTR,A
MOV DPTR,#8000H
MOVX A,@DPTR ;取键值送缓冲单元
MOV BUFK,A
POP PSW
POP DPL
POP DPH
POP ACC
RETI
;*************************
TIM0:CLR TR0
MOV TH0,#4CH ;T0定时50MS
ORL TL0,#00H
SETB TR0
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
MOV PSW,#10H
JNB 07H,TTT0 ;无运行标志,转
INC CNT0
MOV A,CNT0
CJNE A,#04,TTT0
MOV CNT0,#00 ;满200MS,置访问下位机标志
SETB 02H
TTT0:MOV R1,#CTMH ;R1指向月计数器
MOV R0,#CTMS ;R0指向50MS计数器
INC @R0 ;50MS计数器+1
TTT1:CJNE @R0,#20,TEN1 ;满1S?
MOV @R0,#00 ;50MS计数器充'0'
SETB 10H ;置秒标志10H='1',供显示时间刷新用
DEC R0
INC @R0 ;秒计数器+1
CJNE @R0,#60,TEN1 ;计数器不是60,退出
MOV @R0,#00 ;秒计数器充'0'
DEC R0
INC @R0
CJNE @R0,#60,TEN1 ;分计数器不是60,退出
MOV @R0,#00 ;分计数器充'0'
DEC R0
INC @R0 ;时计数器+1
CJNE @R0,#24,TEN1 ;时计数器不是24,退出
MOV @R0,#00 ;时计数器充'0'
DEC R0 ;R0指向日计数器
INC @R0 ;日计数器+1
SJMP TTT3
TEN1:LJMP TEN2
TTT3:CJNE @R1,#01,TTT4 ;不是1月份,转
CJNE @R0,#32,TEN1 ;1月份,31天
LJMP TTTG
TTT4:CJNE @R1,#02,TTT6 ;不是2月份,转
JB 0EH,TTT5 ;闰年,转
CJNE @R0,#29,TEN2 ;非闰年2月份,28天
LJMP TTTG
TTT5:CJNE @R0,#30,TEN2 ;闰年2月份,29天
LJMP TTTG
TTT6:CJNE @R1,#03,TTT7 ;不是3月份,转
CJNE @R0,#32,TEN2 ;3月份,31天
LJMP TTTG
TTT7:CJNE @R1,#04,TTT8 ;不是4月份,转
CJNE @R0,#31,TEN2 ;4月份,30天
LJMP TTTG
TTT8:CJNE @R1,#05,TTT9 ;不是5月份,转
CJNE @R0,#32,TEN2 ;5月份,31天
LJMP TTTG
TTT9:CJNE @R1,#06,TTTA ;不是6月份,转
CJNE @R0,#31,TEN2 ;6月份,30天
LJMP TTTG
TTTA:CJNE @R1,#07,TTTB ;不是7月份,转
CJNE @R0,#32,TEN2 ;7月份,31天
LJMP TTTG
TTTB:CJNE @R1,#08,TTTC ;不是8月份,转
CJNE @R0,#32,TEN2 ;8月份,31天
LJMP TTTG
TTTC:CJNE @R1,#09,TTTD ;不是9月份,转
CJNE @R0,#31,TEN2 ;9月份,30天
LJMP TTTG
TTTD:CJNE @R1,#10,TTTE ;不是10月份,转
CJNE @R0,#32,TEN2 ;10月份,31天
LJMP TTTG
TTTE:CJNE @R1,#11,TTTF ;不是11月份,转
CJNE @R0,#31,TEN2 ;11月份,30天
LJMP TTTG
TTTF:CJNE @R0,#32,TEN2 ;12月份,31天
TTTG:MOV @R0,#01 ;日计数器置'1'
DEC R0 ;R0指向月计数器
INC @R0 ;月计数器+1
TTTH:CJNE @R0,#13,TEN2 ;月计数器不是13,退出
MOV @R0,#01 ;月计数器置'1'
DEC R0 ;R0指向年计数器
INC @R0 ;年计数器+1
TTTI:MOV A,@R0
MOV B,#04
DIV AB
MOV A,B ;判闰年
CJNE A,#00H,TTTJ
SETB 0EH ;能整除,置闰年标志0E='1'
SJMP TEN2
TTTJ:CLR 0EH ;清闰年标志
TEN2:POP PSW
POP DPL
POP DPH
POP B
POP ACC
RETI
;***************************
TAB0:DB 0BDH,0BAH,0B4H,0F8H,0C5H,0DCH,0C6H,0ABH ;'胶带跑偏报警系统'
DB 0B1H,0A8H,0BEH,0AFH,0CFH,0B5H,0CDH,0B3H
TAB1:DB 0BDH,0ADH,0CBH,0D5H,0D6H,0D0H,0CFH,0D4H ;'江苏中显机械公司'
DB 0BBH,0FAH,0D0H,0B5H,0B9H,0ABH,0CBH,0BEH
TAB2:DB 0C7H,0EBH,0CAH,0E4H,0C8H,0EBH,0B5H,0B1H ;'请输入当前时间: '
DB 0C7H,0B0H,0CAH,0B1H,0BCH,0E4H,3AH,20H
TAB3:DB 20H,20H,30H,30H,0C4H,0EAH,30H,30H ;' 00年00月00日 '
DB 0D4H,0C2H,30H,30H,0C8H,0D5H,20H,20H
TAB4:DB 20H,20H,30H,30H,0CAH,0B1H,30H,30H ;' 00时00分00秒 '
DB 0B7H,0D6H,30H,30H,0C3H,0EBH,20H,20H
TAB5:DB 0C7H,0EBH,0CAH,0E4H,0C8H,0EBH,0CFH,0C2H ;'请输入下位机数目'
DB 0CEH,0BBH,0BBH,0FAH,0CAH,0FDH,0C4H,0BFH
TAB6:DB 20H,20H,20H,20H,30H,32H,30H,20H ;' 020 只 '
DB 0D6H,0BBH,20H,20H,20H,20H,20H,20H
TAB7:DB 0C7H,0EBH,0CAH,0E4H,0C8H,0EBH,0BDH,0BAH ;'请输入胶带速度: '
DB 0B4H,0F8H,0CBH,0D9H,0B6H,0C8H,3AH,20H
TAB8:DB 20H,20H,20H,20H,34H,20H,0C3H,0D7H ;' 4 米/ 秒 '
DB 2FH,20H,0C3H,0EBH,20H,20H,20H,20H
TAB9:DB 20H,30H,31H,2EH,30H,31H,20H,30H ;' 01.01 01:01:01 '
DB 31H,3AH,30H,31H,3AH,30H,31H,20H
TABB:DB 20H,20H,20H,20H,20H,20H,0D5H,0FDH ;' 正常 '
DB 0B3H,0A3H,20H,20H,20H,20H,20H,20H
TAS0:DB 0BEH,0C0H,0C6H,0ABH,28H,20H,0D3H,0D2H,20H,29H ;' 纠偏( 右 )'
DB 0BEH,0C0H,0C6H,0ABH,28H,20H,0D7H,0F3H,20H,29H ;' 纠偏( 左 )'
DB 0B1H,0A8H,0BEH,0AFH,28H,20H,0D3H,0D2H,20H,29H ;' 报警( 右 )'
DB 0B1H,0A8H,0BEH,0AFH,28H,20H,0D7H,0F3H,20H,29H ;' 报警( 左 )'
DB 0B3H,0ACH,0CFH,0DEH,28H,20H,0D3H,0D2H,20H,29H ;' 超限( 右 )'
DB 0B3H,0ACH,0CFH,0DEH,28H,20H,0D7H,0F3H,20H,29H ;' 超限( 左 )'
DB 20H,20H,0C3H,0BBH,0CFH,0ECH,0D3H,0A6H,20H,20H ;' 没响应 '
TABS:DB 2AH,2AH,0CFH,0B5H,0CDH,0B3H,0B2H,0CEH ;'**系统参数设置**'
DB 0CAH,0FDH,0C9H,0E8H,0D6H,0C3H,2AH,2AH
TABO:DB 2AH,2AH,0B2H,0CEH,0CAH,0FDH,0C9H,0E8H ;'**参数设置完毕**'
DB 0D6H,0C3H,0CDH,0EAH,0B1H,0CFH,2AH,2AH
TABR:DB 2AH,2AH,0CFH,0B5H,0CDH,0B3H,0D5H,0FDH ;'**系统正在运行**'
DB 0D4H,0DAH,0D4H,0CBH,0D0H,0D0H,2AH,2AH
TABP:DB 2AH,2AH,0CFH,0B5H,0CDH,0B3H,0D4H,0DDH ;'**系统暂停工作**'
DB 0CDH,0A3H,0B9H,0A4H,0D7H,0F7H,2AH,2AH
TABH:DB 0CFH,0B5H,0CDH,0B3H,0B4H,0A6H,0D3H,0DAH ;'系统进入查询状态'
DB 0B2H,0E9H,0D1H,0AFH,0D7H,0B4H,0CCH,0ACH
TABW:DB 0CEH,0DEH,0BEH,0C0H,0C6H,0ABH,0B1H,0A8H ;'无纠偏报警等信息'
DB 0BEH,0AFH,0B5H,0C8H,0D0H,0C5H,0CFH,0A2H
CONT EQU 2FH ;数字输入计数器(二进制)
CTYR EQU 30H ;年计数器(二进制)
CTMH EQU 31H ;月计数器
CTDY EQU 32H ;日计数器
CTHR EQU 33H ;时计数器
CTMN EQU 34H ;分计数器
CTSE EQU 35H ;秒计数器
CTMS EQU 36H ;20MS计数器
BFDA EQU 37H ;输入数字缓冲单元
DADP EQU 38H ;数字显示(ASCII码)缓冲单元
CNTZ EQU 39H ;字节计数器
NUMB EQU 3AH ;下位机数目单元
SPED EQU 3BH ;速度单元
XBHA EQU 3CH ;当前被访问的下位机编号
BUFF EQU 3DH ;当前被访问的下位机状态
BIAZ EQU 3EH ;状态标志(00--07)
PONT EQU 3FH ;外部RAM指针
BUFK EQU 40H ;键值缓冲单元
CNT0 EQU 42H ;T0中断次数计数器
WOK1 EQU 50H ;工作区1(放二进制数)
WOK2 EQU 60H ;工作区2(放BCD码或ASCII码)
WOK3 EQU 70H ;工作区3(放向PC发送的7个字节内容)
BUFD EQU 80H ;显示缓冲区1(日期)
BUFA EQU 90H ;显示缓冲区2(位置)
END
;02H 访问下位机时间到标志
;03H 下位机有故障标志
;07H 运行标志
;08H 强停机标志
;0EH 闰年标志
;0FH 查询标志
;10H 秒标志
;11H 时间参数设置标志
;12H 下位机数目设置标志
;13H 胶带速度设置标志
;15H 设置完成标志
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -