📄 acc1-1.asm
字号:
PUBLIC TK ;声明采样周期TK为全局变量
AD_ADDR EQU 0600H
DA1_ADDR EQU 0640H
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
TK DB 0AH ;采样周期
UK0 DW 0000H ;上次采样值
UK1 DW 0000H ;当前采样值
KK DW 0000H ;两点之间的斜率
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
PUSH DS
MOV AX,0000H
MOV DS,AX
MOV AX,OFFSET IRQ7;填写8259的7号中断矢量入口地址的偏移量
MOV SI,003CH ;填写8259中断7的中段矢量
MOV [SI],AX ;填偏移量矢量
MOV AX,CS ;填写8259中断矢量入口地址的段地址
MOV SI,003EH ;填写7号中断段地址矢量
MOV [SI],AX
POP DS
CLI ;关系统总中断
CALL SYSINTI ;调用系统初始化子程序
MOV DX,0F043H
MOV AL,076H ;初始化1#定时器定时10ms
OUT DX,AL
MOV DX,0F041H ;写1#定时器定时常数的低字节
MOV AL,10H
OUT DX,AL
MOV DX,0F041H ;写1#定时器定时常数的高字节,同时启动AD转换
MOV AL,27H
OUT DX,AL
MOV DX,DA1_ADDR ;选择数模转换单元的OUT1端作为模拟量的输出
MOV AL,80H ;D/A输出零
OUT DX,AL
MOV KK,0000H
MOV BL,01H ;送采样系数
AGAIN: STI ;开总中断
HLT ;暂停等待中断
JMP AGAIN ;继续
IRQ7: PUSH DS
MOV AX,DATA
MOV DS,AX
DEC BL ;IRQ7中断程序
JNZ LL ;采样周期到否
MOV AX,UK1
MOV UK0,AX ;采样值递推
MOV DX,AD_ADDR ;取采样值
IN AL,DX
SUB AL,80H ;当-5V<输入电压<0V时,采样值大于80H,当0V<输入电压<5V时,采样值小于80H
CBW ;将字节扩展为字
MOV UK1,AX ;将以上结果作为当前采样值存放于UK1中
MOV AX,UK0 ;取上次采样值
CALL OUTPUT ;调用输出子程序
MOV BL,TK ;还原采样值
MOV KK,0000H ;将斜率的变量清零
FINISH: MOV AL,20H ;中断结束
OUT 20H,AL
POP DS
IRET ;中断返回
LL: INC KK ;计算差值点
MOV AX,UK1
MOV DX,UK0
SUB AX,DX
IMUL KK
MOV CL,TK
MOV CH,00H
IDIV CX
MOV DX,UK0
ADD AX,DX
CALL OUTPUT
JMP FINISH
OUTPUT: ADD AL,80H ;输出子程序
MOV DX,DA1_ADDR ;当运算结果大于80H,0V<输出电压<+5V;当运算结果小于80H,-5V<输出电压<0
OUT DX,AL ;最后由D/A输出
RET
SYSINTI: MOV AX,8000H ;系统初始化子程序
OUT 23H,AL ;扩展IO使能
XCHG AL,AH
OUT 22H,AL
OUT 22H,AX
MOV DX,0F822H ;初始化管脚配置P2CFG,配置CS0#
MOV AL,70H
OUT DX,AL
MOV DX,0F824H ;初始化管脚配置P3CFG,配置主片IRQ7
MOV AL,0B2H
OUT DX,AL
MOV DX,0F832H ;初始化管脚配置INTCFG
MOV AL,0AH
OUT DX,AL
MOV DX,0F834H ;初始化管脚配置TMRCFG
MOV AL,15H
OUT DX,AL
MOV AL,11H ;初始化主片8259
OUT 20H,AL
MOV AL,08H
OUT 21H,AL
MOV AL,04H
OUT 21H,AL
MOV AL,01H
OUT 21H,AL
MOV AL,6FH ;写主片8259的中断屏蔽字,允许主片的IRQ7(用户程序使用)和IRQ4(系统通讯用)
OUT 21H,AL
MOV AL,11H ;初始化从片8259
OUT 0A0H,AL
MOV AL,30H
OUT 0A1H,AL
MOV AL,02H
OUT 0A1H,AL
MOV AL,01H
OUT 0A1H,AL
MOV AL,0FFH
OUT 0A1H,AL
RET
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -