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

📄 aexp15-2.asm

📁 微机接口技术的入门必备试验代码 试验平台msdi
💻 ASM
字号:
;*************************************************************************
;  Aexp15-2.asm 步进电机方向控制程序                                      *
;  运行步骤:1.按下开关SW1,步进电机顺时针旋转;按下开关SW2,步进电机反时针旋转  *
;           2.按下任意键,退出                                             *
;*************************************************************************
code  segment
      assume cs:code,ds:code
      org 100h
start:jmp  begin
pstb      db 05h,15h,14h,54h,50h,51h,41h,45h		                     ;反向加电数据表
psta      db 45h,41h,51h,50h,54h,14h,15h,05h  			               ;正向加电数据表
delaytime dw (?)						                                 ;延时变量参数
message   db 'press SW1 to clockwise,press SW2 to counterclock!',0ah,0dh ;系统提示信息
          db 'if you want to quit,please hit any key!',0ah,0dh,'$'  

begin:mov  ax,cs
      mov  ds,ax	        	;取程序数据段地址

      mov ah,09h                ;显示系统提示信息
      mov dx,seg message
      mov ds,dx
      mov dx,offset message
      int 21h

      ;初始化8255      
      mov  dx,303h		    ;取8255的控制端口的地址
      mov  al,81h	     	;初始化8255的A口,B口和C口高四位为输出模式
      out  dx,al      		;C口低四位为输入模式

      ;打开74ls373  
      mov  al,08h
      out  dx,al      		;置pc4=0,打开数据缓冲器74LS373

l1:   mov  si,offset psta	 ;取正向加电数据表地址     
      jmp l3   
l2:   mov  si,offset pstb 	;取反向加电数据表地址 
l3:   push si      
      jmp l4
l0:   pop si
      push si
l4:   mov cx,08h	      	;设置数据表循环参数 
       
loop: ;检测任意键
      mov  ah, 0bh		
      int  21h		    	;调用DOS 21H 功能0BH 进行键盘判断
      cmp  al, 00h
      jne  over       		;检测到任意键退出

      ;判断开关SW1的状态
      mov dx,302h	    ;取8255的端口C的地址
      in  al,dx		  ;端口C的值
			         	;当按下开关SW1时,PC0口为低电平;当按下开关SW2时,PC1口为低电平
      test al,01h		;检测PC0口状态
      jnz  l6			
l5:   in al,dx
      test al,01h
      jz l5                     ;循环检测直至放开
      jmp l1       
l6:   test al,02h               ;检测PC1口状态
      jnz  l8
l7:   in al,dx
      test al,02h
      jz l7                     ;循环检测直至放开
      jmp l2  

      ;延时
l8:   mov ah,03h	      	;设置循环延时参数
      mov delaytime,0ffffh	;设置延时变量参数值,采用的是软件
			              	;延时方式,此值根据主机的频率而设定
l9:   mov bx,delaytime		;进行软件延时,可根据主机频率
l10:  dec bx		      	;调整延时变量参数值和循环延时参数
      jnz l10
      dec ah
      jnz l9			

      ;送加电数据  
      mov  al,[si]  		;取当前加电数据
      mov  dx,300h	  	;取8255的端口A的地址
      out  dx,al	    	;输出加电数据到端口A    
      inc  si		   	;改变加电数据地址
      dec  cx		   	;修改数据表循环参数
      jnz  loop			 ;判断数据表循环是否结束

      jmp l0         	   ;进行新的一轮循环

over: ;关闭74ls373
      mov dx,303h	  	;取8255的控制端口的地址
      mov al,81h
      out dx,al	
      mov al,09h                
      out dx,al            ;置pc4=1,关闭数据缓冲器74LS373

      ;保护8255
      ;mov al,9Bh	   	;置8255的A口,B口和C口为输入模式
      ;out dx,al			;对8255进行保护

      ;返回DOS 
      mov ah, 4ch	     	;DOS功能调用
      int 21h         		;返回DOS 
code  ends
      end start                 

⌨️ 快捷键说明

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