汇编程序,“步进电机” 求高手指出不足,老师说PA4-PA7没有用到

[复制链接]
查看11 | 回复3 | 2011-6-28 23:07:35 | 显示全部楼层 |阅读模式
1.数据段代码
DATA SEGMENT
ioport EQU 0c800h-0280h ;0c800h是I/O端口的基本地址
P55A EQU ioport+288H                ;定义P55A为8255 A端口的地址(A口做输出)
P55C EQU ioport+28AH                ;定义P55C为8255 C端口的地址(C口做输入)
P55CTL EQU ioport+28BH        ;定义P55CTL为8255 控制字端口的地址
BUF DB 0
;定义一个字节数据(用来存入开关的状态)
DATA ENDS
2.代码段代码
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV
AX,CODE
                MOV
CS,AX
                MOV
AX,DATA
                MOV
DS,AX;程序的初始化(给CS,DS 赋值)
                MOV
DX,OFFSET MES
                MOV
AH,09
                INT
21H
;显示各个开关的信息
                MOV
DX,P55CTL
        MOV
AL,8BH ;(8BH=10001011B,为控制字)
        OUT
DX,AL;A口做输出,C口做输入

送33H到A口输出 给后面电机的正反转提供初只调用BIOS功能的INT16的1号功能,判断是否按下 如果有则返回DOS如果没有判断开关的状态。
MOV
BUF,33H
OUT1:MOV
AL,BUF
                MOV
DX,P55A
                OUT
DX,AL;间接寻址获得AL的值
                push
dx
                MOV
AH,06h
                mov
dl,0ffh
                INT
21H
;检查是否有键按下

                pop
dx
                JE
IN1
;有键按下就停止,没有则转向IN1去执行
                MOV
AH,4CH
                INT
21H
IN1: MOV
DX,P55C
                IN
AL,DX ;获得各个开关的状态

                TEST
AL,01H
                JNZ
K0
                TEST
AL,02H
                JNZ
K1
                TEST
AL,04H
                JNZ
K2
                TEST
AL,08H
                JNZ
K3
                TEST
AL,10H
                JNZ
K4
                TEST
AL,20H
                JNZ
K5
                TEST
AL,40H
                JNZ
K6
;检查各个开关的状态,分别转向相应的程序
STOP:MOV
DX,P55A
                MOV
AL,0FFH
                JMP
OUT1 ;置停止信息并转向OUT1
判断完状态则跳转到执行的程序献给BL复制实现延迟时间 控制转速然后判断K7 的状态是1 还是0。
K0:
MOV
BL,10H
SAM: TEST
AL,80H;继续判断K7是否为0
                JZ
ZX0
;为0就转向ZX0(循环右移程序)
                JMP
NX0
;为1就转向NX0(循环左移程序)
K1:
MOV
BL,2FH ;BL为延时子程序的内层循环计数器
                JMP
SAM
K2:
MOV
BL,4FH
                JMP
SAM
K3:
MOV
BL,6FH
                JMP
SAM
K4:
MOV
BL,8FH
                JMP
SAM
K5:
MOV
BL,0AFH
                JMP
SAM
K6:
MOV
BL,0CFH
                JMP
SAM
ZX0: CALL
DELAY ;调用延时子程序
                MOV
AL,BUF       
                ROR
AL,1
                MOV
BUF,AL
                JMP
OUT1 ;循环右移
NX0: CALL
DELAY;调用延时子程序
                MOV
AL,BUF
                ROL
AL,1
                MOV
BUF,AL
                JMP
OUT1 ;循环左移
延时程序是由两曾循环程序构成的 BL 是外曾循环的次数 CX是内层循环的次数严实时间长则脉冲频率小 转速慢
DELAY PROC NEAR;定义延时子程序
DELAY1:
MOV
CX,0FFFFH
DELAY2:
LOOP
DELAY2
                DEC
BL
                JNZ
DELAY1
                RET
DELAY ENDP
CODE ENDS
END START

回复

使用道具 举报

千问 | 2011-6-28 23:07:35 | 显示全部楼层
你好,把你的电路图拿出来,给我看一看。另外我觉得可以用定时中断,来实现延迟控制步进机的转速,以便让CPU干更多的活。...
回复

使用道具 举报

千问 | 2011-6-28 23:07:35 | 显示全部楼层
五一劳动奖章...
回复

使用道具 举报

千问 | 2011-6-28 23:07:35 | 显示全部楼层
我是来打酱油的...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行