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

📄 核终.asm

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

;HCY-10 核磁共振含油测量仪 2002.9.5-9.27
;               P1.7 P1.6 P1.5(IC74LS138 C B A )
;CS1=HD7279      0    0    0   0001,1111 1FH
;CS2=IC6264      0    0    1   0011,1111 3FH
;CS3=ICAD574A    0    1    0   0101,1111 5FH
;CS4=UP40_STD    0    1    1   0111,1111 7FH
;CS5=IC2732      1    0    0   1001,1111 9FH
;CS6=LCD         1    0    1   1011,1111 BFH
;

;*****************************
	;** HCY-10 核磁共振含油量测量仪
        ;*** 30H-3EH
	   DAT1	       EQU  30H     ;液显第一参数单元
           dat2        equ  31h     ;液显第二参数单元
           COM         EQU  32H     ;液显指令代码单元
           C_ADD       EQU  0100H   ;液显指令通道地址
           D_ADD       EQU  0000H   ;液显数据通道地址
           RAD         EQU  33H     ;读液显数据暂存单元
           COUNT       EQU  34H     ; 8*8点阵字模的个数
           O_X         EQU  35H     ; X 坐标
           O_Y         EQU  36H     ; Y 坐标
           CODE        EQU  37H     ; LCD 显示字暂存寄存器
           LCDSTATE    EQU  38H     ; LCD 状态栏显示字暂存寄存器
           res         BIT  p1.2    ;LCD 的复位端,低电平有效
           LCD_BUFFER EQU   39H  ;存要显示的"数据"(LCD显示码) LCD_BUFFER+5
	;**
	   ;先期运算处理寄存器
	   PBCD_H      EQU  40H
	   PBCD_L      EQU  41H
	   BINARY_H    EQU  42H
           BINARY_L    EQU  43H
	   PBCD_D      EQU  44H ;(44H-4FH)

           bdiv        equ  60h     ;被除数(低位在前) (60H-65H)
           pdiv        equ  66h     ;除数(低位在前)   (66H-6BH)
           div_c       equ  6Ch     ;部分余数(高位在前) (6CH-71H)
           pbdiv       equ  72h     ;暂存差             (72H-76H)

           BMUL        EQU  60H     ;被乘数低字节地址
           PMUL        EQU  64H     ;乘数低字节地址
           MULJI       EQU  66H     ;积的低字节地址
           MULJIBYT    EQU  70H     ;积的字节数
           MULADD      EQU  71H     ;暂存积
        ;********************
           NUMBER_HAO  EQU  50H     ;编号寄存器(当前输入编号)
           NUMBERMIN   EQU  51H     ;编号最小值寄存器(用于"检查"或"打印")
           NUMBERMAX   EQU  52H     ;编号最大值寄存器
           TIMER       EQU  53H     ;时间寄存器
           QUALITY_L   EQU  54H     ;质量(最低字节)寄存器
           QUALITY_M   EQU  55H     ;质量(中字节)寄存器
           QUALITY_H   EQU  56H     ;质量(最高字节)寄存器
           MODIFY_L    EQU  57H     ;修正寄存器(低字节)
           MODIFY_H    EQU  58H     ;修正寄存器(高字节)
        ;**
           EEPROM_P    EQU  60H     ;串行 EEPROM 的首地址
           EEPROM_BYT  EQU  61H     ;要读(写)数据的字节数
           EEPROM_DAT  EQU  62H     ;存放数据(读出/要写入)的首地址
           EEPROM_SDA  BIT  P1.1    ;串行 EEPROM 的控制数据线
           EEPROM_SCL  BIT  P1.0    ;串行 EEPROM 的时钟控制线

        ;**
           PRINT_ADR   EQU  0FF7FH  ;打印机选通信号
           PRINT_BUSY  BIT  P1.4    ;打印机“忙”线 检查
           PRINT_DAT   EQU  40H     ;要打印的数据存放首地址(40H-4FH)
           BUFFER_L    EQU  5AH     ;打印汉字数据地址指针暂存寄存器
           BUFFER_H    EQU  5BH     ;打印汉字数据地址指针暂存寄存器
             ;打印的数据存放格式:
             ;  含油率值(??.??%)+质量值(??.???G)+时间值(?)+编号值(??)
             ;           6 位数        7 位数      1 位数     2 位数
             ;共占字节 16 BYTES (50H-5FH)
        ;**
             ;EEPROM 选用 24LC01(128 BYTS)地址为 00H-7FH
             ;** 00H-01H 存放键入的编号(0-99)
             ;** 03H     时间等级(0-9)
             ;** 10H-14H 质量值(0-99.999)
             ;** 20H-23H 修正值(0-9.999)
             ;** 30H-33H 存放计算(含油率)的结果(0-99.99)

        ; A/D 转换程序 (AD574A)
           AD_8        EQU  40H       ;存AD转换高8位结果
           AD_4        EQU  41H       ;存AD转换低4位结果
           READ_AD8    EQU  0FFF1H    ;读AD转换高8位结果(CPU A1A0=01)
           READ_AD4    EQU  0FFF3H    ;读AD转换低4位结果(CPU A1A0=11)
           STS_AD      EQU  0FFFCH    ;启动AD转换(CPU RD=0 OR WR=0 A0=0)
           AD_STA      BIT  P1.3      ;AD转换状态检查

           END_AD      BIT  7FH       ;2FH: AD 采样结束标志 位
           RAM_ADRH    EQU  43H       ;RAM 地址暂存 高8位
           RAM_ADRL    EQU  44H       ;RAM 地址暂存 高8位
           RAM_LCDH    EQU  45H       ;
           RAM_LCDL    EQU  46H       ;存放LCD显示数据的RAM地址
           RAM_CLRH    EQU  47H       ;
           RAM_CLRL    EQU  48H       ;存放LCD清显示数据的RAM地址
           RAM_CUH     EQU  49H
           RAM_CUL     EQU  4AH
           CAI_SHU_D   EQU  42H       ;采样点
        ;**
           KEY_COM     EQU  0FFFFH    ;IC8279 命令口地址 P2.7
           KEY_DAT     EQU  7FFFH    ;IC8279 数据口地址
           KEY_ZERO    BIT  6CH      ;清零键按下标志位
           KEY_OK      BIT  6DH      ;; “确定”键按下标志位(=0,有效)
           ADTL        BIT  6AH      ;AD转换双周期标志
           SLCDW       BIT  69H      ;送LCD显示标志位************
        ;**
           KEYNUMBER   EQU  7AH      ;作键入数据暂存寄存器用  (7AH-7EH)
                                     ;进入工作(运行)后,不再键入数据值
           H7279_CLK    BIT   P1.0
           H7279_DAT    BIT   P1.1
           H7279_KEY    BIT   P1.2
;
           DATA_IN      DATA  40H    ;读入数据暂存器
           DATA_OUT     DATA  41H    ;发送数据、命令寄存器
           BIT_COUNT    DATA  42H    ;读、发数据位数计数器
;************************************
;*******     主程序    ***********
        ORG     0000H
                AJMP    0030H
		;
		ORG     0003H
		;LJMP 	KEY_INT0
                ;
                ;ORG     000BH
                ;LJMP    T0_INT
		;
		ORG	0013H
		LJMP 	AD_INT1  ;AD转换开始中断,调AD574采样程序。
                ;
                ORG     0030H
                NOP
                mov r4,#30
                lcall d100Ms
                lcall lcd_ini    ; LCD  初始化
                lcall clear12    ; LCD 清屏
                lcall disp2      ; LCD 初始化显示
		CLR EA
		CLR EX1			;不允许 INT1 中断

		CLR IT1;                ;INT1 低电平触发
                ;SETB IT1		;INT1 边延(下跳)触发
		;CLR IT0			;INT0 低电平触发
                ;MOV TMOD,#02H           ;0000,0010 定时器0 设置
                ;MOV TL0,#88H;0A2H  ;工作方式2,不受 INT0 控制
                ;MOV TH0,#88H;0A2H
                ;SETB ET0                ;允许 T0 中断
                ;SETB TR0                ;启动 T0(开始定时)
                ;clr tr0
		LCALL H7A
    INITITION:	MOV NUMBER_HAO,#00H
		MOV NUMBERMIN,#01H
		MOV NUMBERMAX,NUMBERMIN
		MOV TIMER,#4
		MOV MODIFY_L,#1
		MOV MODIFY_H,#00H
                MOV QUALITY_L,#99H
                MOV QUALITY_M,#99H
                MOV QUALITY_H,#09H
      HHTY:     ORL P1,#0FFH
                ANL P1,#3FH
                MOV DPTR,#0500H        ;外部 RAM 地址,存"编号"
                LCALL RAM_ADR
                MOV A,NUMBER_HAO
                MOVX @DPTR,A

                MOV DPTR,#0501H        ;外部 RAM 地址,存"时间"
                LCALL RAM_ADR
                MOV A,TIMER
                MOVX @DPTR,A

                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 DPTR,#0505H        ;外部 RAM 地址,存"修正值"
                LCALL RAM_ADR

                MOV A,MODIFY_H
                MOVX @DPTR,A
                INC DPTR                ;0506h
                MOV A,MODIFY_L
                MOVX @DPTR,A

                MOV DPTR,#0507H        ;外部 RAM 地址,存"含油率"
                LCALL RAM_ADR
                MOV A,#99
                MOVX @DPTR,A
                INC DPTR                ;0508h 存"含油率"小数部分
                MOV A,#99
                MOVX @DPTR,A

                ORL P1,#0FFH

                INC NUMBER_HAO
                MOV A,NUMBER_HAO
                CLR C
                SUBB A,#99
                JC HHTY
                NOP
                MOV R2,#00H
                ORL P1,#0FFH
                ANL P1,#3FH
                MOV DPTR,#0200H      ;图形显示数据区 0200H-0300H(256点)
                CLR A
     LOOPZERO:  MOVX @DPTR,A
                INC DPTR
                DJNZ R2,LOOPZERO
                ORL P1,#0FFH
                ANL P1,#3FH         ;片选 RAM6264 0011,1111 Y1
                MOV RAM_ADRH,#00H
                MOV RAM_ADRL,#00H
                MOV DPTR,#0400H
                CLR A
                MOVX @DPTR,A    ; RAM 0400H = 00
                INC DPTR
                MOVX @DPTR,A    ; RAM 0401H = 00
                INC DPTR
                MOVX @DPTR,A    ; RAM 0402H = 00
                ORL P1,#0FFH
                NOP

                MOV NUMBER_HAO,#00H
                MOV RAM_CUL,#01H     ;*** 作批次检查时用 ****
		;
    MAIN:	MOV A,#00H
                MOV RAM_CUH,#00H
                SETB KEY_OK          ; “确定”键按下标志位(=0,有效)
                SETB KEY_ZERO        ;  “清零”键按下标志位(=0,有效)
                SETB SLCDW           ; 送LCD显示标志位
                SETB END_AD          ; AD 采样结束标志位

                LCALL GETKEY         ; 扫描键盘,得到键值

    KEY_PROC:
		JB ACC.4,COMMAND
		AJMP MAIN
    COMMAND:	CJNE A,#11H,FUNC1
		LJMP BIANHAO         ; 编号
      FUNC1:	CJNE A,#12H,FUNC2
		LJMP WORKING         ; 运行
      FUNC2:	CJNE A,#13H,FUNC3
		LJMP WEIGHT          ; 质量
      FUNC3:	CJNE A,#14H,FUNC4
		LJMP CHANGE          ; 修正
      FUNC4:	CJNE A,#15H,FUNC5
		LJMP TIME            ; 时间
      FUNC5:	CJNE A,#16H,FUNC6
		LJMP CHECK           ; 检查
      FUNC6:	CJNE A,#17H,FUNC7       
		LJMP UPDOWN          ; 范围 <>
      FUNC7:	CJNE A,#19H,FUNC9
		LJMP ZERO            ; 清零
      FUNC9:	CJNE A,#1BH,FUNC10
		LJMP PRINT           ; 打印
      FUNC10:   CJNE A,#1AH,FUNC11
                LJMP PICI            ; 批次 #
      FUNC11:   LJMP MAIN
  ;***************************************

;***************************************
      BIANHAO:  LCALL CLR_LCDDAT			;编号
                MOV LCDSTATE,#00H
		LCALL LCD_PLEASE   	;LCD 状态栏显示"编号"字样
                MOV LCD_BUFFER+1,#10H
                MOV LCD_BUFFER,#10H
                MOV O_X,#0D5H
                MOV O_Y,#01H
                LCALL WRI_DATA          ;;LCD 状态栏显示"数据 00"
                LCALL H7A
     BIANHAO1:
                JB H7279_KEY,$       ;有键按下?(H7279_KEY=0)
                LCALL GETKEY
		JB ACC.4,COMMAND1
		MOV 7EH,7DH
		MOV 7DH,A
                orl p1,#0ffh
                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 状态栏显示"数据"
                 mov a,#00h
                AJMP BIANHao1
    COMMAND1:	CJNE A,#18H,BIANHAO1    ;是"确认"键"吗? N 转
                MOV O_X,#35H
                MOV O_Y,#00H
                LCALL WRI_DATA          ;;LCD "编号"显示"数据 ??"
                                        ;(LCD_BUFFER,LCD_BUFFER+1的内容)

                MOV R0,#7DH
                LCALL BCD_P
                MOV NUMBER_HAO,A

                MOV PBCD_H,#00H
                MOV PBCD_L,NUMBER_HAO
                LCALL PBCD_BINARY       ;把键入的编号值转换成十进制
                MOV NUMBER_HAO,PBCD_L   ; NUMBER_HAO = 十进制的编号值
                ;或存在RAM6264中
                ORL P1,#0FFH
                ANL P1,#3FH
                MOV DPTR,#0500H        ;外部 RAM 地址,存"编号"
                LCALL RAM_ADR
                MOV A,NUMBER_HAO
                MOVX @DPTR,A          ;存编号
                ORL P1,#0FFH
                LCALL CLR_LCDDAT
                mov        o_x,#57h
                mov        o_y,#01h
                LCALL      WRI_DATA
                LCALL LCD_MINGL
                MOV RAM_CUL,#01H
		LJMP MAIN
     ;*************
      WEIGHT:
                LCALL CLR_LCDDAT     ;质量MAX=99.999g
                MOV LCDSTATE,#02H
		LCALL LCD_PLEASE   	;LCD 状态栏显示"质量"字样
                MOV LCD_BUFFER,#10H
                MOV LCD_BUFFER+1,#10H
                MOV LCD_BUFFER+2,#0EH
                MOV LCD_BUFFER+3,#10H
                MOV LCD_BUFFER+4,#10H
                MOV LCD_BUFFER+5,#10H
                MOV O_X,#0D5H
                MOV O_Y,#01H
                LCALL WRI_DATA          ;;LCD 状态栏显示"数据 00.000"
                LCALL H7A
      WEIGHT1:  JB H7279_KEY,$       ;有键按下?(H7279_KEY=0)
                LCALL GETKEY
		JB ACC.4,COMMAND2
                MOV 7EH,7DH
                MOV 7DH,7CH
                MOV 7CH,7BH
                MOV 7BH,7AH
                MOV 7AH,A
                MOV A,#10H
                ADD A,7EH             ;转换成 LCD 显示码
                MOV LCD_BUFFER,A
                MOV A,#10H
                ADD A,7DH
                MOV LCD_BUFFER+1,A
                MOV LCD_BUFFER+2,#0EH
                MOV A,#10H
                ADD A,7CH
                MOV LCD_BUFFER+3,A
                MOV A,#10H
                ADD A,7BH
                MOV LCD_BUFFER+4,A
                MOV A,#10H
                ADD A,7AH
                MOV LCD_BUFFER+5,A
                MOV O_X,#0D5H
                MOV O_Y,#01H
                LCALL WRI_DATA          ;;LCD 状态栏显示"数据"
		AJMP WEIGHT1
    COMMAND2:	CJNE A,#18H,WEIGHT1      ;是"确认"键"吗? N 转
                MOV O_X,#95H
                MOV O_Y,#00H
                LCALL WRI_DATA          ;;LCD "质量"显示"数据 ??"
                                        ;(LCD_BUFFER,LCD_BUFFER+1的内容)
                MOV R0,#7AH

⌨️ 快捷键说明

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