Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 10

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH


CHỦ ĐỀ: STEPPER MOTOR

Giáo viên: Nguyễn Văn Thủy


Nhóm:
Họ tên sinh viên: Bùi Nguyên Bình-
Phan Thị Thu Hà-B20DCCN215

Hà nội, tháng 5 năm 2022

I Bài toán code giải quyết:


; this is an example of out instruction.

; it writes values to virtual i/o port

; that controls the stepper-motor.

; c:\emu8086\devices\stepper_motor.exe is on port 7

#start=stepper_motor.exe#

name "stepper"

#make_bin#

steps_before_direction_change = 20h ; 32 (decimal)

jmp start

; ========= data ===============

; bin data for clock-wise

; half-step rotation:

datcw db 0000_0110b

db 0000_0100b

db 0000_0011b

db 0000_0010b

; bin data for counter-clock-wise

; half-step rotation:

datccw db 0000_0011b

db 0000_0001b

db 0000_0110b

db 0000_0010b

; bin data for clock-wise


; full-step rotation:

datcw_fs db 0000_0001b

db 0000_0011b

db 0000_0110b

db 0000_0000b

; bin data for counter-clock-wise

; full-step rotation:

datccw_fs db 0000_0100b

db 0000_0110b

db 0000_0011b

db 0000_0000b

start:

mov bx, offset datcw ; start from clock-wise half-step.

mov si, 0

mov cx, 0 ; step counter

next_step:

; motor sets top bit when it's ready to accept new command

wait: in al, 7

test al, 10000000b

jz wait

mov al, [bx][si]

out 7, al

inc si
cmp si, 4

jb next_step

mov si, 0

inc cx

cmp cx, steps_before_direction_change

jb next_step

mov cx, 0

add bx, 4 ; next bin data

cmp bx, offset datccw_fs

jbe next_step

mov bx, offset datcw ; return to clock-wise half-step.

jmp next_step

II Giải thích lưu đồ bài toán:


1: Lưu đồ
Delay START

SET THE COUNT FOR MOTOR


TO ROTATE
Initialize counter

OET THE CODE SEQUENCE FOR


MOTOR TO ROTATE
Decrement counter

SET A COUNTER FOR CODE


SEOUNCE

No SEND THE SEQUNCE TO PORT


Is 7
counter
=0?

CALL DELAY SIIRROIETINR

Yes
INCREAMENT THE POINTER

RET

DECREMENT THE COUNTER AND


Hình 1:Lưu đồ tổng quát REPERTION SEOUENCE

No CHECK
REPETION
COUNTER-

Hình 2: Lưu đồ bài toán Yes


RETURN TO MAIN
2, Giải thích lưu đồ PROORAMO
Bắt đầu:

Bước 1: Thiết lập bộ đếm cho động cơ quay

Đặt bộ đếm đầu vào từ vị trí người dùng

Bước 2: Nạp dữ liệu nhị phân để điều khiển nam châm của động cơ bước

 Dữ liệu nhị phân phục vụ việc bật tắt thứ tự các nam châm điều khiển động
cơ quay nửa bước và cả bước theo chiều kim đồng hồ và ngược chiều kim
đồng hồ.

Bước 3: Thiết lập bộ đếm cho dữ liệu nhị phân đầu vào

 Dữ liệu nhị phân đầu vào sẽ được thực hiện tuần tự để bật tắt nam châm.

Bước 4: Gửi dữ liệu nhị phân sang thiết bị (phần mềm mô phỏng) để thực
hiện( step motor)

 Các nam châm sẽ hoạt động dựa trên dữ liệu nhị phân

Bước 5: Thực hiện trễ để cho động cơ thực hiện

Bước 6: Tăng chỉ số con trỏ.

Bước 7: Kiểm tra bộ đếm và thực hiện thuật toán.

Nếu như thỏa mãn, bộ đếm chưa kết thúc thì quay lại bước 3.

Ngược lại: nếu không thỏa mãn thì trả về chương trình chính và kết thúc.

III: Giải thích chương trình


; this is an example of out instruction.

; it writes values to virtual i/o port

; that controls the stepper-motor.

; c:\emu8086\devices\stepper_motor.exe is on port 7

#start=stepper_motor.exe# ;khoi tao thu muc stepper

name "stepper" ;khoi tao ten


#make_bin# ;dinh loai du lieu dau ra cho tep

steps_before_direction_change = 20h ; 32 (decimal) ;dong co truoc khi thay doi

jmp start ;nhay khong dieu kien

; ========= data =============== ;du lieu nhi phan

; bin data for clock-wise ;du lieu nhi phan quay theo chieu kim dong ho

; half-step rotation: ;quay nua buoc

datcw db 0000_0110b ;nam cham 1 va 2 bat

db 0000_0100b ;nam cham 2 bat

db 0000_0011b ;nam cham 0 a 2 bat

db 0000_0010b ;nam cham 1 bat

; bin data for counter-clock-wise ;du lieu nhi phan quay nguoc chieu kim dong ho

; half-step rotation: ;quay nua buoc

datccw db 0000_0011b ;nam cham 0 va 1 bat

db 0000_0001b ;nam cham 0 bat

db 0000_0110b ;nam cham 1 va 2 bat

db 0000_0010b ;nam cham 1 bat

; bin data for clock-wise ;du lieu nhi phan quay theo chieu kim dong ho

; full-step rotation: ;quay mot buoc

datcw_fs db 0000_0001b ;nam cham 0 bat

db 0000_0011b ;nam cham 1 và 0 bat

db 0000_0110b ;nam cham 1 và 2 bat

db 0000_0000b ;khong co nam cham nao bat

; bin data for counter-clock-wise ;du lieu nhi phan quay nguoc chieu kim dong ho
; full-step rotation: ;quay mot buoc

datccw_fs db 0000_0100b ; nam cham 2 bat

db 0000_0110b ;nam cham 1 và 2 bat

db 0000_0011b ;nam cham 0 va 1 bat

db 0000_0000b ;khong co nam cham nao bat

start: ;bat dau

mov bx, offset datcw ; start from clock-wise half-step. ;bat dau quay theo chieu kim
dong ho va quay nua buoc

mov si, 0 ;

mov cx, 0 ; step counter ;bo dem buoc

next_step: ;quay buoc tiep theo

; motor sets top bit when it's ready to accept new command ; trang thai bit cao nhat
1000_0000b

wait: in al, 7 ;doc du lieu vao dong co buoc & nhap ma

test al, 10000000b ; (0x80=10000000b)

jz wait ;if not, loop back( busy wait)

mov al, [bx][si] ;tai du lieu nhi phan vao thanh AL de quay motor

out 7, al ;bat tat nam cham theo thanh du lieu thanh AL

inc si ;tang SI len 1

cmp si, 4 ;so sanh SI voi 4 su lieu vao trong datain

jb next_step ;SI < 4 thi tiep tuc quay buoc tiep theo

mov si, 0 ;nguoc lai khoi tao lai gia tri SI = 0

inc cx ;tang bo dem buoc len


cmp cx, steps_before_direction_change ;so sanh bo dem voi dong co truoc khi
thay doi trang thai

jb next_step ; neu chua dat trang thai thay doi thi tiep tuc quay

mov cx, 0 ;thiet lao lai bo dem buoc tu dau

add bx, 4 ; next bin data ;nhap du lieu nhi phan tiep theo quay theo trang thai
tiep theo

cmp bx, offset datccw_fs ;quay nguoc chieu kim dong ho va ca buoc

jbe next_step ;thuc hien quay

mov bx, offset datcw ; return to clock-wise half-step. ; tra ve quay nua buoc nguoc
chieu kim dong ho

jmp next_step

You might also like