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

📄 pm521.asm

📁 给予主从式单片机的胶带跑篇报警系统
💻 ASM
📖 第 1 页 / 共 3 页
字号:
     MOV A,R2
     MOV R3,A              ;分(BCD)-->R3(二进制数)
     CLR C
     SUBB A,#60
     JC STMB
     LJMP ERTM             ;分置值>=60,错
STMB:INC R0                ;指向秒
     LCALL DBCD                      
     MOV A,R2              ;秒(BCD)-->R2(二进制数)           
     CLR C
     SUBB A,#60
     JC STMC               
ERTM:MOV A,#89H            ;时间设置不正确,重新开始设置 
     LCALL SENC  
     MOV A,#0DH
     LCALL SENC
     MOV CONT,#00H         ;清数字输入计数器
     MOV R0,#WOK2          ;输入数字暂存区首址WOK2
     LJMP ESTM
STMC:MOV CTYR,R7           ;时间设置正确
     MOV CTMH,R6           ;将设置的时间送计时单元
     MOV CTDY,R5
     MOV CTHR,R4
     MOV CTMN,R3
     MOV CTSE,R2
     CLR 11H               ;清时间设置标志
     SETB ET0              ;开放T0中断,启动T0工作
     SETB TR0                                       
     MOV A,#01H            ;清屏
     LCALL SENC
     MOV DPTR,#TABS 
     MOV CNTZ,#16          
     MOV A,#80H            ;显示'**系统参数设置**'(L1)           
     LCALL SENC
     LCALL DSCL 
     MOV DPTR,#TAB5
     MOV CNTZ,#16
     MOV A,#90H            ;'请输入下位机数目'(L2)   
     LCALL SENC
     LCALL DSCL 
     MOV WOK2,#00          ;预置下位机数目=20只
     MOV WOK2+1,#02
     MOV WOK2+2,#00 
     MOV DPTR,#TAB6
     MOV CNTZ,#16
     MOV A,#88H            ;'    020 只      '               
     LCALL SENC
     LCALL DSCL
     MOV A,#8AH            ;在输入位置(02)上数字反白闪烁
     LCALL SENC  
     MOV A,#0DH
     LCALL SENC
     MOV CONT,#00H         ;清数字输入计数器
     MOV R0,#WOK2          ;输入数字暂存区首址WOK2
     SETB 12H              ;置下位机数目设置标志
ESTM:RET
     NOP
     NOP
     NOP 
     
BCDH:MOV A,@R0             ;三字节BCD-->二字节二进制数
     MOV B,#100            ;R0指向BCD高位字节 
     MUL AB                ;R2R3为二进制结果,高位在前
     MOV R3,A              ;低位-->R3
     MOV A,B 
     MOV R2,A              ;高位-->R2
     INC R0
     MOV A,@R0
     MOV B,#10
     MUL AB
     ADD A,R3
     MOV R3,A
     MOV A,B
     ADDC A,R2
     MOV R2,A
     INC R0
     MOV A,@R0
     ADD A,R3
     MOV R3,A
     MOV A,R2
     ADDC A,#00H
     MOV R2,A
     RET  
     NOP
     NOP
     NOP  
       
SNUM:MOV R0,#WOK2          ;下位机数目设置确认
     LCALL BCDH            ;三字节BCD-->二字节二进制数
     MOV A,R3              ;因小于100,仅一个字节(R3)             
     JZ ERNM               ;下位机数目=0,错 
     CLR C
     SUBB A,#101
     JC SNM1               ;<100
     JZ SNM1               ;=100         
ERNM:MOV A,#8AH            ;下位机数目>100,错         
     LCALL SENC            ;下位机数目设置不正确,重设           
     MOV A,#0DH            ;00001101,整体显示,光标不显示,反白闪烁
     LCALL SENC
     LJMP ESNM
