⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acc1-1.asm

📁 基于数据采集中的直线插值算法程序
💻 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 + -