Ta sử dụng LED 7 thanh để phụ vụ cho việc hiển thị giá trị nhiệt độ trung bình. Để phối ghép giữa VXL và LED 7 thanh ta sử dụng thêm vi mạch SN7447 để giải mã BCD ra 7 nét và để điều khiển bộ đèn hiển thị. Điều khiển hiển thị số liệu đơn giản nhất là ta cứ cung cấp nguồn liên tục cho LED khi đưa số liệu ra, nhưng cách này rất tốn năng lượng khi số lượng LED sử dụng lớn. Vì vậy thực tế (áp dụng trong thiết kế) ta sử dụng nguyên lý hiển thị động làm việc theo nguyên tắc dồn kênh: Toàn bộ các đèn hiển thị dùng chung một bộ điều khiển SN7447 và các đèn LED không được thắp sáng liên tục mà sáng luân phiên nhau theo một chu kỳ nhất định với thời gian sáng hợp lý (cỡ 20ms) công suất tiêu thụ nhờ thế giảm đi mà vẫn đạt được hiệu quả hiển thị.
30 trang |
Chia sẻ: lynhelie | Lượt xem: 1769 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Thiết kế hệ vi xử lý 8 bit - Phạm Gia Điềm, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ngõ ra cho phép chốt địa chỉ ALE cho phép chốt byte thấp của địa chỉ trong thời gian truy xuất bộ nhớ ngoài. Chân này cũng được dùng làm ngõ vào xung lập trình ( ) trong thời gian lập trình Flash.
Chân cho phép bộ nhớ chương trình ngoài , điều khiển truy xuất bộ nhớ chương trình ngoài.
Chân cho phép truy nhập bộ nhớ ngoài , phải được nối với GND để cho phép chíp vi điều khiển tìm nạp lệnh tờ các vị trí ô nhớ của bộ nhớ chương trình ngoài
Chân nối với VCC để thực hiện chương trình bên trong chíp.
còn nhận điện áp cho phép lập trình VPP trong thời gian lập trình cho Flash , điện áp này cấp cho bộ phận có yêu cầu điện áp 12V
XTAL1
Ngõ vào đến mạch khuyếch đại dảo của mạch dao động và ngõ đến mạch xung clock bên trong chíp.
XTAL2
Ngõ ra từ mạch khuyếch đại đảo của mạch dao động.
1.2 Tổ chức bộ nhớ:
1.2.1 Cấu trúc chung của bộ nhớ:
Tất cả các vi điều khiển thuộc họ MCS-51 đều phân chia bộ nhớ thành hai vùng địa chỉ cho bộ nhớ dữ liệu và bộ nhớ chương trình. Sự phân chia logic giữa bộ nhớ dữ liệu và bộ nhớ chương trình cho phép truy nhập bộ nhớ dữ liệu bằng 8 bit địa chỉ giúp cho việc lưu trữ và thao tác dữ liệu nhanh hơn.Tuy nhiên, chúng ta có thể sử dụng địa chỉ bộ nhớ dữ liệu 16 bit thông qua thanh ghi DPTR.
Bộ nhớ chương trình là loại bộ nhớ chỉ cho phép đọc, không cho phép ghi. Một số vi điều khiển được tích hợp sẵn bộ nhớ chương trình bên trong với dung lượng khoảng 4kbyte hay 8 kbyte, số còn lại phải sử dụng bộ chương trình mở rộng mà quá trình truy nhập được thực hiện thông qua sự điều khiển bằng tín hiệu PSEN (Progam Strobe Enable).
Tuy nhiên, vi điều khiển 8051 cho phép ta sử dụng đến 64kbyte bộ nhớ chương trình bằng cách sử dụng cả bộ nhớ chương trình bên trong và bên ngoài.
Bộ nhớ số liệu chiếm giữ vùng địa chỉ phân chia của bộ nhớ chương trình. Dung lượng của bộ nhớ dữ liệu có thể mở rộng lên tới 64 kbyte. Trong quá trình truy nhập bộ nhớ số liệu, CPU phát ra các tín hiệu đọc và tín hiệu viết số liệu thông qua các chân RD và WR.
00H
0000H
Bộ nhớ Chương trình
Bộ nhớ Số liệu
Bộ nhớ mở
rộng
Bộ nhớ
mở
rộng
|PSEN
|WR
|RD
FFH
|EA=1
Bộ nhớ
trong
|EA=0
Bộ nhớ ngoài
FFFFH
Hình 2.3: Cấu trúc bộ nhớ của họ MCS-51.
Chúng ta có thể kết hợp bộ nhớ chương trình mở rộng với bộ nhớ số liệu mở rộng bằng cách cho hai tín hiệu RD và PSEN qua một cổng logic AND, lối ra của cổng AND này sẽ tạo tín hiệu đọc cho bộ nhớ mở rộng.
1.2.2 Bộ nhớ chương trình:
Sau khi Reset, CPU bắt đầu thực hiện chương trình từ địa chỉ 0000H. Vùng đầu của bộ nhớ chương trình là vùng chứa các vector ngắt, mỗi ngắt được phân chia một vùng địa chỉ cố định trong trong bộ nhớ chương trình. Khi xuất hiện ngắt, CPU sẽ nhảy tới địa chỉ này, đây cũng là địa chỉ đầu của chương trình con phục vụ ngắt. Các vector ngắt cách nhau 8 byte, vì vậy nếu chương trình con phục vụ ngắt quá dài (>8 byte) thì tại vector ngắt ta phải đặt một lệnh nhảy không điều kiện tới vùng địa chỉ khác chứa chương trình con phục vụ ngắt.
1.2.3 Bộ nhớ số liệu:
Phía bên phải của Hình 2.3 biểu diễn không gian bộ nhớ dữ liệu của MCS-51. Chúng ta có thể sử dụng tới 64 Kbyte bộ nhớ số liệu ngoại vi. Độ rộng bus địa chỉ của bộ nhớ số liệu ngoài có thể là 8 bit hoặc 16 bit. Bus địa chỉ rộng 8 bit thường được sử dụng để liên kết với một hoặc nhiều đường vào ra khác để định địa chỉ cho RAM theo trang. Trong trường hợp bus địa chỉ rộng 16 bit, cổng P2 sẽ phát ra 8 bit địa chỉ cao còn cổng P1 sẽ phát ra 8 bit địa chỉ thấp. Bằng cách này, ta có thể truy nhập trực tiếp lên bộ nhớ dữ liệu ngoài với độ lớn tối đa là 64 Kbyte.
Bộ nhớ số liệu trong được chia ra làm 3 vùng:
+128 byte cao.
+128 byte thấp.
+Vùng dành cho các thanh ghi chức năng đặc biệt (SFR).
Địa chỉ của bộ nhớ số liệu trong luôn là 8 bit, và có thể quản lý được 256 byte bộ nhớ.
2. Tổ chức bộ nhớ (Memory Map):
Từ cấu trúc của vi điều khiển 89C51 giới thiệu ở chương I và yêu cầu thiết kế ta tiến hành phân bổ các vùng nhớ như sau:
Bộ nhớ chương trình 8K ROM chia làm hai vùng:
ROM trong (On-chip) có địa chỉ vật lý: 0000H á 0FFFH.
Bộ nhớ dữ liệu được mở rộng thêm 8K RAM ngoài, với địa chỉ vật lý: 2000H á 3FFFH.
Mạch ghép nối vào/ ra sử dụng IC8255 với địa chỉ của từng cấu hình như sau:
Địa chỉ cổng PA: 4000H
Địa chỉ cổng PB: 4001H
Địa chỉ cổng PC: 4002H
Địa chỉ của từ điều khiển PSW: 4003H
Địa chỉ của ADC08098 kênh vào tương tự: 6000H á 6007H.
3. Khối hiển thị :
Khối hiển thị gồm 8 LED 7 đoạn được tổ chức theo kiểu sáng luân phiên 2.5 ms một lần. LED sáng được chọn bởi 89C51 qua đường điều khiển từ cổng P0.0 -> P0.3. Dữ liệu được hiển thị dưới dạng mã 7 thanh cũng được 89C51 gửi tới LED qua đường data. Để phù hợp giữa số liệu đưa ra cổng của 8255 (ở dạng BCD) với số liệu hiển thị ra LED 7 đoạn, ta sử dụng mạch phần cứng. Vì vậy trong khối hiển thị ta sử dụng vi mạch SN7447 để giải mã số BCD ra mã 7 thanh và để điều khiển bộ đèn hiển thị.
4. Khối các thiết bị giao tiếp/ghép nối.
Cổng vào ra tương tự/số dùng ADC0809. Số liệu vào tương tự từ 8 cảm biến nhiệt độ sẽ được kết nối vào 8 cổng vào của ADC, ADC được điều khiển bởi VXL89C51 thực hiện việc chuyển đổi số liệu sang dạng số và lưu trữ vào một vùng nào đó trong RAM trong.
Cổng vào/ ra số dùng vi mạch PPI 8255 có khả năng lập trình thực hiện quá trình phối hợp trao đổi dữ liệu; cụ thể ở đây là số liệu vào giữa ADC với VXL và số liệu từ VXL ra LED.
Giới thiệu linh kiện và tổ chức phối ghép.
1. Thiết kế bộ nhớ:
Xem xét cấu trúc của 89C51 và yêu cầu cần 8K cho nhớ chương trình ta thiết kế thêm vùng nhớ chương trình dùng thêm 8Kb ROM đặt ở ngoài. Đối với yêu cầu cho nhớ dữ liệu, vì 89C51 đã có 128 bytes RAM trong và yêu cầu cần thiết kế bộ nhớ dữ liệu là 4Kb nên để dễ dàng cho thiết kế ta sử dụng thêm 8Kb RAM ngoài để mở rộng bộ nhớ dữ liệu cho hệ thống.
Bộ nhớ ROM ngoài
Đối với ROM ngoài ta dùng vi mạch nhớ chỉ đọc loại EPROM 2764(8K´8). Đây là bộ nhớ lập trình xoá bằng tia cực tím, nó có tốc độ truy nhập rất nhanh. Với dung lượng 8Kbyte như vậy nó có 13 đường chọn địa chỉ và có 8 đường ra dữ liệu. EPROM chỉ được hoạt động khi chân /OE ở mức tích cực thấp, nó được vi điêù khiển chọn làm việc khi chân /CE cũng được tích cực thấp. EPROM đợc nuôi với mức điện áp 5V, điện áp này được đưa vào bộ nhớ thông qua chân Vpp. Địa chỉ của EPROM trong hệ thống là 0000H á1FFFH nên nó được chọn bởi tín hiệu chọn chip /CS1 của giải mã địa chỉ.
Sơ đồ chân của EPROM
Bộ nhớ RAM ngoài
Đối với RAM ngoài ta sử dụng loại SRAM vi mạch dùng trong thiết kế là 6264. Cũng có 13 đường địa chỉ 8 đường dữ liệu. Nó có địa chỉ 2000á3FFF, địa chỉ này được chọn ra trong vùng địa chỉ của vi điều khiển bởi chân /CS2 của giải mã địa chỉ. Ngoài ra còn có đường chọn vỏ khác là /CS2 được nối tích cực và có hai đườngtín hiệu yêu cầu đọc viết là /OE, /WE .
Sơ đồ chân của RAM 6264:
2. Vi mạch ADC0809:
Bộ ADC 0809 là một thiết bị CMOS tích hợp với một bộ chuyển đổi tương sang số 8 bit, bộ chọn kênh và mật bộ logic điều khiển tương thích. Bộ chuyển đổi tương tự số này sử dụng phương pháp chuyển đổi xấp xỉ. Bộ chọn kênh có thể chọn ra kênh cần chuyển đổi bằng 3 chân chọn địa chỉ. Thiết bị này loại trừ khả năng cần thiết điều chỉnh điểm zero bên ngoài và khả năng điều chỉnh tỉ số làm cho ADC đễ dàng giao tiếp với các bộ vi xử lý.
Các đặc điểm cơ bản của ADC 0809
Nguồn nuôi đơn ± 5 V, hiệu suất cao.
Dải tín hiệu lối vào tương tự 5V khi nguồn nuôi là +5V. Có thể mở rộng thang đo bằng các giải pháp kỹ thuật cho từng mạch cụ thể.
Dễ dàng giao tiếp với vi xử lý vì đầu ra có bộ đệm 3 trạng thái nên có thể ghép trực tiếp vào kênh dữ liệu của hệ VXL.
Tổng sai số chưa chỉnh ±1/2LSB.
Thời gian chuyển đổi 100 ms .
Tần số xung clock 10kHz – 1028 kHz.
Đảm bảo sai số tuyến tính trong dải nhiệt độ từ –400C á 85OC.
a. Bảng chân lý và sơ đồ chân của vi mạch ADC0809.
A
B
C
X
0
0
0
0
0
0
1
1
0
1
0
2
0
1
1
3
1
0
0
4
1
0
1
5
1
1
0
6
1
1
1
7
X
X
X
(?)
* ý nghĩa các chân:
- IN0 – IN7 : 8 đầu vào tương tự.
A,B,C : các tín hiệu chọn kênh.
Các chân 2.1-2.7: là các đầu ra số.
ALE cho phép chốt số liệu đầu vào.
Start: xung cho phép bắt đầu chuyển đổi.
Clk:đầu vào xung clock
Ref(+): điện áp vào chuẩn +5v
Ref(-): điện áp vào chuẩn 0
Vcc: nguồn cung cấp
b. Cấu trúc bên trong của ADC 0809
Cấu trúc bên trong của ADC0809 được thể hiện ở hình vẽ dưới:
Hoạt động chuyển đổi:
Các bit địa chỉ ở lối vào A,B,C từ bộ giải mã địa chỉ sẽ chốt và xác định kênh đầu vào nào được chọn. Khi một kênh được chọn đồng thời yêu cầu START, ALE được tích cực, yêu cầu độ rộng xung START không nhỏ hơn 200ns. Giá trị điện áp cần được chuyển đổi sẽ được chốt lại ở cổng vào tương ứng xung Start bắt đầu chuyển đổi. Sau xung START khoảng 10μs đầu ra EOC (end of convert) lúc này xuống thấp thực sự bắt đầu quá trình chuyển đổi. Trong suốt quá trình chuyển đổi EOC luôn ở mức tích cực thấp, đồng thời đầu ra 3 trạng thái của ADC0809 bị thả nổi. Sau khoảng 100 ms, ADC0809 thực hiện việc chuyển đổi xong, dữ liệu đầu vào được đưa đến bộ đệm đầu ra ba trạng thái đồng thời chân tín hiệu EOC chuyển lên mức cao báo cho VXL biết để đọc kết quả vào.
c. Ghép ADC0809 với VXL8051.
+ Các kênh vào Analog được nối vào các đầu vào tương ứng của ADC. Mỗi kênh đó có địa chỉ riêng do tổ hợp 3 bit địa chỉ A,B,C quy định. Các đầu vào địa chỉ này kết nối với đường địa chỉ A0A1A2 của Bus địa chỉ của hệ thống. Các đường địa chỉ cao của hệ thống được dùng để tạo tín hiệu chọn chip (/CS) cho ADC0809.
+ Tín hiệu /CS được đưa tới đầu vào của mạch OR để khởi động ADC (Start) khi có tín hiệu /WR đồng thời chốt địa chỉ (ALE) của kênh hiện hành có giá trị là giá trị 3 bit A,B,C. Tín hiệu /CS cũng được đưa tới đầu vào của mạch OR thứ hai để tạo tín hiệu OE cùng với /RD nhằm chốt dữ liệu đã biến đổi xong ở đầu ra.
+ Vì khi biến đổi xong, ACD0809 dùng tín hiệu ra chân EOC để báo cho VXL biết mã nhị phân tương ứng với mức cao của tín hiệu đầu vào đã được tạo ra. Vì vậy ta kết nối EOC với đầu vào ngắt ngoài /INT1 của 8051.
+ 8 bit dữ liệu thường được ghép trực tiếp với Bus dữ liệu hệ thống vì bản thân bộ đệm ra là 3 trạng thái, cũng có thể ghép qua 8255.
3.Vi mạch giao tiếp song song PPI 8255:
Vi mạch 8255 là một vi mạch được sử dụng phổ biến để giao tiếp trong các hệ VXL 8 – 16 bit. Sử dụng 8255A làm cho việc thiết kế để ghép nối bộ VXL với các thiết bị ngoại vi đơn giản đi nhiều, độ mềm dẻo của thiết kế sẽ tăng lên và linh kiện phụ trợ đi kèm cũng giảm đi nhiều. Do có khả năng lập trình được nên nó có thể vừa dùng như cổng nhận số liệu cũng như xuất số liệu tuỳ nội dung của từ điều khiển mà người lập trình đưa vào.
a. Sơ đồ chân và sơ đồ chức năng của 8255A.
Sơ đồ chức năng và sơ đồ chân của 8255A được thể hiện dưới hình vẽ sau:
PA3
PA2
PA1
PA0
RD\
CS\
GND
A1
A0
PC7
PC6
PC5
PC4
PC0
PC1
PC2
PC3
PB0
PB1
PB2
PA4
PA5
PA6
PA7
WR\
RESET
D0
D1
D2
D3
D4
D5
D6
D7
Vcc
PB7
PB6
PB5
PB4
PB3
1
20
21
40
D0 – D7
PA0 – PA7
PB0 – PB7
PC0 – PC7
RD\
WR\
RESET
A0
A1
CS\
8255A
8255A
Trong đó:
Chân 1 á 4, 37 á 40 (PA0 – PA7): là các đường xuất nhập có tên là cổng A.
Chân 18 á 25 (PB0 – PB7): là các đường nhập xuất có tên cổng B.
Chân 10 á 13, 14 á 17 (PB0 – PB7): là các đường nhập xuất có tên cổng C.
Chân 27 á 34 (D0 – D7): là các đường dữ liệu (data) hoạt động hai chiều, dẫn tín hiệu điều khiển từ vi xử lý ra các thiết bị bên ngoài đồng thời nhận các dữ liệu từ các thiết bị điều khiển bên ngoài vào vi xử lý.
Chân 35 (Reset input): ngõ vào xóa, chân reset phải được nối với tín hiệu reset out của vi xử lý để không làm ảnh hướng đến mạch điều khiển. Khi reset, các cổng của 8255A là các ngõ vào, đồng thời tất cả các dữ liệu trên thanh ghi bên trong 8255A đều bị xóa, 8255A trở về trạng thái ban đầu săn sàng làm việc.
Chân 6 (CS\): tín hiệu ngõ vào chip select (CS\) được điều khiển bởi vi xử lý, dùng để lựa chọn 8255A làm việc khi vi xử lý giao tiếp với nhiều thiết bị.
Chân 5 (RD\): ngõ vào đọc dữ liệu (Read Input).
Chân 36 (WR\) : ngõ vào ghi dữ liệu (Write Input).
Chân 8,9 (A1, A0): ngõ vào địa chỉ (Address Input), dùng nhận địa chỉ vào để lựa chọn thanh ghi và các cổng.
Bảng địa chỉ lựa chọn thanh ghi và các cổng:
A1
A0
Cổng và thanh ghi
0
0
Cổng A
0
1
Cổng B
1
0
Cổng C
1
1
Thanh ghi điều khiển
Chân 26 (Vcc) : nguồn 5 VDC.
Chân 7 (GND) : GND 0 VDC.
b. Cấu trúc bên trong và hoạt động của 8255A.
Sơ đồ khối cấu trúc bên trong của vi mạch 8255A.
Port A
Port C
(4 bit cao)
Nhóm A
Port C
(4 bit thấp)
Port B
Nhóm B
Điều khiển nhóm A
Điều khiển nhóm B
Đệm bus dữ liệu
Logic điều khiển ghi/đọc
RD\
WR\
CS\
A0
A1
D7 – D0
PA7 – PA0
PC7 – PC4
PC3 – PC0
PB7 – PC0
Hoạt động của vi mạch 8255A:
Từ sơ đồ khối cấu trúc bên trong của vi mạch 8255A ta thấy các cổng của 8255A được chia thành 2 nhóm:
Nhóm A gồm cổng A và 4 bit cao của cổng C.
Nhóm B gồm cổng B và 4 bit thấp của cổng C.
Cấu hình làm việc của 2 nhóm sẽ do nội dung của thanh ghi điều khiển quyết định.
Vi mạch 8255 giao tiếp với vi xử lý thông qua các đường sau :
- Đường dữ liệu: gồm 8 đường dữ liệu (D0 - D7). Mã lệnh, các dữ liệu đều được truyền đi trên đường này.
- Đường địa chỉ: gồm 2 đường (A0 – A1) dùng để lựa chọn cổng hoặc thanh ghi điều khiển như đã trình bày ở trên.
- Đường điều khiển: gồm các đường RD\, WR\, CS\, Reset dùng để điều khiển việc hoạt động của 8255A.
Để sử dụng các cổng làm công cụ giao tiếp, người sử dụng phải gửi từ điều khiển ra thanh ghi điều khiển để 8255A định cấu hình làm việc cho các cổng đúng như yêu cầu của người lập trình.
c. Từ điều khiển:
Từ điều khiển là dữ liệu được gửi tới thanh ghi điều khiển (CWR) của 8255. Giá trị của từ điều khiển sẽ xác định cấu hình làm việc cho các cổng của 8255A, đó là việc lựa chọn chức năng nhập hay xuất của các cổng.
Trong từ điều khiển có một bit để phân biệt hai chức năng điều khiển khác nhau là:
+ Định nghĩa chế độ các cửa (bit D7 của từ điều kiển là 1).
+ Lập/xoá các bit của Port C (bit D7của từ điều khiển là 0).
Định nghĩa chế độ các cổng
Khi D7 =1, 8255A sẽ sử dụng thông tin trong CWR để định nghĩa chế độ các cửa. Nội dung của CWR xác định chức năng của 24 đường ghép nối với thiết bị ngoại vi. Phần mềm của hệ thống sẽ định nghĩa chế độ của PA, PB một cách độc lập; còn PC có thể được định nghĩa độc lập hay chia làm hai phụ thuộc vào chế độ của PA và PB.
1
D6
D5
D4
D3
D2
D1
D0
Nhóm B
PCL (4 bit thấp)
1 = Input
0 = Output
PB
1 = Input
0 = Output
Mode select
1 = mode 0
0 = mode 1
Nhóm A
Mode select
00 = mode 0
01 = mode 1
1x = mode 2
Cổng A
1 = Input
0 = Output
PCH (4 bit cao)
1=Input
0=Output
Trong chế độ này có thể có 3 chế độ làm việc khác nhau tuỳ thuộc vào nội dung của hai bit D6D5, cụ thể là:
+ Chế độ 0(Vào ra cơ sở): D6D5 = 00,ở chế độ này 8255A cho khả năng xuất/nhập dữ liệu đơn giản qua cả 3 cổng A, B, C một cách độc lập.
+ Chế độ 1 : D6D5 =01, đây là chế độ vào ra có chốt (Strobe), nghĩa là có sự đối thoại giữa ngoại vi và hệ VXL thông qua các bit của cổng C. Trong chế độ này, với nhóm A. thì PA dùng để trao đổi số liệu và nửa cao của PC (PC4 á PC7) để đối thoại giữa ngoại vi và VXL. Còn ở nhóm B thì PB dùng để trao đổi số liệu và PCL để đối thoại.
+ Chế độ 2: D6D5 =1x. Cổng A dùng vào/ra hai chiều, các bit PC3 á PC7 dùng làm tín hiệu đối thoại. Cổng PB có thể làm việc như ở chế độ 1.
Lập/xoá bit:
Nếu D7=0 thì CWR là lệnh để lập/xoá bit của Port C. Lệnh này cho phép lập/xoá bất kỳ bit nào của C một cách độc lập.
0
D6
D5
D4
D3
D2
D1
D0
1: Lập
0: Xoá
Cửa C
D3 D2 D1
bit 0
bit 1
bit 2
bit 3
bit 4
bit 5
bit 6
bit 7
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Không dùng=000
d. Ghép nối 8255A với VXL8051.
+ Với hệ thống đơn giản có thể phối ghép trực tiếp 8255A với VXL. Đầu vào /CS được nối vào một trong các /CSi của giải mã địa chỉ 74LS138 (sẽ đề cập sau).
+ Các tín hiệu /RD, /WR của 8255 cũng được kết nối tương ứng với các tín hiệu điều khiển việc xuất/nhập dữ liệu của 8051.
+ Đầu vào Reset (chân 35) có thể kết nối với chân Reset của 8051 nếu muốn 8255A cùng Reset với hệ thống khi ấn nút reset hoặc có thể để ở mức tích cực thấp.
+ Hai tín hiệu vào địa chỉ A1A0 được nối trực tiếp vào Bus địa chỉ hệ thống. A1A0 được giải mã bên trong mạch 8255A để chọn các cửa vào/ra A, B, C và CWR như đã đề cập ở trên.
+ Các chân số liệu của 8255 có thể kết nối trực tiếp vào Bus số liệu của hệ thống mà không cần đệm 3 trạng thái, vì bản thân các cổng P0 của 8051 đều có đệm 3 trạng thái rồi.
e. Ghép nối 8255A với thiết bị ngoại vi:
Phần ghép nối với thiết bị ngoại vi của 8255A thông qua 24 đường số liệu và điều khiển ở các cổng A, B, C. Các đường ghép nối này được định nghĩa bằng chương trình như giới thiệu ở trên. Bằng cách chọn chế độ làm việc thích hợp và chính xác vi mạch 8255A có thể đáp ứng được những nhu cầu ghép nối tinh vi.
D0-D7
PA
PB
PC
A0
A1
RD
WR
CS
8255A
AD0-AD7
Đệm BUS S/L
74245
Chốt Đ/C
Thấp
74373
Giải mã đ/c
(3/8)
RD
WR
ALE/P
8051
P1
P3.0áP3.5
A14
A15
P2
(P3.7)
(P3.6
4. Thiết kế khối hiển thị:
Ta sử dụng LED 7 thanh để phụ vụ cho việc hiển thị giá trị nhiệt độ trung bình. Để phối ghép giữa VXL và LED 7 thanh ta sử dụng thêm vi mạch SN7447 để giải mã BCD ra 7 nét và để điều khiển bộ đèn hiển thị. Điều khiển hiển thị số liệu đơn giản nhất là ta cứ cung cấp nguồn liên tục cho LED khi đưa số liệu ra, nhưng cách này rất tốn năng lượng khi số lượng LED sử dụng lớn. Vì vậy thực tế (áp dụng trong thiết kế) ta sử dụng nguyên lý hiển thị động làm việc theo nguyên tắc dồn kênh: Toàn bộ các đèn hiển thị dùng chung một bộ điều khiển SN7447 và các đèn LED không được thắp sáng liên tục mà sáng luân phiên nhau theo một chu kỳ nhất định với thời gian sáng hợp lý (cỡ 20ms) ị công suất tiêu thụ nhờ thế giảm đi mà vẫn đạt được hiệu quả hiển thị.
Một cách thực hiện nguyên tắc hiển thị ở chế độ động và dồn kênh được thể hiện dưới hình vẽ dưới đây:
*Nguyên tắc hoạt động:
Giá trị số cần hiển thị của mỗi con số được gửi đến cổng PB của 8255A từ 8085 dưới dạng mã BCD. Từ đây số BCD được mạch SN7447 giải mã và tạo ra các tín hiệu điều khiển thích hợp đưa đến các chân katot a,b,c,d,e,f,g của LED. Mỗi giá trị cần hiển thị được đưa đến cổng PB cứ mỗi 2ms một lần cho một đèn.
Giá trị số nói trên được hiện ra trên chữ số thập phân nào lại là do các bit của byte dữ liệu từ 8051 đưa đến cổng PA của 8255A quyết định. Như vậy, cứ mỗi 2ms thì ta phải đưa dữ liệu ra PB, rồi PA và cho hiện ra được một giá trị số trên một đèn. Trong trường hợp cần hiển thị giá trị của nhiệt độ thì ta chỉ cần tới 3 con số,tức là cần 3 đèn LED 7 thanh, do đó ta chỉ phải mất 2.3=6ms để cho hiện số của cả dãy đèn. Sự sáng nhấp nháy của các đèn với chu kỳ 6ms thì mắt người không thể cảm nhận được sự nhấp nháy của nó, và ta sẽ cảm giác là chúng sáng một cách liên tục.
a b c d e f g
7447
+5V
TL
RBI
BI
PB0áPB7
PA0
PA1
PA2
PAA
PA7
8255A
8051
S/L
S/L
Nếu trong trường hợp cần hiển thị nhiều LED theo nguyên tắc này thì để tiết kiệm tài nguyên (các cổng của 8255A) thì ta dùng một mạch dồn kênh riêng làm thay nhiệm vụ của PA ở trên. Ví dụ như sử dụng thêm một mạch giải mã 74LS138 thì có thể thực hiện điều khiển được tối đa 8 đèn. Trong TH này chỉ sử dụng hết một cổng của 8255A với 4 bit thấp để đưa só BCD ra điểu khiển SN7447, còn 4 bit cao dùng điều khiển mạch giải mã.
+Sơ đồ đèn LED 7 thanh :
+Trong đó:
.chân vcc nối với nguồn 5(v)
.chân GND nối với đát 0(v)
.các chân a,b,c,d,e,f,g,o nhận các tín hiệu ĐK để đk các đèn LED tương ứng
+ Cấu trúc bên trong của đèn LED 7 thanh bao gồm 7 diode phát quang.
+Với cấu trúc các thanh LED như hình 3 thì ta có bảng logic sau:
A
b
c
d
e
f
g
Số hiển thị
1
1
1
1
1
1
0
0
0
1
1
0
0
0
0
1
1
1
0
1
1
0
1
2
1
1
1
1
0
0
1
3
0
1
1
0
0
1
1
4
1
0
1
1
0
1
1
5
1
0
1
1
1
1
1
6
1
1
1
0
0
0
0
7
1
1
1
1
1
1
1
8
1
1
1
1
0
1
1
9
5. Các vi mạch phụ trợ khác:
a. Mạch giải mã 74LS138:
Nó bao gồm 14 chân, trong đó:
Y0 á Y7 là các đường ra địa chỉ, tích cực ở mức thấp.
A,B,C là 3 đường địa chỉ vào, tích cực cao.
E1, E2 là các đầu vào cho phép làm viêc, tích cực ở mức thấp.
E3 là các đầu vào cho phép làm viêc, tích cực ở mức cao.
Ta có bảng chân chức năng của 74LS138 như sau:
C
B
A
/E1
/E2
E1
/Y0
/Y1
/Y2
/Y3
/Y4
/Y5
/Y6
/Y7
X
X
X
1
X
X
1
1
1
1
1
1
1
1
X
X
X
X
1
X
1
1
1
1
1
1
1
1
X
X
X
X
X
0
1
1
1
1
1
1`
1
1
0
0
0
0
0
1
0
1
1
1
1
1
1
1
0
0
1
0
0
1
1
0
1
1
1
1
1
1
0
1
0
0
0
1
1
1
0
1
1
1
1
1
0
1
1
0
0
1
1
1
1
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
0
1
1
1
1
0
1
0
0
1
1
1
1
1
1
0
1
1
1
1
0
0
0
1
1
1
1
1
1
1
0
1
1
1
1
0
0
1
1
1
1
1
1
1
1
0
b. Vi mạch chốt 74LS373:
Đây là mạch có tác dụng chốt lại số liệu ở đầu vào khi có tín hiệu tích cực, đầu ra sẽ không bị biến đổi khi tín hiệu đầu vào đã mất. Nó chỉ thay đổi khi tín hiệu chốt tích cực trở lại. Bên ngoài vỏ cũng có tín hiệu /OE cho phép hoạt động. Khi có yêu cầu chốt chân LE sẽ được tích cực.
Trong ghép nối với 89C51:
+ Chân /OE (số 1) của 74LS373 được nối đất.
+ Chân LE(số 11) của 74LS373 được nối với chân ALE (số 30) của 89C51.
Sơ đồ thiết kế chi tiết.
phần II
Thiết kế phần Mền
CHƯƠNG 1
Lưu đồ thuật toán
START
ấn start?
Chưa
-Khởi tạo chế độ của 8255A
-Cho phép ngắt ngoài
-Đọc giá trị 8 kênh từ ADC
-Tính trung bình
-Hiển thị giá trị trung bình
-Kiểm tra xem có thoả mãn?
Stop?
Stop
Y
Rồi
N
1.Lưu đồ của chương trình:
1.1 Chương trình chính:
1.2 Chương trình đọc dữ liệu 8 kênh từ ADC:
Start
-Cho phép ngắt ngoài
-Đọc kênh thứ i
R7=i=0
R6=j=8
Chờ đọc xong
Đọc xong ?
N
i=i+1
j=j-1
j=0?
N
End
Y
Y
Chương trình con phục vu ngắt khi có tín hiệu EOC của ADC là
Start
-Đọc kênh thứ i(0ÊiÊ7)
-Chia cho 8
-Phần nguyên =Ai
-Phần dư=Bi
Đọc xong?
TBC=SAi+(SBi)/8
End
N
Y
Start
-Đọc kênh thứ i từ ADC
-Đưa gía trị đọc được vào vùng nhớ RAM tương ứng
End
Start
-Đọc số TBC
-TBC/100
-A=phần nguyên
-B=phần dư
-B/10
-C=phần nguyên
-D=phần dư
-Hàng trăm=A
-Hàng chục=C
-Hàng đơn vị=D
End
1.3. Chương trình tính giá trị trung bình của 8 kênh đọc được từ ADC:
1.4. Chương trình tách số trung bình cộng ra hàng trăm, chục, đơn vị
1.5. Chương trình hiển thị LED
1.6 Chương trình kiểm tra xem đã thoả mãn đầu bài chưa
Start
-Đọc hàng trăm
hiển thị kênh 0
trễ một thời gian
-Đọc hàng chục
hiển thị kênh 1
trễ một thời gian
-Đọc hàng đơn vị
hiển thị kênh 2
trễ một thời gian
End
Start
Đọc kênh i
j=0
KQ<GT cho phép
KQ=|GT kênh i-TBC|
j=j+1
N
i=8?
TBC<MAX
TBC>MIN
và j<4
Thoả mãn ?
Báo động
N
End
Y
Y
CHƯƠNG 2
Chương Trình
INCLUDE 89c51.mc
CWR EQU 4003H
PPIB EQU 4001H
PPIA EQU 4000H
PPIC EQU 4002H
ADC EQU 6000H
ADC_IN EQU 2000H
TBC EQU 2100H
TRAM EQU 2300H
CHUC EQU 2301H
DONVI EQU 2302H
MAX EQU 2303H
MIN EQU 2304H
SAI_SO EQU 2305H
ORG 0000h ;Diem nhap chuong trinh chinh
LJMP START
ORG 0013H ;Diem nhap ngat ngoai 1
LJMP EX1ISR
ORG 0030H ;Bat dau dia chi chuong trinh
START: SETB EA;Cho phep ngat toan cuc
MOV IP,#00000100B;Uu tien ngat ngoai 1
MOV DPTR,#CWR;Tu dieu khien cua 8255A
MOV A,#80H;Che do 0 ,tat ca cac chan deu ra
MOVX @DPTR,A;Khoi tao 8255
LCALL INIT_DATA
CON: LCALL READ_ADC
LCALL CALTB
LCALL DISPLAY
LCALL CHECK_ADC
SJMP CON
;-----------------------------------------------------------------;
;Tin hieu EOC ket thuc qua trinh chuyen doi du lieu cua ADC
;Chuong trinh con tao ngat nay co nhiem vu doc tin hieu tu 8 kenh;
;ADC sau do chuyen vao vung nho RAM tuong ung ,bat dau tu dia chi 2000h
;-------------------------------------------------------------------;
EX1ISR:
MOVX A,@DPTR;Doc tin hieu tu ADC vao Acc
PUSH DPH
MOV DPH,#20H
MOVX @DPTR,A;Dua tin hieu tu Acc vao RAM
POP DPH
SETB 00H
RETI
;---------------------------------------------------------------------;
;Chuong trinh con thuc hien khoi tao gia tri cho :
;SAI_SO,MAX,MIN trong RAM ngoai o cac dia chi tuong ung
;----------------------------------------------------------------------;
INIT_DATA: MOV DPTR,#SAI_SO
MOV A,#10
MOVX @DPTR,A
MOV DPTR,#MAX
MOV A,#150
MOVX @DPTR,A
MOV DPTR,#MIN
MOV A,#50
MOVX @DPTR,A
RET
;---------------------------------------------------------------------;
;Chuong trinh con su dung de doc cac kenh tin hieu tuong tu
;tu cong ADC thu nhat
;----------------------------------------------------------------------;
READ_ADC: CLR 00H;
MOV R2,#8;Doc 8 kenh du lieu
MOV DPTR,#ADC;Doc du lieu tu cong ADC
REPEAT: MOV A,#00H
MOVX @DPTR,A;Bat dau qua trinh chuyen doi
SETB EX1;Cho phep ngat ngoai 1
WAIT: JNB 00H,WAIT;Cho qua trinh doc tu ADC- > RAM
CLR 00H
CLR EX1
LCALL DELAY
LCALL DELAY
INC DPL;Doc kenh teip theo
DJNZ R2,REPEAT;Doc den kenh cuoi cung
CLR EX1;Xoa ngat ngoai
RET
;----------------------------
Các file đính kèm theo tài liệu này:
- DO83.doc
- Bia1.Doc