Tải bản đầy đủ (.pdf) (31 trang)

BÀI TẬP LỚN môn học vi xử lý – vi điều khiển

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.64 MB, 31 trang )

TRƯỜNG ĐẠI HỌC KỸ THUẬT CƠNG NGHIỆP
THÁI NGUN

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


Phầ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
Phần 1: Tính tốn
Xung 1: Tần số = 10hz và duty =25%
Với tần số thạch anh fxtal=12mhz ta có 1 chu kỳ máy =1us
Áp dụng cơng thức T= 1/F*10^6=(1/10)x10^6=100000us
Với duty =25% ta có thời gian tạo xung cao = 25000us và xun thấp =75000us
Xung 2: Tần số 5hz và duty=50%
Áp dụng công thức tương tự ta có
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



Phầ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


Phần 4: Kết quả :
Xung 1 tần số 10hz duty =25%

Xung 2: tần số 5hz duty 50%


Bà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)./


Bà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
Ta chọn nút stop bên vdk2
Lúc này vdk2 nhận được tín hiệu từ nút tiến hàn truyền phản hồi về vdk1 để
tắt độn cơ và hiển thị trên led đơn trạng thái hiện tại của động cơ
Tương tự với điều khiển dừng ở vdk1
Phần 2: mạch mô phỏng hệ thống.



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
Phần 3 phần phụ
Bao gồm
1 phần cài đặt các trạng thái biến trung gian được sử dụng
2 Tập hợp các nhãn phụ
3 các trương trình tạo trễ
4 các trương trình uart
5 Các chương trình con khác



Lậ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ị


hiển thi led 7 thanh x1 x2
- Với x1 tăng.


Phầ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ể thốt ra để thực hiện 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 q 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


2. Khi ta ấn nút run

3 khi ta ấn nút left

Động cơ quay trái
X1 đêm tang 1
Led đơn hiển thi run left
4 khi ta ấn dừng ở tron 2 vdk


Độ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


PHẦN 2: VI XỬ LÝ
Đề bài;
Nhập từ bàn phím số nguyên n (0 < n < 255), nhập vào 2 mảng A và B, mỗi mảng có n
phần tử, mỗi phần tử là số nguyên có giá trị từ 0 .. 255. Sắp xếp tăng dần 2 mảng A và
B. Trộn 2 mảng A và B thành mảng C cũng tăng dần. In kết quả mảng C ra màn hình.
Nhậ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à q 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:
ORG 100H
MOV CX,0
;NHAP SO PTU TRONG MANG
........................................................................................................................
LEA DX,CHUOI_A1
MOV AH,9
INT 21H

CALL READ_1_SO
MOV CL,DL
LEA DI,SO_PTU
MOV [DI],CX

;NHAP CAC PHAN TU TRONG MANG
A.................................................................................................................
LEA DX,CHUOI_A2
MOV AH,9
INT 21H

LEA DI,A
CALL NHAP_MANG


;NHAP CAC PHAN TU TRONG MANG
B..................................................................................................................
LEA DX,CHUOI_B2
MOV AH,9
INT 21H
LEA DI,SO_PTU
MOV CX,[DI]
LEA DI,B
CALL NHAP_MANG

;IN MANG A TRUOC KHI SAP
XEP....................................................................................................................
LEA DX,CHUOI_A3
MOV AH,9
INT 21H
LEA DI,SO_PTU
MOV CX,[DI]
LEA DI,A
CALL IN_MANG

;IN MANG A SAU KHI SAP
XEP......................................................................................................................

LEA DX,CHUOI_A4
MOV AH,9



INT 21H
; GOI HAM SAPXEP_TANGDAN_A: DE SAP XEP MANG A THEO THU TU TANG
DAN
CALL SAPXEP_TANGDAN_MANG_A
SX_XONG_A:
LEA DI,SO_PTU
MOV CX,[DI]
LEA DI,A
CALL IN_MANG

;IN MANG B TRUOC KHI SAP
XEP....................................................................................................................
LEA DX,CHUOI_B3
MOV AH,9
INT 21H
LEA DI,SO_PTU
MOV CX,[DI]
LEA DI,B
CALL IN_MANG

;IN MANG B SAU KHI SAP
XEP....................................................................................................................

LEA DX,CHUOI_B4
MOV AH,9


INT 21H
CALL SAPXEP_TANGDAN_MANG_B

SX_XONG_B:
LEA DI,SO_PTU
MOV CX,[DI]
LEA DI,B

