A. Một con chip AT89C51:
Như các bạn thấy trên hình:
- Các chân
P0.0 ñến P0.7,( 39-32 )
P1.0 ñến P1.7,( 1-8 )
P2.0 ñến P2.7,( 21-28 )
P3.0 ñến P3.7,( 10-17 )
Là các cổng xuất nhập. ðó là nơi ñưa tín hiệu vào VðK và nơi VðK xuất tín hiệu
ra.
- Chân RST(9): là chân reset. Khi chân này ñược ấn thì các thanh ghi hệ thống sẽ
ñược thiết lập lại trạng thái ban ñầu.
- Các chân Vcc(40) và GND(20): là 2 chân cấp nguồn cho VðK. Vcc ở mức cao
5V. GND ở mức thấp 0V.
- Hai chân XTAL1 và XTAL2 là hai chân cung cấp xung dao ñộng cho VðK.
Thường là nối với thạch anh có tần số 12 MHz.
Trên ñây là một số ñặc ñiểm cần lưu ý về cấu trúc chân của con chip AT89C51.
Các bạn nên nhớ kỹ ñể tiện cho việc lập trình sau này.
14 trang |
Chia sẻ: hoang10 | Lượt xem: 706 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Vi điều khiển 8051 - Bài mở đầu: Giới thiệu vi điều khiển 8051, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
Bài mở ñầu
GIỚI THIỆU VỀ VI ðIỀU KHIỂN 8051
A. Một con chip AT89C51:
Như các bạn thấy trên hình:
- Các chân
P0.0 ñến P0.7,( 39-32 )
P1.0 ñến P1.7,( 1-8 )
P2.0 ñến P2.7,( 21-28 )
P3.0 ñến P3.7,( 10-17 )
Là các cổng xuất nhập. ðó là nơi ñưa tín hiệu vào VðK và nơi VðK xuất tín hiệu
ra.
- Chân RST(9): là chân reset. Khi chân này ñược ấn thì các thanh ghi hệ thống sẽ
ñược thiết lập lại trạng thái ban ñầu.
- Các chân Vcc(40) và GND(20): là 2 chân cấp nguồn cho VðK. Vcc ở mức cao
5V. GND ở mức thấp 0V.
- Hai chân XTAL1 và XTAL2 là hai chân cung cấp xung dao ñộng cho VðK.
Thường là nối với thạch anh có tần số 12 MHz.
Trên ñây là một số ñặc ñiểm cần lưu ý về cấu trúc chân của con chip AT89C51.
Các bạn nên nhớ kỹ ñể tiện cho việc lập trình sau này.
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
* Nạp chương trình cho VðK.
Trước tiên chúng ta viết trình chương trình chạy cho VðK. Bạn có thể sử dụng
Notepad của Windows hay phần nềm 8051-IDE (tải trên mạng - vô Google mà
tìm).
Sau ñó chạy chương trình nạp (EZ31) và dùng bộ nạp nạp vào VðK.
B. Nó hoạt ñộng như thế nào?
Trước tiên chúng ta hãy ghi nhớ một số khái niệm.
- Tín hiệu : trong VðK tín hiệu có nghĩa là một sự thay ñổi về ñiện thế hay mức
trạng thái của một hay nhiều bit.
Ví dụ: Có một mạch ñiện như hình vẽ.
- Khi ta chưa ñóng khóa k1 thì chân P1.0 của VðK có ñiện thế 0V( mức thấp).
- Khi ta ñóng khóa k1 thì chân P1.0 của VðK có ñiện thế 5V( mức cao).
Sự thay ñổi ñiện thế ñó là một tín hiệu.
Mỗi chân của VðK là một bit, gồm 2 mức trạng thái là “cao và thấp”.
Tám chân cùng loại tạo nên 1 cổng (8 bit).
VD : cổng P1 bao gồm 8 chân từ P1.0 ñến P1.7
cổng P0 bao gồm 8 chân từ P0.0 ñến P0.7
- Thanh ghi: Mỗi thanh ghi là một ô nhớ 8 bit.
VðK cung cấp cho chúng ta 8 thanh ghi mặc ñịnh là từ R0 ñến R7.
Ngoài ra còn có một số những thanh ghi ñặc biệt khác như :
TMOD/TCON : là những thanh ghi của bộ ñịnh thời.
Các cổng P0 ñến P3 cũng là những thanh ghi xuất nhập.v.v.
Có những thanh ghi có ñịa chỉ bit cụ thể, có những thanh ghi thì không.
- ðịa chỉ bit: mỗi thanh ghi ñược cấu thành từ 8 bit. Có những thanh ghi có chức
năng ñặc biệt và mỗi bit của nó ñảm nhận 1 chức năng khác nhau. Chúng ta có thể
thay ñổi mức trạng thái của từng bit thay vì phải tác ñộng lên cả thanh ghi. ðiều
ñó sẽ giúp cho việc xử lý tín hiệu trở nên dễ dàng hơn. Thao tác lập trình trở nên
ñơn giản hơn.”
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
- Dữ liệu trong mỗi thanh ghi là một con số từ 00H~FFH (theo hệ hexa) hay từ
00000000B ñến 11111111B( theo hệ nhị phân). Như các bạn thấy các số trong hệ
nhị phân có 8 chữ số tượng trưng cho 8 bit của mỗi thanh ghi. Mỗi bit có 2 trạng
thái ứng với 2 số là 0-mức thấp và 1-mức cao. Giá trị hexa chẳng qua chỉ là một
cách viết gọn của những người ñã quen với công việc lập trình. Chúng ta có thể
chuyển từ nhị phân sang hexa một cách dễ dàng nhờ máy tính.
Vì sao viết hexa lại dễ hơn viết nhị phân. bởi vì trong lập trình VðK dữ liệu nạp
cho mỗi thanh ghi ñặc biệt là cố ñịnh ứng với mỗi chức năng khác nhau.Vì vậy
khi quen rồi bạn viết bằng hexa sẽ nhanh gọn hơn. Chúng ta cũng có thể sử dụng
số thập phân.
VðK hoạt ñộng như thế nào???
Khi nhận ñược một tín hiệu từ bên ngoài. Tín hiệu ñó có thể từ công tắc hoặc cảm
biến. Lúc ñó VðK sẽ xử lí theo các chương trình mà ta ñã lập sẵn ứng với tín hiệu
ñó. Và kết quả là ta sẽ quy ñịnh cho VðK ñưa ra những tín hiệu tương ứng nhằm
giải quyết tình huống. Một ñiều hiển nhiên là những tình huống ấy ta ñã dự tính
trước và lập sẵn chương trình ñể giải quyết. Nếu không VðK không thể tự xử lý
ñược. Nó chỉ biết chạy theo ñúng những gì chúng ta ñã lập trình cho nó.
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
Bài 2
RAM VÀ CÁC THANH GHI ðẶC BIỆT
ðây là vùng RAM ña mục ñích. ðây là các thanh ghi có chức năng ñặc biệt
Như ñã ñề cập ở bài mở ñầu, các thanh ghi ñặc biệt mang chức năng khác nhau,
chúng ñược cấu tạo từ 8 bit, và như ở trên chúng ta có thể lấy dữ liệu trực tiếp từ
ñịa chỉ bit hoặc thông qua tên gọi của của chúng. Các thanh ghi ñặc biệt nằm ở vị
trí từ 80H ñến FFH.
Trong các thanh ghi ñó chúng ta hãy quan tâm tới các thanh ghi của bộ ñịnh thời:
TMOD là thanh ghi chọn chế ñộ ñịnh thời.
TCON (ñịnh ñịa chỉ từng bit) là thanh ghi ñiều khiển chế ñộ ñịnh thời.
TL0 - TH0 là 2 thanh ghi quy ước byte thấp và byte cao của bộ ñịnh thời 0.
TL1 - TH1 là 2 thanh ghi quy ước byte thấp và byte cao của bộ ñịnh thời 1.
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
Bài 3
CÁC LỆNH THƯỜNG GẶP ðỂ LẬP TRÌNH ROBOT
ðối với hoạt ñộng robocon, lập trình VðK gần như bó gọn trong một số câu lệnh
thường gặp sau ñây:
1. Lệnh MOV
- Cấu trúc: MOV ñích,nguồn
- Chức năng: Chuyển dữ liệu từ nguồn vào ñích và thoát khỏi câu lệnh.
- Lưu ý: ðích là các thanh ghi, nguồn có thể là thanh ghi cũng có thể là giá trị trực
tiếp hoặc gián tiếp. Nếu nguồn là dữ liệu trực tiếp thì phải ghi theo cấu trúc:
MOV ñích,#dữ liệu trực tiếp.
Nếu là số hexa thì phải viết #0(dữ liệu dạng hexa). Vd #0FFH
Nêu là số nhị phân phải viết #(dữ liệu dạng bit)B. Vd #11111111B
Nếu là số thập phân phải viết #(dữ liệu dạng thập phân. Vd #255
2. Lệnh JB
- Cấu trúc: JB bit,nhãn
- Chức năng: Kiểm tra mức trạng thái của bit. Nếu là mức thấp thì thoát khỏi câu
lệnh. Nếu là mức cao thì nhảy ñến vị trí của nhãn.
- Lưu ý: Nhãn là tên gọi ñánh dấu một vị trí nào ñó trong chương trình lập trình
mà chúng ta quy ñịnh cho nó.
3. Lệnh JNB
- Cấu trúc: JNB bit,nhãn
- Chức năng: Kiểm tra mức trạng thái của bit. Nếu là mức cao thì thoát khỏi câu
lệnh. Nếu là mức thấp thì nhảy ñến vị trí của nhãn.
4. Lệnh CJNE
- Cấu trúc: CJNE ñích,nguồn,nhãn
- Chức năng: So sánh dữ liệu của nguồn với ñích. Nếu không bằng nhau thì nhảy
ñến vị trí của nhãn. Nếu bằng thì thoát khỏi câu lệnh.
5. Lệnh DJNZ
- Cấu trúc: DJNZ thanh ghi,nhãn
- Chức năng: So sánh giá trị thanh ghi với 0. Nếu không bằng thì giảm giá trị
thanh ghi ñi 1 và nhảy tới vị trí của nhãn. Nếu bằng 0 thì thoát ra khỏi câu lệnh.
- Lưu ý: Khi lập trình chúng ta nên ñể cho thanh ghi có gia trị dương.
6. Lệnh SETB
- Cấu trúc: SETB bit
- Chức năng: Thiết lập mức trạng thái cao cho bit và thoát khỏi câu lệnh.
- Lưu ý: Khi bit ñang ở mức 0 (thấp) thì ñưa lên mức 1(cao). Còn ñang ở mức 1
thì giữ nguyên.
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
7. Lệnh CLR
- Cấu trúc: CLR bit
- Chức năng: Thiết lập mức trạng thái 0 cho bit và thoát khỏi câu lệnh.
- Lưu ý: Khi bit ñang ở mức 1thì ñưa xuống mức 0. Còn ñang ở mức 0 thì giữ
nguyên. Có thể thay bit bằng thanh ghi và khi ñó tất cả các bit của thanh ghi ñều
ñược ñưa xuống mức 0 .
8. Lệnh INC
- Cấu trúc: INC thanh ghi
- Chức năng: Tăng giá trị thanh ghi lên 1 và thoát khỏi câu lệnh.
- Lưu ý: Khi lập trình chúng ta nên ñể cho thanh ghi có gia trị dương.
9. Lệnh LJMP
- Cấu trúc: LJMP nhãn
- Chức năng: Nhảy tới vị trí của nhãn.
- Lưu ý: Có thể nhảy trong toàn chương trình.
10. Lệnh SJMP
- Cấu trúc: SJMP nhãn
- Chức năng: Nhảy tới vị trí của nhãn.
- Lưu ý: Có thể nhảy trong phạm vi 128 byte trước câu lệnh và 127 byte sau lệnh.
11. Lệnh RET
- Cấu trúc: RET
- Chức năng: Kết thúc một chương trình con và ñưa con trỏ trở về vị trí lúc gọi
chương trình con.
12. Lệnh LCALL
- Cấu trúc: LCALL nhãn
- Chức năng: Gọi một chương trình con bắt ñầu từ vị trí nhãn.
- Lưu ý: Có thể gọi trong toàn chương trình.
Các bạn nên ñọc thêm trong sách tham khảo ñể biết thêm về số byte và số chu kỳ
máy của mỗi câu lệnh.
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
Bài 4
TRẠNG THÁI KHI RESET
1. VðK sẽ bắt ñầu hoạt ñộng khi chúng ta cấp nguồn cho nó bằng cách ñóng khóa
K1. Khi ñó tất cả các thanh ghi sẽ ñược khởi tạo trạng thái.(Xem trong phần reset)
con trỏ của chương trình sẽ ñược ñặt ở vị trí thấp nhất của RAM - 00H.
2. VðK sẽ reset lại hệ thống, nghĩa là thiết lập lại trạng thái ban ñầu lúc khởi
ñộng cho tất cả các thanh ghi. và ñưa con trỏ trở lại vị trí 00H. Muốn reset ñúng ta
phải ñóng khóa K2 lâu hơn 2 chu kỳ máy.
Bảng trạng thái khi reset:
3. Như chúng ta thấy ở bảng Reset, trạng thái của các cổng xuất nhập ( cổng
P0~P3 ) ñều là FFH, nghĩa là tất cả các chân trong cổng ñều ở trạng thái mức 1.
Tuy nhiên nếu bất kỳ chân nào trong các cổng nối với một mạch ngoài hở - nghĩa
là phụ thuộc vào các ñiều kiện bên ngoài, thì trạng thái của chân ñó sẽ là trạng
thái của tín hiệu mà mạch ngoài ñưa vào. Nếu mạch ngoài phụ thuộc vào tín hiệu
của VðK thì trạng thái của chân ra sẽ là trạng thái mà VðK xuất ra.
Trong hình miêu tả ở trên chân P0.1 sẽ có trạng thái là mức 0, vì K3 hở. Còn chân
P2.0 thì có trạng thái phụ thuộc vào VðK.
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
Bài 5
CÁC THÀNH PHẦN CỦA MỘT CHƯƠNG TRÌNH LẬP TRÌNH
1. Cấu trúc một chương trình lập trình.
ORG ....(Vị trí bắt ñầu của con trỏ chương trình)
...
(ðoạn chương trình chính)
...
(Các chương trình con)
...
END (kết thúc chương trình)
2. Con trỏ chương trình.
ðó là vị trí mà VðK ñang thực thi tại ñó.
Thông thường khi bắt ñầu một chương trình thì con trỏ luôn ở vị trí thấp nhất
00H. tuy nhiên chúng ta có thể quy ñịnh cho nó bắt ñầu làm việc tại một vị trí
khác.Chúng ta căn cứ vào ñịa chỉ trên RAM ñể chọn vùng làm việc.
Vd:
ORG 00H -----(bắt ñầu từ vị trí 00H)
ORG 0030H -----(bắt ñầu từ vị trí 30H) v.v.
3. Nhãn.
Nhãn là tên gọi ñánh dấu một vị trí nào ñó trong chương trình lập trình mà chúng
ta quy ñịnh cho nó.
VD:
ORG 00H ----------(con trỏ chương trình bắt ñầu ở vị trí 00H)
LJMP MAIN ----------(nhảy tới vị trí có nhãn là MAIN)
ORG 0030H ----------(vị trí bắt ñầu chương trình chính MAIN)
MAIN:
MOV R1,#10----------(nạp cho R1 giá trị là 10.)
LAP1:
DJNZ R1,LAP1
END--------------------(Kết thúc chương trình.)
Trong chương trình trên nhãn là MAIN và LAP1. Khi nhãn ñược gọi thì con trỏ
chương trình sẽ nhảy tới vị trí của nhãn ñể thực thi câu lệnh tại vị trí ñó.
4. Chương trình con.
Cấu trúc chương trình con.
Nhãn:
.................
Các câu lệnh
.....
RET
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
VD:
ORG 00H
LJMP MAIN
ORG 0030H
MAIN:
MOV R1,#10
LCALL LAP1-------------gọi chương trình con
LAP1:
DJNZ R1,LAP1
RET -----------------------kết thúc chương trình con
END
Chương trình con có thể ñặt bên ngoài chương trình chính, trước hoặc sau.
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
Bài 6
HOẠT ðỘNG ðỊNH THỜI
1. Hoạt ñộng ñịnh thời:
Là sự kiểm soát thời gian ñể thực thi các câu lệnh trong quá trình xử lý của VðK.
* Một số khái niệm:
- Tần số dao ñộng: tần số của VðK luôn bằng 1/12 tần số của thạch anh gắn trong
mạch. (thường là loại 12MHz)
- Chu kỳ máy: T=1/f .Là thời gian làm việc của 1 dao ñộng máy
Giả sử tần số thạch anh là 12 MHz. ta có tần số VðK f = 12 MHz/12 = 1 MHz.
=1000000 Hz và khi ñó chu kỳ máy T = 1/1000000 = 0.000001 s = 1 micro giây.
- ðể thực hiện mỗi câu lệnh VðK ñều phải tốn một thời gian nhất ñịnh ứng với
mỗi câu lệnh ñó. ðó là số chu kỳ máy của mỗi câu lệnh.
- Giữa thuật toán lập trình và thực tế có một sự khác biệt rất lớn. ðó chính là thời
gian. VðK chạy với tốc ñộ micro giây, trong khi thực tế cùng lắm là chúng ta xử
lý công việc trong khoảng 0.1 giây là nhanh nhất có thể. Chính vì thế chúng ta khi
lập trình phải có công ñoạn xử lý thời gian bằng cách tạo trễ cho VðK ñể kéo dài
thời gian cho khớp với những thao tác trên thực tế.
2. Tạo trễ:
Chẳng hạn yêu cầu chúng ta cần một khoảng thời gian trễ là 200 micro giây.
Vậy với câu lệnh MOV (1 chu kỳ máy) chúng ta phải viết 200 câu lệnh liên tiếp.
Một công việc gần như không thể.
Vấn ñề ñặt ra là chúng ta phải xây dựng một thuật toán tạo trễ sao cho dễ dàng
cho người lập trình nhất.Và sau ñây là 1 thuật toán:
VD:
ORG 00H
LJMP MAIN
ORG 0030H
MAIN:
MOV R1,#100-------------Gán cho thanh ghi R1 giá trị là 100.
LAP1:
DJNZ R1,LAP1------------(So sánh giá trị thanh ghi R1 với 0,
Nếu không bằng thì giảm R1 ñi 1, rồi nhảy tới nhãn LAP1Công việc lại ñược tiếp
tục cho tới khi R1=0)
END
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
Như vậy với câu lệnh DJNZ (2 chu kỳ máy) VðK ñã lặp lại công việc kiểm tra
R1=0 tới 100 lần. tổng cộng số chu kỳ máy mà VðK ñã thực hiện là T = 2x100 =
200 chu kỳ = 200 micro giây. ðó là thuật toán tạo trễ. ðối với những khoảng thời
gian trễ quá lớn chúng ta phải sử dụng nhiều vòng lặp lồng nhau. Bởi vì giá trị
thanh ghi chỉ ñược phép ñạt tới 255.
VD:
ORG 00H
LJMP MAIN
ORG 0030H
MAIN:
MOV R1,#100
LAP1:
MOV R2,#100
LAP2:
DJNZ R2,LAP2
DJNZ R1,LAP1
END
Ta nhận thấy:
Tại LAP2 VðK ñã thực hiện 100 chu kỳ máy. Và cứ mỗi lần R2=0 thì kiểm tra
R1, cho ñến khi R1=0.
Như vậy câu lệnh DJNZ R2,LAP2 ñã ñược lặp 100x100=10000 lần => 20000 chu
kỳ máy = 0.02s.
Tất nhiên tổng số chu kỳ máy của cả thuật toán 1 + 300 + 20000=200301 chu kỳ.
tuy nhiên chúng ta có thể bỏ qua 301 chu kỳ vì nó quá nhỏ so với 20000.
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
Bài 7
BỘ ðỊNH THỜI
Khái niệm bộ ñịnh thời: Nói một cách nôm na thì bộ ñịnh thời là mạch chia tần
số của VðK cho 2n lần. Với n là số bit của bộ ñịnh thời. Vậy thời gian của một
chu kỳ ñịnh thời lúc này là:
T = 1/(12MHz/(12*2^n ))
VðK AT89C51 xử dụng 2 bộ ñịnh thời.
Cấu tạo: VðK AT89C51 cung cấp cho chúng ta 2 bộ ñịnh thời 0 và 1.
Bộ ñịnh thời ñược truy xuất bằng cách sử dụng 6 thanh ghi ñặc biệt là:
- TMOD là thanh ghi chọn chế ñộ ñịnh thời.
- TCON (ñịnh ñịa chỉ từng bit) là thanh ghi ñiều khiển chế ñộ ñịnh thời.
- TL0 - TH0 là 2 thanh ghi quy ước byte thấp và byte cao của bộ ñịnh thời 0.
- TL1 - TH1 là 2 thanh ghi quy ước byte thấp và byte cao của bộ ñịnh thời 1.
A. Thanh ghi TMOD.(Time Mode register): Cấu tạo bởi hai nhóm 4 bit.
Bit Tên Bộ ñịnh thời Mô tả
0
1
2
3
4
5
6
7
M0
M1
C/T
GATE
M0
M1
C/T
GATE
0
0
0
0
1
1
1
1
Bit chọn chế ñộ thứ 2
Bit chọn chế ñộ thứ 1
Bit chọn chức năng ñếm hoặc ñịnh thời cho bộ ñịnh thời 0
Bit ñiều khiển cổng cho bộ ñịnh thời 0
Bit chọn chế ñộ thứ 2
Bit chọn chế ñộ thứ 1
Bit chọn chức năng ñếm hoặc ñịnh thời cho bộ ñịnh thời 1
Bit ñiều khiển cổng cho bộ ñịnh thời 1
Bảng mô tả chế ñộ:
M1 M0 Chế ñộ Mô tả
0
0
1
1
0
1
0
1
0
1
2
3
Chế ñộ ñịnh thời 13 bit
Chế ñộ ñịnh thời 16 bit
Chế ñộ tự ñộng nạp lại 8 bit
Chế ñộ ñịnh thời chia sẻ.
Ở ñây chúng ta chỉ nghiên cứu chế ñộ ñịnh thời 16 bit.(Các chế ñộ khác mong các
ban xem tài liệu)
Thanh ghi 16 bit của nó ñược cấu tạo bởi 2 thanh ghi 8 bit là TLx/THx ghép lại
với nhau. x là tên của bộ ñịnh thời (1 hoặc 0). Giá trị thanh ghi TLx ñược lấy làm
byte thấp và giá trị thanh ghi THx lấy làm byte cao.
VD : TL1 / TH1
00H / FFH => giá trị thanh ghi 16 bit = FF00H.
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
Hoạt ñộng: Bộ ñịnh thời 16 bit hoạt ñộng giống như một bộ ñếm. Tức là khi chạy
bộ ñịnh thời VðK sẽ bắt ñầu ñếm từ giá trị mà chúng ta nạp vào thanh ghi 16 bit
của nó cho ñến giá trị FFFFH = 65536. Và khi ñó VðK sẽ bật một bit (gọi là cờ
tràn) từ 0 lên 1 báo hiệu ñã ñếm xong hay nói cách khác là tràn bộ ñịnh thời.
B. Thanh ghi TCON : Ở ñây chúng ta chỉ quan tâm ñến 4 bit cao của thanh hi
TCON. Còn 4 bit thấp chúng quy uớc là = 0.
Bit Tên Mô tả
7
6
5
4
TF1
TF1
TF0
TF0
Cờ tràn của bộ ñịnh thời 1
Bit ñiều khiển bộ ñịnh thời 1. Mức 1 là bật. Mức 0 là dừng
Cờ tràn của bộ ñịnh thời 0
Bit ñiều khiển bộ ñịnh thời 0. Mức 1 là bật. Mức 0 là dừng
Như vậy giả sử muốn khởi ñộng bộ ñịnh thời 1 chúng ta viết lệnh SETB TR1
C. Cấu trúc thuật toán viết cho bộ ñịnh thời:
MOV TMOD,#01H
LAP: MOV TH0,#dữ liệu
MOV TL0,#dữ liệu
SETB TR0
DEM: JNB TF0,DEM
CLR TR0
CLR TF0
END
Chúng ta có thể lấy dữ liệu byte cao và thấp ñể nạp cho TL0 và TH0 như sau.
- Xác ñịnh chúng ta cần trễ là bao nhiêu chu kỳ máy. VD 10000 Chu kỳ.
- Lấy 65536 - 10000 = 55536 => D8F0H.
- Vậy TH0 = D8, TL0 = F0.
Ngoài ra chúng ta còn có một thuật toán nữa ñể viết cho bộ ñịnh thời.
MOV TMOD,#01H
MOV R1,#số lần lặp lại
LAP: MOV TH0,#HIGH(-số chu kỳ máy cần thiết)
MOV TL0,#LOW(-số chu kỳ máy cần thiết)
SETB TR0
DEM: JNB TF0,DEM
CLR TR0
CLR TF0
DJNZ R1,LAP
END
Vi ñiều khiển 8051 – Dành cho người chưa biết gì
Sưu tầm: Cao Hoàng Long – CðT32 – CTU chlong.mechatronics@gmail.com
VD: Chúng ta muốn tạo trễ 1s = 100x104 chu kỳ máy.
MOV TMOD,#01H
MOV R1,#100
LAP: MOV TH0,#HIGH(-10000)
MOV TL0,#LOW(-10000)
SETB TR0
DEM: JNB TF0,DEM
CLR TR0
CLR TF0
DJNZ R1,LAP
END
Hoặc
MOV TMOD,#01H
MOV R1,#50
LAP: MOV TH0,#HIGH(-20000)
MOV TL0,#LOW(-20000)
SETB TR0
DEM: JNB TF0,DEM
CLR TR0
CLR TF0
DJNZ R1,LAP
END
Lưu ý: TLx/THx không ñược vượt quá 65536 = FFFFH.
Tới ñây là kết thúc chương trình học. Các bạn chỉ cần nắm vững các câu lệnh và
nguyên tắc tạo trễ là ñã có thể lập trình cho robocon ñược rồi, vấn ñề còn lại là
khả năng tư duy của bạn.