LỜI NÓI ĐẦU Bộ Vi xử lí là hạt nhân của hệ VXL,nó thực hiện các phép tính logic hoặc số học để điều khiển toàn bộ hoạt động của hệ: - Đọc các lệnh từ ô nhớ,giải mã lệnh và thực hiện lệnh - Trao đổi số liệu với bộ nhớ và các thiết bị vào ra - Có thể được điều khiển từ 1 số tín hiệu bên ngoài đẻ thực hiện 1 số chức năng đặc biệt như thâm nhập bộ nhớ,ngắt và treo Một hệ VXL bao gồm 2 phần: - Phần cứng - Phần mềm *) Phần cứng là toàn bộ các kết cấu vật lí cấu thành nên hệ như ROM, RAM, … *) Phần mềm:Phần logic bao gồm hệ điều hành và chương trình ứng dụng(do người sử dụng viết) chương trình được lưu trữ trong bộ nhớ bằng mã nhị phân của máy tính .Một chương trình viết bằng ngôn ngữ máy là 1 chuỗi các byte nhị phân biểu diễn các lệnh mã máy tính thực hiện được .Hợp ngữ thay thế các mã nhị phân của ngôn ngữ máy bằng các mã gợi nhớ giúp ta dễ nhớ hơn và dễ lập trình hơn.
Trang 1LỜI NÓI ĐẦU
Bộ Vi xử lí là hạt nhân của hệ VXL,nó thực hiện các phép tính logic hoặc số học để điều khiển toàn bộ hoạt động của hệ:
- Đọc các lệnh từ ô nhớ,giải mã lệnh và thực hiện lệnh
- Trao đổi số liệu với bộ nhớ và các thiết bị vào ra
- Có thể được điều khiển từ 1 số tín hiệu bên ngoài đẻ thực hiện 1 số chức năng đặc biệt như thâm nhập bộ nhớ,ngắt và treo
Một hệ VXL bao gồm 2 phần:
- Phần cứng
- Phần mềm
*) Phần cứng là toàn bộ các kết cấu vật lí cấu thành nên hệ như ROM, RAM, …
*) Phần mềm:Phần logic bao gồm hệ điều hành và chương trình ứng dụng(do người sử dụng viết) chương trình được lưu trữ trong bộ nhớ bằng mã nhị phân của máy tính Một chương trình viết bằng ngôn ngữ máy là 1 chuỗi các byte nhị phân biểu diễn các lệnh mã máy tính thực hiện được Hợp ngữ thay thế các mã nhị phân của ngôn ngữ máy bằng các mã gợi nhớ giúp ta dễ nhớ hơn và dễ lập trình hơn
BTL bao gồm:
CHƯƠNG 1: Giới thiệu họ vi điều khiển 8051
1.1 Cấu trúc phần cứng
1.2 Sơ đồ chân và chức năng từng chân
CHƯƠNG 2: Ứng dụng đo khoảng thời gian giữa 2 xung ( f < 1000 Hz )
2.1 Mạch tạo xung sử dụng time 555
2.2 Giới thiệu về LED 7 vạch
2.3 Lưu đồ thuật toán
2.4 Mạch đo và chương trình hợp ngữ
Trong BTL em nhận được có gì sai sót rất mong được sự chỉ bảo của Thầy để BTL của em được thành công, em xin chân thành cảm ơn !
Trang 2CHƯƠNG 1: GIỚI THIỆU HỌ VI ĐIỀU KHIỂN 8051
1.1 Cấu trúc phần cứng
Đặc điểm và chức năng hoạt động của các IC họ MSC-51 hoàn toàn tương tự như nhau Ở đây giới thiệu IC8951 là một họ IC vi điều khiển do hãng Intelcủa Mỹ sản xuất Chúng có các đặc điểm chung như sau:
Các đặc điểm của 8951 được tóm tắt như sau :
8 KB EPROM 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
4s cho hoạt động nhân hoặc chia
Sơ đồ khối của 8951:
INT1\
INT0\
SERIAL PORT TIMER 0 TIMER 1
INTERR OTHER
CPU
BUS CONTRO OSCILAT
SERIA
L PORT
TXD
Trang 31.2 Sơ đồ chân và chức năng từng chân
1.2.1 Sơ đồ chân 8951:
5v
+ C3 10MF
R3 10K
12M C4 30P
C4 30P
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
5v
U4
P1.0 P0.0/AD0 P1.1 P0.1/AD1 P1.2 P0.2/AD2 P1.3 P0.3/AD3 P1.4 P0.4/AD4 P1.5 P0.5/AD5 P1.6 P0.6/AD6 P1.7 P0.7/AD7 RST
EA/VPP P3.0/RXD ALE/PROG P3.1/TXD PSEN P3.2/INT0
P3.3/INT1 P3.4/T0 P2.7/A15 P3.5/T1 P2.6/A14 P3.6/WR P2.5/A13 P3.7/RD P2.4/A12
P2.3/A11 XTAL2 P2.2/A10 XTAL1 P2.1/A9
P2.0/A8
AT89C51
39 38 37 36 35 34 33 32
31 30 29
28 27 26 25 24 23 22
21
Sơ đồ chân IC 89C51
1.2.2 Chức năng các chân của 8951:
- 8951 có tất cả 40 chân có chức năng như các đường xuất nhập Trong đó có
24 chân có tác dụng kép (có nghĩa 1 chân có 2 chức năng), mỗi đường có thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ
a Các Port:
Port 0 :
- Port 0 là port có 2 chức năng ở các chân 32 - 39 của 8951 Trong các thiết
kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các đường I/O Đối
Trang 4với các thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus
dữ liệu P0 được dồn kênh giữa bus dữ liệu (D0 – D7) và bus địa chỉ (A0 –D7)
Port 1:
- Port 1 là port I/O trên các chân 1 đến 8 Các chân được ký hiệu P1.0, P1.1,
P1.2, … có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần Port 1 không
có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngoài
- Port 3 là port có tác dụng kép trên các chân 10 - 17 Các chân của port này
có nhiều chức năng, các công dụng chuyển đổi có liên hệ với các đặc tính đặc biệt của 8951 như ở bảng sau:
P3.0 RXD Chân nhận dữ liệu của cổng nối tiếp
P3.6 /WR Tín hiệu ghi dữ liệu lên bộ nhớ ngoài
b Các ngõ tín hiệu điều khiển :
Ngõ tín hiệu PSEN (Program store enable):
- PSEN là tín hiệu ngõ ra ở chân 29 có tác dụng cho phép đọc bộ nhớ chương trình mở rộng thường được nói đến chân /0E (output enable) của EPROM cho phép đọc các byte mã lệnh
- PSEN ở mức thấp trong thời gian Microcontroller 8951 lấy lệnh Các mã lệnhcủa chương trình được đọc từ EPROM qua bus dữ liệu và được chốt vào thanh ghi lệnh bên trong 8951 để giải mã lệnh Khi 8951 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic 1
Ngõ tín hiệu điều khiển ALE (Address Latch Enable ) :
- Khi 8951 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus địa chỉ và bus dữ liệu do đó phải tách các đường dữ liệu và địa chỉ Tín hiệu ra ALE ở chân thứ 30, nó dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt
Trang 5- Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian port 0 đóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và có thể được dùng làm tín hiệu clock cho các phần khác của hệ thống Chân ALE được dùng làm ngõ vào xung lập trình cho Eprom trong 8951
Ngõ tín hiệu /EA (External Access):
- Tín hiệu vào /EA ở chân 31 thường được mắc lên mức 1 hoặc mức 0 Nếu ở mức 1, 8951 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp 8 Kbyte Nếu ở mức 0, 8951 sẽ thi hành chương trình từ bộ nhớ mở rộng Chân /EA được lấy làm chân cấp nguồn 21V khi lập trình cho EPROM trong 8951
Ngõ tín hiệu RST (Reset) :
-Ngõ vào RST ở chân 9 là ngõ vào Reset của 8951 Khi ngõ vào tín hiệu này đưa lên cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống Khi cấp điện mạch tự động Reset
Các ngõ vào bộ dao động XTAL1, XTAL2:
- Hai chân XTAL1 và XTAL2 (chân 18 và 19) Bộ dao động được tích hợp bên trong 8951, khi sử dụng 8951 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ Tần số thạch anh thường sử dụng cho 8951 là
12Mhz
Chân 40 (Vcc) được nối lên nguồn 5V
Trang 6CHƯƠNG 2: ỨNG DỤNG ĐO KHOẢNG THỜI GIAN GIỮA
2 XUNG ( F < 1000 HZ )
2.1 Mạch tạo xung dùng Time 555:
- Vcc cung cấp cho IC có thể sử dụng từ 4.5v đến 15v Đường mạch màu đỏ là dương
nguồn ,đường mạch màu đen dưới cùng là âm nguồn
- Khi thay đổi các điện trở R1 , R2 và giá trị tụ C1 sẽ thu được dao động có tần số và độ rộng xung như ý muốn theo công thức sau :
Trang 72.2.Giới thiệu về LED 7 vạch
Trong các thiết bị, để báo trạng thái hoạt động của thiết bị đó cho người sử dụng với thông số chỉ là các dãy số đơn thuần, thường người ta sử dụng "led 7 đoạn" Led 7 đoạn được sử dụng khi các dãy số không đòi hỏi quá phức tạp, chỉ cần hiện thị số là đủ, chẳng hạn led 7 đoạn được dùng để hiển thị nhiệt độ phòng, trong các đồng hồ treo tường bằng điện tử, hiển thị số lượng sản phẩm được kiểm tra sau một công đoạn nào đó
Led 7 đoạn có cấu tạo bao gồm 7 led đơn có dạng thanh xếp theo hình và có thêm một led đơn hình tròn nhỏ thể hiện dấu chấm tròn ở góc dưới, bên phải của led 7 đoạn
8 led đơn trên led 7 đoạn có Anode(cực +) hoặc Cathode(cực -) được nối chung với nhau vào một điểm, được đưa chân ra ngoài để kết nối với mạch điện 8 cực còn lại trên mỗi led đơn được đưa thành 8 chân riêng, cũng được đưa ra ngoài để kết nối với mạch điện Nếu led 7 đoạn có Anode(cực +) chung, đầu chung này được nối với +Vcc, các chân còn lại dùng để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ởmức 0 Nếu led 7 đoạn có Cathode(cực -) chung, đầu chung này được nối xuống Ground (hay Mass), các chân còn lại dùng để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 1
Vì led 7 đoạn chứa bên trong nó các led đơn, do đó khi kết nối cần đảm bảo dòng qua mỗi led đơn trong khoảng 10mA-20mA để bảo vệ led Nếu kết nối với nguồn 5V có thể hạn dòng bằngđiện trở 330Ω trước các chân nhận tín hiệu điều khiển
Sơ đồ vị trí các led được trình bày như hình dưới:
Trang 8
Các điện trở 330Ω là các điện trở bên ngoài được kết nối để giới hạn dòng điện qua led nếu led 7 đoạn được nối với nguồn 5V.
Chân nhận tín hiệu a điều khiển led a sáng tắt, ngõ vào b để điều khiển led b Tương tự với các chân và các led còn lại
2.2.1.Kết nối với Vi điều khiển
Ngõ nhận tín hiệu điều khiển của led 7 đoạn có 8 đường, vì vậy có thể dùng 1 Port nào đó của
Vi điều khiển để điều khiển led 7 đoạn Như vậy led 7 đoạn nhận một dữ liệu 8 bit từ Vi điều khiển để điều khiển hoạt động sáng tắt của từng led led đơn trong nó, dữ liệu được xuất ra điềukhiển led 7 đoạn thường được gọi là "mã hiển thị led 7 đoạn" Có hai kiểu mã hiển thị led 7 đoạn: mã dành cho led 7 đoạn có Anode(cực +) chung và mã dành cho led 7 đoạn có
Cathode(cực -) chung Chẳng hạn, để hiện thị số 1 cần làm cho các led ở vị trí b và c sáng, nếu
sử dụng led 7 đoạn có Anode chung thì phải đặt vào hai chân b và c điện áp là 0V(mức 0) các chân còn lại được đặt điện áp là 5V(mức 1), nếu sử dụng led 7 đoạn có Cathode chung thì điệnáp(hay mức logic) hoàn toàn ngược lại, tức là phải đặt vào chân b và c điện áp là 5V(mức 1)
Bảng mã hiển thị led 7 đoạn: Phần cứng được kết nối với 1 Port bất kì của Vi điều khiển, để thuận tiện cho việc xử lí về sau phần cứng nên được kết nối như sau: Px.0 nối với chân a, Px.1 nối với chân b, lần lượt theo thứ tự cho đến Px.7 nối với chân h
Dữ liệu xuất có dạng nhị phân như sau : hgfedcba
Trang 9Bảng mã hiển thị led 7 đoạn dành cho led 7 đoạn có Anode chung (các led đơn sáng ở mức 0):
Số hiển thị trên led 7 đoạn Mã hiển thị led 7 đoạn dạng nhị phân Mã hiển thị led 7 đoạn dạng thập lục phân
Bảng mã hiển thị led 7 đoạn dành cho led 7 đoạn có Cathode chung (các led đơn sáng ở mức 1):
Số hiển thị trên led 7 đoạn Mã hiển thị led 7 đoạn dạng nhị phân Mã hiển thị led 7 đoạn dạng thập lục phân
Trang 102.2.2.Giao tiếp Vi điều khiển với nhiều led 7 đoạn :
Nếu kết nối mỗi một Port của Vi điều khiển với 1 led 7 đoạn thì tối đa kết nối được 4 led 7 đoạn Mặt khác nếu kết nối như trên sẽ hạn chế khả năng thực hiện các công việc khác của Vi điều khiển Cho nên cần phải kết nối, điều khiển nhiều led 7 đoạn với số lượng chân điều khiển
từ Vi điều khiển càng ít càng tốt Có hai giải pháp: một là sử dụng các IC chuyên dụng cho việc hiện thị led 7 đoạn, hai là kết nối nhiều led 7 đoạn vào cùng một đường xuất tín hiệu hiển thị Nội phần này sẽ đề cập đến cách kết nối nhiều led 7 đoạn theo giải pháp thứ 2
Mắt người có đặc điểm sinh lí là chỉ thu nhận 24 hình/giây để tổng hợpcác hình ảnh về thế giới xung quanh Nếu một tín hiệu ánh sáng có chu
kì sáng tắt hơn 24 lần trong 1 giây, mắt người luôn cảm nhận đó là mộtnguồn sáng liên tục Để minh họa cho điều này, bạn hãy lấy các
chương trình đã thực hiện với led đơn và làm ngắn thời gian delay lại, đến một giá trị nào đó bạn sẽ thấy các led đều sáng liên tục
Để kết nối nhiều led 7 đoạn vào vi điều khiển thực hiện như sau: nối tất cả các chân nhận tín hiệu của tất cả các led 7 đoạn (chân abcdefgh) cần sử dụng vào cùng 1 Port, 4 led 7 đoạn có các chân nhận tín hiệu cùng được được nối với P0 Dùng các ngõ ra còn lại của Vi điều khiển điều khiển on/off cho led 7 đoạn, mỗi ngõ ra điều khiển ON/OFF cho 1 led 7 đoạn,(ON: led 7 đoạn được cấp nguồn để hiển thị, OFF: led 7 đoạn bị ngắt nguồn nên không hiển thị được)
Trong sơ đồ trên, led 7 đoạn được sử dụng là loại có Anode chung, với tất cả các chân nhận tín hiệu được kết nối với Port 0 đã qua điện trở hạn dòng Để điều khiển ON/OFF cho các led 7đoạn, sử dụng transitor loại PNP, transitor này nhận dòng điều khiển từ một ngõ ra của Vi điều khiển, led 7 đoạn sẽ được ON khi tín hiệu từ vi điều khiển đến transitor ở mức 0 Có thể sử transitor loại A564 hoặc 2N3905 hoặc một transitor PNP khác có thông số phù hợp Các điện trở 4.7K và điện trở treo 4.7K đảm bảo transitor luôn hoạt động ở chế độ ngắt/dẫn(đảm bảo khiled 7 đoạn đang ở trạng thái OFF sẽ bị tắt hoàn toàn, không bị sáng mờ mờ)
Tại mỗi thời điểm, chỉ nên cho Vi điều khiển điều khiển cho 1 led 7 đoạn hoạt động, do đó tại mỗi thời điểm chỉ nên có 1 ngõ ra duy nhất nối với transitor ở mức 0 Tại mỗi thời điểm chỉ có một led 7 đoạn được ON nên sẽ không xảy ra tình trạng quá tải cho tải và quá tải cho vi điều khiển khi điều khiển nhiều led 7 đoạn
Trang 11Trong sơ đồ kết nối trên, chẳng hạn cần hiển thị số 451, qui ước thứ tự các led 7 được đếm từ phải sang trái, như vậy cần làm cho led 7 đoạn thứ nhất hiển thị số 1, led 7 đoạn thứ hai hiện thị
số 5, led 7 đoạn thứ 3 hiện thị số 4, các led còn lại không hiện thị Đầu tiên OFF tất cả các led 7 đoạn Kế tiếp xuất mã hiển thị led 7 đoạn để hiển thị số 1, ON led 7 đoạn thứ nhất, lúc này dòngđiện chỉ đi qua led 7 đoạn thứ nhất, làm cho led 7 đoạn thứ nhất hiển thị số 1, thời gian ON trong khoảng vài chục µs(1µs=1/10-6s) Kế tiếp xuất mã hiển thị led 7 đoạn hiển thị số 5, OFF led 7 đoạn thứ nhất và đồng thời ON led 7 đoạn thứ 2, lúc này chỉ có led 7 đoạn thứ hai hiển thị
và hiển thị số 5 Tiếp theo xuất mã hiển thị led 7 đoạn hiện thị số 4, OFF led 7 đoạn thứ hai và
ON led 7 thứ ba, lúc này chỉ duy nhất led 7 đoạn thứ ba hiển thị số 4 Cứ thế lặp lại quá trình
trên liên tục Thời gian ON/OFF chỉ trong khoảng vài chục µs, và tại mỗi thời điểm chỉ có mỗi
một led 7 đoạn hiện thị số của chính nó, vì vậy mắt người thấy 3 led 7 đoạn không sáng đứt quãng, mà sáng liên tục, mỗi led hiển thị 1 số riêng của nó Thực hiện tương tự để mở rộng số lượng led 7 đoạn cần sử dụng
Trang 122.3 Lưu đồ thuật toán:
Trang 13c1 d1 f1 g1
a
e f
g2
a2 c2 d2 f2
b3 c3 d3 f3
b d f
d4 f4
g4
a4 c4 d4 f4
b3 c3 d3 f3
b2 c2 d2 f2 g2
b1 c1 d1 f1
LED2 LED1
LED3
LED4
c LED1 LED4 LED2 XTAL2
18 XTAL1 19
ALE 30 EA 31 PSEN 29
RST 9
P0.0/AD0 39P0.1/AD1 38P0.2/AD2 37P0.3/AD3 36P0.4/AD4 35P0.5/AD5 34P0.6/AD6 33P0.7/AD7 32
P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8
P3.0/RXD 10P3.1/TXD 11P3.2/INT0 12P3.3/INT1 13P3.4/T0 14P3.7/RD 17P3.6/WRP3.5/T1 1615 P2.7/A15 28
P2.0/A8 21P2.1/A9 22P2.2/A10 23P2.3/A11 24P2.4/A12 25P2.5/A13 26P2.6/A14 27
Trang 14JNB P1.2,CHECK_STOP CHECK_555:
JNB P1.3,CHECK_555 CHECK_555_2:
JB P1.3,CHECK_555_2 SETB TRO
Trang 15ADD_IT :
ADD R6,A
BJNZ R1,HIGH_BYTE MOV B,#10
CLR P3.1
LCALL DELAY 10ms SETB P3.1
MOV A,R5
MOVC A,@A + DPTR MOV P2,A
LCR P3.2
LCALL DELAY 10ms SETB P3.1
MOV A,R4
MOVC A,@A + DPTR MOV P2,A
CLR P3.3
LCALL DELAY 10ms
Trang 16LCALL DIV16 MOV A, R0 ORL A, #30H
Trang 17LCALL HIENTHI LCALL TRE
ORL A, #30H LCALL HIENTHI LCALL TRE
Trang 18ORL A, #30H
LCALL HIENTHI LCALL TRE
MOV A, R2 MOV R0, A MOV A, R3 MOV R1, A MOV R2, #0AH MOV R3, #0H LCALL DIV16 MOV A, R0 ORL A, #30H LCALL HIENTHI LCALL TRE
MOV A, R2 ORL A, #30H LCALL HIENTHI LCALL TRE
MOV A, #'u' LCALL HIENTHI LCALL TRE MOV A, #'S' LCALL HIENTHI LCALL TRE
SJMP $ MAIN:
MOV IE, #10000001B SETB TCON.0
MOV A,#38H LCALL XLENH LCALL TREMOV A,#0EH LCALL XLENH LCALL TRESJMP $
XLENH:
MOV P2, A CLR P0.5
;LCD 5X7 , 2 dong
;BAI HIEN THI VA NHAP NHAY CON TRO
Trang 19CLR P0.6
SETB P0.7 CLR P0.7 RET HIENTHI:
MOV P2, A SETB P0.5 CLR P0.6 SETB P0.7 CLR P0.7 RET TRE:
MOV TMOD, #20H MOV TH1, #0DEH SETB TR1
LAP:
JNB TF1,LAP CLR TR1CLR TF1 RET
;CHE DO 2, TIMER 1
;======================================================== DIV16:
ANL PSW, #0E7H MOV A, R3
ORL A, R2 JNZ DIV_OK SETB C
RET DIV_OK:
PUSH DPL PUSH DPH PUSH B ACALL CR0R1 ACALL CR2R3 ACALL UDIV16 ACALL MR0R1 CLR C
POP B POP DPHPOP DPLRET
CR0R1: