Cần giúp [Điều khiển tốc độ động cơ 1 chiều và LED]

Đào Tiến Huy

Học sinh phổ thông
#1
Chào các bác, em học VĐK và được giao bài tập lớn với đề như sau (yêu cầu code = assembly) :
Thiết kế hệ thống điều khiển sử dụng Vi điều khiển AT89C51 để vừa điều khiển tốc độ động cơ 1 chiều, vừa điều khiển kiểu sáng của đèn LED.
Hệ thống có các thành phần và yêu cầu sau:
- Hệ thống có 4 nút ấn ký hiệu BUT1, BUT2, BUT3 và BUT4
- Hệ thống có 8 đèn LED ký hiệu LED1, LED2…. LED8 - Ngoài ra, hệ thống còn dùng để điều khiển tốc độ động cơ 1 chiều. Nguyên tắc hoạt động của hệ thống như sau:
- Ở trạng thái ban đầu, động cơ chạy với 50% tốc độ cơ bản (duty = 50). 8 đèn LED không sáng.
- BUT1 có chức năng tăng tốc độ, BUT2 có chức năng giảm tốc độ động cơ 1 chiều. Tức là mỗi lần nhấn BUT1, tốc độ động cơ tăng thêm 10%, nhấn BUT2 tốc độ động cơ giảm 10%.
- BUT3 và BUT4 được dùng để quy định chiều sáng luân phiên của LED. Nếu nhấn BUT3 thì các led sáng theo thứ tự LED1 -> LED2 -> LED3 ->…-> LED8. Nếu nhấn BUT4 thì các led sáng luân phiên theo thứ tự ngược lại.

Em đã làm code = assembly được phần điều khiển LED rồi, nhưng động cơ thì em đang bị tắc ngay ở khâu ý tưởng, không biết có bác nào có ý tưởng có thể bày giúp em chút ý tưởng (Nếu có code thì tốt quá) được không ạ? Đây là phần mà em đã làm được, mong các bác chỉnh sửa giúp em luôn:

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FFH
JNB P0.2,BUT3
JNB P0.3,BUT4

LJMP MAIN
BUT3:
RLC A
MOV P1,A
LCALL DELAY
JNB P0.2,BUT4
LJMP BUT3

BUT4:
RRC A
MOV P1,A
LCALL DELAY
JNB P0.3,BUT3
LJMP BUT4
DELAY:
MOV R0,#5
L2: MOV R1,#100
L1: MOV R2,#255
L0: DJNZ R2,L0
DJNZ R1,L1
DJNZ R0,L2
RET
END
 

mta_cdt

Super Moderator
Thành viên BQT
#5
Chào các bác, em học VĐK và được giao bài tập lớn với đề như sau (yêu cầu code = assembly) :
Thiết kế hệ thống điều khiển sử dụng Vi điều khiển AT89C51 để vừa điều khiển tốc độ động cơ 1 chiều, vừa điều khiển kiểu sáng của đèn LED.
Hệ thống có các thành phần và yêu cầu sau:
- Hệ thống có 4 nút ấn ký hiệu BUT1, BUT2, BUT3 và BUT4
- Hệ thống có 8 đèn LED ký hiệu LED1, LED2…. LED8 - Ngoài ra, hệ thống còn dùng để điều khiển tốc độ động cơ 1 chiều. Nguyên tắc hoạt động của hệ thống như sau:
- Ở trạng thái ban đầu, động cơ chạy với 50% tốc độ cơ bản (duty = 50). 8 đèn LED không sáng.
- BUT1 có chức năng tăng tốc độ, BUT2 có chức năng giảm tốc độ động cơ 1 chiều. Tức là mỗi lần nhấn BUT1, tốc độ động cơ tăng thêm 10%, nhấn BUT2 tốc độ động cơ giảm 10%.
- BUT3 và BUT4 được dùng để quy định chiều sáng luân phiên của LED. Nếu nhấn BUT3 thì các led sáng theo thứ tự LED1 -> LED2 -> LED3 ->…-> LED8. Nếu nhấn BUT4 thì các led sáng luân phiên theo thứ tự ngược lại.

Em đã làm code = assembly được phần điều khiển LED rồi, nhưng động cơ thì em đang bị tắc ngay ở khâu ý tưởng, không biết có bác nào có ý tưởng có thể bày giúp em chút ý tưởng (Nếu có code thì tốt quá) được không ạ? Đây là phần mà em đã làm được, mong các bác chỉnh sửa giúp em luôn:

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FFH
JNB P0.2,BUT3
JNB P0.3,BUT4

LJMP MAIN
BUT3:
RLC A
MOV P1,A
LCALL DELAY
JNB P0.2,BUT4
LJMP BUT3

BUT4:
RRC A
MOV P1,A
LCALL DELAY
JNB P0.3,BUT3
LJMP BUT4
DELAY:
MOV R0,#5
L2: MOV R1,#100
L1: MOV R2,#255
L0: DJNZ R2,L0
DJNZ R1,L1
DJNZ R0,L2
RET
END
Bạn dùng interrupt timer thì sẽ điều khiển đuợc tốc độ nhá.
 

Quảng cáo Google