- Từ truyền thông nối tiếp của VĐK số 2: nhận 4 tín hiệu điều khiển từ VĐK số 2 RUN, STOP, LEFT, RIGHT => điều khiển động cơ chuyển sang các trạng thái tương ứng.. Output: - Điều khiển:
Trang 1TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP
THÁI NGUYÊN
BÀI TẬP LỚN Môn học: Vi Xử Lý – Vi Điều Khiển
Sinh viên thực hiện: LÊ CÔNG HIỆỤ
MSSV: K185520207014
Trang 2Phần 1 – Vi Điều Khiển
Câu 2: Tạo 2 xung 10Hz và 5Hz với vi điều khiển AT89C51, trong đó: xung 10Hz
có duty 25% và xung 5Hz có duty 50% Lập trình ASM chạy mô phỏng trên
Proteus Tự chọn các thông số của linh kiện
Thời gian tạo xung cao = thấp = 100000 us
Với delay thấp nhất =25000us vì vậy ta sẽ viết delay =25000us
Phần 2: Mạch mô phỏng
Các linh kiện được dung bao gồm :
Vi điều khiển –at89c51- chịu trách nhiệm phát xung
Máy hiện xung- oscilloscope- sử dụng để kiểm tra xung
Trang 3Phần 3: Lập trình cho vi điều khiển :
Các lệnh được dùng và các thanh ghi:
1: mov p1,#00000000b ; copy p1=00000000
2 cpl p1.0 ; đảo gia trị tại chân p1.0 : nếu p1.0 = 0 thì đảo =1 và ngược lại
3 call tre ; đây là hàm gọi chạy trương trình con có tên là tre
Các thanh hi sử dụng :
1 thanh ghi timer0 : bao gồm phần th0 và tl0 là phần lưu trữ bit cao và bit thấp
Trang 4Phần 4: Kết quả :
Xung 1 tần số 10hz duty =25%
Xung 2: tần số 5hz duty 50%
Trang 5Bài 3: Lập trình ASM cho 2 VĐK AT89C51 (các thông số tự chọn) để hoạt động theo các yêu cầu sau:
VĐK số 1:
1 Input:
- Từ 2 nút bấm: LEFT, RIGHT => để động cơ sẽ quay trái hay sẽ quay phải
- Từ 2 nút bấm: RUN, STOP => để động cơ quay hay dừng
- Từ truyền thông nối tiếp của VĐK số 2: nhận 4 tín hiệu điều khiển từ VĐK số 2 (RUN, STOP, LEFT, RIGHT) => điều khiển động cơ chuyển sang các trạng thái tương ứng
2 Output:
- Điều khiển: động cơ 1 chiều bằng mạch cầu H
- Hiển thị 2 led đơn: trạng thái động cơ STOP hoặc RUN
- Hiển thị 2 led đơn: chiều quay của động cơ LEFT hoặc RIGHT (khi đang RUN: đang quay trái hay đang quay phải khi đang STOP thì 2 led này ý nghĩa là sẽ quay trái hay sẽ quay phải.)
- Hiển thị số lần quay trái lên 2 led 7 thanh pack2 số 1 Số lần quay trái là số lần động cơ chuyển từ trạng thái STOP -> RUN LEFT
- Hiển thị số lần quay phải lên 2 led 7 thanh pack2 số 2 Số lần quay trái là số lần động cơ chuyển từ trạng thái STOP -> RUN RIGHT
- Truyền thông nối tiếp sang VĐK số 2: trạng thái của động cơ, số lần động cơ quay trái, số lần động cơ quay phải (chỉ truyền thông khi có sự thay đổi)
VĐK số 2:
1 Input:
- Từ 2 nút bấm: LEFT, RIGHT => Để động cơ bên vđk số 1 sẽ quay trái hay sẽ quay phải
- Từ 2 nút bấm: RUN, STOP => Để động cơ bên vđk số 1 sẽ quay hay dừng
- Từ truyền thông nối tiếp của VĐK số 1 truyền đến: nhận được trạng thái của động
cơ, số lần quay trái , số lần quay phải => để hiển thị (xem output) - Output:
- Hiển thị 2 led đơn: trạng thái động cơ STOP hoặc RUN
- Hiển thị 2 led đơn: chiều quay của động cơ LEFT hoặc RIGHT khi đang RUN thì
2 led này ý nghĩa là đang quay trái hay đang quay phải khi đang STOP thì 2 led này ý nghĩa là sẽ quay trái hay sẽ quay phải
- Hiển thị số lần quay trái lên 2 led 7 thanh pack2 số 1 Số lần quay trái là số lần động cơ chuyển từ trạng thái STOP -> RUN LEFT
- Hiển thị số lần quay phải lên 2 led 7 thanh pack2 số 2 Số lần quay trái là số lần động cơ chuyển từ trạng thái STOP -> RUN RIGHT
- Truyền thông nối tiếp sang VĐK số 1: trạng thái mới cần chuyển sang của động
cơ (theo nút bấm của input cho VĐK số 2)./
Trang 6Bài làm Phần 1:
Đưa ra sơ đồ làm việc của hệ thống
1 Khi bắt đầu cấp điện và chưa tác động gì
Trên cả 2 vdk
- Led đơn stop và right sáng các led đơn còn lại tắt
- Led 7 thanh pack 2 hiển thị 00
- Động cơ ở trạng thái dừng :
2 Khi bắt đầu tác động
Muốn tác động trước tiên ta chon trạng thái của động cơ
-Nếu muốn động cơ chạy thì ta ấn nút run còn nếu muốn động cơ dừng ta ấn nút stop
- trường hợp 1 động cơ quay phải
Ta điểu khiển lần lượt như sau
Bên vdk1 ta ấn nút run sau dó ấn nút right
Lúc này vdk1 sẽ xuất giá trị điểu khiển led đơn run và led đơn right sáng các led còn lại tắt
Sau đó sẽ xuất tiếp giá trị điều khiển mạch cầu h làm động cơ quay thuận Sau đó truyền xâu với 4 bit điều khiển sang vdk2
Sau khi truyền xong tiến hành quét tang led 7 thanh pack 2 x1 lên 1 giá trị
Cùng lúc này vdk2 nhận được phản hồi truyền về từ vdk tiến hành phân tích Sau đó hiển thị led đơn và led 7 thanh pack 2
Đối với trường hợp quay trái tương tự
Trường hợp 2 động cơ đang quay phải thì ta điều khiển bên vdk2 cho dc dừng
Trang 7
Linh kiện sử dụng:
1 Vi điều khiển at89c51
2 Led 7 thanh pack 2 anot chung ( các chân abcdefg =0 sáng) chân điều
khiển 1 2 dùng để điều khiển led 7 thanh tương ứng
3 Led đơn màu xanh nối k chung ( =1 sáng)
4 Linh kiện bán dẫn npn và pnp (dùng để tạo mạch cầu h)
5 Motor 1 chiều
6 Nút bấm (button)
Phần 3 lập trình 2 vdk tương tự nhau
Với bài này ta sẽ chia ra làm 3 phần chính;
Phần 1 Kiểm tra điều kiện
Bao gồm:
1 kiểm tra trạng thái các nút bấm
2 kiểm tra cac bit phản hổi từ cả 2 vdk cho nhau
3 kiểm tra trạng thái làm việc hiện tại của động cơ
Phần 2 Thực hiện yêu cầu khi thỏa mãn điều kiện
Bao gồm
1 điều khiển động cơ ở vdk1
2 hiển thị trạng thái làm việc trên led đơn ở cả 2 vdk
3 gửi và nhận phản hồi giữa 2 vdk
4 hiển thi led 7 thanh x1 x2
Trang 8Lập trình ; đối với vdk1 và 2 các phần lập trình cơ bản là giống nhau tuy nhiên ở vdk1 có them phần điều khiển động cơ vì vậy em sẽ giải thích chi tiết phần vdk1 còn phần vdk 2 em đã giải thích tron phần code rồi ạ
Phần 1 các phần kiểm tra bao gồm:
1 kiểm tra trạng thái các nút bấm và cờ nhận phản hổi ri
2 kiểm tra cac bit phản hổi từ cả 2 vdk cho nhau và tách lấy bit điều khiển
3 kiểm tra trạng thái làm việc hiện tại của động cơ
Phần 2 Thực hiện yêu cầu khi thỏa mãn điều kiện
Bao gồm
1 điều khiển động cơ ở vdk1
1 khi nút run được bấm sẽ thực hiện phần kiểm tra tiếp theo
- Nếu nút left được ấn thì các phần sau sẽ được thực hiện;
Cho độn cơ quay trái , truyền xâu , hien thi trang thai tren led đơn và tăng x1 lên 1 đơn vị
Trang 9hiển thi led 7 thanh x1 x2
- Với x1 tăng
Trang 10Phần giải thích chi tiết có tron code để tránh gây dài dòng cho phần nhật ký
em sẽ ko mô tả nhiểu tại đây
Về bài này sẽ thực hiện tuẩn tự theo các phần từ kiểm tra đến hết
Nhận xét cho bài này thì theo ý kiến riêng của em thì em có những đánh giá như sau
1 Phần khó nhất của bài này là phần phản hồi của 2 vi điều khiển với nhau Các lỗi hay mắc phải bao gồm lỗi tần số thạch anh , lỗi tốc độ truyển và lỗi cần truyển ký tự thành truyền giá trị
2 Phần khó tiếp theo là phần quét led 7 thanh pack 2 việc phải quét led liên tục thì ta mới có thể hiện ở cả 2 led 7 thanh này các lỗi thường gặp Lỗi delay quá lâu , lỗi ko thể thoát ra để thực hiện yêu cầu mới
Nói chung bài này rất khó tuy nhiên khi chú tâm tìm hiểu và làm thì cũng không quá khó khan mấu chốt vẫn ở tư duy lập trình
Về phần cách làm của em thì em đã viết code riêng cho từng vdk sau đó gắn uart và để kiểm tra ngoải ra em đã viết code co từng phần từng yêu cầu sau đó ghép lại
Và đây là kết quả của em
1 Khi ta cấp nguồn và chưa có tác động
Trang 12
Động cơ dừng và led đơn chuyển trạng thái tử run => stop và giữ nguyên led trạng thái hiện tại
5 khi ta ấn run và chọn chiều quay phải
Động cơ quay phải
Led đơn hiển thị trạn thái quay phải
Led x2 tăng 1
Trang 13Nhận xét về bài này dưới cuối bài làm !!!!!!!
: phần này để giải thích chi tiết là quá khó vì vậy em xin phép được giải thích ngắn gọn theo lần lượt nhiệm vụ các mảng như sau:
Trang 14;NHAP CAC PHAN TU TRONG MANG
B LEA DX,CHUOI_B2
Trang 17; GOI HAM NGAT NHAP 1 KI TU TU BAN PHIM: MA ACCI CUA KI TU DO DUOC LUU TRONG AL
; SAU DO TRU MA ACCI DI KI TU '0' (AL-'0') VA LUU VAO BL, TIEP TUC NHAN KI
TU TIEP THEO
; + NEU KI TU TIEP THEO KHAC PHIM ENTER (CO MA ACCI LA 13) THI NHAN SO
DA LUU O BL VOI 10
; TRU MA ACCI DI KI TU '0' (AL-'0') VA CONG VAO BL
; + SO SANH NEU KI TU TIEP THEO LA PHIM ENTER (CO MA ACCI LA 13) THI
DUNG NHAP SO => DA NHAP SO XONG
Trang 18; CHIA SO CAN HIEN THI CHO 10 VA DUOC DAY DAN VAO STACK
; CHIA CHO DEN KHI THUONG CUA PHEP CHIA = 0 (AL = 0) THI DUNG CHIA
; CU MOI LAN CHIA THI CX TANG LEN 1 DE PHUC VU CHO VIEC XUAT
Trang 19; LAN LUOT LAY TUNG SO DA DUOC DAY VAO STACK O TREN DUA VAO AX
; SAU DO CONG THEM '0' DE LAY MA ACCI CUA SO CAN HIEN THI
; GOI NGAT 21 DE XUAT RA MAN HINH VA LAP CHO DEN KHI CX = 0 (CX DA DUOC TICH LUY DAN O PHIA TREN)
Trang 20; LAY LAN LUOT TUNG PHAN TU O TRONG MANG CAN HIEN THI RA LUU VAO DL
; SAU DO GOI HAM HIEN_THI DE IN SO DO RA MAN HINH
; IN CHO DEN KHI HET PHAN TU TRONG MANG, SO PHAN TU TRONG DUOC LAY TRONG BIEN SOPTU_AB
Trang 21; SAP XEP MANG A TANG
Trang 22
MOV BX,0
MOV CX,0
LUOT_TIEP_A: MOV DX,1
LEA DI,MANG_TG MOV DI,[DI] ADD DI,CX
PUSH DI
SX_LANLUOT_A: POP DI
PUSH DI
MOV AL,[DI] ADD DI,DX
MOV BL,[DI] CMP AL,BL
JA HOAN_DOI_A JMP BO_QUA_A HOAN_DOI_A: MOV [DI],AL SUB DI,DX
MOV [DI],BL ADD DI,DX BO_QUA_A: MOV BX,DI
Trang 24
LEA DI,SO_PTU
MOV CL,[DI]
LEA DI,SOPTU_TG MOV [DI],CL
MOV CX,0
SX_TANG_B:
LEA DI,SOPTU_TG MOV CL,[DI]
DEC CX
LEA DI,MANG_TG MOV DI,[DI]
ADD CX,DI
LEA DI,DCLUU_SOPTU MOV [DI],CX
ADD DI,CX
PUSH DI
Trang 25CMP AX,BX
JE XONG_B
INC DX
JMP SX_LANLUOT_B XONG_B:
INC CX
LEA DI,SOPTU_TG
Trang 26; SAU KHI 2 MANG A B DA DUOC SAP XEP TANG DAN
; LAY TUNG PHAN TU CUA MANG A SO SANH VOI PHAN TU CUA MANG B
; NEU NHO HON THI DUOC DUA VAO MANG C
Trang 27; NEU PHAN TU O MANG A NHO HON THI DUOC DUA VAO MANG C TRUOC
; NGUOC LAI NEU PHAN TU O MANG B NHO HON THI DUOC DUA VAO MANG C TRUOC
; VI PHAN TU O MANG B NHO HON NEN CHUYEN VAO MANG C TRUOC
; SAU KHI CHUYEN SONG TANG DX LEN THEM 1 DON VI DE SO SANH LUOT TIEP THEO
; DONG THOI TANG BX LEN THEM 1 DON VI DE CHO NHAN PHAN TU TIEP THEO CHUYEN_B_SANG_C:
Trang 29; KHI NHAN THAY MANG A DA CHUYEN HET PHAN TU THI KO CAN SO SANH NUA, CHUYEN HET PHAN TU TIEP THEO TRONG MANG B VAO C
Trang 31CHUOI_A2 DB 10,13,"NHAP MANG A: $"
CHUOI_A3 DB 10,13,"MANG A TRUOC KHI SX: $"
CHUOI_A4 DB 10,13,"MANG A SAU KHI SX: $"
CHUOI_B2 DB 10,13,"NHAP MANG B: $"
CHUOI_B3 DB 10,13,"MANG B TRUOC KHI SX: $"
CHUOI_B4 DB 10,13,"MANG B SAU KHI SX: $"
Cuối cùng em rất mong thầy cô giúp đỡ ạ