📄 data1.asm
字号:
;-------------------------------------------------------
Z8279 EQU 0FF82H ;8279 状态/命令口地址
D8279 EQU 0FF80H ;8279 数据口地址
LEDMOD EQU 00H ;左边输入 八位字符显示
;外部译码键扫描方式,双键互锁
LEDFEQ EQU 2FH ;扫描速率
LEDCLS EQU 0C1H ;清除显示 RAM
LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址
A_DPORT EQU 8100H ;0809 口地址
;-------------------------------------------------------
ORG 0000H
LJMP START
ORG 0003H
LJMP INT_0
ORG 0040H
START:
MOV SP,#60H
LCALL INIT8279 ;初始化8279
SETB IT0
SETB EA
SETB EX0 ;INT0 允许
MAIN:
LCALL INPUT ;采样程序
LCALL AVERAGE ;求取平均值
LCALL DISPLAY ;显示程序
MOV DPTR,#8300H ;在八位LED灯上显示对照数据
MOV A,R3
MOVX @DPTR,A ;数据输出
SJMP MAIN
INPUT:
MOV R0,#00H ;通道数
MOV A,R0
MOV DPTR,#A_DPORT
ORL DPL,A
MOVX @DPTR,A ;启动 A_D
WAIT: SJMP WAIT
MOV R3,B
RET
INT_0:
MOVX A,@DPTR ;读 A_D 数据
MOV B,A
MOV R7,#00H ;置读数标志
RETI
AVERAGE:
PUSH 0 ;保存现场
PUSH 1
PUSH 2 ;保存现场
PUSH 3
PUSH 4
PUSH 5
PUSH 6
PUSH 7
PUSH DPH
PUSH DPL
PUSH ACC
CLR A
MOV R0,#12H ;采样个数
MOV R1,#4100H
MOV R2,A ;0→最大值寄存器R2
MOV R3,#0FFH ;FFH →最小值寄存器R3
MOV R4,A ;存放数据和
MOV R5,A ;存放数据和
MOV R6,#00H ;存放平均值
DAV1:
MOVX A,@R1 ;读A/D→B和A(调采样子程序)
MOV R7,A ;采样值暂存R7
ADD A,R5 ;求和
MOV R5,A ;存入R5
MOV A,R4 ;读取高位数据
ADDC A,0 ;加上进位位
MOV R4,A ;存入R4
CLR C ;求取最大值
MOV A,R2
SUBB A,R7
JNC DAV2 ;输入值<R2跳转
MOV A,R7
MOV R2,A
DAV2:
CLR C ;求取最小值
MOV A,R7
SUBB A,R3
JNC DAV3 ;输入值>R3则跳转
MOV A,R7
MOV R3,A ;输入值→R3
DAV3:
INC R1
DJNZ R0,DAV1 ;N-1=0?
CLR C
MOV A,R5 ;N个采样值的累加和减去最大值和最小值,N=18
SUBB A,R2
MOV R5,A
MOV A,R4
SUBB A,0
MOV R4,A
MOV A,R5
SUBB A,R3
MOV R5,A
MOV A,R4
SUBB A,0
MOV R4,A
MOV A,R5
SWAP A
ANL A,#0FH
ADD A,R4
MOV DPTR,#4120H ;将最终的平均值放入#4120单元
MOVX @DPTR,A
POP ACC
POP DPL
POP DPH
POP 7
POP 6
POP 5
POP 4
POP 3
POP 2
POP 1
POP 0
RET
INIT8279: ;8279初始化子程序
PUSH DPH ;保存现场
PUSH DPL
PUSH ACC
LCALL DELAY ;延时
MOV DPTR ,#Z8279
MOV A,#LEDMOD ;置8279工作方式
MOVX @DPTR,A
MOV A,#LEDFEQ ;置键盘扫描速率
MOVX @DPTR,A
MOV A,#LEDCLS ;清除 LED 显示
MOVX @DPTR,A
LCALL DELAY ;延时
POP ACC ;恢复现场
POP DPL
POP DPH
RET
;显示字符子程序
;输入: R4,位置 R5,值
DISLED:
PUSH DPH ;保存现场
PUSH DPL
PUSH ACC
MOV A,#LEDWR0 ;置显示起始地址
ADD A,R4 ;加位置偏移量
MOV DPTR,#Z8279
MOVX @DPTR,A ;设定显示位置
MOV DPTR,#LEDSEG ;置显示常数表起始位置
MOV A,R5
MOVC A,@A+DPTR ;查表
MOV DPTR,#D8279
MOVX @DPTR,A ;显示数据
POP ACC ;恢复现场
POP DPL
POP DPH
RET
DELAY: ;延时子程序
PUSH 0 ;保存现场
PUSH 1
MOV 0,#0H
DELAY1:
MOV 1,#0H
DJNZ 1,$
DJNZ 0,DELAY1
POP 1 ;恢复现场
POP 0
RET
DISPLAY:
LCALL DELAY
MOV R5,#0
; MOV DPTR,#4103H
; MOVX A,@DPTR
MOV A,R3
MOV B,#32H
DIV AB
ANL A,#0FH
MOV R5,A
MOV R4,#7
LCALL DISLED ;显示百位
MOV A,B
MOV B,#5H
DIV AB
ANL A,#0FH
MOV R5,A
MOV R4,#6
LCALL DISLED ;显示十位
MOV A,B
MOV B,#2H
MUL AB
ANL A,#0FH
MOV R5,A
MOV R4,#5
LCALL DISLED ;显示个位
RET
LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_, ,I,O,P, '
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -