📄 核终.asm
字号:
;读低4位数据 AD574 CE=1 R/C=1 A0=1
; CPU A0=1 A1=1 FFF3H
;
; A/D 转换程序 (AD574A)
; AD_8 EQU 66H ;存AD转换高8位结果
; AD_4 EQU 67H ;存AD转换低4位结果
; READ_AD8 EQU 0FFF1H ;读AD转换高8位结果(CPU A1A0=01)
; READ_AD4 EQU 0FFF3H ;读AD转换低4位结果(CPU A1A0=11)
; STS_AD EQU 0FFF0H ;启动AD转换(CPU RD=0 OR WR=0 A0=0)
; AD_STA EQU P1.3 ;AD转换状态检查
; RAM_ADRH EQU 60H ;保护 RAM 地址暂存 高8位
; RAM_ADRL EQU 61H ;保护 RAM 地址暂存 低8位
AD574: ORL P1,#0FFH
ANL P1,#5FH ;片选 AD574A
MOV DPTR,#STS_AD
MOVX @DPTR,A ;启动 AD 转换
SETB AD_STA ;置 AD转换状态检查
AD_WAIT: JB AD_STA,AD_WAIT ;判 AD转换状态
MOV DPTR,#READ_AD8
MOVX A,@DPTR ;读高8位 HHHH,MMMM
MOV AD_8,A
MOV DPTR,#READ_AD4
MOVX A,@DPTR ;读低4位 XXXX,LLLL
ORL P1,#0FFH
MOV R7,AD_8
MOV A,AD_8
ANL A,#0F0H
SWAP A
MOV AD_8,A ;AD_8=0000,HHHH
MOV A,R7
ANL A,#0FH
SWAP A
MOV R7,A
MOV A,AD_4
ANL A,#0FH
ADD A,R7
MOV AD_4,A ;AD_4=MMMM,LLLL
;** 数据存放 RAM 程序****************************
; P1.7 P1.6 P1.5
ANL P1,#3FH ;片选CS2=IC6264 0 0 1 0011,1111
MOV DPH,RAM_ADRH ;取 RAM 地址
MOV DPL,RAM_ADRL
MOV A,AD_8 ;A=0000,HHHH
MOVX @DPTR,A ;存高位字节
INC DPTR
MOV A,AD_4 ;A=MMMM,LLLL
MOVX @DPTR,A ;存低位字节
INC DPTR
MOV RAM_ADRH,DPH
MOV RAM_ADRL,DPL
ORL P1,#0FFH
RET
;** 读取 RAM6264 程序
READ_RAM: ORL P1,#0FFH
ANL P1,#3FH ;片选CS2=IC6264 0 0 1 0011,1111
MOV DPH,RAM_ADRH ;取 RAM 地址
MOV DPL,RAM_ADRL
MOVX A,@DPTR ;读高位字节
MOV AD_8,A ;A=0000,HHHH
INC DPTR
MOVX A,@DPTR ;读低位字节
MOV AD_4,A ;A=MMMM,LLLL
INC DPTR
MOV RAM_ADRH,DPH
MOV RAM_ADRL,DPL
ORL P1,#0FFH
RET
;***********************
;***** LCD 处理显示程序 ********
wri_cc9: mov a, o_y ;图形方式下显示汉字
mov b, #20h
mul ab
add a, o_x
mov o_x, a
mov a, b
addc a, #08h ;#08H
mov o_y, a
mov dptr,#cctab2
mov a,code
mov b,#20h
mul ab
add a,dpl
mov dpl,a
mov a,b
addc a,dph
mov dph,a
push dph
push dpl
mov count,#10h
wri_cc18: mov dat1,o_x
mov dat2,o_y
mov com,#24h
lcall pr1
pop dpl
pop dph
clr a
movc a,@a+dptr
;cpl a ;********************
mov dat2,a
mov a,#10h
movc a,@a+dptr
;cpl a ;*******************
mov dat1,a
inc dptr
push dph
push dpl
mov com,#0c0h
lcall pr11
mov dat2,dat1
lcall pr11
mov a,#20h
add a,o_x
mov o_x,a
clr a
addc a,o_y
mov o_y,a
djnz count,wri_cc18
pop acc
pop acc
ret
;****
;** 初始化 LCD 时,进入显示的默认状态显示
disp2: mov code,#00h ;图形方式下显示汉字
mov o_x,#11h
mov o_y,#04h
lcall wri_cc9
mov code,#01h
mov o_x,#13h
mov o_y,#04h ;编号
lcall wri_cc9
LCALL CLR_LCDDAT
MOV LCD_BUFFER,#10H
mov o_x,#35h
mov o_y,#00h
LCALL WRI_DATA
mov code,#02h
mov o_x,#11h
mov o_y,#1Bh
lcall wri_cc9
mov code,#03h
mov o_x,#13h
mov o_y,#1Bh
lcall wri_cc9 ;质量
MOV LCD_BUFFER,#19H
MOV LCD_BUFFER+1,#19H
MOV LCD_BUFFER+2,#0EH
MOV LCD_BUFFER+3,#19H
MOV LCD_BUFFER+4,#19H
MOV LCD_BUFFER+5,#19H
;LCALL CLR_LCDDAT
mov o_x,#95h
mov o_y,#00h
LCALL WRI_DATA
mov code,#04h
mov o_x,#11h
mov o_y,#4Ah
lcall wri_cc9
mov code,#05h
mov o_x,#13h
mov o_y,#4Ah
lcall wri_cc9
mov code,#06h
mov o_x,#15h
mov o_y,#4Ah
lcall wri_cc9 ;含油率
LCALL CLR_LCDDAT
MOV LCD_BUFFER,#11H
MOV LCD_BUFFER+1,#10H
MOV LCD_BUFFER+2,#10H
MOV LCD_BUFFER+3,#05H
mov o_x,#57h
mov o_y,#01h
LCALL WRI_DATA
mov code,#07h
mov o_x,#11h
mov o_y,#33h
lcall wri_cc9
mov code,#08h
mov o_x,#13h
mov o_y,#33H ;12h
lcall wri_cc9 ;时间
LCALL CLR_LCDDAT
MOV LCD_BUFFER,#14H
mov o_x,#0F5h
mov o_y,#00h
LCALL WRI_DATA
;mov code,#09h
;mov o_x,#13h
;mov o_y,#46h
;lcall wri_cc9
;mov code,#0ah
;mov o_x,#15h
;mov o_y,#46h
;lcall wri_cc9 ;命令
;mov code,#0bh
;mov o_x,#13h
;mov o_y,#56h
;lcall wri_cc9
;mov code,#0ch
;mov o_x,#15h
;mov o_y,#56h
;lcall wri_cc9 ;检查
LCALL LCD_MINGL
ret
LCD_MINGL: mov code,#09h
mov o_x,#11h
mov o_y,#69h
lcall wri_cc9
mov code,#0Ah
mov o_x,#13h
mov o_y,#69h
lcall wri_cc9 ;命令
LCALL CLR_LCDDAT
mov o_x,#0D5h
mov o_y,#01h
LCALL WRI_DATA
RET
;
;*******
clear12: mov dat1, #00h
mov dat2, #00h
mov com, #24h
lcall pr1
mov r3, #00h
mov r4, #78h ;20H
mov com, #0b0h
lcall pr12
clear11: lcall st3
mov a, #00h ;#0ffh
lcall pr13
djnz r3, clear11
djnz r4, clear11
mov com, #0b2h
lcall pr12
ret
DELAY: mov r2 ,#25h
delay3: MOV 40H,#00H ;DELAY TIME 1
DELAY1: MOV 41H,#00H
DELAY2: DJNZ 41H,DELAY2
DJNZ 40H,DELAY1
DELAYA1:
DJNZ R2,DELAY1
RET
d1s: ;mov r2,#01h
d1s3: mov r3,#00h
d1s2: mov r4,#0C2h
djnz r4,$
JNB KEY_ZERO,ERK
djnz r3,d1s2
djnz r2,d1s3
ERK: ret
;------------------------------------------------------------------
;write struction and write data
;------------------------------------------------------------------
pr1: ORL P1,#0FFH
ANL P1,#0BFH
lcall st01 ;dual byte
mov a,dat1
lcall pr13
pr11: ORL P1,#0FFH
ANL P1,#0BFH
lcall st01 ;dual byte
mov a,dat2
lcall pr13
pr12: ORL P1,#0FFH
ANL P1,#0BFH
lcall st01 ;dual byte
mov a,com
ljmp pr14
pr13: ORL P1,#0FFH
ANL P1,#0BFH
mov dptr,#d_add
pr14: ORL P1,#0FFH
ANL P1,#0BFH
movx @dptr,a
ORL P1,#0FFH
ret
;read state word
r_st: mov dptr,#c_add
movx a,@dptr
ret
;award busy s0,s1
st01: lcall r_st
jnb acc.0,st01
jnb acc.1,st01
ret
;award busy s3,
st3: ORL P1,#0FFH
ANL P1,#0BFH
lcall r_st
jnb acc.3,st3
ORL P1,#0FFH
ret
; 入口: O_X,O_Y = LCD上要显示数据的坐标值,
; LCD 上的地址从 00H(字节)开始排列,O_Y=高字节,O_X=低字节
; LCD_BUFFER--BUFFER+5 存要显示的"数据"(LCD显示码)
WRI_DATA: mov dat1,o_x
mov dat2,o_y
mov com,#24h
lcall pr1
MOV A,#1AH ; 显示":"
mov dat2,a
mov com,#0c0h
lcall pr11
mov dat2,LCD_BUFFER;
lcall pr11
mov dat2,LCD_BUFFER+1
lcall pr11
mov dat2,LCD_BUFFER+2
lcall pr11
mov dat2,LCD_BUFFER+3
lcall pr11
mov dat2,LCD_BUFFER+4
lcall pr11
mov dat2,LCD_BUFFER+5
lcall pr11
ret
;
CLR_LCDDAT: MOV A,#00H
MOV R4,#06H
MOV R0,#LCD_BUFFER
CLR_LCDD: MOV @R0,A
INC R0
DJNZ R4,CLR_LCDD
RET
;*******
lcd_ini: ;orl p1,#0ffh ;LCD 初始化
;anl p1, #0bfh
clr res
nop
nop
setb res
int: mov dat1, #00h ;set text disp area first address
mov dat2, #00h
mov com, #40h
lcall pr1
mov dat1, #20h
mov dat2, #00h
mov com, #41h
lcall pr1
mov dat1, #00h
mov dat2, #08h ;#08h
mov com, #42h
lcall pr1
mov dat1, #20h
mov dat2, #00h
mov com, #43h
lcall pr1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -