Tải bản đầy đủ

cách ứng dụng vi điều khiển

Rất vui khi thấy Bạn
vào xem



Phần dẫn nhập.

Có một Bạn viết e-mail cho tôi với câu hỏi như sau:
Kinh chao thay Hung !
Em la giao sinh moi ra truong, hien dang di day hoc cho cac em hoc sinh Tieu
hoc, trong qua trinh day hoc em rat thich cho cac em choi tro choi do em co
su dung mach nhan chuong uu tien nhung mach chuong hien tai chi co the su
dung duoc cho toi da la 4 doi nhung lop hoc cua em lai can den 8 doi hoac
nhieu hon nua. Thay co the tang em chuong trình hoac huong dan em cach
viet chuong trinh nay duoc khong ? Em dang su dung bi vi dieu khien
AT89C2951. Cam on thay rat nhieu !


Đặc tính của một mạch điện “Đố vui để học”, là:

* Theo giả định của tôi là: Trên mỗi bàn có một nút nhấn (có thể mắc song

song 3 nút nhấn cho 3 người cùng bàn).

* Khi nghe xong câu hỏi thì người điều khiển chương trình sẽ nhấn nút “Bắt
đầu”.

* Lúc này, các em sẽ suy nghĩ và khi ai có câu trả lời thì nhấn nút “Trả lời”.

* Ở đây có 8 nút nhấn chính. Khi một nút đã nhấn thì tất cả các nút còn lại sẽ
không còn tác dụng.

* Trên bảng đèn sẽ có đèn báo “Bắt đầu”, nó sáng ngay khi người điều khiển
chương trình nhấn nút Reset. Và khi đã có nút nhấn trả lời thì đèn báo “Bắt
đầu” sẽ tắt và lúc này một đèn báo “Đang trả lời sẽ nhấp nháy (có thể cho
kèm tiếng nhịp)”. Và lúc đang trả lời sẽ có một đèn sáng liên tục xác nhận
mạch đang ở “trạng thái trả lời”.

* Muốn trở lại trạng thái đầu cho câu hỏi kế tiếp, người điều khiển chỉ cần
nhấn nút Reset.

Dĩ nhiên phần trên đây là các đặc tính mà tôi tự đặt ra và vựa vào đó để thiết kế phần
cứng và rồi sẽ viết chương trình nguồn cho mạch điện này. Tôi nghĩ sau khi Bạn đã
hiểu rõ công việc thiết kế loại mạch này rồi, Bạn sẽ tự có thể viết các chương trình
nguồn khác, nó sẽ thực hiện theo đúng các ý muốn của Bạn.


Sơ đồ mạch điện mẫu (tôi vẽ trong OrCAD và tô màu
trong trình Paint).




Phân tích sơ đồ mạch điện:


Khi dùng ic vi điều khiển AT89C2051, mạch điện cơ bản sẽ gồm các phần
sau:

* Phần cấp nguồn: Dùng ic ổn áp 3 chân 7805 để có nguồn 5V ổn định cấp
cho chân số 20 và chân số 10 cho nối masse để lấy dòng (Dòng điện tử chảy
vào ic qua chân số 10 và ra trên chân số 20). Ở đây dùng Led D1 làm Led


báo nguồn. mạch làm việc với mức nguồn ngả vào là 12V. Nguồn 12V còn
được dùng để cấp điện cho các relay. Chúng ta dùng 3 relay và dùng các tiếp
điểm lá kim K1, K2, K3 của các relay này để điều khiển các bóng đèn điện
hay chuông báo.

* Phần mạch Reset. Tác dụng Reset khi chân số 1 ở mức áp cao. Khi mạch
được cấp nguồn, tụ C5 (10uF) sẽ nạp điện, dòng nạo chảy qua điện trở R1
(10K), nó kéo chân số 1 lên mức áp cao và chương trình sẽ quay về thanh
nhớ 0000h (đó là vị trí khỏi đầu của tác dụng reset). Chỉ sau một lúc tụ C5 sẽ
nạp đầy mức nguồn, chân 1 được trả về mức áp thấp và ic vi điều khiển bắt
đầu chạy chương trình có trong bộ nhớ EEP-ROM. Trong mạch chúng ta
dùng nút nhấn reset để đưa chương trình trở lại trạng thái khởi đầu.

* Phần định tần cho mạch dao động tạo xung nhịp. Xung nhịp được định tần
theo thạch anh gắn trên chân 4 và chân 5. Với thạch anh 12MHz, tần số xung
nhịp sẽ là 1MHz và chu kỳ lệnh sẽ là 1us. Các tụ nhỏ C6, C7 có tác dụng bù
nhiệt ổn tần.

* 8 Nút nhấn gắn trên port 1 và chúng ta dùng chân p3.0 điều khiển relay 3,
chân p3.1 điều khiển relay 2 và chân p3.2 điều khiển relay 1.


Cách viết chương trình nguồn:

org 0000h

mov p3, #00000001b ; Đặt 7 chân của p3 xuống mức áp thấp, chân
p3.0 ở mức 1, relay 3 đóng.
call del ; Chờ một lúc cho ổn định.

q1: ; Viết cho phím S1
jb p1.0, q2 ; Chờ phím S1 nhấn xuống, chưa nhấn thì qua kiểm tra phím S2
call del ; tránh hiện tượng rung phím làm kết quả sai
jb p1.0, $ ; kiểm tra lần nữa phím S1cho chắc chắn
jmp ctr_1 ; Vào chương trình điều khiển các đèn báo

q2: ; Viết cho phím S2
jb p1.1, q3
call del
jb p1.1, $
jmp ctr_1

q3: ; Viết cho phím S3
jb p1.2, q4
call del
jb p1.2, $
jmp ctr_1

q4: ; Viết cho phím S4
jb p1.3, q5
call del
jb p1.3, $
jmp ctr_1

q5: ; Viết cho phím S5
jb p1.4, q6
call del
jb p1.4, $
jmp ctr_1

q6: ; Viết cho phím S6
jb p1.5, q7
call del
jb p1.5, $
jmp ctr_1

q7: ; Viết cho phím S7
jb p1.6, q8
call del
jb p1.6, $
jmp ctr_1

q8: ; Viết cho phím S8
jb p1.7, q1
call del
jb p1.7, $
jmp ctr_1

ctr_1:
mov p3, #00000110b ; Tắt relay 3, mở relay 2 và mở relay 1
call delay ; Chương trình làm chậm
mov p3, #00000100b ; Tắt relay 3, tắt relay 2 và mở relay 1
call delay ; Chương trình làm chậm
jmp ctr_1 ; Tiếp tục chương trình 1

del: ; Chương trình trể dùng tánh hiện tượng
rung phím.
mov r7, #30
v6: mov r6, #100
djnz r6, $
djnz r7, v6
ret
delay: ; Chương trình trễ tạo nhịp nhấp nháy.
mov r5, #250
tt: call del
djnz r5, tt
ret
end



Sau khi đã có file nguồn, lấy họ là .asm, Bạn cho chuyển vào trình M-IDE để
biên dịch ra file có họ là .hex. Bạn xem, tôi cắt các câu lệnh trên và dán vào
cửa sổ của trình MIDE, rồi chọn mục Build và trong cửa sổ Build lại chọn mục
Build lần nữa để cho biên dịch ra file .hex (Khi có file nguồn trong MIDE, Bạn
nhấn phím F9 để cho dịch ra file .hex cũng được).





Kết quả trong thư mục của file 8-nut.asm (file nguồn), Bạn thấy xuất hiện file
8-nut.hex (file mã). Bây giờ Bạn dùng hộp nạp cho nạp file này vào ic vi điều
khiển AT89C2051 là xong chuyện.




Đây là file văn bản của file 8-nut.hex (Nếu như Bạn không có trình biên dịch
MIDE, Bạn có thể dùng các mã này bằng cách cắt lấy, rồi tạo ra file lấy họ
là .hex và dùng hộp nạp cho nạp vào ic AT89C2051 cũng được).
:1000000075B0011200742090091200742090FD0256
:1000100000662091091200742091FD020066209272
:10002000091200742092FD020066209309120074E8
:100030002093FD0200662094091200742094FD02B2
:1000400000662095091200742095FD020066209636
:10005000091200742096FD0200662097A912007410
:100060002097FD02006675B00612007D75B004127F
:10007000007D80F27F1E7E64DEFEDFFA227DFA11B3
:0400800074DDFC220D
:00000001FF



Về cách dùng hộp nạp các file .hex cho các bộ nhớ EEP-
ROM trong các ic vi điều khiển, Bạn tham khảo bài viết
sau:


http://phuclanshop.com/TraoDoiHocTap-ChiTiet.aspx?NewsId=80


Phân tích các câu lệnh trong chường trình nguồn:




Mới vào Bạn phải dùng câu lệnh:

mov p3, #00000001b

Với câu lệnh này, chỉ có chân p3.0 (tức chân số 2 của ic) là ở mức áp cao,
vậy transistor Q3 sẽ bão hòa , nó cấp dòng cho relay 3 và relay này đóng tiếp
điểm lá kim K3. Trên tiếp điểm này Bạn gắn một bóng điện, bóng điện sẽ phát
sáng, nó cho biết là lúc này 8 nút nhấn đã được kích hoạt, tứ cho quyền
nhấn. Khi relay 3 được cấp nguồn, Led chỉ thị D4 cũng sẽ phát sáng.

Do các chân p3.1 (chúng ta dùng đóng mở relay 2), và chân p3.2 (chúng ta
dùng đóng mở relay 1) đều cho ở mức áp thấp nên các transistor Q2, Q1 đều
ngưng dẫn.

Trong mạch các điện trở 2.2K dùng hạn dòng chân B. các Led D2, D3, D4
dùng chỉ thị trạng thái của relay. Ở mỗi Led phải có điện trở hạn dòng 560
ohm.

Chúng ta không cần dùng câu lệnh:

mov p1, #11111111b hay: mov p1, #0ffh

để đặt 8 chân của port1 lên mức áp cao, vì sau lệnh reset, các chân port1 đều
đã cho ở mức áp cao. Vậy khi mới vào chúng ta sẽ viết:

org 0000h ; Cho khởi đầu từ thanh nhớ có địa chỉ là 0000h

mov p3, #00000001b ; Đặt 7 chân của p3 xuống mức áp thấp, chân
p3.0 ở mức 1, relay 3 đóng.
call del ; Chờ một lúc cho ổn định.
(Trên đây là các câu lệnh mở đầu)





Chúng ta đặt 8 nút nhấn thường hở trên port1. Vậy trạng thái áp cao trên các
chân của port1 là trạng thái chờ.

Để bảo đảm là bình thường lúc ở trạng thái chờ các chân của port1 đều ở
mức áp cao, chúng ta cho treo áp các chân của port1 bằng các điện trở 10K.

Vậy, mỗi khi nút reset đã được nhấn, chương trình khởi đầu từ thanh nhớ
0000h, sau khi qua các câu lệnh khởi đầu (phần trình bày trên), nó vào
chương trình dò phím. Ở đây chúng ta dùng lệnh nhẩy theo bit cao trên các
chân của port1. Các câu lệnh được viết như sau:

q1: ; Viết cho phím S1
jb p1.0, q2 ; Chờ phím S1 nhấn xuống, chưa nhấn thì qua kiểm tra phím S2
call del ; tránh hiện tượng rung phím làm kết quả sai
jb p1.0, $ ; kiểm tra lần nữa phím S1cho chắc chắn, nó phải ở
mức áp thấp.
jmp ctr_1 ; Vào chương trình điều khiển các đèn báo


Giải thích các câu lệnh trên:

q1:
; Đây là tên nhãn của phím S1

jb p1.0, q2
; Nếu phím S1 trên chân p1.0 ở mức áp cao (chưa nhấn) thì nhẩy qua tên
nhãn q2 dò phím S2.

call del
; cho trễ một chút để tránh ảnh hưởng của việc rung phím. Khi Bạn nhấn
phím xuống, mặt tiếp xúc sẽ rung và ạo ra hiện tượng lúc dính lúc không, phải
chờ sau một thời gian mới chắc chắn là nó đã dính.

jb p1.0, $
; Đến đây nếu phím S1 còn ở mức áp cao thì chương trình sẽ dừng lại chờ,
chương trình sẽ phải khởi động lại bằng nút nhấn reset. Do đó, chúng ta phải
yêu cầu các em tham gia trò chơi, khi nhấn phím rồi thì phải giữ phím, không
buôn ra ngay.

Ghi chú: Nếu không muốn có tính năng này phải giữ phím nhấn đủ lâu, thì
Bạn bỏ câu lệnh: jb p1.0, $

Trường hợp muốn có thêm tính năng là chờ bỏ phím mới bắt đầu nhẩy vào
chương trình ctr_1, thì Bạn thêm vào câu lệnh:

jnb p1.0, $ ; lúc này người chơi phải bỏ phím nhấn mới vào cuộc chơi.

jmp ctr_1
; Đến đây chương trình sẽ nhẩy vào đoạn điều khiển các đèn báo, có tên
nhãn là ctr_1.



Giải thích đoạn chương trình điều khiển các đèn báo:


ctr_1:
mov p3, #00000110b ; Tắt relay 3, mở relay 2 và mở relay 1
call delay ; Chương trình làm chậm
mov p3, #00000100b ; Tắt relay 3, tắt relay 2 và mở relay 1
call delay ; Chương trình làm chậm
jmp ctr_1 ; Tiếp tục chương trình 1

Bạn dùng câu lệnh:

mov p3, #00000110b
; Câu lệnh này đặt chân p3.0 ở mức áp thấp, các chân p3.1, p3.2 ở mức áp
cao. Vậy tắt đèn ở tiếp điểm lá kim K3, cho sáng đèn ở tiếp điểm lá kim K1
và K2.

call delay
; Cho gọi chương trình làm chậm.

mov p3, #00000100b
; Câu lệnh này đặt chân p3.0 ở mức áp thấp, chân p3.1 ở mức áp thấp , và
p3.2 ở mức áp cao. Vậy tắt đèn ở tiếp điểm lá kim K3 và K2, cho sáng đèn ở
tiếp điểm lá kim K1.

call delay
; Cho gọi chương trình làm chậm.

jmp ctr_1
; Tức cho quay lại tiếp tục thực hiện các câu lệnh trên. Kết quả, Bạn thấy:

Đèn trên tiếp điểm K3 đã tắt
Đèn trên tiếp điểm K1 sáng
Đèn trên tiếp điểm K2 sẽ nhấp nháy.

….và trạng thái này được giữ cho đến khi Bạn nhấn phím reset.



Mở rộng:

Muốn tăng số phím nhấn và viết chương trình điều khiển phức tạp hơn Bạn có
thể dùng ic vi điều khiển AT89C51. Với 4 port 32 chân, việc gắn các nút nhấn
tất nhiên sẽ nhiều hơn và cách hiển thị sẽ hấp dẫn hơn.

Sau đây là một sơ đồ phát thảo dùng ic vi điều khiển AT89C51, chỉ là một gợi
ý:



Giải thích sơ đồ mạch điện:


Sơ đồ mạch điện cho thấy cách dùng ic vi điều khiển AT89C51 làm mạch “Đố
vui để học” với 16 nút nhấn. Các nút nhấn gắn trên port 1 và port 3 (ở port 1
và port 3 Bạn không cần dùng các điện trở treo áp). Ở trạng thái thường, các
nút nhấn hở, các chân đều ở mức 1, chương trình sẽ ở đoạn quét phím, chỉ
khi có một nút nhấn nhấn xuống, thì chân đó sẽ bị cho nối masse và sẽ xuống
mức 0. Chúng ta sẽ dùng lệnh nhẩy jb (jump bit) hay jnb (jump nobit) để viết
chương trình dò phím, dùng để phát hiện ra vị trí của các phím đã nhấn.

Trên port 0 và port 2 dùng làm bảng đèn số để hiển thị con số thứ tự mà phím
đã nhấn. Thí dụ: như khi phím 5 nhấn thì trên bảng đèn sẽ hiện ra con số 5…
Sau đó bảng đèn sẽ chuyển qua làm nhiệm vụ của một đồng hồ đếm thời
gian.

Chúng ta dùng các chân còn lại của port 2 để điều khiển các relay (relay 1 và
relay 2), các tiếp điểm lá kim của các realy dùng đóng mở các đèn, hay các
chuông báo.

Tóm lại:

Sau khi cho khởi động với nút Reset thì bảng đèn sẽ chuyển qua trạng thái
chờ để hiển thị con số thứ tự của phím nhấn. Lúc này Bạn có thể cho đèn báo
nhấp nháy để chỉ là đang ở trạng thái chờ. Khi có một phím nhấn xuống, trên
bảng đèn sẽ hiện ra con số thứ tự của phím đã được nhấn, đèn nhấp nháy sẽ
chuyển qua sáng liên tục, mạch chuông sẽ báo nhịp và bảng đèn Led 7 đoạn
chuyển qua làm công việc đếm thời gian.

Khi nào trả lời xong, muốn trở lại trạng thái khởi đầu thì nhấn nút Start.

Trên đây là một mạch điện gợi ý mà tôi phát thảo ra để các Bạn góp ý và nếu
thấy thích thì thử viết chương trình nguồn cho mạch điện này. Khi có thời gian
rảnh tôi sẽ trở lại chuyên đề này. Chào Bạn nhé!



Tạm kết.

Bạn biết môn điện tử phát triển với tốc độ phi mã, "Nhật tân, Nhật tân, Nhật
Nhật tân", nghĩa là mỗi ngày mỗi mới. Cho đến hôm nay thì các kiểu mạch
điện tử ráp theo cách xưa rất khó đáp ứng được với cách yêu cầu thực tế
luôn cần phải nâng cấp, do đó Bạn phải làm quen với các kiểu mạch điện vi
điều khiển, đặc điểm của loại mạch dùng ic vi điểu khiển là cấu trúc phần
cứng đơn giản, ít thay đổi, nhưng công năng của nó có thể thay đổi dễ dàng,
mở rộng ứng dụng bằng các phần mềm, tức thay đổi hay thêm vào các chức
năng mới chỉ bằng các câu lệnh (mà không phải đụng đến phần cứng). Trong
các bài viết sau này, tôi sẽ thường xuyên trình bày cách thiết kế và lắp ráp
các kiểu mạch điện này, mong Bạn vào đọc.



Nhắn với các Bạn gửi e-mail về cho Vương Khánh Hưng

Người soạn rất vui khi nhận và xem các thư e-mail của nhiều Bạn, qua các
điện thư này, biết được các yêu cầu, ý muốn của Bạn qua đó để định hướng
cho các bài viết trong trang web phuclanshop.com.

Có Bạn đưa ra các câu hỏi ngắn thôi nhưng nội dung lại rất cao xa, như Bạn
biết, để trả lời tốt một "vấn đề kỹ thuật cụ thể" cần rất nhiều thời gian và
công sức, do đó rất khó trả lời nhanh và trả lời riêng cho từng Bạn được, tôi
sẽ rất cố gắng chọn ra các câu hỏi mà nhiều người đang muốn biết để trả lời
bằng các bài viết trên trang web này, mong Bạn thông cảm khi không nhận
được các thư hồi âm riêng biệt.

Sau cùng, cũng thật tình tâm sự với Bạn, người soạn trình độ có hạn, hiểu
biết có khi cũ kỷ nên còn nhiều vấn đề còn rất mù mờ, như vậy rất khó
tránh "là khi nói nhiều dễ sai, nói thiếu", rất mong được các Bạn thông cảm
và chân tình viết thư chỉ bảo. Đa tạ, xin đa tạ



N

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×