SNM1:MOV NUMB,R3           ;数目设置正确,保存下位机数目 
     MOV DPTR,#TAB7           
     MOV CNTZ,#16
     MOV A,#90H            ;'请输入胶带速度: '(L2)   
     LCALL SENC
     LCALL DSCL 
     MOV WOK2,#04          ;预置胶带速度= 4 米/ 秒
     MOV DPTR,#TAB8
     MOV CNTZ,#16
     MOV A,#88H            ;'    4 米/ 秒    '              
     LCALL SENC
     LCALL DSCL
     CLR 12H               ;清下位机数目设置标志
     MOV A,#8AH            ;在输入位置(4)上数字反白闪烁
     LCALL SENC  
     MOV A,#0DH
     LCALL SENC
     SETB 13H              ;置胶带速度设置标志
ESNM:MOV CONT,#00H         ;清数字输入计数器
     MOV R0,#WOK2          ;输入数字暂存区首址WOK2
     RET 
     NOP
     NOP
     NOP         
     
SSPD:MOV A,WOK2
     JZ ERSP               ;速度设置=0,错
     CLR C
     SUBB A,#06             
     JNC ERSP              ;速度设置>5,错 
     MOV A,WOK2
     MOV SPED,A            ;保存速度
     CLR P1.7              ;置RS485发送状态
     CLR TI 
     MOV A,#0AAH           ;向所有下位机发速度
     MOV SBUF,A
SPL1:JNB TI,SPL1
     CLR TI 
     MOV A,SPED 
     MOV SBUF,A
SPL2:JNB TI,SPL2
     CLR TI 
     SETB P1.7             ;恢复RS485接收状态
     MOV A,#01H            ;清屏
     LCALL SENC
     MOV DPTR,#TABO 
     MOV CNTZ,#16          
     MOV A,#90H            ;显示'**参数设置完毕**'(L2)           
     LCALL SENC
     LCALL DSCL 
     CLR 13H 
     MOV A,#0CH
     LCALL SENC            ;取消LCD反白闪烁
     SETB 15H              ;参数设置完成15H=1 
     SJMP ESPD
ERSP:MOV A,#8AH            ;有错,在输入位置(4)上数字反白闪烁
     LCALL SENC  
     MOV A,#0DH
     LCALL SENC
ESPD:RET
     NOP
     NOP
     NOP
     
KRUN:JB 07H,ERUN           ;已运行,本键无效
     JB 0FH,ERUN           ;查询时,本键无效 
     JB 01H,RUN1           ;手动停机,转
     JB 08H,RUN1           ;强停机,转    
     JNB 15H,ERUN          ;无设置完成标志,本键无效     
RUN1:CLR 01H               ;清手动停机标志
     CLR 08H               ;清强停机制标志
     MOV A,#01H            ;清屏
     LCALL SENC
     MOV DPTR,#TABR 
     MOV CNTZ,#16          
     MOV A,#80H            ;显示'**系统正在运行**'(L1)           
     LCALL SENC
     LCALL DSCL 
     MOV DPTR,#TABB 
     MOV CNTZ,#16          
     MOV A,#98H            ;显示'  001:  正常    '(L4)           
     LCALL SENC
     LCALL DSCL          
     MOV DPTR,#TAB9        ;时间显示格式送显示缓冲区
     MOV R0,#BUFD
     MOV B,#16
     LCALL RIMV
     LCALL TINC            ;显示当前时间(L2)
     MOV DPTR,#TABB        ;编号状态格式送显示缓冲区
     MOV R0,#BUFA
     MOV B,#16
     LCALL RIMV  
     MOV XBHA,#00
     CLR P1.6              ;接通继电器
     CLR P1.4              ;LED灭
     CLR P1.3
     CLR P1.2
     SETB 07H              ;置运行标志00=1
ERUN:RET
     NOP
     NOP
     NOP
     
STOP:JNB 07H,ESTP          ;停止键处理,无运行标志返回
     CLR 15H               
     CLR 07H               ;清运行与查询标志
     CLR 0FH   
     SETB 01H              ;置手动停机标志01H='1'          
     SETB P1.6             ;输出停止信息,断开继电器
     SETB P1.4             ;LED(红)亮
     MOV A,#01H            ;清屏
     LCALL SENC
     MOV DPTR,#TABP 
     MOV CNTZ,#16          
     MOV A,#80H            ;'**系统暂停工作**'(L1)           
     LCALL SENC
     LCALL DSCL 
ESTP:RET     
     NOP
     NOP 
     NOP
     
SECH:JNB 07H,ESCH          ;查询键处理,无运行标志返回
     JNB 0FH,SCH1          ;判查询标志
     CLR 0FH               ;有查询标志,清标志(乒乓键)
     MOV PONT,#00H         ;恢复查询指针
     MOV DPTR,#TABR        ;返回运行状态
     MOV CNTZ,#16          
     MOV A,#80H            ;显示'**系统正在运行**'(L1)           
     LCALL SENC
     LCALL DSCL
     SJMP ESCH
SCH1:SETB 0FH              ;置位查询标志0FH=1
     MOV DPTR,#TABH        
     MOV CNTZ,#16          
     MOV A,#80H            ;显示'系统进入查询状态'(L1)           
     LCALL SENC
     LCALL DSCL  
SSSS:LCALL XXMV            ;将数据保存区内容送查询区  
     MOV DPTR,#0200H       ;显示查询区第一组数据
SCH2:MOV R1,#WOK1
     MOV B,#07
     LCALL XIMV            
     MOV PONT,DPL          ;保存查询指针 
     MOV A,WOK1  
     CJNE A,#0FFH,SCH3     ;有故障信息,转
     MOV DPTR,#TABW        
     MOV CNTZ,#16          
     MOV A,#80H            ;显示'无纠偏报警等信息'(L1)           
     LCALL SENC
     LCALL DSCL     
     SJMP ESCH 
SCH3:LCALL TRTM            ;转换并显示时间
     MOV R0,#WOK1+5
     MOV A,@R0
     LCALL TRBN            ;转换编号送缓冲区
     MOV R0,#WOK1+6
     MOV A,@R0
     LCALL TRNX            ;转换并显示状态    
ESCH:RET
     NOP
     NOP
     NOP
SDEC:JNB 0FH,EDEC          ;无查询标志,退出
     CLR C                 
     MOV A,PONT            ;取指针
     SUBB A,#251           ;判范围
     JC SDE1
     MOV PONT,#00
SDE1:MOV DPH,#02
     MOV DPL,PONT
     LCALL SCH2
EDEC:RET
     NOP
     NOP
     NOP
;**************************
LCDF:MOV A,#30H            ;LCD初始化
     LCALL SENC
     MOV A,#01H
     LCALL SENC
     MOV A,#06H
     LCALL SENC
     MOV A,#0CH
     LCALL SENC
     RET
     NOP
     NOP
     NOP
DELY:MOV R7,#0FFH          ;延时子程序(140MS)
DEL1:MOV R6,#0FFH
DEL2:DJNZ R6,DEL2
     DJNZ R7,DEL1
     RET
     NOP
     NOP
     NOP
IIMV:MOV A,@R0             ;内部RAM间数据移动
     MOV @R1,A             ;(R0)-->(R1),字节数在B中
     INC R0
     INC R1
     DJNZ B,IIMV
     RET
     NOP
     NOP
     NOP
     
XIMV:MOVX A,@DPTR          ;外部RAM数据移到内部RAM
     MOV @R1,A             ;(DPTR)-->(R1),字节数在B中
     INC R1
     INC DPTR
     DJNZ B,XIMV
     RET
     NOP
     NOP
     NOP
     
RIMV:CLR A                 ;ROM数据移到内部RAM
     MOVC A,@A+DPTR        ;(DPTR)-->(R0),字节数在B中
     MOV @R0,A 
     INC R0
     INC DPTR
     DJNZ B,RIMV
     RET
     NOP
     NOP
     NOP   
     
CHEK:PUSH ACC              ;LCD判忙
     PUSH DPH
     PUSH DPL
     MOV DPTR,#8102H
CKLL:MOVX A,@DPTR
     RLC A
     JC CKLL
     POP DPL
     POP DPH
     POP ACC
     RET
     NOP
     NOP
     NOP
     
SENC:LCALL CHEK            ;LCD送命令
     PUSH DPH
     PUSH DPL
     MOV DPTR,#8100H
     MOVX @DPTR,A
     POP DPL
     POP DPH
     RET
     
SEND:LCALL CHEK            ;LCD送数据
     PUSH DPH
     PUSH DPL
     MOV DPTR,#8101H
     MOVX @DPTR,A
     POP DPL
     POP DPH
     RET
     NOP
     NOP
     NOP
     
DMOV:CLR A                 ;显示格式送显示缓冲区 
     MOVC A,@A+DPTR        ;(DPTR)-->(R0),字节数(CONT)
     MOV @R0,A
     INC DPTR
     INC R0
     DJNZ CONT,DMOV
     RET 
     NOP
     NOP
     NOP
     
D1MS:MOV R6,#230          ;1MS延时
DMSL:NOP  
     NOP
     DJNZ R6,DMSL
     RET
     NOP
     NOP    
     NOP 
     
XCAL:JB 07H,XCL0           
     LJMP ENXC             ;无运行标志,返回
XCL0:MOV A,XBHA            ;向下位机查询信息子程序           
     INC A                 ;下位机编号+1
     MOV R3,A              ;保存下位机编号
     CLR C
     SUBB A,NUMB           ;与数目单元比较
     JC XCL1               ;小于和等于,转
     JZ XCL1
     MOV R3,#01            ;超出,下位机编号恢复为'01'
XCL1:MOV XBHA,R3
     CLR P1.7              ;RS485串口准备发送
     CLR TI
     MOV A,XBHA
     MOV SBUF,A            ;发下位机编号
XCL2:JNB TI,XCL2           ;等发送完毕
     CLR TI
     CLR RI
     SETB P1.7             ;RS485串口准备接收
     MOV B,#03H
XCL3:JBC RI,XCL4           ;接收到回应,转
     LCALL D1MS            ;延迟1MS     
     DJNZ B,XCL3
     MOV BIAZ,#06
     LJMP XCLG             ;3MS内接收不到回应,返回    
XCL4:MOV A,SBUF            ;取入下位机编号,舍弃 
     MOV B,#03H
XCL5:JBC RI,XCL6           ;接收到信息,转
     LCALL D1MS            ;延迟1MS     
     DJNZ B,XCL5
     MOV BIAZ,#06
     LJMP XCLG             ;3MS内接收不到信息,返回
XCL6:MOV A,SBUF
     MOV BUFF,A            ;信息送缓存单元
     JB ACC.7,XCL9         ;下位机信息显示,带报警装置转
     CJNE A,#00H,XCL7      ;不正常,转
     CLR 03H               
     CLR P1.2              ;正常,三个LED熄灭 
     CLR P1.3
     CLR P1.4
     MOV BIAZ,#07
     LJMP ENXC
XCL7:SETB 03H              ;置问题标志
     JNB ACC.0,XCL8
     MOV BIAZ,#00          ;纠偏(右)
     SETB P1.2             ;绿灯亮 
     LJMP XCLG               
XCL8:MOV BIAZ,#01          ;纠偏(左)
     SETB P1.2             ;绿灯亮
     LJMP XCLG
XCL9:CJNE A,#80H,XCLA      ;带报警装置,不正常,转 
     CLR 03H  
     CLR P1.2              ;正常,三个LED熄灭
     CLR P1.3
     CLR P1.4
     MOV BIAZ,#07        
     LJMP ENXC
XCLA:SETB 03H              ;置问题标志
     JNB ACC.4,XCLB
     MOV BIAZ,#04          ;超限(右)
     SETB P1.3             ;黄灯亮
     SETB P1.4             ;红灯亮

⌨️ 快捷键说明

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