Jun 27, 2014

Trước hết tìm hiểu nguyên lý vận hành của các thành phần dùng trong mạch điện:
1. Tìm hiểu ic điều khiển motor:



IC BA6209 có 10 chân, công dụng của các chân như sau:

Chân 1 
cho nối masse, chân 7 cho nối nguồn VCC1, chân 8 lấy nguồn VCC2 qua
một điện trở 10 ohm. Mức áp chuẩn định tốc độ quay chọn theo 
diode Zener trên chân số 4. Chân số 3 và số 9 mắc tụ lọc và chân
số 2 và chân số 10 cấp điện cho motor. Ngang motor gắn một tụ 
lọc nhiễu ồn phát ra từ motor. Tín hiệu điều khiển đưa vào 
trên chân 5 và chân 6. Bản logic cho thấy:

* Khi 
chân 5 Fin và chân 6 Rin đều ở mức áp thấp, thì mức áp ngả ra 
trên chân 2, 10 đều ở mức áp thấp: Motor không quay.

* Khi 
chân Fin ở mức áp cao, chân Rin ở mức áp thấp, thì chân 2 ở 
mức cao và chân 10 ở mức áp thấp: Motor quay thuận.

* Khi 
chân Fin ở mức áp thấp, chân Rin ở mức áp cao, thì chân 2 
ở mức thấp và chân 10 ở mức áp cao: Motor quay ngược.

* Khi 
chân 5 Fin và chân 6 Rin đều ở mức áp cao, thì mức áp ngả ra 
trên chân 2, 10 đều ở mức áp thấp: Motor không quay. 

Phân 
tích trên cho thấy, chúng ta có thể dùng 3 chân 4, 5, 6 của ic 
lập trình để điều khiển các trạng thái quay của motor


2. Tìm hiểu nguyên lý làm việc của motor DC.

Motor DC gồm có:

* Phần tĩnh là một nam châm vĩnh cữu, đặt cố định, một bên là cực nam thì bên kia là cực bắc.

* Phần 
quay gồm có các cuộn dây ứng quấn trên các từ cực. Trên trục 
quay người ta đặt một cổ lấy điện bằng các vòng đồng, dùng 
chổi than đè lên cổ lấy điện để cấp điện cho các cuộn dây ứng
đặt trên phần quay, cuộn dây có điện sẽ trở thành các nam châm
điện.

Do tương 
tác, các nam châm (ở đây là nam châm vĩnh cữu của phần tĩnh và
nam châm điện trên phần quay) đặt gần nhau, khi có tên cực giống
nhau sẽ đẩy nhau và khác tên thì sẽ hút nhau, điều này sẽ 
làm quay phần ứng, khi phần ứng quay nó đồng thời làm quay cổ 
lấy điện, điều này sẽ làm đảo chiều dòng chảy qua các cuộn 
dây ứng, như vậy các nam châm sẽ lại đổi cực tính, do vậy cuộn
dây sẽ luôn phải ở trạng thái quay.







Chúng ta
biết, khi được cấp điện thì motor DC sẽ quay, mức áp cấp cho 
motor càng cao thì motor quay càng nhanh. Và nếu Bạn dùng lực 
làm quay một motor DC thì trên 2 cực của motor DC sẽ phát ra điện áp ứng,
nếu motor bị kéo quay càng nhanh thì mức điện áp ứng phát ra 
càng cao. Điều này cho thấy motor DC khi được cấp điện nó sẽ 
quay, và khi bị kèo quay nó sẽ phát ra điện. Dùng luật ohm, 
chúng ta có thể viết hệ thức sau:

dòng điện I = (điện áp cung cấp) - (điện áp ứng) / điện trở R của cuộn ứng

Trong đó: 

(điện áp ứng) là một hàm của tốc độ quay. Khi motor quay càng chậm, điện áp ứng phát ra càng yếu và ngược lại. 

(lực quay) là một hàm của dòng điện I. Khi dòng điện càng lớn thì lực kéo càng mạnh.

Điều này cho thấy:
Khi bị tải nặng, tốc độ quay của motor sẽ có khuynh hướng 
bị chậm lại, tốc độ quay giảm sẽ làm cho điện áp ứng giảm, 
hệ thức trên cho thấy dòng điện I sẽ tăng lên, dòng điện I tăng 
sẽ gia tăng khả năng mang tải của motor DC, nhờ phản ứng này, 
mà motor DC có khả năng mang tải rất tốt. 

Khi dùng motor DC chúng ta chú ý các điểm sau:

* Điện áp DC cấp cho motor DC càng cao, motor quay càng nhanh.

* Đảo chiều điện áp cấp điện, chiều quay của motor sẽ đổi chiều quay.

* Điện trở phần ứng càng nhò, dòng chảy qua motor DC càng lớn, lực quay sẽ càng mạnh.

* Khi 
motor DC quay, từ hai chổi quét điện sẽ luôn phát ra nhiễu ồn 
rất lớn, phải dùng tụ và cuộn dây để lọc nhiễu.

* Không 
để motor bị kẹt trục không quay, điều này sẽ khiến cho dòng 
chảy qua motor sẽ rất lớn, motor có thể bị cháy.



3. Phân tích sơ đồ điều khiển các động thái của motor dùng ic AT89C51


Mạch điện cho thấy: 


8 nút 
nhấn dùng điều khiển 2 motor DC gắn trên xe đều cho kết nối trên
cảng p1. Motor DC gắn bên phải qua ic BA6209, chân p3.0 điều khiển
chiều quay thuận, chân p3.1 điều khiển chiều quay nghịch và chân
p3.2 điều khiển tốc độ quay. Motor DC gắn bên trái qua ic BA6209,
với chân p3.3 điều khiển chiều quay thuận, chân p3.4 điều khiển 
chiều quay ngược và chân p3.5 điều khiển tốc độ quay.


4.Viết chương trình nguồn theo yêu cầu trên:


org 0000h

qua0: 
jb p1.0, qua1
call del ; gọi trình làm trể, tránh ảnh hưởng rung phímjnb p1.0, $

jmp chay_toi ; Cho chạy tới, 2 motor quay cùng chiều
qua1: 
jb p1.1, qua2
call del

jnb p1.1, $

jmp chay_lui ; chạy lùi, 2 motor cho quay ngược chiều
qua2: 
jb p1.2, qua3
call del

jnb p1.2, $

jmp queo_trai ; quẹo trái, motor trái dừng, motor phải quay tới
qua3: 
jb p1.3, qua4
call del

jnb p1.3, $

jmp queo_phai ; quẹo phải, motor phải dừng và motor trái quay tới 
qua4: 
jb p1.4, qua5
call del

jnb p1.4, $

jmp dung ; dừng, cả 2 motor đều dừng, không quay
qua5: 
jb p1.5, qua6
call del

jnb p1.5, $

jmp cham_lai ; chậm lại, 2 motor quay với tốc độ chậm 
qua6: 
jb p1.6, qua7
call del

jnb p1.6, $

jmp quay_trai ; quay vòng qua trái, motor trái quay ngược, motor phải quay thuận
qua7: 
jb p1.7, qua0
call del

jnb p1.7, $

jmp quay_phai ; quay vòng qua phải, motor trái quay thuận, motor phải quay ngược

chay_toi: ; trình cho chạy tớisetb p3.0

clr p3.1

setb p3.2

setb p3.3

clr p3.4

setb p3.5

jmp qua0 ; trở lại chương trình qué phím


chay_lui: ; trình cho chạy lùiclr p3.0

setb p3.1

setb p3.2

clr p3.3

setb p3.4

setb p3.5

jmp qua0 ; trở lại trình quét phím 


queo_trai: ; cho quẹo tráisetb p3.0

clr p3.1

setb p3.2

setb p3.3

clr p3.4

clr p3.5

jmp qua0 ; trở lại trình quét phím

queo_phai: ; cho quẹo phảisetb p3.0

clr p3.1

clr p3.2

setb p3.3

clr p3.4

setb p3.5

jmp qua0 ; trở lại trình quét phím 


dung: ; cho dừngsetb p3.0

clr p3.1

clr p3.2

setb p3.3

clr p3.4

clr p3.5

jmp qua0 ; trở lại trình quét phím 


cham_lai: ; cho chậm lạisetb p3.0

clr p3.1

setb p3.3

clr p3.4

mov r4, #100

llai: setb p3.2

setb p3.5

call delay

clr p3.2

clr p3.5

call delay

djnz r4, llai

jmp qua0 ; trở lại trình quét phím

quay_trai: ; cho quay vòng qua tráisetb p3.0

clr p3.1

setb p3.2

clr p3.3

setb p3.4

setb p3.5

jmp qua0 ; trở lại trình quét phím

quay_phai: ; cho quay vòng qua phảiclr p3.0

setb p3.1

setb p3.2

setb p3.3

clr p3.4

setb p3.5

jmp qua0 ; trở lại trình quét phím

del: ; đặt tên nhãn dùng cho lệnh nhẩy
mov r3, # 10 ; nạp trị 10 vào thanh ghi r3
mov r4, #200 ; nạp trị 200 vào thanh ghi r4
v_r4: ; đặt tên nhãn dùng cho lệnh nhẩy
djnz r4, $ ; giảm -1 đến khi trị trong r4 băng 0
djnz r3, v_r4 ; giảm trị trong r3 theo bước -1, r3 0?, định hướng nhẩy
ret ; quay lại sau lệnh call del


delay: ; đặt tên nhãn cho trình làm trểmov r5, #100 ; nạp trị 100 vào thanh ghi r5
v_r6: ; đặt tên nhãn dùng cho lệnh nhẩy
mov r6, #250 ; nạp trị 250 vào thanh ghi r5djnz r6, $ ; giảm theo bước -1 cho đến khi bằng 0 

djnz r5, v_r6 ; giảm r5 theo bước -1, r5=0? chọn hướng nhẩyret ; quay lại sau lệnh call delayend ; dừng biên dịch tại dòng này


Phân tích các câu lệnh viết trong chương trình trên:




2. Cách dùng phím kiểu ma trận 


Chúng ta sẽ viết chương trình nguồn cho kiểu bàn phím ma trận 4x4 như hình vẽ. 


Image has been scaled down 1% (900x674). Click this bar to view original image (905x677). Click image to open in new window.




Trong 
bài thực hành này, chúng ta sẽ cho lấy mã có trong bảng xuất 
ra trên cảng p3 khi nhấn một trong các phím trên ma trận 4x4. 


org 0000h ; Khởi đầu từ thanh nhớ 0000hmov p2, #11111111b ; đặt các chân Input lên 1k1: ; tên nhãnmov p1, #00000000b ; đặt các chân Ouput xuống 0mov a, p2 ; chuyển hiện trạng của p2 vào aanl a, #00001111b ; lấy logic AND để che 4 bit caocjne a, #00001111b, k1 ; kiểm tra xem có phím nhấn chưa?k2: ; đặt tên nhãncall delay ; gọi chương trình trể tránh rung phímmov a, p2 ; chuyển trạng thái p2 vào aanl a, #00001111b ; lấy logic AND che 4 bit caocjne a, #00001111b, tim_hang ; so sánh để nhẩyjmp k2 ; nhẩy về k2tim_hang: ; đặt tên nhãnmov p1, #11111110b ; đặt hàng 0, xuống bit 0mov a, p2 ; chuyển p2 vào aanl a, #00001111b ; lấy logic AND, che 4 bit caocjne a, #00001111b, hang_0 ; so sánh để nhẩy;

mov p1, #11111101b ; đặt hàng 1, xuống bit 0mov a, p2 ; chuyển p2 vào aanl a, #00001111b ; lấy logic AND, che 4 bit caocjne a, #00001111b, hang_1 ; so sánh để nhẩy;

mov p1, #11111011b ; đặt hàng 2, xuống bit 0mov a, p2 ; chuyển p2 vào aanl a, #00001111b ; lấy logic AND, che 4 bit caocjne a, #00001111b, hang_2 ; so sánh để nhẩy;

mov p1, #11110111b ; đặt hàng 3, xuống bit 0mov a, p2 ; chuyển p2 vào aanl a, #00001111b ; lấy logic AND, che 4 bit caocjne a, #00001111b, hang_3 ; so sánh để nhẩy;

hang_0: ; tìm ra một trong 4 phím hàng 0mov dptr, #m_hang_0

jmp tim_phim ; qua trình tìm phímhang_1: ; tìm ra một trong 4 phím hàng 1mov dptr, #m_hang_1

jmp tim_phim ; qua trình tìm phímhang_2: ; tìm ra một trong 4 phím hàng 2mov dptr, #m_hang_2

jmp tim_phim ; qua trình tìm phímhang_3: ; tìm ra một trong 4 phím hàng 3mov dptr, #m_hang_3

jmp tim_phim ; qua trình tìm phím;

tim_phim: ; đặt tên nhãn cho trình tìm phímrrc a ; cho 8 bit trong a quay vòng có qua bit cờ Cjnc out ; kiểm tra bit 0 vào bit cờ C để nhẩyinc dptr ; cho tăng trị trong bảng lên một nhịpjmp tim_phim ; quay lại tên nhãn tim_phimout: ; đặt tên nhãnclr a ; xóa sạch trị trong thanh amovc a, @a+dptr ; lấy mã trong bảng theo a và cất vào amov p3, a ; chuyển kết quả ra cảng p3jmp k1 ; nhẩy về k1m_hang_0: ; đặt tên bảngdb 01h, 02h, 03h, 04h ; mã trong bảng hàng 0m_hang_1: ; đặt tên bảngdb 05h, 06h, 07h, 08h ; mã trong bảng hàng 1m_hang_2: ; đặt tên bảngdb 09h, 0ah, 0bh, 0ch ; mã trong bảng hàng 2m_hang_3: ; đặt tên bảngdb 0dh, 0eh, 0fh, 00h ; mã trong bảng hàng 3 

;

delay: ; trình làm trểmov r5, #100 ; đặt trị 100 vào thanh ghi r5v_r6: ; đặt tên nhãn cho lệnh nhẩy
mov r6, #100 ; đặt trị 100 vào thanh ghi r6djnz r6, $ ; giảm theo bước -1 trị trong r6 cho đến khi bằng 0djnz r5, v_r6 ; giảm trị trong r5 theo bước -1, r5=0?, chọn hướng nhẩyret ; quay lại sau lệnh call delayend ; dừng biên dịch tại dòng này


Nhắn Bạn:
Mã xuất theo phím nhấn đặt trong các bảng: m_hang_0, m_hang_1, 
m_hang_2 và m_hang_3. Vậy nếu Bạn muốn dùng các mã để điều 
khiển các thiết bị theo bảng 16 phím nhấn này, thì các mã 
điều khiển do Bạn tạo ra hãy cho cất trong các bảng theo đúng 
vị trí. Vậy, khi Bạn nhấn phím 0 sẽ có mã 0 xuất ra trên cảng
p3, nhấn phím 1 sẽ có mã 1 xuất ra trên cảng p3, nhấn phím 2 
sẽ có mã 2 xuất ra trên cảng p3....Bạn sẽ có 16 mã điều khiển
ứng với 16 phím nhấn.

Nếu Bạn dùng ma trận 8 chân trên cảng p1 làm 8 hàng và dùng 8 chân trên cảng p2 làm 8 cột.
Bạn sẽ có ma trận 8x8, trên ma trận này Bạn có thể gắn đến 
64 phím nhấn và như vậy Bạn có thể có đến 64 mã lệnh dùng 
để điều khiển các thiết bị. Phải không? 
Mở rộng: Nhập tín hiệu vào ic lập trình lấy từ các bộ cảm biến
Chúng ta
biết trong thiên nhiên có rất nhiều "thực thể" không thuộc 
điện, vậy nếu muốn đưa các "thực thể" này vào các ic lập 
trình, chúng ta phải dùng đến các sensor, quen gọi là các cảm biến.
Phần tiếp theo chúng ta sẽ tìm hiểu một vài cảm biến thường 
dùng, dễ tìm, trong việc biến đổi các đại lượng không thuộc 
điện ra điện và tìm cách chuyển các đại lượng này vào ic lập
trình để được xử lý. 

Trước hết, hãy nói đến cảm biến quang.

Chúng ta biết, ánh 
sáng là một thực thể rất phổ biến, chúng ta nhận biết ánh 
sáng bằng các tế bào thị giác đặt ở mắt. Trong kỹ thuật 
điện tử, người ta cũng chế tạo được nhiều bộ cảm biến có 
thể chuyển đổi ánh sáng ra dạng tín hiệu điện, như: quang trở,
quang diode, pin quang điện... Ở đây chúng ta thử dùng quang cảm 
biến để tạo ra các tín hiệu cho nhập vài ic lập trình và 
viết các chương trình nguồn dùng để điều khiển các thiết bị 
theo quang năng 



Quang trở là một điện trở,
nghĩa là nó có thể cho dòng điện chảy qua theo cả hai chiều 
như nhau, Bạn cũng có thể dùng quang trở kết hợp với các điện
trở khác làm thành các cầu chia áp. Quang trở khi bị chiếu 
sáng sẽ giảm ohm, do vậy nó sẽ làm thay đổi cường độ dòng 
điện chảy qua nó. Trong các máy ảnh người ta thường dùng quang 
trở và máy đo dòng để làm thiết bị đo cường độ ánh sáng. 
Trong các TV đời mới, người ta dùng quang trở làm thiết bị tự 
động điều chỉnh mức sáng của màn hình tùy theo mức sáng của 
phòng. Trong các đầu dò PIR, người ta dùng quang trở để cho mở 
mạch tắt mở sáng mỗi khi trời về tối, người ta dùng quang trở
với các kính lọc màu để làm các bộ cảm biến dò tìm 
màu...Bạn có thể dùng một Ohm kế thông thường để kiểm tra các
quang trở. Khi đo ohm, nếu cho chiếu sáng, quang trở sẽ giảm ohm
và khi bị che sáng quang trở sẽ tăng ohm.






Photo diode, hay diode hồng ngoại vốn
là một mối nối bán dẫn PN, nó có đặc tính làm thay đổi 
cường độ dòng điện mỗi khi mối nối PN bị kích sáng. Trong 
mạch, photo diode thường cho ghép với một điện trở lớn ohm, nó 
đặt ở trạng thái phân cực nghịch. Khi bị che sáng, photo diode 
dẫn điện yếu và khi bị chiếu sáng, nó sẽ dẫn điện mạnh hơn. 
Ở trạng thái phân cực thuận, nó cũng có tính ghim áp như các 
diode thông thường khác. Photo diode có hoán tính nhỏ, cho thay 
đổi nhanh, nên người ta thích dùng photo diode trong các thiết bị
điều khiển hồng ngoại, dùng trong các thiết bị điều khiển 
tốc độ quay của các motor, dùng trong mạch đo tốc. Bạn cũng có
thể dùng ohm kế thông thường để kiểm tra các photo diode, 
dùng thang đo Rx10K, lúc này điện áp có trên 2 dây đo là 12V, 
đặt photo diode vào dây đo theo kiểu phân cực nghịch, dùng một 
hộp điều khiển Remote thông dụng, cho phát lệnh điều khiển, 
chiếu remote vào photo diode, Bạn sẽ thấy kim máy đo rung theo 
xung lệnh, dấu hiệu này cho biết photo diode còn tốt. Photo diode
có rất nhiều trong các đầu máy hát băng hình.





Diode Laser,
vốn là một mối nối bán dẫn PN, khi bị kích thích, cấp dòng,
nó sẽ phát ra thứ ánh sáng Laser. Ánh sáng Laser khác với 
ánh sáng thường là các tia sáng phát ra có tính đồng pha,
nghĩa là nó tác kích vào các vật cản với pha giống nhau, 
nhờ vậy khi Bạn cho hội tụ các chùm tia sáng Laser tại một 
điểm nhỏ, tại điểm này cường độ sáng vẫn sẽ rất mạnh và 
rất nóng (Điều này sẽ không làm được với loại ánh sáng 
thường), nên điểm hội tụ gọi là tiêu điểm (tiêu 焦
có nghĩa là điểm nóng). Ngày nay người ta dùng điểm sáng 
Laser để đọc lại các điểm tín hiệu lồi lõm rất nhỏ đã đặt 
trên các vòng quay nằm trên các mặt đĩa CD hay DVD. Tia sáng 
Laser còn dùng làm tia chiếu định vị cho các máy ngắm, và với
các chùm tia laser có cường độ mạnh, nó còn dùng làm vũ khí
tấn công đốt cháy các vật bay. Bạn có thể dùng một Ohm kế 
thông thường để đo các diode Laser. Lấy thang đo Rx1 để có dòng 
chảy ra trên 2 dây đo lớn, trên 100mA, khi đo, diode Laser được cho 
phân cực thuận, bên trong sẽ ánh lên một điểm sáng màu đỏ rất 
nhỏ. Khi xử dụng các diode Laser, Bạn tránh nhìn thẳng vào tia 
sáng Laser vì mức sáng quá mạnh có thể làm hư mắt.




Opto là các bộ ghép quang điện. Người ta cho tổ hợp một bên là diode phát quang, phát ra tia sáng hồng ngoại và một bên là quang transistor
dùng thâu nhận tia sáng hồng ngoại. Hai thành phần này có thể
đặt trên hai mạch điện riêng biệt cách ly nhau, và trao đổi 
thông tin với nhau qua các tia sáng của bên phát và của bên 
nhận. Opto có 2 dạng: dạng đóng kín và dạng để hở. Dạng đóng
kín thường dùng để trao đổi thông tin giữa các bo mạch, và 
dạng để hở thường dùng để phát hiện các vật thể, như: dò 
tìm vật quay, dò tìm các chuyển động, dò tìm các đường kẻ, 
dùng để đo tốc...Bạn có thể tìm thấy các loại opto có trong 
các mạch điều khiển và dĩ nhiên, Bạn cũng có thể dùng Ohm kế
để đo kiểm tra các opto. Dùng tính thuận (kim lên) nghịch (kim 
không lên) để kiểm tra quang diode trong opto, rồi tìm cách cho 
cấp dòng qua quang diode, dùng ohm kế đo thuận nghịch trên quang 
transistor để kiểm tra bên nhận. 





Solar Cell hay pin mặt trời,
là một bộ chuyển đổi năng lượng, nó chuyển đổi quang năng ra 
dạng điện năng. Khi trên mặt pin solar cell được chiếu sáng, trên 
các dây cực âm và dương sẽ xuất hiện điện áp, mức áp thường 
biến đổi theo cường độ sáng và tùy theo nội trở của tải. 
Trong ứng dụng người ta thường dùng pin mặt trời phát ra điện 
năng để nạp tích trữ vào các nguồn pin charge, và dùng nguồn 
pin này để thắp sáng hay làm quay các motor. Chúng ta thường 
thấy trên các máy tính số (calculator) có trang bị lá pin mặt 
trời để có thể vận hành trong các nguồn sáng trong phòng. 
Ngày nay, người ta có nhiều nghiên cứu về cách khai thác dùng 
năng lượng sạch, như nắng như gió, với nắng pin mặt trời là 
không thể thiếu được. Ngày mai, với các tấm pin hiệu suất cao, 
người ta sẽ có thể dùng điện lấy từ nguồn sáng tự nhiên, đó 
là ánh nắng vô tận của thái dương. Bạn hãy dùng một Volt kế 
thông thường để đo kiểm tra các Solar Cell, và dùng các Led để 
kiểm tra khả năng cấp tải của các pin mặt trời. 


Khảo sát: Cách dùng cảm biến quang điện để tạo xung nhịp đưa vào ic lập trình. 




Trong sơ 
đồ này chúng ta dùng bộ đếm của timer 0 chạy ở mode 2 để đếm 
xung nhịp đưa vào trên chân p3.4, tức chân T0, để đơn giản quá 
bài thực hành chúng ta chỉ dùng số đếm trong thanh tl0, nghĩa 
là đếm tối đa 255 nhịp và quay lại. Kết quả đếm sẽ cho hiển 
thị trên bảng đèn số dùng mã 7 đoạn.

Mạch 
dùng cảm biến quang điện, chúng ta dùng Led hồng ngoại cho 
chiếu sáng vào một quang transistor, bình thường quang transistor 
dẫn điện, nó kích dẫn Q1 và tạo mức áp cao trên chân T0, khi 
có người đi qua, tia sáng bị che và làm cho quang transistor ngưng
dẫn, Q1 tắt và mức áp trên chân p3.4 giảm xuống mức áp 0V và 
lúc này xung nhịp vào thanh ghi tl0, thanh ghi tl0 sẽ tiếp tục 
tích cất số liệu này và luôn cho hiển thị kết quả con số có 
trong tl0 trên bảng đèn số.


Chương trình nguồn này đơn giản, dùng cho thực hành, tìm hiểu cách viết các câu lệnh cơ bản:



; Chú thích

; a,b,c,d,e,f,g -> Đèn số 7 đoạn trên Port 2

; P3.0 -> đèn LED1 hàng đơn vị

; P3.1 -> đèn LED2 hàng chục

; P3.2 -> đèn LED3 hàng trăm

; P3.4(T0) -> cảm biến quang điện

; 30h ; thanh ghi giữ số hàng đơn vi

; 31h : thanh ghi giữ số hàng chục

; 32h : thanh ghi giữ số hàng trăm



; Chỉ đếm với thanh tl0, trong đó hàng đơn vị đếm đến 10, hàng chục đến 5 hàng trăm đến 2.



ORG 0000h

SJMP MAIN


ORG 0030H

MAIN: 
MOV DPTR,#LED7SEG ; vào bảng lấy mã hiện số trên đèn 7 đoạnMOV TMOD,#06h ; counter 0, mode 2, đếm xung vào trên chân T0

MOV TH0,#0C4H ; nạp trị vào thanh th0SETB P3.0 ; tắt đèn số hàng đơn vịSETB P3.1 ; tắt đèn số hàng chụcSETB P3.2 ; tắt đèn số hàng trămSETB P3.4 ; xung đếm vào ở chân này, T0SETB TR0 ; mở mạch cho xung đếm vào thanh ghi tl0
BEGIN: 

MOV A,TL0 ; cho chuyển trị trong tl0 vào thanh ghi aCALL BIN2BCD ; gọi chương trình đổi số ra dạng thập phânMOV A,30h ; chuyển trị có trong thanh 30h vào thanh ghi a 

CJNE A, #10,qua1 ; so sánh trị trong a với số 10, để định hướng nhẩyMOV A,#00H ; trả trị trong a về 0qua1: ; đặt tên nhãn cho lệnh nhẩyMOVC A,@A+DPTR ; lấy trị trong bảng cho vào thanh ghi aMOV 30h,A ; cất trị trong a vào thanh 30hMOV A,31h ; chuyển trị có trong thanh 31h vào thanh ghi aCJNE A,#6,qua2 ; so sánh trị trong a với số 6, để chọn hướng nhẩyMOV A,#00 ; trả trị trong a về 0qua2: ; đặt tên nhãn cho lệnh nhẩyMOVC A,@A+DPTR ; lấy trị trong bảng cho vào thanh ghi aMOV 31h,A ; cất trị trong a vào thanh 31hMOV A,32h ; chuyển trị có trong thanh 32h vào thanh ghi aCJNE A,#1, qua3 ; so sánh trị trong a với số 1, để chọn hướng nhẩyMOV A,#00H ; trả trị trong a về 0qua3: ; đặt tên nhãn cho lệnh nhẩyMOVC A,@A+DPTR ; lấy trị trong bảng cho vào thanh ghi aMOV 32h,A ; cất trị trong a vào thanh 32hKET_THUC: ; đặt tên nhãnCALL DISPLAY ; cho gọi chương trình hiển thị sốJMP BEGIN ; trở lại tên nhãn beginDISPLAY: ; trình hiển thị số trên bảng đènMOV P1,30H ; xuất trị trong thanh 30h ra cảng p1CLR P3.0 ; mở đèn hàng đơn vịCALL DELAY ; gọi delaySETB P3.0 ; tắt đèn tránh lem
MOV P1,31H ; xuất trị trong thanh 31h ra cảng p1CLR P3.1 ; mở đèn Led hàng chụcCALL DELAY ; gọi delaySETB P3.1 ; tắt đèn tránh lem
MOV P1,32H ; xuất trị trong thanh 32h ra cảng p1CLR P3.2 ; mở đèn Led hàng trămCALL DELAY ; gọi delaySETB P3.2 ; tắt đèn tránh lemRET

BIN2BCD: ; trình làm phép toán đổi trị nhị phân ra dạng số thập phânMOV B,#10 ; đặt trị 10 vào thanh b, để làm phép toán chia 10DIV AB ; chia trị trong a cho 10MOV 30h,B ; cất kết quả trong b vào thanh 30hMOV B,#10 ; đặt trị 10 vào thanh b, để làm phép toán chia 10DIV AB ; chia trị trong a cho 10MOV 31H,B ; cất kết quả trong b vào thanh 31hMOV 32h,A ; cất kết quả trong a vào 32hRET ; quay lại sau lệnh gọi call bin2bcdDELAY: ; đặt tên nhãn cho lệnh nhẩyMOV R6,#10 ; nạp trị 10 vào thanh ghi r6v_r7:
MOV R7,#0FFh ; nạp trị 0ffh vào thanh ghi r7DJNZ R7, $ ; cho trị trong r7 giảm theo bước -1 đến lúc bằng 0DJNZ R6, v_r7 ; cho trị trong r6 giảm theo bước -1, r6=0?, định hướng nhẩyRET ; quay lại sau lệnh call delayBảng tạo mã hiện số trên đèn Led 7 đoạnLED7SEG: ; mã 7 đoạn cho hiện các số 0, 1, 2, 3, 4, 5, 6, 7, 8, 9DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END ; dừng biên dịch tại dòng này

1 comment :

  1. Bài viết hay. cảm ơn Ad đã chia sẻ.
    .................................................................
    Galile
    Chuyên bán máy nước nóng năng lượng mặt trời giá rẻ
    Tel: 08. 66 851 451 – 0901 315 713
    Mail: dichvugalile@gmail.com
    Click xem chi tiết: Lắp đặt máy nước nóng năng lượng mặt trời hoặc lap dat may nuoc nong nang luong mat troi

    ReplyDelete