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

📄 intead.asm

📁 大学微型计算机接口技术实验源代码,直接就可以运行,包含了C++和asm代码,比较前面.
💻 ASM
字号:
;*------------------------------------------------------*/
;*    InteAD.asm(查询方式A/D转换器接口实验)                */
;*    查询方式A/D转换数据采集程序 Source File             */
;*    Copyright (c) 2001 by HUST                        */
;*		Modify	 Date	2005.4.10										*/
;*------------------------------------------------------*/
sseg segment para stack 'stack'
dw 200 dup (?)
sseg ends
dseg segment para public 'data'
	flag dw(?)
	int0a_off dw(?)
	int0a_seg dw(?)	
message db 'If you want to quit A/D convert,please press ''ESC'''
	     db 0dh,0ah,'$'
input_message  db 'input number of A/D channel'
	       db 0dh,0ah,'$'
error_message  db 'input incorrect  A/D channel!',0dh,0ah
	       db 'please input number of A/D channel again:'
	       db '$'
temp      db (?)
dseg ends

cseg segment para public 'code'
  assume ss:sseg,cs:cseg,ds:dseg
a_dir proc far
start: mov   ax,sseg
	     mov   ss,ax
	     mov   ax,dseg
	     mov   ds,ax
	     mov  ah,9                     ;显示提示信息	
	     mov  dx,seg message
	     mov  ds,dx
	     mov  dx,offset message
	     int  21h
	     mov ah,9                      ;提示输入通道号
	     mov dx,seg input_message
	     mov ds,dx
	     mov dx, offset input_message
	     int 21h
input:  mov ah,8                      ;检查输入通道号是否有错
	     int 21h
	     cmp al,'0'
	     jb error
	     cmp al,'7'
	     ja error
	     sub al,30h
	     mov temp,al                    ;若无错,则保存通道号
	     jmp begin

error:  mov ah,9                      ;显示出错信息
	     mov dx,seg error_message
	     mov ds,dx
	     mov dx, offset error_message
	     int 21h
	     jmp input
begin:   mov 	dx,303h                    ;初始化8255状态字,A口输出
	      mov 	al,88h
	      out 	dx,al
			mov 	dx,300h							;送通道号至A口
			mov 	al,temp
			out 	dx,al
			mov 	dx,303h
			mov 	al,3h
			out 	dx,al									;PC1置1进行地址锁存
 	 		mov  	ax,3572h	                   ;获取原中断向量
	 		int  	21h
	 		mov  	int0a_off,bx	           ;保存原中断向量
	 		mov  	bx,es
	 		mov  	int0a_seg,bx
	 		cli                               ;关中断
		 	mov  	ax,2572h	                  ; 设置新中断向量
	 		mov  	dx,seg new_int
	 		push 	ds
	 		mov  	ds,dx
	 		lea  	dx, new_int
	 		int  	21h
	 		pop  	ds
	 		sti                              ;开中断
	 		in   	al,0a1h                     ;打开IRQ10(OCW1)
	 		and  	al,0fbh
	 		out  	0a1h,al
	 		in   	al,021h                       ;打开IRQ2
	 		and  	al,0fbh
	 		out  	021h,al
			mov 	dx,303h
			mov 	al,98h
			out 	dx,al								;重写8255方式字,A口输入,C口低四位输出,C口高四位输入
next0:  mov  dx,303h                    ;使PC0置高发启动信号
	  		mov  al,1h
	  		out  dx,al
	  		mov  cx,0f00h                   ;delay
lop1:  loop lop1
		  mov dx,303h
		  mov al,0h
		  out dx,al
			cmp 	flag,1
	 		jnz	check
read:		mov dx,303h
			mov al,5h
			out  dx,al
			mov dx,300h
			in   al,dx
			push ax 
show:   and al,0f0h                    ;显示高4位
	     shr al,4
	     cmp al,9
	     ja  hex
	     add al,30h
	     jmp next
hex:    add al,37h
next:   mov dl,al
	     mov ah,2
	     int 21H
	     pop ax
	     and al,0fh                       ;显示低4位
	     cmp al,9
	     ja  hex1
	     add al,30h
	     jmp next1
hex1:   add al,37h
next1:  mov dl,al
        mov ah,2
	     int 21h
	     mov  dl,13                 	    ;向屏幕送回车符
	     mov  ah,2
	     int  21h
	     mov  dl,10                	    ;向屏幕送换行符
	     mov  ah,2
	     int  21h

check:	mov ah,0bh                     ;检测是否有ESC键按下
	     int 21h
	     inc al
	     jnz next0                         ;若无键按下,则继续采集 

quit:   mov  	ax,2572h          	       ;恢复原中断向量
	 		mov  	dx,int0a_seg
	 		push 	ds
		 	mov  	ds,dx
	 		mov  	dx,int0a_off
	 		int  	21h	
	 		pop  	ds
	 		in   	al,0a1h                      ;屏蔽IRQ10
	 		or   	al,04h
    		out  	0a1h,al
    		in 	al,21h                          ;屏蔽IRQ2
    		or  	al,04h
    		out 	21h,al
 	 		mov  	ax,4C00h                       ;程序退出
	 		int  	21h       
a_dir  endp
new_int proc far                        ;中断服务程序
	 		cli 												  ;关中断
	  		push	 ax
    		mov 	flag,1
  			mov  	al,062h              	        ;发中断结束命令(OCW2)
   		out 	0a0h,al;
	 		mov 	al,020h
	 		out  	020h,al		                 ;向主片8259发EOI命令
	 		pop	ax
	 		sti                               ;开中断
	 		iret
new_int endp
cseg ends
end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -