Ứng Dụng Vi Xử Lý điều khiển Logo xoay đa năng
NỘI DUNG ĐỒ ÁN
ĐỒ ÁN TỐT NGHIỆP ĐIỆN Tử Ứng Dụng Vi Xử Lý điều khiển Logo xoay đa năng, thuyết minh THIẾT KẾ VÀ THI CÔNG Vi Xử Lý điều khiển Logo xoay đa năng, THIẾT KẾ VÀ THI CÔNG Vi Xử Lý điều khiển Logo xoay đa năng
LỜI CẢM ƠN
Như vậy là hai năm học của chúng em ở trường cũng đã qua. Trong thời gian học tập tại trường chúng em đã được nhà trường và thầy cô trong khoa Điện Tử – Tin Học nhiệt tình giúp đỡ và tạo điều kiện để chúng em có thể học tập tốt. Với sự kính trọng và lòng biết ơn sâu sắc của mình, chúng em xin chân thành cảm ơn nhà trường và các thầy cô mà đặc biệt là các thầy cô trong khoa Điện Tử -Tin Học đã nhiệt tình dạy dỗ chúng em. Và lần làm đồ án tốt nghiệp này như là lần chuẩn bị cuối cùng để chúng em có thể vận dụng những kiến thức mà mình đã học vào trong thực tế, điều đó sẽ giúp chúng em hoàn thiện và nâng cao các kĩ năng làm việc cũng như tích luỹ được những kinh nghiệm cần thiết cho bản thân. Những kiến thức chuyên môn mà chúng em đã học được tại trường sẽ là hành trang vô cùng quý báu để chúng em bước vào đời. Chúng sẽ giúp cho chúng em có được điều hiện tốt hơn trong công việc cũng như trong cuộc sống.
Một lần nữa chúng em xin gởi lời cảm ơn chân thành đến nhà trường và thầy cô đã dạy dỗ và giúp đỡ chúng em. Đặc biệt là thầy Tống Thanh Nhân đã giúp đỡ chúng em rất nhiều để chúng em hoàn thành tốt đồ án tốt nghiệp của mình.
Trân Trọng Biết Ơn!
MỤC LỤC
CHƯƠNG I : GIỚI THIỆU VI ĐIỀU KHIỂN 8051 Trang 1
I. CẤU TẠO VI ĐIỀU KHIỂN8051 2
II. TÓM TẮT TẬP LỆNH CỦA 8051 11
III. HOẠT ĐỘNG PORT NỐT TIẾP 24
IV. HOẠT ĐỘNG TIMER CỦA 8051 32
V. HOẠT ĐỘNG NGẮT CỦA 8051 40
CHƯƠNG II : THIẾT KẾ VÀ THI CÔNG 47
I. GIỚI THIỆU VỀ TRUYỀN ĐỘNG ĐAI 48
II. SƠ ĐỒ KHỐI VÀ HOẠT ĐỘNG 50
CHƯƠNG III : LƯU ĐỒ GIẢI THIUẬT VÀ CHƯƠNG TRÌNH 57
I. LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH LED ĐƠN 58
II. LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH RƠLE 96
III. LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH ĐỒNG HỒ 119
IV. LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH LED MA TRẬN 124
CHƯƠNG IV : KẾT QUẢ 131
GIỚI THIỆU ĐỀ TÀI
Ngày nay với xu hướng phát triển nhanh của các ngành kinh doanh, dịch vụ, thương mại v.v.. Thì quảng cáo đang là nhu cầu rất cần thiết và quan trọng. Với mục tiêu là ứng dụng kiến thức của nhiều môn học ở nhàtrường vào trong thực tế. Vì vậy chúng em chọn đồ án tốt nghiệp của mình là: Ứng Dụng Vi Xử Lý điều khiển Logo xoay đa năng.
Đề tài của chúng em với chức năng chính là điều khiển các Motor để lắp ghép các trục tạo thành ảnh hoàn chỉnh. Mô hình này có thể thể hiện cùng lúc ba nội dung và các nội dung này được thay đổi luân phiên nhau. Tùy theo nội dung và yêu cầu mà chúng ta có thể điều khiển điều khiển thứ tự các phần của ảnh theo ý muốn. Bên cạnh đó chúng em còn trang bị thêm các chức năng : Hiển thị giờ phút giây trên LED 7 đoạn, Điều khiển LED đơn hiển thị chữ : CĐKT CAO THẮNG, Hiển thị chữ trên LED ma trận… Đây là các chức năng cần thiết cho nhu cầu của con người. Chúng sẽ giúp cho cuộc sống thêm tiện nghi và thuận lợi hơn.
Với các chức năng và phạm vi ứng dụng như trên chúng em nghĩ đây sẽ là đề tài mang tính thực tế cao, nó giúp cho chúng em có thể vận dụng tất cả những kiến thức mà mình đã học ở nhà trường cùng với những kỹ năng, những kinh nghiệm của bản thân để thực hiện. Và trong cuốn quyển này chúng em sẽ thể hiện nội dung các kiến thức cơ bản có liên quan cùng với các sơ đồ khối, sơ đồ nguyên lý và chương trình của mô hình.
Trên đây là phần giới thiệu về đề tài cũng như nội dung trình bày trong cuốn quyển. Hy vọng chúng sẽ giúp cho các thầy cô và các bạn thuận lợi hơn trong việc tìm hiểu đề tài của chúng em.
Nhóm Thực Hiện.
CHƯƠNG I :
GIỚI THIỆU VI ĐIỀU KHIỂN 8051
I. CẤU TẠO VI ĐIỀU KHIỂN 8051
- TÓM TẮT PHẦN CỨNG HỌ MCS-51 (8051)
MCS-51 là họ IC vi điều khiển do hãng Intel sản xuất. Các IC tiêu biểu cho họ là 8031, 8051, 8951... Những đặc điểm chính và nguyên tắt hoạt động của các bộ vi điều khiển này khác nhau không nhiều. Khi đã sử dụng thành thạo một loại vi điều khiển thì ta có thể nhanh chóng vận dụng kinh nghiệm để làm quen và làm chủ các ứng dụng của một bộ vi điều khiển khác. Vì vậy để có những hiểu biết cụ thể về các bộ vi điều khiển cũng như để phục vụ cho đề tài tốt nghiệp này ta bắt đầu tìm hiểu một bộ vi điều khiển thông dụng nhất, đó là họ MCS-51 và nếu như họ MCS-51 là họ điển hình thì 8051 lại chính là đại diện tiêu biểu.
Các đặc điểm của 8051 được tóm tắt như sau :
- 4 KB ROM bên trong.
- 128 Byte RAM nội.
- 4 Port xuất /nhập I/O 8 bit.
- Giao tiếp nối tiếp.
- 64 KB vùng nhớ mã ngoài
- 64 KB vùng nhớ dữ liệu ngoại.
- Xử lý Boolean (hoạt động trên bit đơn).
- 210 vị trí nhớ có thể định vị bit.
- 4 ms cho hoạt động nhân hoặc chia.
Bảng mô tả sự khác nhau của các IC trong họ MCS-51 :
Loại |
Bộ Nhớ Mã Trên CHIP |
Bộ Nhớ Dữ Liệu Trên CHIP |
Số Timer |
8051 |
4K ROM |
128 Byte |
2 |
8031 |
0K ROM |
128 Byte |
2 |
8751 |
4K ROM |
128 Byte |
2 |
8052 |
8 K ROM |
256Byte |
2 |
8032 |
0 K ROM |
256Byte |
2 |
8752 |
8K EPROM |
256Byte |
2 |
2. CẤU TRÚC VĐK 8051, CHỨC NĂNG TỪNG CHÂN
..............................
Chức năng hoạt động của từng chân (pin) được tóm tắt như sau :
- Từ chân 1¸ 8 Port 1 (P1.0, . . ., P1.7) dùng làm Port xuất nhập I/O để giao tiếp bên ngoài.
- Chân 9 (RST) là chân để RESET cho 8051. Bình thường các chân này ở mức thấp. Khi ta đưa tín hiệu này lên cao (tối thiểu 2 chu kỳ máy). Thì những thanh ghi nội của 8051 được LOAD những giá trị thích hợp để khởi động lại hệ thống.
Từ chân 10¸17 là Port3 (P3.0, P3.1, . . ., P3.7) dùng vào hai mục đích : dùng là Port xuất / nhập I/O hoặc mỗi chân giữ một chức năng cá biệt được tóm tắt sơ bộ như sau :
- P3.0 (RXD) : Nhận dữ liệu từ Port nối tiếp.
- P3.1 (TXD) : Phát dữ liệu từ Port nối tiếp.
- P3.2 (INT0) : Ngắt 0 bên ngoài.
- P3.3 (INT1) : Ngắt 1 từ bên ngoài.
- P3.4 (T0) : Timer/Counter 0 nhập từ bên ngoài.
- P3.5 (T1) : Timer/Counter 1 nhập từ bên ngoài.
- P3.6 (WR) : Tín hiệu Strobe ghi dữ liệu lên bộ nhớ bên ngoài.
- P3.7 (RD) : Tín hiệu Strobe đọc dữ liệu lên bộ nhớ bên ngoài.
- Các chân 18,19 (XTAL2 và XTAL1) được nối với bộ dao động thạch anh 12 MHz để tạo dao động trên CHIP. Hai tụ 30 pF được thêm vào để ổn định dao động.
- Chân 20 (Vss) nối đất (Vss = 0).
- Từ chân 21¸28 là Port 2 (P2.0, P2.1, . . ., P2.7) dùng vào hai mục đích: làm Port xuất/nhập I/O hoặc dùng làm byte cao của bus địa chỉ thì nó không còn tác dụng I/O nữa. Bởi vì ta muốn dùng EPROM và RAM ngoài nên phải sử dụng Port 2 làm byte cao bus địa chỉ.
- Chân 29 (PSEN) là tín hiệu điều khiển xuất ra của 8051, nó cho phép chọn bộ nhớ ngoài và được nối chung với chân của OE (Outout Enable) của EPROM ngoài để cho phép đọc các byte của chương trình. Các xung tín hiệu PSEN hạ thấp trong suốt thời gian thi hành lệnh. Những mã nhị phân của chương trình được đọc từ EPROM đi qua bus dữ liệu và được chốt vào thanh ghi lệnh của 8051 bởi mã lệnh.
Chân 30 (ALE : Adress Latch Enable) là tín hiệu điều khiển xuất ra của 8051, nó cho phép phân kênh bus địa chỉ và bus dữ liệu của Port 0.
- Chân 31 (EA : Eternal Acess) được đưa xuống thấp cho phép chọn bộ nhớ mã ngoàiđối với 8031.
Đối với 8051 thì :
- EA = 5V : Chọn ROM nội.
- EA = 0V : Chọn ROM ngoại.
- EA = 21V : Lập trình EPROM nội.
- Các chân từ 32¸39 là Port 0 (P0.0, P0.1, . . . , P0.7) dùng cả hai mục đích : Vừa làm byte thấp cho bus địa chỉ, vừa làm bus dữ liệu, nếu vậy Port 0 không còn chức năng xuất nhập I/O nữa.
- Chân 40 (Vcc) được nối lên nguồn 5V.
3. TỔ CHỨC BỘ NHỚ
Bản đồ bộ nhớ data trên Chip như sau :
|
|
||||||
|
|
||||||
7F |
|
|
FF |
|
|
||||||||||||||
|
|
|
F0 |
F7 |
F6 |
F5 |
F4 |
F3 |
F2 |
F1 |
F0 |
B |
|||||||
|
RAM đa dụng |
|
|
|
|
||||||||||||||
|
|
|
E0 |
E7 |
E6 |
E5 |
E4 |
E3 |
E2 |
E1 |
E0 |
ACC |
|||||||
|
|
|
|
|
|
||||||||||||||
|
|
|
D0 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
PSW |
|||||||
|
|
|
|
|
|
||||||||||||||
30 |
|
|
B8 |
- |
- |
- |
BC |
BB |
BA |
B9 |
B8 |
IP |
|||||||
2F |
7F |
7E |
7D |
7C |
7B |
7A |
79 |
78 |
|
|
|
|
|
|
|
|
|
|
|
2E |
77 |
76 |
75 |
74 |
73 |
72 |
71 |
70 |
|
B0 |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
P.3 |
2D |
6F |
6E |
6D |
6C |
6B |
6A |
69 |
68 |
|
|
|
|
|
|
|
|
|
|
|
2C |
67 |
66 |
65 |
64 |
63 |
62 |
61 |
60 |
|
A8 |
AF |
|
|
AC |
AB |
AA |
A9 |
A8 |
IE |
2B |
5F |
5E |
5D |
5C |
5B |
5A |
59 |
58 |
|
|
|
|
|
|
|
|
|
|
|
2A |
57 |
56 |
55 |
54 |
53 |
52 |
51 |
50 |
|
A0 |
A7 |
A6 |
A5 |
A4 |
A3 |
A2 |
A1 |
A0 |
P2 |
29 |
4F |
4E |
4D |
4C |
4B |
4A |
49 |
48 |
|
|
|
|
|
|
|
|
|
|
|
28 |
47 |
46 |
45 |
44 |
43 |
42 |
41 |
40 |
|
99 |
không được địa chỉ hoá bit |
SBUF |
|||||||
27 |
3F |
3E |
3D |
3C |
3B |
3A |
39 |
38 |
|
98 |
9F |
9E |
9D |
9C |
9B |
9A |
99 |
98 |
SCON |
26 |
37 |
36 |
35 |
34 |
33 |
32 |
31 |
30 |
|
|
|
|
|||||||
25 |
2F |
2E |
2D |
2C |
2B |
2A |
29 |
28 |
|
90 |
97 |
96 |
95 |
94 |
93 |
92 |
91 |
90 |
P1 |
24 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
|
|
|
|
|||||||
23 |
1F |
1E |
1D |
1C |
1B |
1A |
19 |
18 |
|
8D |
không được địa chỉ hoá bit |
TH1 |
|||||||
22 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
|
8C |
không được địa chỉ hoá bit |
TH0 |
|||||||
21 |
0F |
0E |
0D |
0C |
0B |
0A |
09 |
08 |
|
8B |
không được địa chỉ hoá bit |
TL1 |
|||||||
20 |
07 |
06 |
05 |
04 |
03 |
02 |
01 |
00 |
|
8A |
không được địa chỉ hoá bit |
TL0 |
|||||||
1F |
Bank 3 |
|
89 |
không được địa chỉ hoá bit |
TMOD |
||||||||||||||
18 |
|
|
88 |
8F |
8E |
8D |
8C |
8B |
8A |
89 |
88 |
TCON |
|||||||
17 |
Bank 2 |
|
87 |
không được địa chỉ hoá bit |
PCON |
||||||||||||||
10 |
|
|
|
|
|
||||||||||||||
0F |
Bank 1 |
|
83 |
không được địa chỉ hoá bit |
DPH |
||||||||||||||
08 |
|
|
82 |
không được địa chỉ hoá bit |
DPL |
||||||||||||||
07 |
Bank thanh ghi 0 |
|
81 |
không được địa chỉ hoá bit |
SP |
||||||||||||||
00 |
(mặc định cho R0 -R7) |
|
88 |
87 |
86 |
85 |
84 |
83 |
82 |
81 |
80 |
P0 |
RAM CÁC THANH GHI CHỨC NĂNG ĐẶC BIỆT
Tóm tắt bộ nhớ dữ liệu trên chip
3.1 RAM mục đích chung
Trong bản đồ bộ nhớ trên, 80 byte từ địa chỉ 30H¸7FH là RAM mục đích chung. Kể cả 32byte phần dưới từ 00H¸2FH cũng có thể sử dụng giống như 80 byte ở trên, tuy nhiên 32 byte còn có mục đích khác sẽ đề cập sau.
Bất kỳ vị trí nào trong RAM mục đích chung cũng có thể được truy xuất tùy ý giống như việc sử dụng các mode để định địa chỉ trực tiếp hay gián tiếp. Ví dụ để đọc nội dung của RAM nội có địa chỉ 5FH vào thanh ghi tích lũy thì ta dùng lệnh : MOV A, 5FH.
RAM nội cũng được truy xuất bởi việc dùng địa chỉ gián tiếp qua R0 và R1. Hai lệnh sau đây sẽ tương đương lệnh trên :
MOV R0, #5FH
MOV A, @R0
Lệnh thứ nhất dùng sự định vị tức thời để đưa giá trị 5FH vào thanh ghi R0, lệnh thứ hai dùng sự định vị gián tiếp để đưa dữ liệu “đã được trỏ đến bởi R0” vào thanh ghi tích lũy A.
3.2 RAM định vị
8051 chứa 210 vị trí có thể định vị bit, trong đó có 128 bit nằm ở các địa chỉ từ 20H¸2FH và phần còn lại là các thanh ghi chức năng đặc biệt.
3.3 Các băng thanh ghi (Register Banks)
32 vị trí nhớ cuối cùng của bộ nhớ từ địa chỉ byte 00H¸1FH chức các dãy thanh ghi. Tập hợp các lệnh của 8051 cung cấp 8 thanh ghi từ R0¸R7 ở địa chỉ 00H¸07H nếu máy tính mặc nhiên chọn để thực thi. Những lệnh tương đương dùng sự định vị trực tiếp. Những giá trị dữ liệu được dùng thường xuyên chắc chắn sẽ sử dụng một trong các thanh ghi này.
3.4 Các thanh ghi chức năng đặc biệt (Special Function Register)
Có 21 thanh ghi chức năng đặc biệt SFR ở đỉnh của RAM nội từ địa chỉ các thanh ghi chức năng đặc biệt được định rõ, còn phần còn lại không định rõ.
Mặc dù thanh ghi A có thể truy xuất trực tiếp, nhưng hầu hết các thanh ghi chức năng đặc biệt được truy xuất bằng cách sử dụng sự định vị địa chỉ trực tiếp. Chú ý rằng vài thanh ghi SFR có cả bit định vị và byte định vị. Người thiết kế sẽ cẩn thận khi truy xuất bit mà không truy xuất byte.
3.4.1 Từ trạng thái chương trình (PSW : Program Status Word) :
Từ trạng thái chương trình ở địa chỉ D0H được tóm tắt như sau :
BIT |
SYMBOL |
ADDRESS |
DESCRIPTION |
PSW.7 |
CY |
D7H |
Cary Flag |
PSW.6 |
AC |
D6H |
Auxiliary Cary Flag |
PSW.5 |
F0 |
D5H |
Flag 0 |
PSW4 |
RS1 |
D4H |
Register Bank Select 1 |
PSW.3 |
RS0 |
D3H |
Register Bank Select 0 |
|
|
|
00=Bank 0; address 00H¸07H |
|
|
|
01=Bank 1; address 08H¸0FH |
|
|
|
10=Bank 2; address 10H¸17H |
|
|
|
11=Bank 3; address 18H¸1FH |
PSW.2 |
OV |
D2H |
Overlow Flag |
PSW.1 |
- |
D1H |
Reserved |
PSW.0 |
P |
DOH |
Even Parity Flag |
Chức năng từng bit trạng thái chương trình
a) Cờ Carry CY (Carry Flag) :
Cờ Carry được set lên 1 nếu có sự tràn ở bit 7 trong phép cộng hoặc có sự mượn vào bit 7 trong phép trừ.
Cờ Carry cũng là 1 “thanh ghi tích lũy luận lý”, nó được dùng như một thanh ghi 1 bit thực thi trên các bit bởi những lệnh luận lý. Ví dụ lệnh : ANL C, 25H sẽ AND bit 25H với cờ Carry và cất kết quả vào cờ Carry.
b) Cờ Carry phụ AC (Auxiliary Carry Flag) :
Khi cộng những giá trị BCD (Binary Code Decimal), cờ nhớ phụ AC được set nếu có sự tràn từ bit 3 sang 4 hoặc 4 bit thấp nằm trong phạm vi 0AH¸0FH.
c) Cờ 0 (Flag 0) :
Cờ 0 (F0) là bit cờ có mục đích tổng hợp cho phép người ứng dụng dùng nó.
d). Những bit chọn dãy thanh ghi RS1 và RS0 :
RS1 và RS0 quyết định dãy thanh ghi tích cực. Chúng được xóa sau khi reset hệ thống và được thay đổi bởi phần mềm khi cần thiết.
e. Cờ tràn OV (Over Flag) :
Cờ tràn được set sau một hoạt động cộng hoặc trừ nếu có sự tràn toán học. Bit OV được bỏ qua đối với sự cộng trừ không dấu. Khi cộng trừ có dấu, kết quả lớn hơn + 127 hay nhỏ hơn -128 sẽ set bit OV.
f. Bit Parity (P) :
Bit tự động được set hay Clear ở mỗi chu kỳ máy để lập Parity chẳn với thanh ghi A. Sự đếm các bit 1 trong thanh ghi A cộng với bit Parity luôn luôn chẳn. Ví dụ A chứa 10101101B thì bit P set lên một để tổng số bit 1 trong A và P tạo thành số chẳn.
Bit Parity thường được dùng trong sự kết hợp với những thủ tục của Port nối tiếp để tạo ra bit Parity trước khi phát đi hoặc kiểm tra bit Parity sau khi thu.
3.4.2 Thanh ghi B :
Thanh ghi B ở địa chỉ F0H được dùng đi đôi với thanh ghi A cho các hoạt động nhân chia.
Thanh ghi B có thể được dùng như một thanh ghi đệm trung gian đa mục đích. Nó là những bit định vị thông qua những địa chỉ từ F0H¸F7H.
3.4.3 Con trỏ Stack SP (Stack Pointer) :
Stack Pointer là một thanh ghi 8 bit ở địa chỉ 81H. Nó chứa địa chỉ của dữ liệu đang hiện hành trên đỉnh Stack. Các hoạt động của Stack bao gồm việc đẩy dữ liệu vào Stack (PUSH) và lấy dữ liệu ra khỏi Stack (POP).
- Việc PUSH vào Stack sẽ tăng SP lên 1 trước khi dữ liệu vào.
- Việc POP từ Stack ra sẽ lấy dữ liệu ra trước rồi giảm SP đi 1.
3.4.4 Con trỏ dữ liệu DPTR (Data Pointer) :
Data Pointer được để truy xuất bộ nhớ mà ngoài hoặc bộ nhớ dữ liệu ngoài, nó là một thanh ghi 16 bit mà byte thấp là DPL ở địa chỉ 82H còn byte cao là DPH ở địa chỉ 83H. Để đưa nội dung 55H vào RAM ngoại có địa chỉ 1000H ta dùng 3 lệnh sau :
MOV A, #55H
MOV DPTR, #1000H
MOVX @ DPTR, A
Lệnh thứ nhất dùng sự định vị trực tiếp đưa hằng số dữ liệu 55H vào A. Lệnh thứ hai cũng tương tự lệnh thứ nhất đưa hằng số dữ liệu 1000H vào trong DPTR . Lệnh cuối cùng dùng sự định vị gián tiếp để dịch chuyển giá trị 55H trong A vào vùng nhớ RAM ngoại 1000H nằm trong DPTR.
3.4.5 Các thanh ghi Port (Port Register) :
Các Port 0, Port 1, Port 2, Port 3 có địa chỉ tương ứng 80H, 90H, A0H, B0H. Các Port 0, Port 1, Port 2, Port 3 không còn tác dụng xuất nhập nữa nếu bộ nhớ ngoài được dùng hoặc một vài cá tính đặc biệt của 8051 được dùng (như Interrupt, Port nối tiếp . . .). Do vậy chỉ còn có Port1 có tác dụng xuất nhập I/O.
Tất cả các Port đều có bit địa chỉ, do đó nó có khả năng giao tiếp với bên ngoài mạnh mẽ.
3.4.6 Các thanh ghi Timer (Timer Register) :
8051 có 2 bộ : Một bộ Timer 16 bit và một bộ Counter 16 bit, hai bộ này dùng để định giờ lúc nghỉ của chương trình hoặc đếm các sự kiện quan trọng. Timer 0 có bit thấp TL0 ở địa chỉ 8AH và có bit cao TH0 ở địa chỉ 8CH. Timer 1 có bit thấp ở địa chỉ 8BH và bit cao TH1 ở địa chỉ 8DH.
Hoạt động định thời được cho phép bởi thanh ghi mode định thời TMOD (Timer Mode Register). Ở địa chỉ 89H và thanh ghi điều khiển định thời TCON (Timer Control Register) ở địa chỉ 88H. Chỉ có TCON có bit định vị.
3.4.7 Các thanh ghi Port nối tiếp (Serial Port Register) :
8051 chứa một Port nối tiếp trên Chip cho việc truyền thông tin với những thiết bị nối tiếp như là những thiết bị đầu cuối, modem, hoặc để giao tiếp IC khác với những bộ biến đổi A/D, những thanh ghi di chuyển, RAM . . .). Thanh ghi đệm dữ liệu nối tiếp SBUF ở địa chỉ 99H giữ cả dữ liệu phát lẫn dữ liệu thu. Việc ghi lên SBUF để LOAD dữ liệu cho việc truyền và đọc SBUF để truy xuất dữ liệu cho việc nhận những mode hoạt động khác nhau được lập trình thông qua thanh ghi điều khiển Port nối tiếp SCON.
3.4.8 Các thanh ghi ngắt (Interrupt Register) :
8051 có hai cấu trúc ngắt ưu tiên, 5 bộ nguồn. Những Interrupt bị mất tác dụng sau khi hệ thống reset (bị cấm) và sau đó được cho phép bởi việc cho phép ghi lên thanh ghi cho phép ngắt IE (Interrup Enable Register) ở địa chỉ A8H. Mức ưu tiên được đặt vào thanh ghi ưu tiên ngắt IP (Interrupt Priority Level) tại địa chỉ B8H. Cả 2 thanh ghi trên đều có bit địa chỉ.
3.4.9 Thanh ghi điều khiển nguồn PCON (Power Control Register) :
Thanh ghi PCON không có bit định vị. Nó ở địa chỉ 87H bao gồm các bit địa chỉ tổng hợp. Các bit PCON được tóm tắt như sau :
- Bit 7 (SMOD) : Bit có tốc độ Baud ở mode 1, 2, 3 ở Port nối tiếp khi set.
- Bit 6, 5, 4 : Không có địa chỉ.
- Bit 3 (GF1) : Bit 1 của cờ đa năng.
- Bit 2 (GF0) : Bit 2 của cờ đa năng.
- Bit 1 * (PD) : Set để khởi động mode Power Down và thoát để reset.
- Bit 0 * (IDL) : Set để khởi động mode Idle và thoát khi ngắt mạch hoặc reset.
Các bit điều khiển Power Down và Idle có tác dụng chính trong tất cả các IC họ MSC-51 nhưng chỉ được thi hành trong sự biên dịch của CMOS.
II. TÓM TẮT TẬP LỆNH CỦA 8051
Các chương trình được cấu tạo từ nhiều lệnh, chúng được xây dựng logic, sự nối tiếp của các lệnh được nghĩ ra một cách hiệu quả và nhanh, kết quả của chương trình thì khả quan.
Tập lệnh họ MSC-51 được sự kiểm tra của các mode định vị và các lệnh của chúng có các Opcode 8 bit. Điều này cung cấp khả năng 28=256 lệnh được thi hành và một lệnh không được định nghĩa. Vài lệnh có 1 hoặc 2 byte bởi dữ liệu hoặc địa chỉ thêm vào Opcode. Trong toàn bộ các lệnh có 139 lệnh 1 byte, 92 lệnh 2 byte và 24 lệnh 3 byte.
1. CÁC CHẾ ĐỘ ĐỊNH VỊ (ADDRESSING MODE)
Các mode định vị là một bộ phận thống nhất của tập lệnh mỗi máy tính. Chúng cho phép định rõ nguồn hoặc nơi gởi tới của dữ liệu ở các đường khác nhau tùy thuộc vào trạng thái của lập trình. 8051 có 8 mode định vị được dùng như sau :
- Thanh ghi.
- Trực tiếp.
- Gián tiếp.
- Tức thời.
- Tương đối.
- Tuyệt đối.
- Dài.
- Định vị.
1.1 Sự định vị thanh ghi (Register Addressing)
Có 4 dãy thanh ghi 32 byte đầu tiên của RAM dữ liệu trên Chip địa chỉ 00H ¸ 1FH, nhưng tại một thời điểm chỉ có một dãy hoạt động các bit PSW3, PSW4 của từ trạng thái chương trình sẽ quyết định dãy nào hoạt động.
Các lệnh để định vị thanh ghi được ghi mật mã bằng cách dùng bit trọng số thấp nhất của Opcode lệnh để chỉ một thanh ghi trong vùng địa chỉ theo logic này. Như vậy 1 mã chức năng và địa chỉ hoạt động có thể được kết hợp để tạo thành một lệnh ngắn 1 byte như sau :
Register Addressing.
1.2 Sự định địa chỉ trực tiếp (Direct Addressing)
Sự định địa chỉ trực tiếp có thể truy xuất bất kỳ giá trị nào trên Chip hoặc thanh ghi phần cứng trên Chip. Một byte địa chỉ trực tiếp được đưa vào Opcode để định rỏ vị trí được dùng như sau :
Tùy thuộc các bit bậc cao của địa chỉ trực tiếp mà một trong 2 vùng nhớ được chọn. Khi bit 7 = 0, thì địa chỉ trực tiếp ở trong khoảng 0¸127 (00H¸7FH) và 128 vị trí nhớ thấp của RAM trên Chip được chọn.
1.3 Sự định vị địa chỉ gián tiếp (Indirect Addressing)
Sự định địa chỉ gián tiếp được tượng trưng bởi ký hiệu @ được đặt trước R0, R1 hay DPTR. R0 và R1 có thể hoạt động như một thanh ghi con trỏ mà nội dung của nó cho biết một địa chỉ trong RAM nội ở nơi mà dữ liệu được ghi hoặc được đọc. Bit có trọng số nhỏ nhất của Opcode lệnh sẽ xác định R0 hay R1 được dùng con trỏ Pointer.
Ví dụ để đưa nội dung 60 H vào RAM nội tại địa chỉ 50H ta làm như sau:
MOV R1,#50H
MOV @R1,60H
1.4. Sự định vị địa chỉ tức thời (Immediate Addressing)
Sự định địa chỉ tức thời được tượng trưng bởi ký hiệu # được đứng trước một hằng số, 1 biến ký hiệu hoặc một biểu thức số học được sử dụng bởi các hằng, các ký hiệu, các hoạt động do người điều khiển. Trình biên dịch tính toán giá trị và thay thế dữ liệu tức thời. Byte lệnh thêm vô chứa trị số dữ liệu tức thời như sau :
Ví dụ :
MOV A, # 12 Ü Đưa trực tiếp số thập phân 12 vào A.
MOV A, # 10 Ü Đưa trực tiếp số Hex 10H (16D) vào A.
MOV A, # 00010001B Ü Đưa trực tiếpsố nhị phân này vào A.
1.5 Sự định vị địa chỉ tương đối
Sự định địa chỉ tương đối chỉ sử dụng với những lệnh nhảy nào đó. Một địa chỉ tương đối (hoặc Offset) là một giá trị 8 bit mà nó được cộng vào bộ đếm chương trình PC để tạo thành địa chỉ một lệnh tiếp theo được thực thi. Phạm vi của sự nhảy nằm trong khoảng -128 ¸ 127. Offset tương đối được gắn vào lệnh như một byte thêm vào như sau :
Sự định vị tương đối đem lại thuận lợi cho việc cung cấp mã vị trí độc lập, nhưng bất lợi là chỉ nhảy ngắn trong phạm vi -128¸127 byte.
1.6 Sự định địa chỉ tuyệt đối (Absolute Addressing)
Sự định địa chỉ tuyệt đối được dùng với các lệnh ACALL và AJMP. Các lệnh 2 byte cho phép phân chia trong trang 2K đang lưu hành của bộ nhớ mã của việc cung cấp 11 bit thấp để xác định địa chỉ trong trang 2K (A0¸A10 gồm A10¸A8 trong Opcode và A7¸A0 trong byte)và 5 bit cao để chọn trang 2K (5 bit cao đang lưu hành trong bộ đếm chương trình là 5 bit Opcode).
Sự định vị tuyệt đối đem lại thuận lợi cho các lệnh ngắn (2 byte), nhưng bất lợi trong việc giới hạn phạm vi nơi gởi đến và cung cấp mã có vị trí độc lập.
1.7 Sự định vị địa chỉ dài (Long Addressing)
Ưu điểm của sự định dài là vùng nhớ mã 64K có thể được dùng hết, nhược điểm là các lệnh đó dài 3 byte và vị trí lệ thuộc. Sự phụ thuộc vào vị trí sẽ bất lợi bởi chương trình không thể thực thi tại địa chỉ khác.
1.8 Sự định địa chỉ phụ lục (Index Addressing)
Sự định địa chỉ phụ lục dùng một thanh ghi cơ bản (cũng như bộ đếm chương trình hoặc bộ đếm dữ liệu) và Offset (thanh ghi A) trong sự hình thành 1 địa chỉ liên quan bởi lệnh JMP hoặc MOVC.
Base Register Offset Effective Address
Index Addressing.
2. CÁC KIỂU LỆNH (INSTRUCTION TYPES)
8051 chia ra 5nhóm lệnh chính :
- Các lệnh số học.
- Lệnh logic.
- Dịch chuyển dữ liệu.
- Lý luận.
- Rẽ nhánh chương trình.
Từng kiểu lệnh được mô tả như sau :
2.1 Các lệnh số học (Arithmetic Instrustion) :
ADD A, <src, byte>
ADD A, Rn : (A) ¬ (A) + (Rn)
ADD A, direct : (A) ¬ (A) + (direct)
ADD A, @ Ri : (A) ¬ (A) + ((Ri))
ADD A, # data : (A) ¬ (A) + # data
ADDC A, Rn : (A) ¬ (A) + (C) + (Rn)
ADDC A, direct : (A) ¬ (A) + (C) + (direct)
ADDC A, @ Ri : (A) ¬ (A) + (C) + ((Ri))
ADDC A, # data : (A) ¬ (A) + (C) + # data
SUBB A, <src, byte>
SUBB A, Rn : (A) ¬ (A) - (C) - (Rn)
SUBB A, direct : (A) ¬ (A) - (C) - (direct)
SUBB A, @ Ri : (A) ¬ (A) - (C) - ((Ri))
SUBB A, # data : (A) ¬ (A) - (C) - # data
INC <byte>
INC A : (A) ¬ (A) + 1
INC direct : (direct) ¬ (direct) + 1
INC Ri : ((Ri)) ¬ ((Ri)) + 1
INC Rn : (Rn) ¬ (Rn) + 1
INC DPTR : (DPTR) ¬ (DPTR) + 1
DEC <byte>
DEC A : (A) ¬ (A) - 1
DEC direct : (direct) ¬ (direct) - 1
DEC @Ri : ((Ri)) ¬ ((Ri)) - 1
DEC Rn : (Rn) ¬ (Rn) - 1
MULL AB : (A) ¬ LOW [(A) x (B)] ; có ảnh hưởng cờ OV
: (B) ¬ HIGH [(A) x (B)] ; cờ Cary được xóa.
DIV AB : (A) ¬ Integer Result of [(A)/(B)]; cờ OV
: (B) ¬ Remainder of [(A)/(B)]; cờ Carry xóa
DA A : Điều chỉnh thanh ghi A thành số BCD đúng trong phép cộng BCD (thường DA A đi kèm với ADD, ADDC)
- Nếu [(A3-A0)>9] và [(AC)=1] Ü (A3¸A0) ¬ (A3¸A0) + 6.
- Nếu [(A7-A4)>9] và [(C)=1] Ü (A7¸A4) ¬ (A7¸A4) + 6.
2.2 Các hoạt động logic (Logic Operation) :
Tất cả các lệnh logic sử dụng thanh ghi A như là một trong những toán hạng thực thi một chu kỳ máy, ngoài A ra mất 2 chu kỳ máy. Những hoạt động logic có thể được thực hiện trên bất kỳ byte nào trong vị trí nhớ dữ liệu nội mà không qua thanh ghi A.
Các hoạt động logic được tóm tắt như sau :
ANL <dest - byte> <src - byte>
ANL A, Rn : (A) ¬ (A) AND (Rn).
ANL A, direct : (A) ¬ (A) AND (direct).
ANL A,@ Ri : (A) ¬ (A) AND ((Ri)).
ANL A, # data : (A) ¬ (A) AND (# data).
ANL direct, A : (direct) ¬ (direct) AND (A).
ANL direct, # data : (direct) ¬ (direct) AND # data.
ORL <dest - byte> <src - byte>
ORL A, Rn : (A) ¬ (A) OR (Rn).
ORL A, direct : (A) ¬ (A) OR (direct).
ORL A,@ Ri : (A) ¬ (A) OR ((Ri)).
ORL A, # data : (A) ¬ (A) OR # data.
ORL direct, A : (direct) ¬ (direct) OR (A).
ORL direct, # data : (direct) ¬ (direct) OR # data.
XRL <dest - byte> <src - byte>
XRL A, Rn : (A) ¬ (A) ) (Rn).
XRL A, direct : (A) ¬ (A) ) (direct).
XRL A,@ Ri : (A) ¬ (A) ) ((Ri)).
XRL A, # data : (A) ¬ (A) ) # data.
XRL direct, A : (direct) ¬ (direct) ) (A).
XRL direct, # data : (direct) ¬ (direct) ) # data.
y = a) b = ab + ab
CLR A : (A) ¬ 0
CLR C : (C) ¬ 0
CLR Bit : (Bit) ¬ 0
RL A : Quay vòng thanh ghi A qua trái 1 bit
(An + 1) ¬ (An); n = 0¸6
(A0) ¬ (A7)
RLC A : Quay vòng thanh ghi A qua trái 1 bit có cờ Carry
(An + 1) ¬ (An); n = 0¸6
(C) ¬ (A7)
(A0) ¬ (C)
RR A : Quay vòng thanh ghi A qua phải 1 bit
(An + 1) ® (An); n = 0¸6
(A0) ® (A7)
RRC A : Quay vòng thanh ghi A qua phải 1 bit có cờ Carry
(An + 1) ® (An); n = 0¸6
(C) ® (A7)
(A0) ® (C)
SWAP A : Đổi chổ 4 bit thấp và 4 bit cao của A cho nhau (A3¸A0)Ö(A7¸A4).
2.3 Các lệnh rẽ nhánh :
Có nhiều lệnh để điều khiển lên chương trình bao gồm việc gọi hoặc trả lại từ chương trình con hoặc chia nhánh có điều kiện hay không có điều kiện.
Tất cả các lệnh rẽ nhánh đều không ảnh hưởng đến cờ. Ta có thể định nhản cần nhảy tới mà không cần rỏ địa chỉ, trình biên dịch sẽ đặt địa chỉ nơi cần nhảy tới vào đúng khẩu lệnh đã đưa ra.
Sau đây là sự tóm tắt từng hoạt động của lệnh nhảy.
JC rel : Nhảy đến “rel” nếu cờ Carry C = 1.
JNC rel : Nhảy đến “rel” nếu cờ Carry C = 0.
JB bit, rel : Nhảy đến “rel” nếu (bit) = 1.
JNB bit, rel : Nhảy đến “rel” nếu (bit) = 0.
JBC bit, rel : Nhảy đến “rel” nếu bit = 1 và xóa bit.
ACALL addr11 : Lệnh gọi tuyệt đối trong page 2K.
(PC) ¬ (PC) + 2
(SP) ¬ (SP) + 1
((SP)) ¬ (PC7¸PC0)
(SP) ¬ (SP) + 1
((SP)) ¬ (PC15¸PC8)
(PC10¸PC0) ¬ page Address.
LCALL addr16 : Lệnh gọi dài chương trình con trong 64K.
(PC) ¬ (PC) + 3
(SP) ¬ (SP) + 1
((SP)) ¬ (PC7¸PC0)
(SP) ¬ (SP) + 1
((SP)) ¬ (PC15¸PC8)
(PC) ¬ Addr15¸Addr0.
RET : Kết thúc chương trình con trở về chương trình chính.
(PC15¸PC8) ¬ (SP)
(SP) ¬ (SP) - 1
(PC7¸PC0) ¬ ((SP))
(SP) ¬ (SP) -1.
RETI : Kết thúc thủ tục phục vụ ngắt quay về chương trình chính hoạt động tương tự như RET.
AJMP Addr11 : Nhảy tuyệt đối không điều kiện trong 2K.
(PC) ¬ (PC) + 2
(PC10¸PC0) ¬ page Address.
LJMP Addr16 : Nhảy dài không điều kiện trong 64K
Hoạt động tương tự lệnh LCALL.
SJMP rel : Nhảy ngắn không điều kiện trong (-128¸127) byte
(PC) ¬ (PC) + 2
(PC) ¬ (PC) + byte 2
JMP @ A + DPTR:Nhảy không điều kiện đến địa chỉ (A) + (DPTR)
(PC) ¬ (A) + (DPTR)
JZ rel : Nhảy đến A = 0. Thực hành lệnh kế nếu A ¹ 0.
(PC) ¬ (PC) + 2
(A) = 0 Ü (PC) ¬ (PC) + byte 2
JNZ rel : Nhảy đến A ¹ 0. Thực hành lệnh kế nếu A = 0.
(PC) ¬ (PC) + 2
(A) < > 0 Ü (PC) ¬ (PC) + byte 2
CJNE A, direct, rel : So sánh và nhảy đến A ¹ direct
(PC) ¬ (PC) + 3
(A) < > (direct) Ü (PC) ¬ (PC) + Relative Address.
(A) < (direct) Ü C = 1
(A) > (direct) Ü C = 0
(A) = (direct). Thực hành lệnh kế tiếp
CJNE A, # data, rel : Tương tự lệnh CJNE A, direct, rel.
CJNE Rn, # data, rel : Tương tự lệnh CJNE A, direct, rel.
CJNE @ Ri, # data, rel : Tương tự lệnh CJNE A, direct, rel.
DJNE Rn, rel : Giảm Rn và nhảy nếu Rn ¹ 0.
(PC) ¬ (PC) + 2
(Rn) ¬ (Rn) -1
(Rn) < > 0 Ü (PC) ¬ (PC) + byte 2.
DJNZ direct, rel : Tương tự lệnh DJNZ Rn, rel.
2.4 Các lệnh dịch chuyển dữ liệu :
Các lệnh dịch chuyển dữ liệu trong những vùng nhớ nội thực thi 1 hoặc 2 chu kỳ máy. Mẫu lệnh MOV <destination>, <source> cho phép di chuyển dữ liệu bất kỳ 2 vùng nhớ nào của RAM nội hoặc các vùng nhớ của các thanh ghi chức năng đặc biệt mà không thông qua thanh ghi A.
Vùng Stack của 8051 chỉ chứa 128 byte RAM nội, nếu con trỏ Stack SP được tăng quá địa chỉ 7FH thì các byte được PUSH vào sẽ mất đi và các byte POP ra thì không biết rõ.
Các lệnh dịch chuyễn bộ nhớ nội và bộ nhớ ngoại dùng sự định vị gián tiếp. Địa chỉ gián tiếp có thể dùng địa chỉ 1 byte (@ Ri) hoặc địa chỉ 2 byte (@ DPTR). Tất cả các lệnh dịch chuyển hoạt động trên toàn bộ nhớ ngoài thực thi trong 2 chu kỳ máy và dùng thanh ghi A làm toán hạng DESTINATION.
Việc đọc và ghi RAM ngoài (RD và WR) chỉ tích cực trong suốt quá trình thực thi của lệnh MOVX, còn bình thường RD và WR không tích cực (mức 1).
Tất cả các lệnh dịch chuyển đều không ảnh hưởng đến cờ. Hoạt động của từng lệnh được tóm tắt như sau :
MOV A,Rn : (A) ¬ (Rn)
MOV A, direct : (A) ¬ (direct)
MOV A, @ Ri : (A) ¬ ((Ri))
MOV A, # data : (A) ¬ # data
MOV Rn, A : (Rn) ¬ (A)
MOV Rn, direct : (Rn) ¬ (direct)
MOV Rn, # data : (Rn) ¬ # data
MOV direct, A : (direct) ¬ (A)
MOV direct, Rn : (direct) ¬ (Rn)
MOV direct, direct : (direct) ¬ (direct)
MOV direct, @ Ri : (direct) ¬ ((Ri))
MOV direct, # data : (direct) ¬ data
MOV @ Ri, A : ((Ri)) ¬ (A)
MOV @ Ri, direct : ((Ri)) ¬ (direct)
MOV @ Ri, # data : ((Ri)) ¬ # data
MOV DPTR, # data16 : (DPTR) ¬ # data16
MOV A, @ A + DPTR : (A) ¬ (A) + (DPTR)
MOV @ A + PC : (PC) ¬ (PC) + 1
(A) ¬ (A) + (PC)
MOVX A, @ Ri : (A) ¬ ((Ri))
MOVX A, @ DPTR : (A) ¬ ((DPTR))
MOVX @ Ri, A : ((Ri)) ¬ (A)
MOVX @ DPTR, A : ((DPTR)) ¬ (A)
PUSH direct : Cất dữ liệu vào Stack
(SP) ¬ (SP) + 1
(SP) ¬ (Drirect)
POP direct : Lấy từ Stack ra direct
(direct) ¬ ((SP))
(SP) ¬ (SP) - 1
XCH A, Rn : Đổi chổ nội dung của A với Rn
(A) Ö (Rn)
XCH A, direct : (A) Ö (direct)
XCH A, @ Ri : (A) Ö ((Ri))
XCHD A, @ Ri : Đổi chổ 4 bit thấp của (A) với ((Ri))
(A3¸A0) Ö ((Ri3¸Ri0))
2.5 Các lệnh luận lý (Boolean Instruction) :
8051 chứa một bộ xử lý luận lý đầy đủ cho các hoạt động bit đơn, đây là một điểm mạnh của họ vi điều khiển MSC-51 mà các họ vi xử lý khác không có.
RAM nội chứa 128 bit đơn vị và các vùng nhớ các thanh ghi chức năng đặc biệt cấp lên đến 128 đơn vị khác. Tất cả các đường Port là bit định vị, mỗi đường có thể được xử lý như Port đơn vị riêng biệt. Cách truy xuất các bit này không chỉ các lệnh rẽ nhánh không, mà là một danh mục đầy đủ các lệnh MOVE, SET, CLEAR, COMPLEMENT, OR, AND.
Toàn bộ sư truy xuất của bit dùng sư định vị trực tiếp với những địa chỉ từ 00H¸7FH trong 128 vùng nhớ thấp và 80H¸FFH ở các vùng thanh ghi chức năng đặc biệt.
Bit Carry C trong thanh ghi PSW của từ trạng thái chương trình và được dùng như một sự tích lũy đơn của bộ xử lý luận lý. Bit Carry cũng là bit định vị và có địa chỉ trực tiếp vì nó nằm trong PSW. Hai lệnh CLR C và CLR CY đều có cùng tác dụng là xóa bit cờ Carry nhưng lệnh này mất 1 byte còn lệnh sau mất 2 byte.
Hoạt động của các lệnh luận lý được tóm tắt như sau :
CLR C : Xóa cờ Carry xuống 0. Có ảnh hưởng cờ Carry.
CLR BIT : Xóa bit xuống 0. Không ảnh hưởng cờ Carry
SET C : Set cờ Carry lên 1. Có ảnh hưởng cờ Carry.
SET BIT : Set bit lên 1. Không ảnh hưởng cờ Carry.
CPL C : Đảo bit cờ Carry. Có ảnh hưởng cờ Carry.
CPL BIT : Đảo bit. Không ảnh hưởng cờ Carry.
ANL C, BIT : (C) ¬ (C) AND (BIT) : Có ảnh hưởng cờ Carry.
ANL C, /BIT : (C) ¬ (C) AND NOT (BIT):Không ảnh hưởng cờ Carry.
ORL C, BIT : (C) ¬ (C) OR (BIT) : Tác động cờ Carry.
ORL C, /BIT : (C) ¬ (C) OR NOT (BIT) : Tác động cờ Carry.
MOV C, BIT : (C) ¬ (BIT) : Cờ Carry bị tác động.
- HOẠT ĐỘNG CỦA PORT NỐI TIẾP 8051.
1. GIỚI THIỆU
Port nối tiếp của 8051 có thể hoạt động trong các mode riêng biệt trên phạm vi cho phép của tần số. Chức năng chủ yếu của Port nối tiếp là thực hiện sự chuyễn đổi song song thành nối tiếp cho dữ liệu ra và sự chuyễn đổi nối tiếp thành song song cho dữ liệu vào.
Phần cứng truy xuất tới Port nối tiếp qua các chân TXD (P3.1) và RXD (P3.0).
Port nối tiếp tham dự hoạt động đầy đủ (sự phát và thu cùng lúc), và thu vào bộ đệm mà nó cho phép1 ký tự nhận vào và được cất ở bộ đệm trong khi kí tự thứ hai được nhận vào. Nếu CPU đọc ký tự thứ nhất trước khi kí tự thứ hai được nhận vào hoàn toàn thì dữ liệu không bị mất.
Hai thanh ghi chức năng đặc biệt cung cấp cho phần mềm truy xuất đến Port nối tiếp là SBUF và SCON. Sự đệm Port nối tiếp (SBUF) ở địa chỉ 99H là 2 sự đệm thật sự : Ghi lên SBUF LOAD dữ liệu phát và đọc SBUF truy xuất dữ liệu đã nhận. Đây là hai thanh ghi riêng biệt và rõ rệt, mà thanh ghi phát chỉ ghi còn thanh ghi thu chỉ đọc. Sơ đồ khối của Port nối tiếp như sau :
TXD (P3.1) RXD (P3.0)
Serial Port Block Dragram
Thanh ghi điều khiển Port nối tiếp SCON (98H) là thanh ghi được định vị bit bao gồm các trạng thái và các bit điều khiển. Các bit điểu khiển set mode của Port nối tiếp, còn các bit trạng thái cho biết sự kết thúc việc thu phát 1 kí tự. Các bit trạng thái có thể được kiểm tra trong phần mềm hoặc có thể lập trình để sinh ra sự ngắt.
Tần số hoạt động của Port nối tiếp hoặc tốc độ BAUD có thể được lấy từ dao động trên Chip 8051 hoặc thay đổi. Nếu một tốc độ Baud thay đổi được dùng, thì Timer cung cấp 1 tốc độ Baud ghi giờ và phải được lập trình một cách phù hợp.
2. thanh ghi điều khiển port nối tiếp scon (serial port control register)
Mode hoạt động của Port nối tiếp 8051 được set bởi việc ghi lên thanh ghi mode của Port nối tiếp SCON ở địa chỉ 99H. Bảng tóm tắt thanh ghi điều khiển Port nối tiếp SCON như sau :
Bit |
Ký hiệu |
Địa chỉ |
Mô tả hoạt động |
SCON.7 |
SM0 |
9FH |
Bit 0 của mode Port nối tiếp. |
SCON.6 |
SM1 |
9EH |
Bit 1 của mode Port nối tiếp. |
SCON.5 |
SM2 |
9DH |
Bit 2 của mode Port nối tiếp. Cho phép sự truyền của bộ xử lý đa kênh ở mode 2 và 3; RI sẽ không tích cực nếu bit thứ 9 đã thu vào là 0. |
SCON.4 |
REN |
9CH |
REN = 1 sẽ cho thu kí tự. |
SCON.3 |
TB8 |
9BH |
Phát bit 8. Bit 9 phát trong mode 2 và 3, nó được set hoặc xóa bởi phần mềm. |
SCON.2 |
RB8 |
9AH |
Thu bit 8, bit 9 thu. |
SCON.1 |
TI |
99H |
Cờ ngắt phát. Được set khi kết thúc sự truyền kí tự và được xóa bởi phần mềm. |
SCON.0 |
RI |
98H |
Cờ ngắt thu. Được set khi kết thúc sự thu và được xóa bởi phần mềm. |
3. các mode hoạt động (mode of operation)
SM0 |
SM1 |
MODE |
mô tả |
tốc độ baud |
0 |
0 |
0 |
Thanh ghi dịch |
Cố định (tần số dao động 1¸12). |
0 |
1 |
1 |
URAT8 bit |
Thay đổi (được đặt bởiTimer). |
1 |
0 |
2 |
URAT 8 bit |
Cố định (tần số dao động ¸12 or ¸16) |
1 |
1 |
3 |
URAT 8 bit |
Thay đổi (được đặt bởi Timer). |
Serial Port Modes.
Trước khi dùng Port nối tiếp, SCON phải được gán đúng mode. Ví dụ để khởi gán Port nối tiếp MODE 1 (SM0/SM1 = 0/1), cho phép thu (REN =1), và set cờ ngắt của việc phát sẵn sàng hoạt động (TI = 1), ta dùng lệnh sau : MOV SCON, # 01010010H.
Port nối tiếp của 8051 có 4 mode hoạt động tùy thuộc theo 4 trạng thái của SM0/SM1.
Ba trong 4 mode cho phép truyền sự đồng bộ với mỗi kí tự thu hoăc phát sẽ được bố trí bởi bit Start hoặc bit Stop.
4. sự khởi động, truy xuất các thanh ghi port nối tiếp
4.1. Sự cho phép bộ thu (Recive Enable) :
Bit cho phép thu REN trong thanh ghi SCON phải được set bởi phần mềm để cho phép sự thu các ký tự. Điều này thường được làm ở đầu chương trình khi các Port nối tiếp và các Timer . . . được khởi động.
Ta có thể động bằng lệnh :
setb ren hoặc mov con, # xxx1xxxxb
4.2. Bit data thứ 9 (the9th data bit) :
Bit data thứ 9 được phát trong mode 2 và mode 3 phải được LOAD vào TB8 bởi phần mềm, còn bit data thứ 9 được thu thì đặt trong RB8.
Phần mềm có thể (hoặc không) đòi hỏi một bit data thứ 9 tham gia vào những chi tiết kỹ thuật của thiết bị nối tiếp với điều kiện màsự truyền data được thành lập.
4.3. Sự thêm vào bit kiểm tra chẳn lẻ Parity :
Cách tổng quát dùng chung bit data thứ 9 là cộng bit Parity vào một ký tự .
Bit P (Parity) trong từ trạng thái chương trình PSW sẽ được set hoặc xóa với mọi chu kỳ máy để thành lập bit Parity chẳn với 8 bit trong thanh ghi tích lũyA
Ví dụ nếu sự truyền yêu cầu 8 bit data cộng thêm 1 bit Parity chẵn, thì các lệnh sau đây có thể được dùng để phát 8 bit vào thanh ghi A với Parity chẳn được cộng vào bit thứ 9.
mov c, p
mov tB8, c
mov sbuf, a
Nếu Parity lẻ được yêu cầu thì các lệnh trên được sửa lại là:
mov c, p
cpl c
...............................................
SJMP CG
LAP2:
CPL P0.4
JB P3.5,DVG
INC 7CH
MOV A,7CH
CJNE A,#10,DVG
MOv 7CH,#0
SJMP DVG
CG: ACALL DELAY
JB P3.0,LAP3
SJMP DVG
CPL P0.5
JB P3.5,CG
INC 7DH
MOV A,7DH
CJNE A,#3,CG
MOV 7DH,#0
SJMP CG
TIM0:MOV DPTR,#MA_7_DOAN
MOV A,@R0
MOVC A,@A+DPTR
MOV P2,A
MOV P0,R7
MOV TH0,#HIGH(-1000)
MOV TL0,#LOW(-1000)
INC R0
MOV A,R7
RL A
MOV R7,A
CJNE A,#7FH,THOAT0
MOV R7,#0FEH
MOV R0,#78H
THOAT0:MOV A,7FH
CJNE A,#1,TTH
CPL P1.7
TTH:RETI
MA_7_DOAN:
DB 3FH,86H,5BH,4FH,66H,6DH,7DH,87H,7FH,6FH
TIM1:CLR TR1
MOV TH1,#HIGH(-50000)
MOV TL1,#LOW(-50000)
SETB TR1
DJNZ 70H,THOAT1
MOV 70H,#20
INC 78H
MOV A,78H
CJNE A,#10,THOAT1
MOV 78H,#00H
INC 79H
MOV A,79H
CJNE A,#6,THOAT1
MOV 79H,#00H
INC 7AH
MOV A,7AH
CJNE A,#10,THOAT1
MOV 7AH,#00H
INC 7BH
MOV A,7BH
CJNE A,#6,THOAT1
MOV 7BH,#00H
INC 7CH
MOV A,7CH
CJNE A,#10,TIEP
MOV 7CH,#00H
INC 7DH
SJMP THOAT1
TIEP: CJNE A,#4,THOAT1
MOV A,7DH
CJNE A,#2,THOAT1
MOV 7DH,#00H
MOV 7CH,#00H
THOAT1:MOV A,74H
CJNE A,7DH,TH
MOV A,73H
CJNE A,7CH,TH
MOV A,72H
CJNE A,7BH,TH
MOV A,71H
CJNE A,7AH,TH
MOV 7FH,#1
TH: RETI
DELAY: MOV 75H,#3
D0: MOV 76H,#0FFH
D1: MOV 77H,#0FFH
DJNZ 77H,$
DJNZ 76H,D1
DJNZ 75H,D0
RET
END
LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH LED MA TRẬN
A. LƯU ĐỒ GIẢI THUẬt
B. CHƯƠNG TRÌNH
ORG 0500h
K: DB 7EH,10H,28H,44H,02H,00H
H: DB 7EH,10H,10H,10H,7EH,00H
0: DB 3CH,72H,72H,72H,3CH,00H
A: DB 1EH,28H,48H,28H,1EH,00H,00H,00H
machuD: DB 08H,7EH,4AH,42H,3CH,00H
machuT: DB 40H,40H,7eH,40H,40H,00H
DB 08H,08H,00H
machuT: DB 40H,40H,7eH,40H,40H,00H
machuH: DB 7EH,10H,10H,10H,7EH,00H,00H,00H
machuT: DB 40H,40H,7eH,40H,40H,00H
machuH: DB 7EH,10H,10H,10H,7EH,00H
machuD: DB 08H,7EH,4AH,42H,3CH,00H
machuT: DB 40H,40H,7eH,40H,40H,00H
DB 3CH,42H,42H,42H,3CH,00H
DB 42H,52H,52H,52H,3CH,00H
machuD: DB 7EH,42H,42H,24H,18H,00H
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
ORG 0000H
MAIN: MOV DPTR, #0500H
MAINA:MOV R2,#250
MAINB: MOV R1,#00
MOV R3,#00000001B
MAINC: MOV A,R1
MOVC A,@A+DPTR
MOV P3,A
MOV P2,R3
LCALL DELAY
MOV P2,#00H
MOV P1,R3
LCALL DELAY
MOV P1,#00H
INC R1
MOV A,R3
RL A
MOV R3,A
CJNE R1,#8,MAINC
DJNZ R2,MAINB
INC DPTR
MOV A,DPL
CJNE A,#80,MAINA
LJMP MAIN
DELAY:MOV R5,#1
DE: MOV R6, #50
DJNZ R6,$
DJNZ R5,DE
RET
DELAY1S:MOV R5,#0
PNDE: MOV R6,#0
DJNZ R6,$
DJNZ R5, PNDE
RET
END
CHƯƠNG IV: KẾT QUẢ
Sau thời gian thực hiện mà nhà trường qui định, chúng em đã hòan tất đề tài của mình với kết quả đạt yêu cầu đề ra như sau :
Mô hình họat động tốt, có thể điều khiển các trục ghép ảnh tạo thành ảnh hoàn chỉnh. Có thể thay đổi thứ tự quay của các trục tùy theo chương trình điều khiển.
Hiển thị chính xác giờ phút giây ra LED 7 đoạn, mạch có thể hiển thị giờ và hiệu chỉnh tốt.
Mạch LED đơn hiển thị chữ : CĐKT CAO THẮNG có thể điều khiển LED sáng theo nhiều kiểu đẹp mắt với nhiều tốc độ khác nhau.
Mạch LED ma trận được ghép tạo ra một LED lớn từ 4 LED ma trận nhỏ hơn hiển thị và dịch chữ :KHOA ĐIEN TU - TIN HOC THDT03D.
Mặc dù đề tài của chúng em đã hoàn tất nhưng vẫn còn một số hạn chế không thể tránh khỏi :
Khoảng cách của các trục ghép ảnh hơi rộng so với dự định ban đầu của chúng em. Chương trình đồng hồ còn chưa tối ưu nên còn một số hạn chế. Ngoài ra việc sắp xếp và trang trí của chúng em chưa thật sự đẹp mắt. Nhưng dù sao chúng em cũng đã cố gắng hết sức để hoàn tất đề tài của mình trong thời gian cho phép.
Với đề tài này thì chúng em có thể thiết kế thêm một số chức năng khác để làm cho phong phú hơn như:
Thiết kế hệ thống đèn chiếu sáng, đảo chiều quay động cơ, bố trí thêm mạch nhiệt độ…..
Trong quá trình thực hiện đề tài chúng em đã nhận được sự giúp đỡ rất nhiệt tình của các thầy cô trong nhà trường cũng như trong khoa. Đây là những thuận lợi rất cần thiết và có ích cho chúng em. Các thầy cô đã chỉ dẫn, góp ý và giúp chúng em về địa điểm để chúng em thuận lợi hơn quá trình thực hiện.
Tuy nhiên trong quá trình thực hiện chúng em gặp một số khó khăn như sau :
Khó khăn lớn nhất đối với chúng em là việc thiết kế phần cơ của hệ thống ghép ảnh. Do đây là đề tài mới nên việc thiết kế và thi công gặp rất nhiều khó khăn. Chúng đòi hỏi nhiều kiến thức cũng như kỹ năng không thuộc chuyên ngành của chúng em. Ngoài ra do hầu hết các nguyên vật liệu và phụ kiện đều không có sẵn và rất khó tìm trên thị trường, nên việc thiết kế và thi công phần cơ chiếm phần lớn thời gian thực hiện của chúng em. Bên cạnh đó. chúng em còn khó khăn trong việc tìm địa điểm để thực hiện cũng như phương tiện đi lại của nhóm.
Trên đây là kết quả đạt được, những mặt hạn chế, hướng khắc phục những thuận lợi và khó khăn của chúng em trong quá trình thực hiện đề tài. Rất mong quý thầy cô thông cảm cho những khó khăn của chúng em mà bỏ qua những mặt hạn chế và những thiếu xót của chúng em.