2021-06-23

简介: 2021-06-23

;=========================================================

; 文件名:

; 功能描述: 全自动滚筒洗衣机

;=========================================================SSTACK SEGMENT STACK

DW 256 DUP(?)

SSTACK ENDS

DATA SEGMENT


led db 6FH,7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH

ioporta equ 600h

ioportb equ 602h

ioportc equ 604h

TABDT DB 01H,03H,02H,06H,04H,0CH,08H,09H

DATA ENDS


CODE SEGMENT

ASSUME CS:CODE, DS:DATASTART:

;Begin=======

  MOV AX, DATA
    MOV DS, AX
    mov dx,606h
  mov al,88H;方式0,A输出,B输出,C低四位输出
  out dx,al 


BEGIN:

CALL TUBE_STOP

MOV DX, 0604H

IN AL, DX ;读C口输入

MOV BL, AL


    MOV CL, 4
    SHR BL, CL  ;获取低四位
    CMP BL, 0
    JZ  BEGIN
    CMP BL, 1 ;若开关1打开,甩干模式
    JZ  FASTEST
    CMP BL, 02H
  JZ  FAST
  CMP BL, 04H
  JZ  SLOW  

FASTEST:

CMP DI,10 ;甩干模式出来停止

JZ BEGIN

call meantime

;MOV DI, 1000H ;约定使用DI来传递参数(延时长短)

;CALL SPEED ;甩干模式,急速快

FAST:

MOV DI, 4000H ;约定使用DI来传递参数(延时长短)

CALL SPEED ;开关1被打开,速度1标准

SLOW:

MOV DI, 0FFFFH ;约定使用DI来传递参数(延时长短)

CALL SPEED ;开关2被打开,速度2轻柔


;读取开关子程序

READ PROC

PUSH DX

PUSH AX

PUSH BX

PUSH CX

  MOV DX, 0604H
    IN  AL, DX  ;读C口输入
    MOV BL, AL
    MOV CL, 4
    SHR BL, CL  ;获取低四位
    CMP BL, 0
    JZ  BEGIN

CMP BL, 1 ;若开关1打开,甩干模式

; JZ Q1

; CMP BL, 02H ;若开关2打开,标准模式

; JZ FAST

; CMP BL, 04H ;若开关3打开,轻柔模式

; JZ SLOW

POP CX

POP BX

POP AX

POP DX

RET


READ ENDP

;动态数码管停止;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TUBE_STOP PROC
PUSH AX
PUSH BX
PUSH DX
mov dx,606h
mov al,88H;方式0,A输出,B输出,C低四位输出
out dx,al ;初始化8255
mov bx,offset led
mov al,11111001b ;选择全部
mov dx,ioportc
out dx,al ;出C口 选择个位
mov al,[bx+9] ;
mov dx,ioporta
out dx,al ;从a口输出
POP DX
POP BX
POP AX
RET
TUBE_STOP ENDP

;同步

meantime proc

mov dx,606h
mov al,10001000b;方式0,A输出,B输出,C输出
out dx,al   ;初始化8255
mov bx,offset led
mov si,0;个位
mov di,8;十位
mov cx,6


digit1: ;动态刷新一次数码管数字

CALL GEW ;从a口输出
call delay;1000
CALL TEN
CALL shuaigan
call read ;读开关
loop digit1
digit3:
mov cx,6
inc si
cmp si,9
jbe digit1
CMP  DI,9 ;只为判断最后一次00情况
Ja  DIGIT4

inc di  ;满十进一
mov si,0;清零个位

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

digit2: ;个位刷成0,十位刷成 原来-1

CALL GEW
call delay;1000
CALL TEN
CALL shuaigan
call read ;读开关
loop digit2

mov  cx,6
CMP  DI,9
JBe  DIGIT3

DIGIT4: ;输出为0结束程序

call tube_stop

jmp begin


meantime endp

;个位*

GEW PROC

PUSH AX

PUSH BX

PUSH DX

PUSH SI

mov bx,offset led

mov al,11111011b ;选择个位

mov dx,ioportC

out dx,al ;出C口 选择个位

    mov al,[bx+SI]  ;
    NOT AL
    mov dx,ioporta
    out dx,al ;从a口输出
  POP SI
  POP DX
  POP BX
  POP AX
  RET

GEW ENDP

;十位*

TEN PROC

PUSH AX

PUSH BX

PUSH DX

PUSH DI

    mov bx,offset led 
  
    mov al,11111101B  ;选择十位
    mov dx,ioportC
    out dx,al   ;出c口 选择十位
    
    mov al,[bx+di];
    NOT AL
    mov dx,ioporta
    out dx,al ;从a口输出
    
  POP DI
  POP DX
  POP BX
  POP AX
  RET

TEN ENDP

;延时子程序***

delay proc

push cx

mov cx,1000h

del:

;nop

nop

loop del

pop cx

ret

delay endp

;甩干子程序**

shuaigan proc

push ax

push bx

push cx

push dx

MOV BX, OFFSET TABDT

MOV CX, 0008H

Q2:

  call    gew
    
  MOV AL,[BX]   
  MOV   DX, 0602H   ; 写B口       
  OUT DX, AL
  INC BX
  call  delay   ; 控制步进电机的+转速1000 
  
  CALL    TEN
  call  delay
  LOOP  Q2
  
  pop dx
  pop cx
  pop bx
  pop ax
  ret

shuaigan endp


;延时子程序*

DALLY PROC

; PUSH DI

PUSH CX

MOV CX, DI

A3: PUSH AX

POP AX

LOOP A3

POP CX

; POP DI

RET


DALLY ENDP

;电机驱动子程序*******

SPEED PROC


MAIN: MOV AL, 88H ; 控制B口工作于方式0,输出

MOV DX, 0606H

OUT DX, AL

MOV  SI, 0      ;SI用于计算反转时间

;正转**

A1:

MOV  BX, OFFSET TABDT
    MOV  CX, 0008H

A2: MOV AL,[BX]

MOV DX, 0602H ; 写B口

OUT DX, AL

  CALL DALLY    ; 控制步进电机的+转速  
               
  INC  BX                                      
  LOOP A2
    
  CALL READ
    
  INC SI        ;SI用于计算反转时间
  CMP SI, 8H        ;8次后反转
  JB  A1
    
  PUSH DI
  MOV  DI, 0FFFFH
  CALL DALLY      ;正反转切换,需停止休息
  POP  DI

  PUSH DI
  MOV  DI, 0FFFFH
  CALL DALLY      ;正反转切换,需停止休息
  POP DI
  
  PUSH DI
  MOV  DI, 0FFFFH
  CALL DALLY      ;正反转切换,需停止休息
  POP  DI
  
  JMP  A5

A8: JMP A1

; CALL DALLY ;正反转切换,需停止休息(模仿现实中洗衣机)

; CALL DALLY ;正反转切换,需停止休息

;反转

A5:

MOV BX, OFFSET TABDT+7

MOV CX, 0008H

A4:

MOV AL,[BX]

MOV DX, 0602H ; 写B口

OUT DX, AL

CALL DALLY ; 控制步进电机的+转速

DEC BX

LOOP A4

  CALL READ
    
  DEC SI        ;SI用于计算反转时间
  CMP SI, 0     ;0后正转
  JA  A5
          
  PUSH DI
  MOV  DI,0FFFFH
  CALL DALLY      ;正反转切换,需停止休息
  POP  DI
  
  PUSH DI
  MOV  DI,0FFFFH
  CALL DALLY      ;正反转切换,需停止休息
  POP  DI
  
  PUSH DI
  MOV  DI,0FFFFH
  CALL DALLY      ;正反转切换,需停止休息
  POP  DI
  
  ; CALL DALLY      ;正反转切换,需停止休息
  ; CALL DALLY      ;正反转切换,需停止休息
  JZ  A8
  
  RET

SPEED ENDP

CODE ENDS

END START

相关文章
|
消息中间件 存储 大数据
一文读懂kafka的幂等生产者
一文读懂kafka的幂等生产者
|
6月前
|
设计模式 算法 搜索推荐
java介绍几种常见的设计模式及其应用场景。
java介绍几种常见的设计模式及其应用场景。
263 1
|
6月前
|
存储 安全 Java
Java并发基础:CopyOnWriteArraySet全面解析
CopyOnWriteArraySet类的优点在于能够实现无锁读取,确保高并发下的读取性能,同时,写操作通过复制底层数据来保证数据一致性,避免了多线程间的数据冲突,因此,它非常适合读多写少且对数据一致性要求较高的场景。
139 0
Java并发基础:CopyOnWriteArraySet全面解析
|
6月前
|
安全 网络协议 Shell
telnet是什么
【5月更文挑战第14天】telnet是什么
212 2
|
6月前
PandasTA 源码解析(二十二)(3)
PandasTA 源码解析(二十二)
62 0
都8102年了,还用fastq-dump,快换fasterq-dump吧
之前写过一篇文章Fastq-dump: 一个神奇的软件, 详细介绍了fastq-dump的用法。 虽然fastq-dump参数很多,而且一直被吐槽参数说明写的太差,但是如果真的要用起来其实也就是一行代码 fastq-dump --gzip --split-3 --defline-qual '+' --defline-seq '@$ac-$si/$ri' SRRXXXXX| SRRXXXX.sra # 加上--gzip后需要时间进行文件压缩 当然除了参数问题,还有一个让人诟病的地方就是他只能单个线程,所以速度特别的慢。
4958 0
都8102年了,还用fastq-dump,快换fasterq-dump吧
|
算法 程序员 Linux
使用国密版cURL访问国密https网站
国密版cURL使用指南
1444 0
使用国密版cURL访问国密https网站
|
关系型数据库 数据处理 数据库
对学生学生信息管理系统逻辑分析
对学生学生信息管理系统逻辑分析
157 0
|
存储 数据安全/隐私保护 索引
Mysql8.0习题系列(六):存储过程(一篇学习存储过程做题,超详细)
Mysql8.0习题系列(六):存储过程(一篇学习存储过程做题,超详细)
float和double
float和double
120 0