?? 核終.asm
字號(hào):
;HCY-10 核磁共振含油測(cè)量?jī)x 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 核磁共振含油量測(cè)量?jī)x
;*** 30H-3EH
DAT1 EQU 30H ;液顯第一參數(shù)單元
dat2 equ 31h ;液顯第二參數(shù)單元
COM EQU 32H ;液顯指令代碼單元
C_ADD EQU 0100H ;液顯指令通道地址
D_ADD EQU 0000H ;液顯數(shù)據(jù)通道地址
RAD EQU 33H ;讀液顯數(shù)據(jù)暫存單元
COUNT EQU 34H ; 8*8點(diǎn)陣字模的個(gè)數(shù)
O_X EQU 35H ; X 坐標(biāo)
O_Y EQU 36H ; Y 坐標(biāo)
CODE EQU 37H ; LCD 顯示字暫存寄存器
LCDSTATE EQU 38H ; LCD 狀態(tài)欄顯示字暫存寄存器
res BIT p1.2 ;LCD 的復(fù)位端,低電平有效
LCD_BUFFER EQU 39H ;存要顯示的"數(shù)據(jù)"(LCD顯示碼) LCD_BUFFER+5
;**
;先期運(yùn)算處理寄存器
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 ;被除數(shù)(低位在前) (60H-65H)
pdiv equ 66h ;除數(shù)(低位在前) (66H-6BH)
div_c equ 6Ch ;部分余數(shù)(高位在前) (6CH-71H)
pbdiv equ 72h ;暫存差 (72H-76H)
BMUL EQU 60H ;被乘數(shù)低字節(jié)地址
PMUL EQU 64H ;乘數(shù)低字節(jié)地址
MULJI EQU 66H ;積的低字節(jié)地址
MULJIBYT EQU 70H ;積的字節(jié)數(shù)
MULADD EQU 71H ;暫存積
;********************
NUMBER_HAO EQU 50H ;編號(hào)寄存器(當(dāng)前輸入編號(hào))
NUMBERMIN EQU 51H ;編號(hào)最小值寄存器(用于"檢查"或"打印")
NUMBERMAX EQU 52H ;編號(hào)最大值寄存器
TIMER EQU 53H ;時(shí)間寄存器
QUALITY_L EQU 54H ;質(zhì)量(最低字節(jié))寄存器
QUALITY_M EQU 55H ;質(zhì)量(中字節(jié))寄存器
QUALITY_H EQU 56H ;質(zhì)量(最高字節(jié))寄存器
MODIFY_L EQU 57H ;修正寄存器(低字節(jié))
MODIFY_H EQU 58H ;修正寄存器(高字節(jié))
;**
EEPROM_P EQU 60H ;串行 EEPROM 的首地址
EEPROM_BYT EQU 61H ;要讀(寫(xiě))數(shù)據(jù)的字節(jié)數(shù)
EEPROM_DAT EQU 62H ;存放數(shù)據(jù)(讀出/要寫(xiě)入)的首地址
EEPROM_SDA BIT P1.1 ;串行 EEPROM 的控制數(shù)據(jù)線
EEPROM_SCL BIT P1.0 ;串行 EEPROM 的時(shí)鐘控制線
;**
PRINT_ADR EQU 0FF7FH ;打印機(jī)選通信號(hào)
PRINT_BUSY BIT P1.4 ;打印機(jī)“忙”線 檢查
PRINT_DAT EQU 40H ;要打印的數(shù)據(jù)存放首地址(40H-4FH)
BUFFER_L EQU 5AH ;打印漢字?jǐn)?shù)據(jù)地址指針暫存寄存器
BUFFER_H EQU 5BH ;打印漢字?jǐn)?shù)據(jù)地址指針暫存寄存器
;打印的數(shù)據(jù)存放格式:
; 含油率值(??.??%)+質(zhì)量值(??.???G)+時(shí)間值(?)+編號(hào)值(??)
; 6 位數(shù) 7 位數(shù) 1 位數(shù) 2 位數(shù)
;共占字節(jié) 16 BYTES (50H-5FH)
;**
;EEPROM 選用 24LC01(128 BYTS)地址為 00H-7FH
;** 00H-01H 存放鍵入的編號(hào)(0-99)
;** 03H 時(shí)間等級(jí)(0-9)
;** 10H-14H 質(zhì)量值(0-99.999)
;** 20H-23H 修正值(0-9.999)
;** 30H-33H 存放計(jì)算(含油率)的結(jié)果(0-99.99)
; A/D 轉(zhuǎn)換程序 (AD574A)
AD_8 EQU 40H ;存AD轉(zhuǎn)換高8位結(jié)果
AD_4 EQU 41H ;存AD轉(zhuǎn)換低4位結(jié)果
READ_AD8 EQU 0FFF1H ;讀AD轉(zhuǎn)換高8位結(jié)果(CPU A1A0=01)
READ_AD4 EQU 0FFF3H ;讀AD轉(zhuǎn)換低4位結(jié)果(CPU A1A0=11)
STS_AD EQU 0FFFCH ;啟動(dòng)AD轉(zhuǎn)換(CPU RD=0 OR WR=0 A0=0)
AD_STA BIT P1.3 ;AD轉(zhuǎn)換狀態(tài)檢查
END_AD BIT 7FH ;2FH: AD 采樣結(jié)束標(biāo)志 位
RAM_ADRH EQU 43H ;RAM 地址暫存 高8位
RAM_ADRL EQU 44H ;RAM 地址暫存 高8位
RAM_LCDH EQU 45H ;
RAM_LCDL EQU 46H ;存放LCD顯示數(shù)據(jù)的RAM地址
RAM_CLRH EQU 47H ;
RAM_CLRL EQU 48H ;存放LCD清顯示數(shù)據(jù)的RAM地址
RAM_CUH EQU 49H
RAM_CUL EQU 4AH
CAI_SHU_D EQU 42H ;采樣點(diǎn)
;**
KEY_COM EQU 0FFFFH ;IC8279 命令口地址 P2.7
KEY_DAT EQU 7FFFH ;IC8279 數(shù)據(jù)口地址
KEY_ZERO BIT 6CH ;清零鍵按下標(biāo)志位
KEY_OK BIT 6DH ;; “確定”鍵按下標(biāo)志位(=0,有效)
ADTL BIT 6AH ;AD轉(zhuǎn)換雙周期標(biāo)志
SLCDW BIT 69H ;送LCD顯示標(biāo)志位************
;**
KEYNUMBER EQU 7AH ;作鍵入數(shù)據(jù)暫存寄存器用 (7AH-7EH)
;進(jìn)入工作(運(yùn)行)后,不再鍵入數(shù)據(jù)值
H7279_CLK BIT P1.0
H7279_DAT BIT P1.1
H7279_KEY BIT P1.2
;
DATA_IN DATA 40H ;讀入數(shù)據(jù)暫存器
DATA_OUT DATA 41H ;發(fā)送數(shù)據(jù)、命令寄存器
BIT_COUNT DATA 42H ;讀、發(fā)數(shù)據(jù)位數(shù)計(jì)數(shù)器
;************************************
;******* 主程序 ***********
ORG 0000H
AJMP 0030H
;
ORG 0003H
;LJMP KEY_INT0
;
;ORG 000BH
;LJMP T0_INT
;
ORG 0013H
LJMP AD_INT1 ;AD轉(zhuǎn)換開(kāi)始中斷,調(diào)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 低電平觸發(fā)
;SETB IT1 ;INT1 邊延(下跳)觸發(fā)
;CLR IT0 ;INT0 低電平觸發(fā)
;MOV TMOD,#02H ;0000,0010 定時(shí)器0 設(shè)置
;MOV TL0,#88H;0A2H ;工作方式2,不受 INT0 控制
;MOV TH0,#88H;0A2H
;SETB ET0 ;允許 T0 中斷
;SETB TR0 ;啟動(dòng) T0(開(kāi)始定時(shí))
;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 地址,存"編號(hào)"
LCALL RAM_ADR
MOV A,NUMBER_HAO
MOVX @DPTR,A
MOV DPTR,#0501H ;外部 RAM 地址,存"時(shí)間"
LCALL RAM_ADR
MOV A,TIMER
MOVX @DPTR,A
MOV DPTR,#0502H ;外部 RAM 地址,存"質(zhì)量"
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 存"含油率"小數(shù)部分
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 ;圖形顯示數(shù)據(jù)區(qū) 0200H-0300H(256點(diǎn))
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 ;*** 作批次檢查時(shí)用 ****
;
MAIN: MOV A,#00H
MOV RAM_CUH,#00H
SETB KEY_OK ; “確定”鍵按下標(biāo)志位(=0,有效)
SETB KEY_ZERO ; “清零”鍵按下標(biāo)志位(=0,有效)
SETB SLCDW ; 送LCD顯示標(biāo)志位
SETB END_AD ; AD 采樣結(jié)束標(biāo)志位
LCALL GETKEY ; 掃描鍵盤(pán),得到鍵值
KEY_PROC:
JB ACC.4,COMMAND
AJMP MAIN
COMMAND: CJNE A,#11H,FUNC1
LJMP BIANHAO ; 編號(hào)
FUNC1: CJNE A,#12H,FUNC2
LJMP WORKING ; 運(yùn)行
FUNC2: CJNE A,#13H,FUNC3
LJMP WEIGHT ; 質(zhì)量
FUNC3: CJNE A,#14H,FUNC4
LJMP CHANGE ; 修正
FUNC4: CJNE A,#15H,FUNC5
LJMP TIME ; 時(shí)間
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 ;編號(hào)
MOV LCDSTATE,#00H
LCALL LCD_PLEASE ;LCD 狀態(tài)欄顯示"編號(hào)"字樣
MOV LCD_BUFFER+1,#10H
MOV LCD_BUFFER,#10H
MOV O_X,#0D5H
MOV O_Y,#01H
LCALL WRI_DATA ;;LCD 狀態(tài)欄顯示"數(shù)據(jù) 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 ;轉(zhuǎn)換成 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 狀態(tài)欄顯示"數(shù)據(jù)"
mov a,#00h
AJMP BIANHao1
COMMAND1: CJNE A,#18H,BIANHAO1 ;是"確認(rèn)"鍵"嗎? N 轉(zhuǎn)
MOV O_X,#35H
MOV O_Y,#00H
LCALL WRI_DATA ;;LCD "編號(hào)"顯示"數(shù)據(jù) ??"
;(LCD_BUFFER,LCD_BUFFER+1的內(nèi)容)
MOV R0,#7DH
LCALL BCD_P
MOV NUMBER_HAO,A
MOV PBCD_H,#00H
MOV PBCD_L,NUMBER_HAO
LCALL PBCD_BINARY ;把鍵入的編號(hào)值轉(zhuǎn)換成十進(jìn)制
MOV NUMBER_HAO,PBCD_L ; NUMBER_HAO = 十進(jìn)制的編號(hào)值
;或存在RAM6264中
ORL P1,#0FFH
ANL P1,#3FH
MOV DPTR,#0500H ;外部 RAM 地址,存"編號(hào)"
LCALL RAM_ADR
MOV A,NUMBER_HAO
MOVX @DPTR,A ;存編號(hào)
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 ;質(zhì)量MAX=99.999g
MOV LCDSTATE,#02H
LCALL LCD_PLEASE ;LCD 狀態(tài)欄顯示"質(zhì)量"字樣
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 狀態(tài)欄顯示"數(shù)據(jù) 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 ;轉(zhuǎn)換成 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 狀態(tài)欄顯示"數(shù)據(jù)"
AJMP WEIGHT1
COMMAND2: CJNE A,#18H,WEIGHT1 ;是"確認(rèn)"鍵"嗎? N 轉(zhuǎn)
MOV O_X,#95H
MOV O_Y,#00H
LCALL WRI_DATA ;;LCD "質(zhì)量"顯示"數(shù)據(jù) ??"
;(LCD_BUFFER,LCD_BUFFER+1的內(nèi)容)
MOV R0,#7AH
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -