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

📄 bjdj1.asm

📁 步进电机控制电路 有4种速度方式,2种方向选择.
💻 ASM
字号:
;************************* 
;本程序为步进电机测速程序 
;前部为步进电机转速控制
;后部为速度测量 
;************************* data 	segment 
ioport 	equ 0ec00h-0280h 
io8255k equ ioport+28bh ;8255控制口 
io8255a equ ioport+288h ;8255 A口 
io8255c equ ioport+28ah ;8255 C 
io8253k equ ioport+283h ;8253控制 
io82532 equ ioport+282h ;8253计数器2 
io82531 equ ioport+281h ;8253计数器1 
io82530 equ ioport+280h ;8253计数器0 
iot8253k equ ioport+293h ;通用插座8253控制 
iot82530 equ ioport+290h ;通用插座8253计数器0 
mess 	db 'Strike any key,return to DOS!',0AH,0DH,'$' 
cou 	db 0 
cou1 	db 0 
count 	db 0 
count1 	db 0 
count2 	db 0 
count3 	db 0 
count4 	db 0 
buf 	dw 0 
data 	ends 

code 	segment 
assume 	cs:code,ds:data 
start: 	mov 	ax,data 
	mov 	ds,ax 
	mov 	dx,offset mess 
	mov 	ah,09h 
	int 	21h ;显示提示信息 
int82531: mov 	dx,io8253k 
	mov 	al,36h ;计数器0,方式3,先读写低8位,再读写高8位 
	out 	dx,al ;输入时钟,1MHZ
	mov 	dx,io82530 
	mov 	ax,50000 ;初值50000,输出时钟周期50ms 
	out 	dx,al 
	mov al,ah 
	out dx,al 
	mov dx,io8253k 
	mov al,96h 
	out dx,al ;计数器2,方式3,只读写低8位 
	mov dx,io82532 
	mov al,200 
	out dx,al ;初值200,10秒检测一次,检测5秒 
int8255: mov dx,io8255k ;8255,A通道输入,C低位输出,高位输入 
	mov al,98h 
	out dx,al 
	mov al,00 
	out dx,al ;C0(GATE1)低电平,停止计数 
readc: 	mov dx,io8255c 
	in al,dx ;读C口 
	and al,0f0h 
	test al,10h ;高速 
	jnz k4 
	test al,20h 
	jnz k5 
	test al,40h 
	jnz k6 
	test al,80h ;低速 
	jnz k7 
	jmp readc 
k4: 	mov buf,4000 
	jmp int8253 
k5: 	mov buf,5000 
	jmp int8253 
k6: 	mov buf,6000 
	jmp int8253 
k7: 	mov buf,8000 
int8253: mov dx,iot8253k ;向扩展8253写控制字 
	mov al,36h ;使0通道为工作方式3 
	out dx,al
	mov ax,buf ;写入循环计数初值buf 
	mov dx,iot82530 
	out dx,al ;先写入低字节 
	mov al,ah out dx,al ;后写入高字节 
	mov dx,io8255k 
	mov al,03h 
	out dx,al ;开始输出移位脉冲 
	mov dx,io8255k 
	mov al,04h 
	out dx,al ;预置195 
	mov cx,0a000h 
loop2: 	nop 
	loop loop2 ;延时,保证预置成功 
	mov dx,io8255k 
	mov al,05h 
	out dx,al ;启动电机 
ll: 	mov ah,01h ;有无键入 
	int 16h 
	jnz quit1 ;有键,返回 
	jmp a0 
quit1: 	jmp quit 
a0: 	mov dx,io8253k 
	mov al,70h 
	out dx,al ;计数器1,方式0,先读写低8位,再读写高8位。 
	mov dx,io82531 ;输入时钟为光电开关输出。 
	mov ax,0ffffh 
	out dx,al 
	mov al,ah 
	out dx,al 
	mov dx,io8255a 
a1: 	in al,dx 
	and al,01h 
	cmp al,00h 
	jnz a1 ;8255 PA0是否为0 
a2: 	in al,dx
	and al,01h 
	cmp al,00h 
	jz a2 ;8255 PA0是否为1 
	mov dx,io8255k 
	mov al,01h 
	out dx,al ;开始计数 
	mov dx,io8255a 
a3: 	in al,dx 
	and al,01h 
	cmp al,00h 
	jnz a3 ;8255 PA0是否为1 
	mov dx,io8255k 
	mov al,00h 
	out dx,al ;停止计数 
	mov dx,io82531 
	in al,dx 
	mov bl,al 
	in al,dx 
	mov bh,al ;计数值送bx 
	mov ax,0ffffh 
	sub ax,bx ;计算脉冲个数 
	call disp ;显示 
	mov dl,0dh 
	mov ah,02 
	int 21h 
	mov dl,0ah 
	mov ah,02 
	int 21h 
	jmp int8255 ;无键,测量 
;------------------------------------------------------------ 
disp 	PROC NEAR ;BCD转换并显示子程序 
	mov dx,0000h 
	mov cx,1000 
	div cx 
	mov count1,al 
	mov ax,dx
	mov cl,100 
	div cl 
	mov count2,al 
	mov al,ah 
	mov ah,00h 
	mov cl,10 
	div cl 
	mov count3,al 
	mov count4,ah 
	mov al,count1 
	call disp1 
	mov al,count2 
	call disp1 
	mov al,count3 
	call disp1 
	mov al,count4 
	call disp1 
	ret DISP 
	ENDP 
;-------------------------------------------------------------------- 
disp1 	PROC NEAR ;显示一个字符 
	and al,0fh 
	add al,30h 
	mov dl,al 
	mov ah,02 
	int 21h 
	ret disp1 
	endp
;-------------------------------------------------------------
quit: 	mov dx,io8255k 
	mov al,02h 
	out dx,al 
	mov ah,4ch ;返回DOS 
	int 21h 
code 	ends 
     	end start

⌨️ 快捷键说明

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