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

📄 aexp15-4.asm

📁 微机接口技术的入门必备试验代码 试验平台msdi
💻 ASM
字号:
;***************************************************
;  Aexp15-4.asm  步进电机正/反点动控制程序              *
;  运行步骤:1.每按下一次开关SW1,步进电机顺时针走一步; *
;             每按下一次开关SW2,步进电机反时针走一步*
;          2.按下任意键,退出                       *
;*************************************************
code  segment
      assume cs:code,ds:code
      org 100h
start:jmp  begin
psta      db 45h,41h,51h,50h,54h,14h,15h,05h	                  ;正向加电数据表
pstb      db 05h,15h,14h,54h,50h,51h,41h,45h                      ;反向加电数据表              
status    db(?)                                                   ;状态标志变量
delaytime dw (?)                                                  ;延时变量参数
message   db 'press SW1 to move a step in clockwise!',0ah,0dh     ;系统提示信息
          db 'press SW2 to move a step in 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

      mov  status,00h           ;初始化状态为0

l0:   mov  si,offset psta	;取正向加电数据表地址
      mov  ch,08h		;设置正向数据表循环参数
      add  status,01h
      cmp  status,01h
      je l1
      jmp loop
l1:   mov  di,offset pstb       ;取反向加电数据表地址 
      mov  cl,08h               ;设置反向数据表循环参数             

loop: ;检测任意键
      mov  ah, 0bh		;调用DOS 21H 功能0BH 进行键盘判断
      int  21h
      cmp  al, 00h
      jne  over 		;检测到任意键退出      	

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

      ;判断开关SW2的状态
l3:   test al,02h               ;检测pc1口的状态
      jnz loop                  ;反复检测直至有键按下
l4:   in al,dx
      test al,02h
      jz l4                     ;循环检测直至放开

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

      jmp  l1                   ;进行反向数据表的新的一轮循环
  
      ;送正向加电数据 
l5:   mov  al,[si]              ;取正向数据表的当前加电数据
      mov  dx,300h              ;取8255的端口A的地址
      out  dx,al                ;输出加电数据到端口A
      inc  si                   ;改变加电数据地址   
      dec  ch                   ;修改正向数据表循环参数
      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 + -