CALL IN_MANG

;IN MANG
C.......................................................................................................................................

LEA DX,CHUOI_C1

MOV AH,9
INT 21H
CALL AB_SANG_C
LEA DI,SOPTU_MANG_C
MOV CX,[DI]
LEA DI,C
CALL IN_MANG

JMP $

;............HAM NHAP 1 SO NGUYEN TU BAN
PHIM.......................................................................................................................

; THUAT TOAN:


; 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
READ_1_SO:
MOV DX,0
NHAP_TIEP:
MOV AH,01
INT 21H

CMP AL,13
JE NHAP_SO_XONG
SUB AL,'0'
MOV BL,AL
MOV AL,10
MUL DL
ADD AL,BL
MOV DL,AL
JMP NHAP_TIEP
NHAP_SO_XONG:

RET


;............HAM NHAP 1
MANG.........................................................................................................................
; SO DA NHAP SAU KHI GOI HAM NHAP_SO DUOC LUU VAO DX, VI VAY TA

CHUYEN GIA TRI TRONG DX LAN LUOT VAO MANG
; NHAP CHO DEN KHI HET SO PHAN TU MANG DA NHAP O TREN
NHAP_MANG:
SAVE:

MOV DL,10
MOV AH,02
INT 21H
MOV DL,13
INT 21H
CALL READ_1_SO
MOV [DI],DX
INC DI
LOOP SAVE
RET

;............HAM HIEN THI 1 SO
NGUYEN.................................................................................................................
; THUAT TOAN:
; 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


HIEN_THI_SONGUYEN:
MOV CX, 0H
MOV AH,0
MOV AL,DL
CHIA:
MOV BL,10


DIV BL
MOV BL,AH
PUSH BX
INC CX
MOV AH,0
CMP AL,0
JE DA_XONG
JMP CHIA
DA_XONG:

; 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)
PRINT:
POP AX
MOV DL,AL
ADD DL,'0'
MOV AH,02


INT 21H
LOOP PRINT
RET

;............HAM HIEN THI 1
MANG.....................................................................................................................
; 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
IN_MANG:
LAPP:
MOV DH,CL
MOV DL,[DI]
CALL HIEN_THI_SONGUYEN
MOV CL,DH
INC DI
MOV DL,' '
INT 21H
LOOP LAPP
RET


;..............SAP XEP MANG A TANG
DAN.........................................................................................................
; LAN LUOT LAY TUNG PHAN TU CUA MANG A SO SANH VOI CAC PHAN TU CON
LAI DUNG SAU NO
; NEU LON HON THI DOI VI TRI CHO NHAU
SAPXEP_TANGDAN_MANG_A:
LEA DI,A

MOV CX,DI
LEA DI,MANG_TG
MOV [DI],CX

LEA DI,SO_PTU
MOV CL,[DI]
LEA DI,SOPTU_TG

MOV [DI],CL
MOV CX,0

SX_TANG_A:
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


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


LEA DI,DCLUU_SOPTU
MOV AX,[DI]
CMP AX,BX
JE XONG_A
INC DX
JMP SX_LANLUOT_A

XONG_A:
INC CX
LEA DI,SOPTU_TG
MOV DL,[DI]
DEC DL
CMP CL,DL
JB LUOT_TIEP_A
JMP SX_XONG_A
RET


;..............SAP XEP MANG B TANG
DAN.............................................................................................................
; TUONG TU NHU THUAT TOAN SAP XEP CHO MANG A
SAPXEP_TANGDAN_MANG_B:
LEA DI,B
MOV CX,DI
LEA DI,MANG_TG
MOV [DI],CX


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

MOV BX,0
MOV CX,0
LUOT_TIEP_B:
MOV DX,1

LEA DI,MANG_TG
MOV DI,[DI]

ADD DI,CX
PUSH DI


SX_LANLUOT_B:
POP DI
PUSH DI
MOV AL,[DI]
ADD DI,DX
MOV BL,[DI]

CMP AL,BL
JA HOAN_DOI_B
JMP BO_QUA_B
HOAN_DOI_B:
MOV [DI],AL
SUB DI,DX
MOV [DI],BL
ADD DI,DX
BO_QUA_B:
MOV BX,DI
LEA DI,DCLUU_SOPTU
MOV AX,[DI]
CMP AX,BX
JE XONG_B
INC DX
JMP SX_LANLUOT_B

XONG_B:

INC CX
LEA DI,SOPTU_TG


×