📄 t0809.asm
字号:
;---------------------------------------------------------
AL EQU 20H
AH EQU 21H
AX EQU 20H
CX EQU 22H
DX EQU 24H
FLAG EQU 30H
DBUF EQU 8000H ;A/D数据缓冲区
A_DPORT EQU 0D800H ;A/D口地址
TIM_CTL EQU 0C806H ;8253 状态/命令口地址
TIMER_1 EQU 0C802H
TIMER_2 EQU 0C804H
MODE13 EQU 01110110B
MODE22 EQU 10110100B
;---------------------------------------------------------
ORG 2008H ;HSI中断向量地址
DW HSI_INT
ORG 2080H
LD SP,#60H
LD DX,#TIM_CTL ;定时器1工作在方式3
LDB AL,#MODE13
STB AL,[DX]
LD DX,#TIMER_1
LDB AL,#80H
STB AL,[DX]
LDB AL,#02H
STB AL,[DX] ;计数初值为0280H,640分频
LD DX,#TIM_CTL ;定时器2工作在方式2
LDB AL,#MODE22
STB AL,[DX]
LD DX,#TIMER_2
LDB AL,#080H
STB AL,[DX]
LDB AL,#00H
STB AL,[DX] ;计数初值为0080H,128分频
DI ;关中断
CLRB INTPEN ;清中断挂号寄存器
ORB INTMAS,#10H ;允许HSI中断
LDB FLAG,#00H
EI ;开中断
ADST:
CMPB FLAG,#0FFH
JNE ADST ;无HSI.0中断则等待
LD DX,#DBUF
LDB CX,#16 ;采集16次
LOOP1:
LDB AL,#06H ;通道IN3
SCALL A_D ;A/D转换
STB AL,[DX]+
DJNZ CX,LOOP1
SJMP $ ;等待,可在此处设断点
;输入: AL: A/D通道名
;输出: AL: A/D值
A_D: PUSH CX
OR AX,#A_DPORT
STB AL,[AX] ;启动A/D
LD CX,#800H
DJNZ CX,$ ;延时>100uS
LDB AL,[AX] ;读A/D值
POP CX
RET
HSI_INT: ;HSI中断子程序
LDB FLAG,#0FFH ;置标志
DI
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -