📄 ad - copy - copy.asm
字号:
;改用一个通道判别方式,并加入显示程序
;能重复按键,已选择不同通道
;将不同通道的数据存放于内存不同单元
ORG 0000H
LJMP START
ORG 0020H
LJMP SERVE
ORG 0030H
START: MOV SCON,#00H ;初始化串行口方式0
MOV DPTR,#TABLE ;查表
LCALL QINGLING
CLR EA
MOV P1,#0FFH ;读取键值
MOV A,P1
CPL A
JZ START
LCALL D10MS
MOV A,P1
CPL A
ANL A,#0FFH
JZ START
MOV B,A
KEY: MOV A,P1
CPL A
ANL A,#0FFH
JNZ KEY ;判断是那个键按下,并执行相应操作
LCALL D10MS
MOV A,B
MOV R2,#00H ;选择计数器通道第R2个
RR0: RR A
INC R2
CPL ACC.7
JNZ RR0
MOV DPTR,#TABLE ;查表
MOV A,R2
LCALL DISPLAY ;显示通道数
MOV DPTR,#7FF7H ;给DPTR置的初值
MOV A,DPL
ADD A,R2
MOV DPL,A
MOVX @DPTR,A ;启动A/D转换
MOV R0,#00H ;数据存放地址
MOV R1,#0FFH ;256个数据
SJMP $
;中断服务程序
SERVE: MOVX A,@DPTR ;读数
MOVX @R0,A ;存数
INC R0 ;更新暂存单元
DJNZ R1,DONE ;N次采样是否结束
RETI
DONE: MOVX @DPTR,A ;转换完毕
RETI ;改为LJMP START,是否能跳到主循环
;子程序
D10MS: MOV R7,#10H ;10MS延时程序
DS11: MOV R6,#0FFH
DS22: DJNZ R6,DS22
DJNZ R7,DS11
RET
QINGLING:MOV R0,#04H ;清零
LOOP: MOV A,#20
LCALL DISPLAY
DJNZ R0,LOOP
LCALL D1S
RET
;显示
DISPLAY:MOVC A,@A+DPTR ;查表
MOV SBUF,A ;输出
DELAY: JNB TI,DELAY ;八个字节是否发送完
CLR TI ;清标志位
RET
D1S: MOV R7,#010 ;1S延时程序
DS1: MOV R6,#200
DS2: MOV R5,#250
DS3: DJNZ R5,DS3
DJNZ R6,DS2
DJNZ R7,DS1
RET
TABLE: DB 0BBH,09H,0EAH,6BH,59H,73H,0F3H,0BH,0FBH,7BH
DB 0F1H,0B2H,0E9H,0F2H,0D2H
DB 49h,40h,0d9h,51h,60H,00H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -