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

📄 核终.asm

📁 核磁共振含油测量仪
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                LCALL BCD_P2

                MOV QUALITY_H,7EH
                MOV QUALITY_M,DPH
                MOV QUALITY_L,DPL   ;键入质量值的压缩BCD码

		;或存在RAM6264中
                ORL P1,#0FFH
                ANL P1,#3FH
                MOV DPTR,#0502H        ;外部 RAM 地址,存"质量"
                LCALL RAM_ADR

                MOV A,QUALITY_H        ;存质量
                MOVX @DPTR,A
                INC DPTR
                MOV A,QUALITY_M
                MOVX @DPTR,A
                INC DPTR
                MOV A,QUALITY_L
                MOVX @DPTR,A
              ;*********************************
                MOV A,QUALITY_H      ;存参与计算的质量 0509H
                ANL A,#0FH
                JZ END_WEIGHT
        ENDWT:
                CLR C
                MOV A,QUALITY_L
                ANL A,#0FH
                SUBB A,#5
                JNC ENDWT1
                ;*****************
                MOV A,QUALITY_L
                ANL A,#0F0H
                SWAP A
                MOV QUALITY_L,A

                MOV A,QUALITY_M
                ANL A,#0FH
                SWAP A
                ADD A,QUALITY_L
                MOV QUALITY_L,A

                MOV A,QUALITY_M
                ANL A,#0F0H
                ADD A,QUALITY_H
                SWAP A
                MOV QUALITY_M,A

                LJMP END_WEIGHT

      ENDWT1:  ; 作最低位的四舍五入处理

                MOV A,QUALITY_L
                ANL A,#0F0H
                SWAP A
                MOV QUALITY_L,A

                MOV A,QUALITY_M
                ANL A,#0FH
                SWAP A
                ADD A,QUALITY_L
                MOV QUALITY_L,A

                MOV A,QUALITY_M
                ANL A,#0F0H
                ADD A,QUALITY_H
                SWAP A
                MOV QUALITY_M,A

                MOV A,QUALITY_L
                MOV PBCD_L,A
                MOV A,QUALITY_M
                MOV PBCD_H,A
                LCALL PBCD_BINARY

                CLR C         ;   加 1 处理
                MOV A,BINARY_L
                ADDC A,#1
                MOV BINARY_L,A
                MOV A,BINARY_H
                ADDC A,#0
                MOV BINARY_H,A
                LJMP END_WEI


         ;*****************************

   END_WEIGHT:
                MOV A,QUALITY_L
                MOV PBCD_L,A
                MOV A,QUALITY_M
                MOV PBCD_H,A
                LCALL PBCD_BINARY
    END_WEI:
                ORL P1,#0FFH
                ANL P1,#3FH
                MOV DPTR,#0509H        ;外部 RAM 地址,存"质量"
                LCALL RAM_ADR

                MOV A,BINARY_H        ;存质量
                MOVX @DPTR,A
                INC DPTR
                MOV A,BINARY_L
                MOVX @DPTR,A

                ORL P1,#0FFH
                LCALL LCD_MINGL
                MOV RAM_CUL,#01H
		LJMP MAIN
;***********************************************
      CHANGE:	NOP			;修正值
                LCALL CLR_LCDDAT
                MOV LCDSTATE,#0FH
		LCALL LCD_PLEASE   	;LCD 状态栏显示"修正值"字样
                MOV LCD_BUFFER,#11H
                MOV LCD_BUFFER+1,#0EH
                MOV LCD_BUFFER+2,#10H
                MOV LCD_BUFFER+3,#10H
                MOV LCD_BUFFER+4,#10H
                MOV O_X,#0D5H
                MOV O_Y,#01H
                LCALL WRI_DATA          ;;LCD 状态栏显示"数据 1.000"
                LCALL H7A
                ;MOV R1,#7EH

      CHANGE1: 	JB H7279_KEY,$       ;有键按下?(H7279_KEY=0)
                LCALL GETKEY
		JB ACC.4,COMMANDG
                MOV 7EH,7DH
                MOV 7DH,7CH
                MOV 7CH,7BH
                MOV 7BH,A
                MOV A,#10H
                ADD A,7EH             ;转换成 LCD 显示码
                MOV LCD_BUFFER,A
                MOV A,#10H
                ADD A,7DH
                MOV LCD_BUFFER+2,A
                MOV LCD_BUFFER+1,#0EH
                MOV A,#10H
                ADD A,7CH
                MOV LCD_BUFFER+3,A
                MOV A,#10H
                ADD A,7BH
                MOV LCD_BUFFER+4,A

                MOV O_X,#0D5H
                MOV O_Y,#01H
                LCALL WRI_DATA          ;;LCD 状态栏显示"数据"
		AJMP CHANGE1
    COMMANDG:	CJNE A,#18H,CHANGE1     ;是"确认"键"吗? N 转
                MOV R0,#7BH
                LCALL BCD_P2
                MOV PBCD_H,DPH
                MOV PBCD_L,DPL
                LCALL PBCD_BINARY       ;把键入的修正值转换成十进制
                MOV MODIFY_H,PBCD_H
                MOV MODIFY_L,PBCD_L     ; MODIFY = 十进制的修正值

		;或存在RAM6264中
                ORL P1,#0FFH
                ANL P1,#3FH
                MOV DPTR,#0505H        ;外部 RAM 地址,存"修正值"
                LCALL RAM_ADR

                MOV A,MODIFY_H
                MOVX @DPTR,A
                INC DPTR
                MOV A,MODIFY_L
                MOVX @DPTR,A
                ORL P1,#0FFH
                LCALL LCD_MINGL
                MOV RAM_CUL,#01H
		LJMP MAIN
    ;***************************************************;
      TIME:	NOP			;时间
                LCALL CLR_LCDDAT
                MOV LCDSTATE,#07H
		LCALL LCD_PLEASE   	;LCD 状态栏显示"时间"字样
                MOV LCD_BUFFER,#10H
                MOV O_X,#0D5H
                MOV O_Y,#01H
                LCALL WRI_DATA          ;;LCD 状态栏显示"数据 0"
                LCALL H7A
      TIME1:   	JB H7279_KEY,$       ;有键按下?(H7279_KEY=0)
                LCALL GETKEY
		JB ACC.4,COMMANDT
		MOV 7EH,A
                MOV A,#10H
                ADD A,7EH             ;转换成 LCD 显示码
                MOV LCD_BUFFER,A
                MOV O_X,#0D5H
                MOV O_Y,#01H
                LCALL WRI_DATA          ;;LCD 状态栏显示"数据"
		AJMP TIME1
    COMMANDT:	CJNE A,#18H,TIME1        ;是"确认"键"吗? N 转
                MOV O_X,#0F5H
                MOV O_Y,#00H
                LCALL WRI_DATA          ;;LCD "质量"显示"数据 ??"
                MOV TIMER,7EH
		;或存在RAM6264中
                ORL P1,#0FFH
                ANL P1,#3FH
                MOV DPTR,#0501H        ;外部 RAM 地址,存"时间"
                LCALL RAM_ADR
                MOV A,TIMER
                MOVX @DPTR,A
                ORL P1,#0FFH
                LCALL LCD_MINGL
                MOV RAM_CUL,#01H
		LJMP MAIN
     ;*******************************
      UPDOWN:   NOP
                INC NUMBER_HAO
                MOV A,NUMBER_HAO
                CLR C
                SUBB A,NUMBERMAX
                JC UPCHECK
                MOV NUMBER_HAO,NUMBERMIN
     UPCHECK:   LCALL LCD_DISP    ;显示当前"编号"的数据结果
                LCALL LCD_MINGL
                MOV RAM_CUL,#01H
                LJMP MAIN
     ;***************
      CHECK:    LCALL CLR_LCDDAT			;检查
                MOV LCDSTATE,#0BH
		LCALL LCD_PLEASE   	;LCD 状态栏显示"检查"字样
                MOV LCD_BUFFER+1,#11H
                MOV LCD_BUFFER,#10H
                MOV O_X,#0D5H
                MOV O_Y,#01H
                LCALL WRI_DATA          ;;LCD 状态栏显示"数据 00"
                LCALL H7A
                ;MOV R1,#7EH

       CHECK2:  JB H7279_KEY,$       ;有键按下?(H7279_KEY=0)
                LCALL GETKEY
		JB ACC.4,COMMANDC
                MOV 7EH,7DH
                MOV 7DH,A

                MOV A,#10H
                ADD A,7EH             ;转换成 LCD 显示码
                MOV LCD_BUFFER,A
                MOV A,#10H
                ADD A,7DH
                MOV LCD_BUFFER+1,A
                MOV O_X,#0D5H
                MOV O_Y,#01H
                LCALL WRI_DATA          ;;LCD 状态栏显示"数据"
		AJMP CHECK2
    COMMANDC:	CJNE A,#18H,CHECK1       ;是"确认"键"吗? N 转
                MOV R0,#7DH
                LCALL BCD_P
                MOV NUMBERMAX,A
                MOV PBCD_H,#00H
                MOV PBCD_L,NUMBERMAX
                LCALL PBCD_BINARY       ;把当前键入的编号值转换成十进制
                MOV NUMBERMAX,PBCD_L   ; NUMBERMAX = 十进制的编号值
                LCALL LCD_MINGL
                MOV RAM_CUL,#01H
                LJMP MAIN
      CHECK1:   CJNE A,#17H,CHECK2
                MOV R0,#7DH
                LCALL BCD_P
                MOV NUMBERMIN,A
                MOV PBCD_H,#00H
                MOV PBCD_L,NUMBERMIN
                LCALL PBCD_BINARY       ;把当前键入的编号值转换成十进制
                MOV NUMBERMIN,PBCD_L   ; NUMBERMIN = 十进制的编号值
                LJMP CHECK2
     ;**********************
      ZERO:     LCALL CLR_LCDDAT
                MOV LCD_BUFFER,#14H
                MOV O_X,#0F5H
                MOV O_Y,#00H
                LCALL WRI_DATA          ;;LCD "质量"显示"数据 ??"
                MOV TIMER,#4
                LCALL LCD_MINGL
                MOV RAM_CUL,#01H
                LJMP MAIN
     ;***************************
     PICI:      NOP              ; # 命令键
                LCALL LCD_PICI  ;显示当前"编号"的批次的数据结果
                INC RAM_CUH
                INC RAM_CUH
                INC RAM_CUL
                MOV A,RAM_CUL
                CLR C
                SUBB A,#09H    ;  8次
                JC GOONPC
                MOV RAM_CUH,#00H
                MOV RAM_CUL,#01H
         GOONPC:
                mov a,#00h
                LJMP MAIN
     ;
     ;#############################
     ; INT1 中断时,采样.CAI_SHU_D记录采样次数(MAX=200)
     ; 根据timer的值延时一段时间后再测,并显示.在这一段时间里
     ; 检测10次,取平均值显示,并存(批次)档.
      WORKING:
                CLR EA
                MOV RAM_CUH,#00H     ;批次次数
                MOV CAI_SHU_D,#00H      ;采样点初值
                MOV R6,#0AH          ; 在TIMER时间段里采样10次平均
                LCALL N2
                mov r4,a
                LCALL D100MS
		SETB EX1		;允许 INT1 中断
		SETB EA			;       INT0

      WORKLOOP:
                JB H7279_KEY,NEXT_WORK
                LCALL GETKEY1
                JNB KEY_ZERO,ENDWORK    ; 有"清零"键?
                JNB KEY_OK,ENDWORK      ; 有"确定"键?
    NEXT_WORK:
                JB P3.3,WORKLOOP
                LCALL N2
                mov r4,a
                LCALL D100MS
                LCALL ADDSHUJU       ; 计算面积,累计十次采样值
                MOV CAI_SHU_D,#00H      ;采样点初值
                DJNZ R6,WORKLOOP
                CLR EA
                ;** 调计算含油率程序
                LCALL JIEGOU

                MOV A,RAM_CUH
                CLR C
                SUBB A,#08H
                JNC SAVEPC
                MOV RAM_CUH,#00H   ;存批次次数 8
      SAVEPC:
                lcall savehyl

                LJMP WORKLOOP

    ENDWORK:    clr ea
                SETB KEY_OK
                SETB KEY_ZERO
                LJMP MAIN
 ;***********
 ; 2 的 N-1 次方子程序 (N=1--9)
   ;
  N2:   SETB C
        CLR A
        MOV R4,TIMER
  NLP1: RLC A
        DJNZ R4,NLP1
        RET
  D100MS:  MOV R7,#194
  D100MS1: MOV R5,#0FFH
           DJNZ R5,$
           DJNZ R7,D100MS1
           DJNZ R4,D100MS
           RET
;***************************
     AD_INT1:    CLR EA
                LCALL AD574
                MOV A,CAI_SHU_D
                INC A
                MOV CAI_SHU_D,A
                CLR C
                SUBB A,#200
                JNC ENDADINT
                JNB P3.3,AD_INT1
     ENDADINT:  JNB P3.3,$
                RETI
;**
;***************************************************

⌨️ 快捷键说明

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