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

📄 充气电缆气压自动监测系统.asm

📁 本程序是一种先进的充气电缆气压自动监测系统的程序。其特点是可以对电缆线路上各点的气压值进行24小时实时监控。使管理人员可以实时掌握电缆内的气压情况
💻 ASM
📖 第 1 页 / 共 2 页
字号:
JC      COMP3              ;小于UP的高位,TO COMP3 ,去判断下限
JNZ     COMP1              ;大于UP的高位,TO COMP1 置OVER=1
INC     R0                  ;等于UP的高位,继续判断           
MOV     A,ADBUFB
CLR     C
SUBB    A,@R0
JNC     COMP1             ;大于等于UP的低位,TO  COMP1 置OVER=1
DEC     R0
COMP3:
INC     R0
INC     R0                  ;DOWN
MOV     A,ADBUFA
CLR     C
SUBB    A,@R0
JC      COMP1            ;小于 DOWN的低位,TO  COMP1,置OVER=1
JNZ     COMP4            ;大于 DOWN的低位,TO   COMP4, OVER=0,退出
INC     R0                ;等于  继续判断
MOV     A,ADBUFB
CLR     C
SUBB    A,@R0
JC      COMP1                ;低位<DOWN
COMP4:
CLR     OVER
AJMP    COMP2
COMP1:
SETB    OVER
COMP2:
        RET
/****************************************
查表比较修改值是否合理,合理置标志OK为1
*****************************************/
CHECK:
MOV     DPTR,#TAB        ;表地址
MOV     A,DMODE         ;确定查表位置,与对应的路
RL       A                 ;*2,每路气压占两个内存单元
ADD     A,#40H
MOV     R0,A
MOV     A,DMODE
RL      A
RL      A
MOV     R3,A
MOVC    A,@A+DPTR
CLR     C
SUBB    A,@R0
JC      CHECK3             ;UP1<修改值跳转,到CHECK3,清OK=0
JNZ     CHECK4            ;UP1>修改值,跳到CHECK4,判断DOWN满足否
INC     R0                  ;UP1=修改值,继续判断UP2
INC     R3
MOV     A,R3
MOVC    A,@A+DPTR
CLR     C
SUBB    A,@R0
JC      CHECK3               ;UP2<修改值,清OK=0
DEC     R0                   ;回到前两位(DOWN1)
DEC     R3
CHECK4:                               ;跳过来的要+2,否则+1
INC     R3
INC     R3
MOV     A,R3
MOVC    A,@A+DPTR
CLR     C
SUBB    A,@R0
JC      CHECK1               ;DOWE1<修改值,置OK=1
JNZ     CHECK3               ;DOWN1>修改值,清OK=0
INC     R0                   ;DOUN1<修改值,继续判断
INC     R3
MOV     A,R3
MOVC    A,@A+DPTR
CLR     C
SUBB    A,@R0
JC      CHECK1                ;DOWN2<修改值,置OK=1 。>= ,CLR OK
			                    ;也就是说,修改值<=下限值清0
CHECK3:
CLR     OK
AJMP    CHECK2
CHECK1:
SETB    OK
CHECK2:
RET
/***********************************
刷新显示缓冲区
**********************************/
NEWBUF:
MOV     R2,#02H              ;A,R2,R0,R1
MOV     A,DMODE
RL       A
ADD     A,#40H
MOV     R0,A
MOV     R1,#32H
NEWBUF1:
MOV     A,@R0
ANL     A,#0F0H
SWAP    A
MOV     @R1,A
INC     R1
MOV     A,@R0
ANL     A,#0FH
MOV     @R1,A
INC     R0
INC     R1
DJNZ    R2,NEWBUF1
RET
/************************************
刷新显示内容
***********************************/
DYP:
MOV     R0,#35H                ;R0,R2,R3
MOV     R3,#80H
MOV     R2,#06H
DYP1: 
MOV     A,R3
ACALL   SENDHD
MOV     A,@R0
CJNE    R0,#34H,DYP2          ;小数点!
MOV     R4,DMODE
CJNE    R4,#9,DYP3            ;显示时间时不要小数点
AJMP    DYP2
DYP3:
ORL     A,#80H
DYP2:
ACALL   SENDHD
DEC     R0
INC     R3
DJNZ    R2,DYP1
RET
/***************************************
刷新闪烁位
*************************************/
SHINE:
        MOV     A,#88H                ;闪烁
        ACALL   SENDHD
		MOV     A,FLASH
		ACALL   SENDHD
		RET
/*****************************************************************************
尺度变换,将000H对应0,将FFF对应2000。根据分析,可以将数据乘125,再除256。乘(128-3)可这样得到,先左移7位,再减原来数的2倍,再减原数值。除以256相当于右移8位。
*****************************************************************************/
RULE:
MOV       R3,ADBUFA
MOV       R4,ADBUFB
MOV       R5,#0
MOV       R2,#7
RULE1: 
CLR        C
MOV       A,R3
RLC        A
MOV       R3,A
MOV       A,R4
RLC        A
MOV       R4,A
MOV       A,R5
RLC        A
MOV       R5,A
DJNZ       R2,RULE1
MOV       R7,ADBUFA        ;-2*
MOV       R6,ADBUFB
CLR       C
MOV      A,R7
RLC       A
MOV      R7,A
MOV      A,R6
RLC       A
MOV      R6,A
JNC       RULE2
DEC       R5
RULE2: 
CLR       C
MOV      A,R3               ;-1*
SUBB     A,ADBUFB
MOV      R3,A
MOV      A,R4
SUBB     A,ADBUFA
MOV      R4,A
JNC       RULE3
DEC      R5
RULE3:
CLR       C
MOV      R2,#8
RULE4:
MOV      A,R5
RRC       A
MOV      R5,A
MOV      A,R4
RRC       A
MOV      R4,A
MOV      A,R3
RRC       A
MOV      R3,A
DJNZ      R2,RULE4
MOV      ADBUFB,R3
MOV      ADBUFA,R4
RET
/**********************************
通信程序,内容有各路气压及时间
*********************************/
RS232:
MOV     R0,#40H          ;传送0路气压值
MOV     A,@R0
ACALL   SERIAL
INC      R0
MOV     A,@R0
ACALL   SERIAL
MOV     R0,#46H          ;传送3路气压值
MOV     A,@R0
ACALL   SERIAL
INC      R0
MOV     A,@R0
ACALL   SERIAL
MOV     R0,#4CH          ;传送6路气压值
MOV     A,@R0
ACALL   SERIAL
INC      R0
MOV     A,@R0
ACALL   SERIAL
MOV     R0,#52H           ;传送时间
MOV     R2,#04H
RET

SER1:
MOV      A,@R0
ACALL   SERIAL
INC       R0
DJNZ     R2,SER1
RET
  
SERIAL:
MOV     SBUF,A           ;发送子程序
JNB      TI,$               ;等待,查询TI
CLR      TI                ;查询结束,清TI
RET
/***************************************
读时钟芯片
***************************************/

RDTIME:
MOV     A,#83H       ;分钟寄存器
ACALL    READT      ;调读DS1302子程序
MOV     MINUTE,A    ;将分钟存于MINUTE单元
MOV     A,#85H       ;小时寄存器
ACALL    READT      ;调读DS1302子程序
MOV      HOUR,A     ;将小时存于HOUR单元
RET
			  
READT: 
SETB    T_RST          ;启动
MOV     R2,#8            ;循环8次
TIMEL1:
RRC     A             ;写8位,控制字
MOV     T_PIO,C       ;写1位给DS1302
NOP
NOP
SETB    T_SCLK        ;发一个时钟信号
NOP
NOP
CLR     T_SCLK
DJNZ    R2,TIMEL1      ;循环8次
NOP
NOP
SETB     T_PIO
CLR      A
CLR      C
MOV      R2,#8          ;循环8次
TIMEL2:
MOV      C,T_PIO       ;读1位
RRC      A              ;存于A
NOP
NOP
SETB     T_SCLK        ;发一时钟脉冲
NOP
NOP
CLR      T_SCLK
DJNZ     R2,TIMEL2     ;8次
RET
/**********************************
启动AD转换器
*********************************/
RD_AD:
CLR     AD_CLK
SETB    AD_CS
CLR     AD_CS       ;开始一个工作周期
MOV     R4,#08      ;循环8次
MOV     A,R7        ;通道值送A
SWAP    A           ;高低4位交换,使A成为控制字,控制字的底4位为0
AD1:
MOV     C,DOUT     ;取TLC2543输出的一位数
RLC     A
MOV     DIN,C       ;控制字一位给TLC2543
SETB    AD_CLK       ;产生一个时钟脉冲
CLR     AD_CLK
DJNZ    R4,AD1        ;循环8次
MOV     ADBUFA,A    ;高8位存于ADBUFA
MOV     A,#00H      
MOV     R4,#04H        ;循环4次,取低4位
AD2:
MOV     C,DOUT       ;取TLC2543输出的一位数
RLC     A
SETB    AD_CLK        ;产生一个时钟脉冲
CLR     AD_CLK
DJNZ    R4,AD2         ;循环4次
MOV     ADBUFB,A      ;低4位给ADBUFB
SETB    AD_CS          ;关闭TLC2543
RET
/****************************	
写HD7279
******************************/
SENDHD:                           ;写8位
MOV    R7,#08H
CLR   CS                 ;使能有效
CALL  LONG_DELAY      ;长延时
SEND_LOOP:  
RLC   A                  ;将A中的值送入
MOV   DAT,C             ;送一位
SETB  CLK                ;发时钟脉冲
CALL  SHORT_DELAY     ;短延时
CLR   CLK               
DJNZ  R7,SEND_LOOP       ;8次
RET
读HD7279的键值:
READHD:
MOV     R7,#08H          ;读8次
SETB    DAT              ;先写1
CALL    LONG_DELAY     长延时
READ_LOOP:
SETB    CLK               ;发时钟脉冲
CALL    SHORT_DELAY
RL       A
MOV     C,DAT
MOV     ACC.0,C           ;存于A
CLR      CLK
CALL    SHORT_DELAY     ;短延时
DJNZ     R7,READ_LOOP
MOV     KYE,A             ;将键值存放与KYE单元
RET
LONG_DELAY:
MOV   TIMER,#25         ;约50us延时
DELAY_LOOP:
DJNZ  TIMER,DELAY_LOOP
RET
SHORT_DELAY:
MOV   TIMER,#4           ;约8us延时
SHORT_LP:
DJNZ  TIMER,SHORT_LP
RET
/*******************************
修改前保存先前值
******************************/
SAVE:
MOV     A,DDMODE
RL      A       ;*2
ADD     A,#40H
MOV     R0,A
MOV     SETBUFA,@R0
INC     R0
MOV     SETBUFB,@R0
RET
/*****************************************
修改值不合理时,将先前值写回
****************************************/
RESAVE:
MOV     A,DDMODE
RL      A
ADD     A,#40H
MOV     R0,A
MOV     @R0,SETBUFA
INC     R0
MOV     @R0,SETBUFB
RET
/**********************************
格式调整,要将输入的0~9转换到相应压缩BCD位
**********************************/
REGULATE:
              MOV     A,DMODE
			  RL      A
			  ADD     A,#40H
			  MOV     R0,A
 			  JNB     FLASH_A,REG1
			  MOV     A,@R0
			  SWAP    A
			  MOV     @R0,A ;1
			  MOV     A,KYE
			  XCHD    A,@R0
			  MOV     A,@R0
			  SWAP    A
			  MOV     @R0,A
			  MOV     FLASH,#00000100B
			  AJMP    REG5
REG1:
JNB     FLASH_B,REG2
	          MOV     A,KYE
			  XCHD    A,@R0
			  MOV     FLASH,#00000010B
			  AJMP    REG5
REG2:
           INC     R0
			  JNB     FLASH_C,REG3
			  MOV     A,@R0
			  SWAP    A
			  MOV     @R0,A ;1
			  MOV     A,KYE
			  XCHD    A,@R0
			  MOV     A,@R0
			  SWAP    A
			  MOV     @R0,A
			  MOV     FLASH,#00000001B
			  AJMP    REG5
   REG3:
	         MOV     A,KYE
			 XCHD    A,@R0
			 MOV     FLASH,#00001000B
REG5:
          RET

⌨️ 快捷键说明

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