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

📄 pm521.asm

📁 给予主从式单片机的胶带跑篇报警系统
💻 ASM
📖 第 1 页 / 共 3 页
字号:
     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 + -