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

📄 zhiliu.asm

📁 直流电机调速8255
💻 ASM
字号:
.MODEL SMALL
INT0     EQU       220H
INT1     EQU       221H
INT10    EQU       228H
INT11    EQU       229H
C8255    EQU       21BH
PA8255   EQU       218H
PB8255   EQU       219H
PC8255   EQU       21AH
C8253    EQU       203H
T08253   EQU       200H
T18253   EQU       201H
T28253   EQU       202H

.STACK 200H

.DATA
 TIMES DW 000FH,02FFH,04FFH,08FFH,0FFFH


.CODE
START:
    MOV AX,@DATA
    MOV DS,AX
S8255:
         MOV DX,C8255                           
         MOV AL,90H
         OUT DX,AL
         MOV DX,PB8255
         MOV AL,01H  
 
         OUT DX,AL
S8259:
         CLI          ;关中断 
         PUSH DS   ;以下设置中断向量
         MOV AX,0000H ;SET IRQ0
         MOV DS,AX
         MOV AX,OFFSET IRQ0
         ADD AX,0000H
         MOV SI,20H
         MOV [SI],AX
         ;MOV AX,8100H
         MOV AX,CS
         MOV SI,22H
         MOV [SI],AX
         POP DS
         ;以下设置8259工作方式
         MOV AL,13H  ;ICW1
         MOV DX,INT0
         OUT DX,AL
         MOV AL,8    ;ICW2
         MOV DX,INT1
         OUT DX,AL
         mov cx,0fffh
	 loop $
         MOV AL,9    ;ICW4
         MOV DX,INT1
         OUT DX,AL
         mov cx,0fffh
	 loop $
         MOV DX,INT1
         MOV AL,0FEH ;OCW1
         OUT DX,AL
         mov cx,0fffh
	 loop $
         MOV DX,INT0
         MOV AL,20H  ;OCW2
         OUT DX,AL
         mov cx,0fffh
	 loop $
;以下设置8253的工作方式
;使用T1,工作于方式1
S8253: 
         MOV DX,C8253
         MOV AL,71H
         OUT DX,AL
         MOV DX,T18253
         MOV BX,0
         MOV AX,TIMES[BX]
 ;赋定时初值
         OUT DX,AL
         MOV AL,AH
         OUT DX,AL
         STI       ;开中断
         MOV CL,0  
;CL用于作PB0输出高还是低电平的标志
;CL=0,PB0输出低,CL=1,PB0输出高
WAITT1:  JMP WAITT1;等待T1中断

IRQ0:    ;中断程序
         TEST CL,0  
;首先判断CL状态,根据其状态决定输出是高还是低
         JNZ SETPB0
CLRPB0:  ;CL=0,PB0输出低
         MOV DX,PB8255
         MOV AL,0
         OUT DX,AL
         INC CL
         JMP LOWTIME
SETPB0:  ;CL=1,PB0输出高
         MOV DX,PB8255
         MOV AL,01H
         OUT DX,AL
         DEC CL
;以下是通过读入A口的数据来决定定时值
;从而达到直流电机的调速目的
;只有5中数据有效:00,01,02,04,08
         MOV DX,PA8255
         IN AL,DX
         AND AL,0FH
CMP00:
         CMP AL,00H
         JNZ CMP01
         MOV BX,0
         JMP NEXT
CMP01:
         CMP AL,01H
         JNZ CMP02
         MOV BX,0001H
         JMP NEXT
CMP02:
         CMP AL,02H
         JNZ CMP04
         MOV BX,0002H
         JMP NEXT
CMP04:
         CMP AL,04H
         JNZ CMP08
         MOV BX,0003H
         JMP NEXT
CMP08:
         CMP AL,08H
         JNZ OTHERS
         MOV BX,0004H
         JMP NEXT
OTHERS:  MOV BX,0
         JMP NEXT
LOWTIME: MOV BX,0
 ;低电平持续时间的定时值
NEXT:    ;把所要求的定时值赋给T1
         ;MOV DX,C8253
         ;MOV AL,71H
         ;OUT DX,AL
         MOV AX,TIMES[BX]
         MOV DX,T18253
         OUT DX,AL
         MOV AL,AH
         OUT DX,AL
EOI:     ;发EOI命令
         MOV DX,INT0
         MOV AL,20H
         OUT DX,AL
         STI  ;启动中断
         IRET ;中断返回
    
MOV AX,4C00H ;返回操作系统
    INT 21H
END START    ;程序结束

⌨️ 快捷键说明

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