Chương 1
1.1. Đặt Vấn Đề.
Ngày nay kỹ thuật vi điều khiển đã trở nên quen thuộc trong các ngành kỹ thuật và trong dân dụng. Từ các dây chuyền sản xuất lớn đến các thiết bị gia dụng, chúng ta đều thấy sự hiện diện của vi điều khiển. Các bộ vi điều khiển có khả năng xử lý nhiều hoạt động phức tạp mà chỉ cần một chip vi mạch nhỏ, nó đã thay thế các tủ điều khiển lớn và phức tạp bằng những mạch điện gọn nhẹ, dễ dàng thao tác sử dụng.
Vi điều khiển không những góp phần vào kỹ thuật điều khiển mà còn góp phần to lớn vào việc phát triển thông tin. Đó chính là sự ra đời của hàng loạt thiết bị tối tân trong ngành viễn thông, truyền hình, đặc biệt là sự ra đời của mạng Internet -siêu xa lộ thông tin, góp phần đưa con người đến đỉnh cao của nền văn minh nhân loại.
Chính vì các lý do trên, việc tìm hiểu, khảo sát vi điều khiển là điều mà các sinh viên ngành điện mà đặc biệt là chuyên ngành kỹ thuật điện-điện tử phải hết sức quan tâm. Đó chính là một nhu cầu cần thiết và cấp bách đối với mỗi sinh viên, đề tài này được thực hiện chính là đáp ứng nhu cầu đó.
Các bộ điều khiển sử dụng vi điều khiển tuy đơn giản nhưng để vận hành và sử dụng đươc lại là một điều rất phức tạp. Phần công việc xử lý chính vẫn phụ thuộc vào con người, đó chính là chương trình hay phần mềm. Tuy chúng ta thấy các máy tính ngày nay cực kỳ thông minh, giải quyết các bài toán phức tạp trong vài phần triệu giây, nhưng đó cũng là dựa trên sự hiểu biết của con người. Nếu không có sự tham gia của con người thì hệ thống vi điều khiển cũng chỉ là một vật vô tri. Do vậy khi nói đến vi điều khiển cũng giống như máy tính bao gồm 2 phầân là phần cứng và phần mềm.
Các bộ vi điều khiển theo thời gian cùng với sự phát triển của công nghệ bán dẫn đã tiến triển rất nhanh, từ các bộ vi điều khiển 4 Bit đơn giản đến các bộ vi điều khiển 32 Bit. Với công nghệ tiên tiến ngày nay các máy tính có thể đi đến việc suy nghĩ, tri thức các thông tin đưa vào, đó là các máy tính thuộc thế hệ trí tuệ nhân tạo.
Mặc dù vi điều khiển đã đi được những bước dài như vậy nhưng để tiếp cận được với kỹ thuật này không thể là một việc có được trong một sớm một chiều. Việc hiểu được cơ chế hoạt động của bộ vi điều khiển 8 Bit là cơ sở để chúng ta tìm hiểu và sử dụng các bộ vi điều khiển tối tân hơn, đây chính là bước đi đầu tiên khi chúng ta muốn xâm nhập sâu hơn vào lĩnh vực này.
Để tìm hiểu bộ vi điều khiển một cách khoa học và mang lại hiệu quả cao làm nền tản cho việc xâm nhập vào những hệ thống tối tân hơn. Việc trang bị những kiến thức về vi điều khiển cho sinh viên là hết sức cần thiết. Xuất phát từ thực tiển này em đã đi đến quyết định chọn đề tài “HỆ THỐNG ĐA XỬ LÍ”. Để ứng dụng vào việc quản lí các phòng ở trong một toà nhà bao gồm: cho phép vào phòng khi có mã vào, đo nhiệt độ phòng, báo cháy.
1.2. Mục Đích, Yêu Cầu Của Đề Tài.
Đề tài này phải giải quyết được nhiều việc như thu thập dữ liệu về nhiệt độ, báo động khi có cháy hoặc có sự xâm nhập bất hợp pháp, kiểm tra sự cho phép ra vào trong một phạm vi quản lí rộng. Cho nên hệ thống đa xử lí này sẽ được thiết kế bao gồm một máy tính PC và các mạng vi xử lí con, trong đó máy tính PC sẽ đảm nhận việc quản lí điều khiển tất cả các mạng vi xử lí con trong hệ thống.
Hệ thống này có thể dùng trong việc kiểm soát một khách sạn, một toà nhà cao tầng hoặc một chung cư bằng cách bố trí hệ thống như sau:máy tính PC đặt ở trung tâm điều hành kiểm tra, nó sẽ điều khiển các mạng vi xử lí con được đặt tại các phòng ở riêng biệt trong toà nhà. Máy tính PC sẽ thu nhận dữ liệu từ các mạng con, xử lí và sau đó ra lệnh cho chúng. Các mạng con này thực hiện các lệnh từ PC. Các lệnh đó bao gồm: mở cửa phòng cho người vào khi có mã vào hợp lệ, báo động khi có cháy hay có sự đột nhập, hiển thị nhiệt độ.
1.3. Cơ Sở Lí Luận.
Dựa trên cơ sở của các đề tài vi xử lý và vi điều khiển, đặc biệt là các tính năng của chúng cũng như các họ IC giao tiếp, hiển thị và giải mã , nhằm thiết kế một hệ thống vi điều khiển góp phần làm phong phú thêm cho việc hiểu biết về lĩnh vực này đồng thời có thể mở rộng và định hướng về sau.
Đề tài này được thực hiện chủ yếu dựa vào kiến thức về vi xử lí, các phương pháp truyền dữ liệu, giao tiếp ngoại vi của máy tính đồng thời các lí thuyết về mạch điện tử cũng như việc tìm hiểu về các linh kiện IC được dùng. Nói chung là các kiến thức cần thiết cho một sinh viên để ra trường ứng dụng những gì học được vào thực tế với cái nhìn đúng đắn hơn.
Các linh kiện được sử dụng trong đề tài sẽ bao gồm:
Vi điều khiển AT89C51.
Bộ biến đổi ADC : IC ADC0804.
Máy tính PC và IC Max232, IC N75176B.
Bộ giải mã BCD sang Led 7 đoạn IC 74247 và Led 7 đoạn.
Bộ cảnh báo dùng IC LM555.
1.4. Giới Hạn Của Đề Tài.
Do thời gian nghiên cứu và thực hiện đề tài có giới hạn, luận án này chỉ thực hiện trong phạm vi sau:
Hệ thống đa xử lí sẽ được thiết kế bao gồm: một máy tính PC kết nối điều khiển với hai mạng (kit) vi xử lí. Mỗi kit vi xử lí thì bao gồm các khối sau: khối đo và hiển thị nhiệt độ; khối bàn phím nhập; khối đảm nhận mở cửa, báo cháy.
Với một hệ thống như vậy cũng đã đủ để khái quát một cách rõ ràng về nội dung chính của đề tài, và ngoài ra chúng ta sẽ rất dễ dàng để mở rộng thêm các kit vi xử lí con nếu cần thiết. Bởi vì về nguyên lí thì các mạng vi xử lí con này hoàn toàn giống nhau, chỉ khác nhau về vị trí và địa chỉ trong mạng. Và địa chỉ thì chúng ta dễ dàng thêm vào bằng phần mềm
116 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 3164 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Hệ thống đa xử lí, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
sang TTL cho nên áp ở đầu vào sẽ bị đổi mức ở đầu ra.Ví dụ: áp ra chân 14 là +12V thì chân 11 (ngõ vào của chân 14) áp sẽ là 0V, ngược lại nếu tại chân 14 áp là -12V thì tại chân 11 là +5V.
Nguyên lý hoạt động của mạch:
§ Tín hiệu RS-232 từ cổng Com của PC (chân 2,3,7) được đưa vào ngõ vào và ra RS-232 của Max 232 (chân 14,8 và 13), ngõ ra và ngõ vào TTL của Max 232 (chân 11,9 và 12) sẽ được đưa vào ngõ vào và ra TTL của SN75176B. Ngõ ra của SN75176B (chân 6 và 7) sẽ là tín hiệu ở dạng thức RS-485.
§ Khi truyền dữ liệu thì đưa chân RTS lên mức cao, chân RE và DE của SN75176B sẽ ở mức cao. RE ở mức cao sẽ cấm nhận, DE tích cực mức cao, do đó mạng ở trạng thái truyền tín hiệu.
§ Khi nhận dữ liệu thì đưa chân RTS xuống mức thấp, chân DE ở mức thấp sẽ cấm truyền, RE ở mức thấp sẽ cho phép nhận.
Với hoạt động của mạch chuyển đổi như trên thì mạng này chỉ truyền dữ liệu theo kiểu half-duplex.
Mạch chuyển đổi cơ bản như sau:
Hình 5.4 Nguyên lí mạch chuyển đổi RS-232 sang RS-485.
Điều khiển truyền nhận được thực hiện bằng chân RTS. Như vậy, khi PC cần truyền data, nó sẽ kích chân RTS sao cho chân số 3 của SN75176B lên nức cao và bắt đầu thực hiện truyền dữ liệu. Thực hiện truyền dữ liệu xong,chân số 2 của SN75176B sẽ được đưa xuống mức thấp để chờ các tín hiệu trả về từ các Slave. Công việc sẽ được tiếp tục như vậy cho đến khio kết thúc quá trình truyền nhận.
Tuy nhiên do tính chất và hoạt động của Max 232 và chuẩn RS-232, khi chân 7 của cổng Com (chân RTS ) ở mức cao thì chân 12 của Max 232 lại ở mức thấp, vì vậy mạch chuyển đổi được cải tiến như sau:
Hình 5.5 Mạch thi công chuyển đổi RS-232 sang RS-485.
Truyền nhận nối tiếp theo chuẩn UART, các đường truyền TXD và RXD luôn ở bit 1 (5V theo chuẩn TTL). Đến khi có tín hiệu được truyền thì đường truyền được hạ xuống bit 0 ( 0V theo chuẩn TTL) để bắt đầu bit START. Chuẩn RS-232 qui định bit 1 là mức áp thấp từ -3V đến -12V, bit 0 là mức áp cao từ +3V đến +12V. Chuẩn TTL lại qui định ngược lại, bit 1 là mức áp cao ( tối đa +5V), bit 0 là mức áp thấp (thấp nhất là 0V). Do đó ở đây ta qui ước mức cao là áp dương +5V hay +12V, mức thấp là áp âm -12V hay 0V.
Trong thực tế, việc điều khiển việc truyền nhận dữ liệu thường được thực hiện bằng chân RTS hoặc CTS. Do đó chân 7(RTS )và chân 8(CTS)của cổng Com được nối với nhau để nhằm mục đích làm cho mạch thêm sinh động khi sử dụng. Khi truyền chân RTS chân số 7 của cổng Com lên mức cao, khi nhận thì RTS lại xuống mức thấp.
Trong khi mạch không thực hiện truyền nhận thì chân 9 (là chân thực hiện việc truyền dữ liệu ở dạng TTL), chân 10 (là chân thực hiện việc nhận dữ liệu ) và chân 11 của Max 232 ở mức cao (+5V) nên chân 14 của Max 232 lại ở mức thấp vì vậy Led D4 được phân cực ngược nên không sáng. Led D5 phụ thuộc vào chân RTS lúc đó, nếu RTS ở mức cao thì D5 sáng, RTS ở mức thấp thì D5 tắt.
Khi thực hiện truyền, RTS được kích lên mức cao nên chân 12 của Max 232 xuống mức thấp (0V).Trong khi đó, chân 14 vẫn mang áp âm (do chân 11 luôn ở mức cao), điều này làm cho Led D4 bị phân cực ngược nên không sáng. Lúc này dữ liệu vẫn chưa được truyền nên chân 9 vẫn ở mức cao và Led D5 sáng. Khi dữ liệu đang được truyền, chân 9 luôn ở mức cao tại bất cứ bit 1 nào, do đó Led D5 được dùng để chỉ ra rằng tại node này của mạng đang ở trong trạng thái đang truyền dữ liệu.
Khi thực hiện nhận, RTS được đưa xuống mức thấp nên chân 12 của Max 232 lên mức cao (+5V). Trong khi đó, chân 9 lại ở mức cao và chân 14 mang áp âm (do chân 11 luôn ở mức cao), điều này làm Led D4 và cả Led D5 bị phân cực ngược nên không sáng. Lúc này dữ liệu vẫn chưa được truyền đến nên chân 22 luôn ở mức cao nên cả hai Led vẫn chưa sáng. Khi dữ liệu đang được nhận, chân 11 luôn ở mức thấp tại bất cứ bit 0 nào, lúc đó chân 14 sẽ ở mức cao (+12V). Chênh lệch áp giữa hai đầu D4 (giữa 12V và 5V) làm D4 sáng. Do đó Led D4 được dùng để chỉ rằng node này của mạng trong trạng thái đang nhận dữ liệu.
Như đã nói ở trên, khi RTS (chân số 7 của cổng Com) ở mức cao thì chân 12 của Max 232 ở mức thấp, do đó việc chuyển đổi để chân 12 của Max 232 thành mức cao là cần thiết để thuận lợi cho việc lập trình điều khiển. Trong mạch thực hiện (mạch thi công ), khi chân RTS ở mức cao (+12V) thì D2 và D1 đều dẫn. Lúc đó áp ở anode của D1 sẽ bằng áp ở cathode và bằng Vcc=5V. Do đóĠ/DE ở mức cao (5V). Khi RTS ở mức thấp thì D1 và D2 không dẫn, trong khi đó D3 dẫn làm cho áp ởĠ/DE bằng 0V (GND).
5.1.1.2. Mạch Chuyển đổi RS-485 sang TTL và ngược lại.
SN75176B
RS-485
TRANSCEIVER
Hình 5.6 Sơ đồ của IC SN75176B.
SN75176B thực hiện việc chuyển đổi từ RS-485 sang TTL và ngược lại, cho nên việc chuyển đổi từ TTL sang RS-485 và ngược lại rất đơn giản.
Như ở hình bên, chân 6 và 7 là 2 chân mang dữ liệu theo chuẩn RS-485. Chân 1 và 4 mang dữ liệu theo chuẩn TTL. Khi truyền dữ liệu TTL từ chân 4 (TXD) được chuyển đổi thành dạng RS-485 và truyền đi ở chân 6 và 7. Khi nhận dữ liệu từ chân 6 và 7 được chuyển đổi thành TTL và đưa vào chân 1. Chân 2 Ĩ) là chân điều khiển việc nhận dữ liệu.Ġ tích cực mức thấp. Chân 3 (DE) là chân điều khiển việc truyền dữ liệu, DE tích cực mức cao.
5.1.2. Mạng RS-485:
Mạng RS-485 được thiết kế hoạt động theo nguyên tắc Master-Slave(chủ -tớ ). Một trạm chủ (Master) có trách nhiệm chủ động phân chia quyền truy nhập bus cho các trạm tớ Slave. Các trạm tớ (Slave) đóng vai trò bị động, chỉ có quyền truy nhập bus và gởi tín hiệu đi khi có yêu cầu. Trạm chủ dùng phương pháp hỏi vòng tuần tự theo chu kì để kiểm soát toàn bộ hoạt động của cả hệ thống.
Hình 5.7 Sơ đồ giao thức Master/Slave.
Vì hoạt động diễn ra theo chu kì nên trạm chủ có trách nhiệm chủ động yêu cầu chủ động yêu cầu dữ liệu từ trạm tớ và sau đó chuyển sang trạm tớ khác.
Phương pháp này có ưu điểm là việc kết nối các trạm tớ đơn giản,đỡ tốn kém bởi gần như toàn bộ công việc điều khiển giao tiếp đều tập trung tại trạm chủ. Tuy nhiên, phương pháp này có hiệu suất đường truyền thấp. Mặc dù vậy với yêu cầu trao đổi dữ liệu của đề tài thì mô hình này là đủ hợp lí.
Hình 5.8 Sơ đồ khối mạng.
Khối mạch chuyển đổi từ RS-232 sang RS-485 và từ RS-485 sang TTL đã được trình bày ở mục 5.1.1
Phần mạch RS-485 được thực hiện như sau:
Hình 5.9 Mạng giao tiếp RS-485 được thi công.
Mặc dù tín hiệu được xác định bằng điện áp chênh lệch giữa hai dây dẫn A và B, không có liên quan đến đất, hệ thống RS-485 vẫn cần một đường dây nối chung đất cho các trạm với nhau. Đất này đơn thuần là điểm mass, nó không cần phải nối xuống đất thực sự. Một sai lầm thường gặp là chỉ dùng hai dây để nối hai trạm. Nếu ngõ ra A và B là thực sự cân bằng, dòng trên dây A sẽ đối ngược với dây B, nên triệt tiêu lẫn nhau. Nhưng trong thực tế, sự cân bằng hoàn hảo là không tồn tại. Trong trường hợp như vậy, dòng tín hiệu sẽ tìm cách quay ngược trở lại nguồn phát, bức xạ nhiễu ra môi trường xung quanh làm ảnh hưởng đến tính tương thích điện từ của hệ thống. Việc nối đất sẽ tao ra một đường thoát có trở kháng nhỏ tại một vị trí xác định, nhờ vậy giảm thiểu tác hại gây nhiễu.
Do tốc độ truyền thông và chiều dài dây dẫn có thể khác nhau rất nhiều trong các ứng dụng, mạng RS-485 cần sử dụng trở đầu cuối tại hai đầu dây R5,R6. Sử dụng trở đầu cuối có tác dụng chống các hiệu ứng phụ trong truyền dẫn tín hiệu, ví dụ sự phản xạ tín hiệu. Trở đầu cuối được sử dụng có giá trị bằng trở kháng đặc tính của cáp truyền, thường được chọn từ 10İ đến 12İ. Một sai lầm thường gây tác hại nghiêm trọng là dùng tải đầu cuối tại mỗi trạm. Ví dụ đối với một mạng có 10 trạm thì trở kháng tạo ra do các trở đầu cuối mắc song song sẽ là 1IJ. Trong trường hợp này hậu quả gây ra là dòng qua các trở đầu cuối sẽ lấn áp, các tín hiệu mang thông tin tới các bộ thu sẽ suy yếu mạnh dẫn đến sai lệch hoàn toàn.
Có nhiều phương pháp chặn đầu cuối. Ngoài việc dùng một trở nối hai chân A và B (gọi là chặn song song), ta cũng có thể dùng một tụ C mắc nối tiếp với một điện trở (gọi là chặn RC). Mạch RC này cho phép khắc phục nhược điểm của việc dùng điện trở nói trên. Trong lúc tín hiệu ở giai đoạn quá độ, thụ C ngắn mạch và trở R sẽ chặn đầu cuối. Khi tụ C ngưng dẫn thì sẽ ngăn chặn dòng một chiều, do đó sẽ không có sự giảm tải gây ra do mạch chặn đầu cuối. Tuy nhiên hiệu ứng thông thấp của mạch RC làm giới hạn tốc độ truyền của mạch.
Hình 5.10 Các phương pháp chặn đầu cuối trong mạng RS-485.
Bảng 5.1 So sánh các phương pháp chặn đầu cuối.
Phương pháp
Không chặn
Song song
Chặn RC
Độ ti cậy
Tốc độ
Thấp
Cao
Trung bình
Cao
Chất lượng tín hiệu
Kém
Tốt
Hạn chế
Tốt
Tổn hao nguồn
Thấp
Cao
Thấp
Cao
Các điện trở phân cực nhằm mục đích giữ cho đường truyền luôn ở một trạng thái khi đường truyền rỗi. Như trên sơ đồ, chân A được kéo lên nguồn và chân B được đưa xuống mass, đường truyền luôn ở trạng thái bit 1, để hệ thống có thể nhận dạng bit START một cách chính xác.
5.2.Mạng vi xử lí:
Việc ghép nối các Vi xử lí với nhau nhằm mục đích thực hiện công việc mà một vi xử lí không thể gánh vác hết nổi. Ta gọi hệ thống này là mạng Vi xử lí hay truyền thông đa xử lí. Mạng vi xử lí bao gồm một Master và các Slave và hoạt động theo phương pháp Master/Slave. Như vậy Master sẽ thực hiện công việc quản lí hoạt động của toàn bộ phần mạng này. Master sẽ truyền địa chỉ và các yêu cầu cho Slave thứ nhất và chờ Slave đó đưa thông tin trả về, sau đó tiếp tục thực hiện truyền địa chỉ cho các Slave tiếp theo. Như vậy, điều cần thiết là các Slave phải biết khi nào là dữ liệu được dành cho nó. Nói chính xác hơn, ta phải xác định phương pháp định địa chỉ cho mạng.
Ta phân tích khả năng thực hiện chương trình điều khiển cho mạng này:
§ Một phương pháp định địa chỉ là trong một byte truyền thì có bốn bit dữ liệu và bốn bit cho việc định địa chỉ. Đây qủa là một phương pháp rất hiệu quả trong việc truyền nhận dữ liệu và phương pháp này có thể được dùng trong cả trường hợp có sử dụng ngắt hay không sử dụng ngắt Serial Port. Tuy nhiên số byte dữ liệu truyền đi sẽ tăng gấp đôi và tất cả các Slave đều phải xử lí nhận dữ liệu cho tất cả các byte được truyền từ Master. Điều này làm giảm hiệu suất đường truyền rất nhiều. Tuỳ theo số lượng Slave hay loại dữ liệu cần truyền mà số lượng bit địa chỉ có thể thay đổi (dùng ít hay nhiều bit), số lượng các byte cần truyền có thể tăng hoặc không (ví dụ : với loại dữ liệu có giá trị từ 0 -127 và 2 Slave ta chỉ cần 1 bit để xác định địa chỉ và như vậy không tăng thêm byte nào khi truyền đi cả). Điểm đặc biệt của phương pháp này là truyền nhận được số lượng byte không giới hạn giữa Slave và Master mà không cần một khung truyền nào.
§ Phương pháp khác là giả thiết ta không dùng ngắt để thực hiện quá trình truyền nhận, như vậy các Slave sẽ thực hiện việc chờ dữ liệu đến rừ Master. Điều này có thể làm giới hạn khả năng hoạt động của hệ thống, vì các Slave phải ở trạng thái treo để chờ tín hiệu từ Master nên sẽ không thể thực hiện liên tục công việc của nó. Tuy nhiên điều này có thể bỏ qua nếu mạng có ít Slave và do đó tốc độ hỏi vòng đủ nhanh để các Slave có thể thực hiện công việc của mình một cách liên tục. Ngoài ra, phương pháp này còn bắt buộc phải có khung truyền xác định (byte địa chỉ và byte kết thúc khối dữ liệu). Vấn đề chính yếu của phương pháp này là Slave phải phân biệt được byte địa chỉ cũng như byte kết thúc với byte dữ liệu. Byte đầu tiên sẽ là byte địa chỉ, các Slave sẽ so sánh địa chỉ và sẽ thực hiện xử lí các hoạt động liên quan đến các lệnh (hoặc thông tin ) chứa trong byte dữ liệu nếu địa chỉ là đúng, và sẽ không làm gì cả và chuyển về trạng thái chờ khi nhận địa chỉ sai. Ở phương pháp này, các Slave cũng phải xử lí truyền nhận cho tất cả các byte được truyền từ Master, ngoài ra chương trình thực hiện ý tưởng này khá phức tạp.
§ Phương pháp nưã là dùng ngắt trong truyền thông, hoàn toàn không có sự khác biệt gì với việc không dùng ngắt, ngoại trừ việc các Slave có thể thực hiện công việc của nó một cách độc lập và do đó số lượng các Slave được tăng lên đến mức có thể. Việc truyền nhận cũng được thực hiện theo một khung truyền xác định. Sau khi nhận được đúng byte địa chỉ, Slave phải cấm ngắt cho Port nối tiếp và thực hiện nhận các byte dữ liệu tiếp theo cho đến khi kết thúc khối dữ liệu. Như vậy, các Slave cũng thực hiện việc xử lí truyền nhận cho từng byte từ Master.
Như đã phân tích ở trên, các phương pháp trên đều mắc phải một trong hai hoặc cả hai nhược điểm dưới đây:
§ Dữ liệu phải phân biệt được với byte địa chỉ và byte kết thúc. Điều này làm cho dữ liệu phải bỏ đi ít nhất hai giá trị nào đó (đặc trưng cho byte địa chỉ và byte kết thúc) làm giới hạn giá trị của dữ liệu.
§ Các Slave bắt buộc phải xử lí cho từng byte của Master, làm lãng phí thời gian của các Slave hay nói đúng hơn là các Slave phải thực hiện những công việc không cần thiết và làm ảnh hưởng đến hiệu suất công việc.
Với sự cần thiết phải có một phương pháp truyền thông có hiệu quả trong truyền thông đa xử lí, nhà sản xuất đã thiết kế các chế độ hoạt động 2 và 3(mode 2 và mode 3) cho cổng nối tiếp của vi xử lí nhằm thực hiện yêu cầu truyền thông đa xử lí. Trong các chế độ này, 9 bit dữ liệu được truyền đi và bit thứ 9 được đặt vào RB8 sau khi nhận. Port nối tiếp có thể được lập trình để khi nhận được bit STOP, ngắt cổng nối tiếp được tác động chỉ nếu bit 9 là bit 1. Đặc tính này được cho phép bằng cách đặt bit SM2 của thanh ghi SCON lên 1.Ứng dụng của việc này trong môi trường nối mạng dùng nhiều AT89C51 theo giao thức Master/Slave như ở hình sau.
Khi vi xử lí chủ muốn truyền đi một khối dữ liệu đến một trong các vi xử lí tớ, trước hết nó gửi đi một byte địa chỉ để xác định Slave cần gởi. Byte địa chỉ khác với byte dữ liệu ở bit thứ 9, nếu bit thứ 9 là bit 1 thì nó là byte địa chỉ, nếu là bit 0 thì là byte dữ liệu. Tuy nhiên byte địa chỉ sẽ ngắt tất cả các bộ xử lí tớ, để mỗi bộ xử lí tớ có thể kiểm tra byte nhận đó có phải là byte địa chỉ của nó không. Bộ xử lí tớ có đúng địa chỉ sẽ xoá bit SM2 của nó và chuẩn bị thu các byte dữ liệu theo sau. Các vi xử lí không đúng địa chỉ thì để giữ nguyên bit SM2 và thực hiện công việc riêng của chúng và bỏ qua các byte dữ liệu tiếp theo.
SM2 không ảnh hưởng trong chế độ 0 và trong chế độ 1, có thể sử dụng nó để kiểm tra sự hợp lệ của bit STOP. Khi nhận ở chế độ 1, nếu bit SM2 là 1, thì ngắt thu sẽ không được tác động trừ khi nhận được bit STOP hợp lệ.
Hình 5.11 Mạng vi xử lí.
Mô hình tổng quát mạng vi xử lí được thiết kế trong đề tài như sơ đồ ở trên. Như vậy, các thành viên trong mạng có thể ở khoảng cách khá xa nhau vì dữ liệu được truyền giữa các thành viên trong mạng là theo chuẩn RS-485. Mặt khác, số lượng các thành viên trong mạng cũng tăng lên, vì khi đó số lượng các thành viên được giới hạn bởi chuẩn RS-485 (tức có thể có 32 thành viên).
Nếu khoảng cách giữa các Slave không xa và số lượng các Slave không nhiều thì việc truyền dữ liệu giữa các thành viên trong mạng có thể được thực hiện thông qua chuẩn TTL như sơ đồ dưới đây:
Hình 5.12 Mạng vi xử lí tĩnh lược.
Nhưng từ sơ đồ mạng tĩnh lược ta thấy rằng các Slave cũng nhận được các byte từ PC truyền về cho Master. PC truyền về Master theo chuẩn UART 8 bit, nhưng các Slave lại ở chuẩn UART 9 bit. Như vậy điều gì xảy ra với các Slave khi PC giao tiếp với Master.
Hình 5.13 Giản đồ bit UART 8bit 9bit.
Dựa trên giản đồ bit ta thấy rằng ngắt cổng nối tiếp của các Slave sẽ tác động khi bất kí một byte nào của PC được truyền đi. Sau khi truyền xong 8 bit data, bit STOP đưa tín hiệu lên mức cao. Do đó xảy ra trường hợp đường truyền vẫn ở bit cao sau bit STOP (giao thức UART 8 bit), điều này làm cho các vi xử lí Slave hiểu rằng bit 9 là 1 và nó vẫn nhận được một bit STOP hợp lệ và thế là nó thực hiện ngay trình phục vụ ngắt cho cổng nối tiếp. Cũng giống như vậy khi Master thực hiện truyền dữ liệu về PC, sau bit STOP là bit START cho nên các vi xử lí Slave sẽ không nhận được 1 bit STOP hợp lệ cho đến byte cuối cùng mà Master truyền về cho PC. Lúc này, đường truyền có thể ở luôn mức cao sau bit STOP, và các vi xử lí Slave có thể thực hiện ngắt nối tiếp. Do đó mạng có thể hoạt động sai.
5.2.1. Thiết kế Slave Bàn Phím (Slave 1).
Slave bàn phím (Slave 1) có nhiệm vụ chủ yếu là quét phím nhập trả về mã phím cho Master. Để giao tiếp với bàn phím và giải mã phím ta có nhiều cách, cách tốt nhất có thể đó là dùng các IC giải mã phím nhập. Ở đây do không đòi hỏi cao cho nên chỉ dùng Port1 của vi điều khiển AT89C51 để giao tiếp với bàn phím số HEX, dùng phần mềm để giải mã phím nhập. Bàn phím có 16 phím được sắp xếp thành 4 hàng và 4 cột. Các đường hàng được nối với các chân Port từ P1.4 đến P1.7 và các đường cột được nối với các chân từ P1.0 đến P1.3.
HEX Keypad
Hình 5.14 Sơ đồ giao tiếp Slave với bàn phím.
Bàn phím HEX Keypad được thiết kế bằng các công tắc nhấn ( công tắc luôn luôn hở ở trạng thái bình thường). Khi nhấn một phím trên bàn phím thì công tắc sẽ đóng lại lúc đó hai đường chân Port nối tới công tắc sẽ giao nhau tạo ra mức logic giống nhau và bằng phương pháp quét các chân Port ta sẽ phát hiện ra phím được ấn.
5.2.2. Slave Đo Và Hiển Thị Nhiệt Độ (Slave 2).
Slave này sẽ đảm nhận việc đo và hiển thị ra led 7 đoạn nhiệt độ của môi trường và truyền nhận nhiệt độ từ Master. Sơ đồ khối giao tiếp ngoại vi như sau:
Hình 5.15 Sơ đồ khối đo và hiển thị nhiệt độ.
Ngoại vi bao gồm hai khối chính đó là khối đo nhiệt độ và khối hiển thị nhiệt độ
5.2.2.1. Khối đo nhiệt độ.
Khối đo nhiệt độ gồm mạch cảm biến nhiệt độ và một bộ chuyển đổi ADC giao tiếp với vi điều khiển thông qua Port 0.
5.2.2.1.1 Mạch cảm biến nhiệt độ.
Mạch này dùng để đo nhiệt độ của phòng, và kết hợp với bộ cảm biến cháy để báo động cháy khi có cháy xảy ra hay là nhiệt độ xung quanh phòng tăng lên quá cao. Có nhiều phương pháp để thiết kế mạch đo nhiệt độ. Ta có thể dùng cảm biến nhiệt bán dẫn hay là cặp nhiệt, hoặc ta cũng có thể dùng IC cảm biến nhiệt. Dưới đây là sơ đồ thực hiện mạch đo nhiệt độ thông dụng dùng cả cặp nhiệt kết hợp với cảm biến nhiệt.
Hình 5.16 Mạch đo nhiệt độ thông dụng.
U1,U2,U3 (dùng OPAMP cho offset thấp) đóng vai trò một bộ đệm điện áp lý tưởng: có trở kháng vào rất lớn và trở kháng ra rất nhỏ, không để các đầu vào ảnh hưởng lẫn nhau.
Điện áp ra trên cặp nhiệt điện (Thermocuople) :
V3 = S(Td -Ta) = S.Td –S. Ta
Với Td: nhiệt độ cần đo
Ta: là nhiệt độ môi trường
S là độ nhạy của cặp nhiệt điện ĨV/0C)
Như vậy là giá trị điện áp ra trên cặp nhiệt điện ngoài việc chứa thông tin của nhiệt độ cần đo còn bị ảnh hưởng bởi nhiệt độ môi trường. Để loại trừ ảnh hưởng trên, ta cần phải có một khối tạo ra điện áp theo nhiệt độ của môi trường. Và ta có thể dùng IC cảm biến LM335.
IC LM335 là loại cảm biến nhiệt độ bán dẫn, có độ nhạy là K=10mV/0K. Aùp tạo ra do LM335 cảm biến được là:
V2 = K Ta [0K]= K(273+ Ta) [0C]
= K.273 + K. Ta = 2.73V+ K. Ta [0C]
Có thể triệt tiêu ảnh hưởng của Ta, nhưng lại tạo ra một mức điện áp là 2.73V ở 00C nên cần phải có một khối để trừ đi 2.73V nhằm tạo điện áp đầu ra là 0V ở 00C. Biến trở R1 chính là thành phần bù trừ điện áp 2.73V như đã nói ở trên.
U4 đóng vai trò bộ cộng có khuếch đại và đưa ra điện áp đã được điều chế vào IC ADC để biến tín hiệu tương tự thành số, đưa vào vi xử lí để xử lí.
Mục đích của mạch đo nhiệt độ được thiết kế ở đây là đo nhiệt độ phòng ở để hiển thị và báo cháy. Ta nhận thấy rằng ta đang cần đo nhiệt độ môi trường, do đó mạch bù nhiệt độ của môi trường là không cần thiết. Cho nên việc đo nhiệt độ ở đây ta chỉ cần dùng IC cảm biến nhiệt LM335 là đủ. Sơ đồ được tinh giản và sửa đổi như sau và đây cũng là sơ đồ của mạch cảm biến và gia công nhiệt được thi công trong đề tài này.
Hình 5.17 Mạch cảm biến nhiệt độ môi trường dùng IC LM335.
Các linh kiện U1,U2 đóng vai trò bộ đệm áp. Aùp tại chân số 6 của U2 chính là áp ra của LM335. Biến trở R1 được chỉnh để tạo ra một mức áp 2.73V để cho ngỏ ra Vout là 0V khi nhiệt độ là 0oC.
U3 và các biến trở R3,R4,R5,R6 vừa đóng vai trò là bộ trừ điện áp vừa là bộ khuếch đại. Khối này tạo thành bộ trừ điện áp giữa áp đưa ra từ IC cảm biến nhiệt LM335 với 2.73V (được đưa ra từ biến trở R1). IC LM335 hoạt động tốt ở nhiệt độ tối đa tới 150oC, trong khi đó dữ liệu được biểu diễn bằng một số 8 bit tức là 256 giá trị, do đó ta có thể thiết kế mạch với độ phân giải bằng 0.5oC.
Aùp ra ở chân số 6 của U4 tăng Ġ mỗi khi nhiệt độ tăng mỗi 0.5oC. Aùp cực đại ở chân 6 sẽ là 5V, do đó, tầm nhiệt độ cực đại mạch này có thể đo được chính xác làĠ.
Aùp vi sai giữa chân 2 và 3 của U4 0V ở 0oC. Tương ứng với nhiệt độ tăng lên mỗi một độ C thì áp vi sai này sẽ tăng lên mỗi 10mV. Bộ khuếch đại sẽ được thiết kế sao cho áp ở chân số 6 của U4 sẽ là 5V khi nhiệt độ là 127.5 oC hay áp vi sai giữa chân 2 và 3 bằng 127.5x10(mV) =1.275V. Do đó độ lợi của bộ khuếch đại bằngĠ. Để có độ lợi này các biến trở R3,R4,R5,R6 phải thỏa mãn điền kiện sauĺ.
5.2.2.1.2. Mạch chuyển đổi ADC
Aùp ra của khối cảm biến nhiệt sẽ được chuyển đổi sang tín hiệu số để đưa vào vi điều khiển xử lí bằng bộ chuyển đổi ADC (Analog - Digital Convert). Bộ chuyển đổi ADC ở đây dùng IC ADC0804. Ưu điểm của ADC0804 là không đắt tiền, biến đổi điện áp tương tự thành tín hiệu số 8-bit trong khoảng thời gian 10İs. Nhược điểm là không có nhiều kênh như ADC0809 nhưng trong đề tài này thì dùng nó là hợp lí và đơn giản.
ADC0804 được điều khiển bởi một ngõ vào ghiĠ và một ngõ ra ngắt . Vieäc bieán ñoåi ñöôïc baét ñaàu baèng caùch cho xuoáng möùc thaáp. Khoaûng 10İs sau thì việc biến đổi sẽ hoàn tất, ADC0804 xác lậpĠ xuống mức thấp. không được xác lập (ở mức cao) khi có chuyển trạng thái từ 1 đến 0 kế củaĠ, bắt đầu lần biển đổi ADC kế.Ġ vàĠ nối với AT89C51 trên các đường P1.0 và P1.1. Ở mạch thiết kế ta dùng P0 để giao tiếp với vi điều khiển.
ADC0804 hoạt động nhờ vào một nguồn xung clock bên ngoài được tạo ra bằng mạch RC được nối giữa chân 19 và 4.Điện áp ngõ vào tương tự là tín hiệu sai biệt đặt trên các ngõ vào Vin(+) và Vin(-) trên các chân 6 và 7. Aùp ra từ mạch cảm biến nhiệt được đưa vào hai chân này.
Sơ đồ mạch thiết kế xem hình sau:
Hình 5.18 Mạch chuyển đổi ADC.
5.2.2.2. Khối hiển thị nhiệt độ.
Hiển thị nhiệt độ là cần thiết vì khi đó chúng ta sẽ quan sát được kết quả đo được để có cái nhìn trực quan hơn. Để hiển thị nhiệt độ có nhiều cách như dùng màn hình tinh thể lỏng LCD, ma trận Led, hoặc Led 7 đoạn. Trong phạm vi đề tài này ta chọn phương pháp dùng Led 7 đoạn để hiển thị và dùng kỉ thuật quét Led bằng phần mềm.
Khối hiển thị nhiệt độ bao gồm một IC giải mã BCD sang mã Led 7 đoạn và mạch phân cực cho Led 7 đoạn. IC giải mã dùng IC 74247 giải mã từ BCD sang Led 7 đoạn tích cực mức thấp. Cho nên led 7 đoạn dùng trong mạch hiển thị là loại Anode chung.
Khối hiển thị giao tiếp với vi điều khiển thông qua Port 2, các chân vào BCD của IC74247 (D0,D1,D2,D3) được nối với các chân (P2.0,P2.1,P2.2,P2.3) và các chân Port còn lại như P2.4,P2.5,P2.6 được dùng để chọn Led. Trong mạch phân cực Led ta dùng ba Led 7 đoạn để hiển thị nhiệt độ từ hàng chục đến hàng đơn vị và hàng thập phân. Khi tín hiệu được xuất ra Port 2 thì IC 74247 sẽ chuyển đổi mã BCD sang mã Led 7 đoạn tích cực mức thấp để phân cực cho các Led và đồng thời Port 2 cũng sẽ chọn Led hiển thị, bắt đầu là led hàng chục kế đến hàng đơn vị cuối cùng là hàng thập phân, do dùng kỉ thuật quét led nên để quan sát được thì tần số quét led phải lớn hơn 40Khz tức là chu kì quét phải nằm trong khoảng 25ms.
Hình 5.19 Sơ đồ mạch hiển thị nhiệt độ.
Tính toán mạch phân cực cho Led:
Hình 5.20 Mạch phận cực cho Led 7 đoạn
Trong mạch Transistor đóng vai trò như một công tắc đóng mở các Led và được điều khiển bởi chân Port 2. Các Transistor làm việc với tần số lớn hơn 25(3 (3 Led) lần trong giây để thấy được Led liên tục sáng.
Để cho Led được sáng thì dòng qua nó khoảng 10mA. Do đó, để 7 đoạn sáng thì dòng qua Transistor phải là 80mA
Vì vậy ta có thể chọn Transistor này là A564 hoặc A1015. Trong mạch ta chọn A1015 có hệ số khuếch đại ( ở chế độ đóng ngắt khoảng 40 đến 200 lần. Do đó, dòng IBmax khoảng:
Tính toán Ri: khi Transistor dẫn bảo hòa ta có Vce =0,2v và để Led sáng thì đòi hỏi điện áp rơi trên Led là 2,5v.
VRi = 5V – (0.2 + 2.5) = 2,3V
Do đó:
Ri = VRi / Iled = 2,3 / 10 = 230
Để giúp cho Transistor mau bão hòa ta chọn giá trị Ri lớn hơn tính toán. Vậy chọn Ri=33İ.
Tính toán R21, R22: khi Transistor dẫn bão hoà. Ta có:
5V x +x R21// R22 = 5V
Do đó :
R21 = 5V/ IB = 5/ 1mA= 5k
Ta chọn R21 = 1 ū và R22 = 10 ū
5.2.3. Slave Cảm Biến Cháy, Báo Động Và Đóng Rơle Mở Cửa (Slave 3).
Slave này đảm nhận các công việc sau:
§ Đóng Role khi có lệnh mở cửa từ PC truyền xuống.
§ Đọc trạng thái của cảm biến khối truyền về cho Master và PC.
§ Kích mạch báo động để phát âm thanh báo động.
Sơ đồ khối của Slave hình sau:
Hình 5.21 Sơ đồ khối giao tiếp ngoại vi của Slave 3
5.2.3.1 Khối mở cửa.
Khối mở cửa gồm mạch kích đóng mở và một Rơle. Khi được kích Rơle sẽ đóng và như thế sẽ nối nguồn cho một động cơ hoạt động để mở cửa. Vì động cơ cồng kềnh và chưa có điều kiện mở cửa thực sự. Nên trong đề tài này để diễn tả hoạt động của mạch chúng ta sẽ dùng đèn led để mô phỏng.
Sơ đồ thiết kế:
Hình 5.22 Sơ đồ mạch thiết kế khối mở cửa.
Ta dùng chân P1.0 để điều khiển Rơle. Khi muốn mở cửa, ta đóng Rơle bằng cách Set chân Port P1.0 lên mức 1. Khi đó Transistor Q1 sẽ dẫn, Rơle được cấp nguồn nên đóng. Khi Rơle đóng thì phía bên mạch Led sẽ được nối với nguồn nên Led sáng lên. Khi cửa đã mở đủ thời gian để người vào nhà thì ta xoá chân Port P1.0 để tắt động cơ, trong mạch là Led sẽ tắt. Transistor ta chọn D468, nên mắc thêm một Diode song song với Rơle để ngăn chặn Transistor bị hư khi năng lượng cuộn Rơle xả ra khi transistor tắt.
5.2.3.2. Khối cảm biến cháy.
Khi một đám cháy xảy ra, ở những vùng cháy thường có những dấu hiệu sau:
§ Lửa, khói, vật liệu chỗ cháy bị phá hủy.
§ Nhiệt độ vùng cháy tăng lên cao.
§ Không khí bị Oxy hóa mạnh.
§ Có mùi cháy, mùi khét.
Để đề phòng cháy chúng ta có thể dựa vào những dấu hiệu trên để đặt các hệ thống cảm biến làm các thiết bị báo cháy. Kịp thời khống chế đám cháy ở giai đoạn đầu.
Thiết bị báo cháy điện tử giúp chúng ta liên tục theo dõi để hạn chế các vụ cháy tai hại, tăng cường độ an toàn, bình yên cho mọi người. Có nhiều cách để xác định cháy. Ở đây ta dùng cảm biến khói.
Thường cảm biến khói là bộ phân riêng biệt chạy bằng PIN được thiết kế để lắp đặt trên trần nhà, trên tường. Ngoài yêu cầu kỹ thuật (chính xác, an toàn) còn đòi hỏi phải đảm bảo về mặt thẩm mỹ. Có hai cách cơ bản để thiết kế bộ cảm biến khói.
Cách thứ nhất sử dụng nguyên tắc Ion hóa. Người ta sử dụng một lượng nhỏ chất phóng xạ để Ion hóa trong bộ cảm biến. Không khí bị Ion hóa sẽ dẫn điện và tạo thành một dòng điện chạy giữa chạy giữa hai cực đã đợc nạp điệän. Khi các phần tử khói lọt vào khu vực cảm nhận được Ion hóa sẽ làm tăng điện trở trong buồng cảm nhận và làm giảm luồng điện giữa hai cực. Khi luồng điện giảm xuống tới một giá trị nào đó thì bộ cảm biến sẽ phát hiện và phát tín hiệu báo động.
Cách thứ hai sử dụng các linh kiện thu phát quang. Người ta dùng linh kiện phát quang (Led, Led hồng ngoại…) chiếu một tia ánh sáng qua vùng bảo vệ vào một linh kiện thu quang (photo diode, photo transistor, quang trở…). Khi có cháy, khói đi ngang qua vùng bảo vệ sẽ che chắn hoặc làm giảm cường độ ánh sáng chiếu vào linh kiện thu. Khi cường độ giảm xuống tới một giá trị nào đó thì bộ cảm biến sẽ phát hiện và phát tín hiệu báo động.
Trong hai cách này thì phương pháp thứ nhất nhạy hơn và hiệu quả hơn phương pháp thứ hai, nhưng khó thực thi, khó lắp đặt. Còn cách thứ hai tuy ít nhạy hơn nhưng linh kiện dễ kiếm và dễ thực thi cũng như dễ lắp đặt.
Một nhược điểm của các loại cảm biến này là: mạch báo động có thể sai nếu vùng bảo vệ bị xâm nhập bởi các lớp bụi…
Hình 5.23 Sơ đồ mạch cảm biến khói.
Bộ cảm biến khói có nhiệm vụ biến đổi tín hệu khói thành tín hiệu điện, trong phần thiết kế này ta dùng quang trở. Như ta đã biết hoạt động của quang trở là: khi có ánh sáng chiếu vào đện trở của nó giảm đi đáng kể so với khi không được chiếu sáng.
Ý tưởng dùng quang trở để lấy tín hiệu khói này là bình thờng quang trở được chiếu sáng bởi ánh sáng phát ra từ Led. Khi có cháy nồng độ khói tăng lên làm cường độ sáng giảm đi làm cho điện trở của quang trở tăng lên.
Chọn LED có dòng 20mA và phát sáng có cường độ 10 lux và quang trở là LDR03 có đặc tuyến làm việc như hình vẽ.
10
Cöôøng ñoä
1000
100
100K
10K
1K
lux
Hình 5.24 Đặc tuyến của quang trở LDR03.
Ta có: Ġ
Chọn R1 =15İ
Dưới cường độ sáng của LED là 10lux thì giá trị điện trở của quang trở là 20K.
Chọn V- =1v lúc chưa có cháy.
Vậy R2 =100K –20K =80K
Khi có khói 20% lúc đó độ sáng giảm còn 10lux ( 20% bằng 2lux và giá trị quang trở tăng lên 100 K.
Ta chọn giá trị điện áp chuẩn so sánh tại ngõ cộng của opamp là 2,5V. Tức khi khói đạt 20% thì cảm biến cho tín hiệu báo động.
Chọn DZ2 là zener 3V có dòng Imax=25 mA
Chọn R3 = 10İ
ChọnVR4 =10K
5.2.3.3. Khối báo động.
Khi một đám cháy xảy ra, ngoài việc báo động bằng tiếng nói “có cháy, có cháy” được lưu trữ trong IC chuyên dùng, ta còn báo động bằng cói hụ hay chuông điện nhằm tập trung sự chú ý của mọi người.
Trong mạch này ta sử dụng IC LM555 để tạo âm thanh phát ra có các âm sắc khác nhau. Tiếng cói hụ này tạo âm thanh nghe rất kích thích và thường được nhiều người sử dụng làm tín hiệu cảnh báo.
IC LM555 thứ 2 tạo thành mạch dao động âm cao, chọn tần số ra của LOA là 1KHz.
Ta có: Ġ
Chọn tụ C2 = 0,01(F
R3 = 56kW
R2 = 4,7kW
VR2 = 20kW
Tần số ra ở LOA ta có thể thay đổi nhờ biến trở VR2.
IC LM555 thứ 1 cũng lắp thành mạch dao động có tần số nhỏ được xác định bởi công thức:
Chọn C1 = 220(F
R1 = 1kW
VR1 = 20kW
Tần số này có thể thay đổi nhờ biến trở VR1. Xung lấy ra trên tụ C1 có dạng sóng răng cưa, chúng ta cho tín hiệu này tác động vào chân 5 của IC LM555 thứ 2, điều này làm điều chế tần số lên tín hiệu ra loa làm cho âm thanh ra có nhiều dạng âm sắc khác nhau.
Hình 5.25 Mạch báo động.
Chương 6: Giải Thuật Chương Trình
Một cách tổng quát hoạt động của mạng được mô tả như sau:
PC truyền lệnh cho vi xử lí và các vi xử lí sẽ thực hiện các thông tin mà PC yêu cầu và sau đó truyền dữ liệu về cho PC. Master của các mạng (kit) vi xử lí được định địa chỉ lần lượt là 0,1,2..127 được qui định bởi 7 bit cuối trong byte địa chỉ. Ơû đây ta chỉ dùng hai kit (mạng) vi xử lí nên ta định địa chỉ cho Master của kit một là 1 và Master của kit hai là 2.
Sau khi nhận đúng địa chỉ do PC truyền đến, Master thực hiện nhận tiếp các byte dữ liệu theo sau, cất chúng vào trong vùng nhớ RAM. Sau đó thực hiện giao tiếp với các Slave trong mạng vi xử lí, truyền cho chúng dữ liệu cần thiết và cũng nhận các byte dữ liệu từ chúng, cất vào vùng nhớ RAM được qui định trước. Sau đó Master sẽ truyền dữ liệu thu thập từ các Slave về PC để xử lí.
Các Slave của mạng vi xử lí kiểm tra và xử lí các ngoại vi một cách liên tục. Các Slave chỉ bị ngắt khi nhận được địa chỉ đúng từ Master tương ứng và sau đó thực hiện việc nhận dữ liệu từ Master và truyền dữ liệu về cho Master. Các Slave cũng được định địa chỉ lần lược là 0,1…255 được xác định bởi 8bit trong byte địa chỉ truyền về từ Master tương ứng.
6.1. Giải Thuật Chương Trình Của Máy Tính PC
Chương trình có hai lựa chọn đó là tự động cập nhật dữ liệu theo thời gian và điều khiển bằng tay do con người thực hiện. Ở chương trình tự động cập nhật thì máy tính sẽ tự cập nhật dữ liệu, xử lí dữ liệu và truyền các lệnh cho các mạng con sau một khoảng thời gian định trước. Ở chương trình điều khiển bằng tay thì chúng ta có thể ra lệnh bất kì cho các mạng con như báo động, mở cửa, hiển thị nhiệt độ bất kì nào đó, đồng thời cũng nhận được dữ liệu từ chúng truyền về.
6.1.2. Chương Trình ở Chế Độ Tự Động Cập Nhật.
Khi bắt đầu, máy tính PC sẽ set chân RTS của cổng Com lên mức 1 để truyền một byte địa chỉ chứa địa chỉ là 1 xuống cho mạng vi xử lí con thứ nhất để cho mạng con thứ nhất biết PC đang yêu cầu giao tiếp với nó và Master 1sẵn sàng nhận dữ liệu tiếp theo. Sau đó PC truyền liên tiếp 4 byte dữ liệu mặc định ban đầu (bao gồm 2 byte đầu là dữ liệu về nhiệt độ và 2 byte sau là mã lệnh về báo động và mở cửa) cho Master. Sau khi truyền xong thì máy tính PC sẽ xoá chân RTS của cổng Com để chờ nhận 7 byte dữ liệu từ Master truyền về . Bao gồm 4 byte đầu là mã phím nhập, 2 byte tiếp theo là nhiệt độ đo được của môi trường, byte cuối báo cháy.
Khi nhận xong dữ liệu, PC sẽ tiến hành xử lí dữ liệu.
Tiếp theo,PC sẽ tăng địa chỉ lên một và thực hiện giao tiếp với mạng vi xử lí thứ hai thông qua việc đièu khiển chân RTS. Cũng như trên, máy tính PC sẽ phát 4 byte dữ liệu và nhận về 7 byte dữ liệu. PC sẽ tăng địa chỉ lên 1và thực hiện giao tiếp đến mạng vi xử lí cuối cùng. Sau đó, máy tính PC sẽ quay lại giao tiếp với mạng vi xử lí thứ nhất. Quá trình được lặp lại.
Dữ liệu mà máy tính PC truyền cho mạng con vi xử lí kể từ lần giao tiếp thứ hai chính là kết quả của việc xử lí các dữ liệu nhận được từ mạng con ở lần trước đó.
Hình 6.1 Lưu đồ giải thuật của PC ở chế độ tự động.
Ý nghĩa của các byte dữ liệu, bao gồm 4 byte dữ liệu truyền từ PC và 7 byte dữ liệu nhận từ mạng vi xử lí:
§ Đối với 4 byte dữ liệu truyền (byte 1,byte 2, byte 3, byte 4): Byte 1, byte 2 chứa nội dung về nhiệt độ, byte 1 chứa phần nguyên, byte 2 chứa phần thập phân. Giá trị mặc định ban đầu của byte 1 và byte 2 bằng 0. Byte 3 là mã lệnh đóng mở cửa: mở cửa khi giá trị bằng 1, giá trị là 0 thì không mở. Giá trị mặc định là 0. Byte 4 là mã lệnh báo động giá trị mặc định là 0, nếu bằng 1 là báo động.
§ Đối với 7 byte dữ liệu nhận: Byte 1 đến byte 4 là mã phím ấn truyền về từ mạng con. Nếu chúng bằng 0 thì chưa có phím ấn. Byte 5 và byte 6 chứa nội dung nhiệt độ đo được từ môi trường. Byte 7 báo cháy nếu bằng 1, nếu bằng 0 thì không có cháy.
Quá trình xử lí dữ liệu như sau: khi nhận được 7 byte dữ liệu từ mạng con, PC sẽ cho hiển thị 4 byte đầu chứa mã phím nhập nếu khác không, trường hợp bằng không là không có phím nhập; hiển thị 2 byte tiếp theo chứa thông số nhiệt độ; byte còn lại chứa thông tin về cháy. Đồng thời so sánh mã nhập với mã được qui định trươc chứa trong cơ sở dữ liệu, nếu đúng thì gán byte 3 của dữ liệu truyền lên một để báo là mã nhập hợp lệ và cho phép mở cửa, nếu sai thì byte 3 được gán bằng 0 tức là không cho phép mở cửa. Song song đó nhiệt độ cũng được so sánh với nhiệt độ cho phép nếu lớn hơn nhiệt độ cho phép thì xuất tín hiệu báo động bằng cách gán byte 4 của dữ liệu truyền bằng một. Byte 1 và byte 2 của dữ liệu truyền thì được gán là 0.
6.1.3. Chương trình ở chế độ điều khiển bằng tay.
Ơû chế độ này, để truyền nhận dữ liệu từ PC xuống mạng, ta phải thực hiện bằng tay. Mỗi khi nhận được chỉ thị PC sẽ thực hiện việc giao tiếp với tất cả các mạng con vi xử lí, truyền dữ liệu cho chúng và nhận dữ liệu từ chúng giống như chế độ tự động. Khi thực hiện xong thì kết thúc không quay lại theo chu kì như ở chế độ tự động cập nhật.
Quá trình xử lí dữ liệu như sau: 4 byte truyền đi được gán lần lượt theo các thông số mà người điều khiển muốn tuyền. Hai byte nhiệt độ sẽ lấy nội dung của nhiệt độ cần truyền mà chúng ta nhập vào ở ô nhiệt độ. Byte báo cháy sẽ là một nếu trạng thái cần truyền có cháy, ngược lại là 0. Nếu chúng ta muốn mở cửa thì gán byte 3 là 1 bằng cách chọn mục mở cửa. Bảy byte dữ liệu nhận từ mạng con cũng được xử lí như trên.
Giao diện chương trình giao tiếp trực tiếp với người điều khiển được viết bằng ngôn ngữ Visual Basic 6.0 của Microsoft.
Hình 6.2 Lưu đồ giải thuật của PC ở chế độ điều khiển bằng tay.
6.2. Giải thuật chương trình của mạng con vi xử lí.
Các mạng con vi xử lí giao tiếp với PC làm cùng công việc giống nhau, chỉ khác nhau về địa chỉ của từng mạng con trong mạng chung, số mạng con có thể mở rộng tuỳ vào cách mã hoá địa chỉ của PC và phần cứng, ở đây số mạng con có thể lên mở rộng lên đến 128 có địa chỉ từ 0 đến 127. Việc mở rộng cũng đơn giản không cần phải xây dựng một chương trình mới mà chỉ cần đổi địa chỉ của vi xử lí Master trong chương trình. Mạng con gồm một Master và ba Slave.
Master trong mạng sử dụng nguyên lí hỏi vòng để kiểm tra xem PC có yêu cầu giao tiếp với nó không. Khi xác định được yêu cầu giao tiếp thì chúng sẽ thoát khỏi việc hỏi vòng và giao tiếp với các Slave, sau đó truyền về PC. Và trở về hỏi vòng tiếp để chờ yêu cầu trao đổi tiếp theo.
Các Slave trong mạng giao tiếp với Master bằng cách dùng ngắt Port nối tiếp, khi có ngắt xảy ra Slave kiểm tra xem đúng địa chỉ của nó không nếu đúng thì cấm ngắt để nhận và truyền dữ liệu cho Master, nếu sai thì bỏ qua và thực hiện tiếp công việc của chúng. Các Slave có địa chỉ lần lượt là 1,2 và 3. Cũng xin nói thêm là chúng ta có thể mở rộng thêm các Slave khác nếu cần thiết một cách dễ dàng.
6.2.1. Chương Trình Của Master.
Master giữ vai trò quan trọng trong mạng con, nó nhận lệnh và dữ liệu từ PC truyền cho các Slave trong mạng, đồng thời cũng nhận dữ liệu từ các Slave này để truyền lại cho PC. Lưu đồ giải thuật xem hình 6.3.
Để làm việc Master sẽ khởi tạo các giá trị đầu cho Port nối tiếp như tốc độ Baud và chế độ hoạt động.
Chương trình khởi tạo vi xử lí như sau:
MOV SCON,#52H ; Khởi động Port nối tiếp chế độ 1.
MOV TMOD,#20H ; Sử dụng bộ định thời 1,chế độ 2 để tạo xung cho Port nối tiếp.
MOV TH1,#-3 ; Tốc độ Baud 9600bit/s.
MOV TL1,#-3
SETB TR1 ; Cho bộ định thời hoạt động.
CLR P3.2 ;Cho phép Nhận dữ liệu từ máy tính PC
CLR P3.3 ;Không cho các slave nhận
Hình 6.3 Lưu đồ giải thuật của Master.
Master dùng Port nối tiếp để giao tiếp với PC và các Slave trong mạng thông qua chuẩn truyền thông RS-485 như đã trình bày ở chương trước.Và kiểu truyền nhận là bán song công Half-Duplex, tốc độ truyền nhận là 9600bit/s. Ban đầu Master cho phép nhận từ PC và không cho phép truyền đến các Slave đến khi nhận được địa chỉ và dữ liệu từ PC bằng cách xoá chân Port P3.2 và P3.3. Khi nhận xong Master sẽ chuyển sang giao tiếp với các Slave lúc này PC ở trạng thái chờ nhận dữ liệu. Để giao tiếp với Slave, Master sẽ set chân P3.3 để truyền dữ liệu cho Slave và xoá chân P3.3 để nhận dữ liệu từ Slave riêng lẻ cho đến Slave cuối cùng trong mạng trong thời gian này Master không cho phép truyền cho PC. Khi giao tiếp xong với các Slave thì Master sẽ truyền dữ liệu cho PC bằng cách xoá P3.3 và set P3.2. Truyền xong Master sẽ quay về trạng thái chờ nhận địa chỉ từ PC, tiếp tục chu kì mới.
Master sẽ nhận 4 byte dữ liệu từ PC và cất vào các ô nhớ từ 30H đến 33H sau khi nó nhận đúng địa chỉ. Master sẽ thực hiện giao tiếp với các Slave truyền 4 byte dữ liệu này đi và nhận về 7 byte dữ liệu cất vào các ô nhớ từ 34H đến 40H. Sau đó nó sẽ truyền 7 byte dữ liệu này về cho PC.
Địa chỉ mà PC truyền cho Master dưới dạng một byte mà bit trọng số cao có giá trị là 1, dữ liệu mà PC truyền cho PC dưới dạng byte có bit cao là 0. Do đó giải thuật để nhận dạng địa chỉ như sau:
Hình 6.4 Lưu đồ giải thuật kiểm tra địa chỉ Master.
Khi giao tiếp với PC, Master sử dụng Port nối tiếp ở chế độ 1 tốc độ 9600bit/s khi chuyển sang giao tiếp với các Slave trong mạng thì Port nối tiếp ở chế độ 3 (chế độ truyền thông đa xử lí như trình bày ở chương thiết kế phần cứng).
Để giao tiếp với các Slave, Master phải chuyển từ chế độ 1 của Port nối tiếp sang chế độ 3 bằng cách set bit SM0 của thanh ghi SCON lên 1. Nên để ý rằng khi giao tiếp với các Slave thì Master phải xoá chân P3.2 để tránh cho PC nhận dữ liệu không đúng tức là không cho phép PC nhận dữ liệu trong lúc này.
Để truyền dữ liệu cho Slave, Master phải cho phép phần cứng hoạt động truyền bằng cách set P3.3 lên 1. Trước hết, Master sẽ truyền byte địa chỉ bằng cách nạp địa chỉ vào thanh ghi A và set TB8 lên 1 sau đó di chuyển nội dung thanh ghi A vào thanh ghi SBUF của Port nối tiếp. Kế đến truyền tiếp các byte dữ liệu đi bằng cách xoá bit TB8. Để nhận dữ liệu từ Slave, Master phải xoá chân P3.3.
Khi giao tiếp với Slave 1 (Slave bàn phím), Master không truyền dữ liệu cho Slave mà chỉ nhận 4 byte dữ liệu từ nó. Chúng là các byte mã phím quét, nếu không có mã nhập thì Slave 1 sẽ truyền cho Master bốn byte này có giá trị là 00H, nếu đã nhập xong mã phím thì các byte này sẽ chứa mã hex của các phím nhập. Các byte phím nhập này được lưu vào các ô nhớ từ 34H đến 37H để sau đó truyền về máy tính.
Kế đến giao tiếp với Slave 2 (Slave đo và hiển thị nhiệt độ), sau khi xác lập yêu cầu giao tiếp, Master truyền cho Slave 2 byte nhiệt độ cần hiển thị được truyền về từ PC đó là các byte 30H và 31H. Master chuyển sang trạng thái chờ nhận dữ liệu từ Slave 2. Slave 2 sẽ truyền về cho Master 2 byte chứa thông tin về nhiệt độ môi trường đo được và được cất vào 2 ô nhớ 38H và 39H.
Cuối cùng giao tiếp với Slave 3 (Slave đảm nhận việc mở cửa báo động và nhận dạng cháy), Master truyền cho Slave này 2 byte chứa mã lệnh của PC về mở cửa và báo động. Đồng thời nhận 1 byte từ Slave báo trạng thái của cảm biến cháy, cất vào ô nhớ 40H.
Sau khi giao tiếp xong với các Slave, Master sẽ truyền 7 byte dữ liệu về cho PC và kết thúc một chu trình làm việc để chờ PC ra lệnh giao tiếp tiếp theo.
6.2.2. Chương Trình Của Slave Bàn Phím.
Slave bàn phím đảm nhận công việc quét phím nhập và truyền mã phím nhập về cho Master, Master sẽ truyền về máy tính sử lí. Chương trình chính của Slave luôn luôn thực hiện quét phím chỉ khi nào có ngắt Port nối tiếp xảy ra thì nó mới tạm ngưng để truyền về Master mã phím nhập. Nếu chưa có mã phím nhập hoặc đang nhập dang dở thì nó sẽ truyền về cho Master bốn byte 0 liên tiếp, nếu đã nhập xong thì nó sẽ truyền bốn byte mã về cho Master, đồng thời xoá bốn byte đó đi khỏi bộ nhớ. Giải thuật chương trình như sau:
Hình 6.5 Lưu đồ giải thuật chương trình chính.
Ban đầu chương trình chính khởi tạo vi xử lí sau đó nó gọi chương trình con đọc mã phím nhập INHEX. Chương trình INHEX này sẽ trả về mã phím nhập dạng mã HEX trong thanh ghi A nếu có phím nhập, khi không có phím nhập thì nó sẽ quét phím mãi để tìm mã nhập một cách liên tục chương trình chính sẽ bị treo ở đó cho đến khi có ngắt xảy ra hoặc có phím nhập.
Khi quét được phím nhập chương trình chính sẽ kiểm tra xem mã phím ban đầu (dùng xác định việc bắt đầu nhập mã phím) đó có bằng 00H hay không. Nếu là đúng thì gán nội dung thanh ghi R0 bằng 4, thanh ghi R3 bằng 30H (Thanh ghi R0 dùng đếm số phím nhập ở đây qui định là 4). Sau đó tiếp tục gọi chương trình con INHEX để đọc bốn phím khác không liên tục theo sau, nếu có một phím nhập nào đó là không thì mã nhập không hợp lệ và quay về đầu chương trình để đọc mã phím lần hai.
Nếu như mã phím nhập hợp lệ thì lúc đó thanh ghi R0 sẽ bằng 0 và khi chương trình ngắt xảy ra thì Slave sẽ phát bốn byte mã phím về cho Master. Nếu R0 khác không thì sẽ phát cho Master 4 byte điều khiển 00H. Kết thúc chương trình ngắt thì quay lại chương trình chính để đọc mã phím tiếp theo.
Chương trình con kiểm tra phím ấn INHEX: Xem hình sau. Trong chương trình INHEX ta gọi chương trình con đọc phím GETKEY. Chương trình GETKEY sẽ trả về mã của phím ấn nếu có và Set cờ C lên mức 1, khi không có phím ấn thì cờ C bị xoá. Chương trình con GETKEY xem phụ lục chương trình vi xử lí.
Hình 6.6 Lưu đồ giải thuật chương trình con INHEX.
Chương trình ngắt:
Hình 6.7 Lưu đồ giải thuật chương trình ngắt.
6.2.3. Chương Trình Của Slave Đo Nhiệt Độ.
Giải thuật của chương trình chính: Xem lưu đồ giải thuật hình 6.8.
Bắt đầu ta khởi tạo các giá trị ban đầu cho vi xử lí như sau: Port nối tiếp hoạt động ở chế 3, tốc độ Baud 9600 bit/s, có sử dụng ngắt Port nối tiếp. Giá trị ban đầu của các ô nhớ: (30H) = 25H (nhiệt độ ban đầu led sẽ hiển thị), (31H) = 0, (32H) = (33H) =0, (34H) =25 (giá trị nhiệt độ ban đầu truyền về cho Master hay PC), (35H) =0.
Chương trình khởi tạo vi xử lí như sau:
ORG 0000H
LJMP MAIN
ORG 0023H ; Khai báo ngắt Port nối tiếp.
LJMP SPISR
ORG 0030H
MAIN: MOV SCON,#0F2H ; Khởi động Port nối tiếp chế độ 3.
MOV TMOD,#21H ; Sử dụng bộ định thời 1,chế độ 2,bộ định thời 0 chế độ 1.
MOV TH1,#-3 ; Tốc độ Port 9600.
MOV TL1,#-3
SETB TR1
MOV IE,#90H ; Cho phép nắt Port ối tiếp.
CLR P3.2 ; Cho phép nhận dữ liệu từ Master
MOV 30H,#25H ;Các giá trị của các ô nhớ mặc định
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 34H,#25
MOV 35H,#0
Khi khởi tạo xong vi xử lí, thì chương trình chính bắt đầu làm nhiệm vụ chính của mình đó là hiển thị nhiệt độ và đọc giá trị nhiệt độ đo được từ môi trường. Nó sẽ hiển thị ra 3 led 7 đoạn giá trị của nhiệt độ gồm thành phần nguyên (hàng chục và hàng đơn vị) và phần thập phân lấy từ ô nhớ 30H và 31H. Nếu như giá trị của ô nhớ 32H khác 0 thì nhiệt độ được hiển thị theo nhiệt độ từ PC truyền xuống và nội dung của hai ô nhớ 30H và 31H lúc này được lấy từ 2 ô nhớ 32H và 33H, còn nếu chúng bằng không thì hiển thị theo nhiệt độ của môi trường chứa trong hai ô nhớ 34H và 35H. Hiển thị nhiệt độ bằng phương pháp quét led và dùng IC giải mã LS74247, dữ liệu được truyền qua Port 2. Hiển thị hàng chục trước, Delay 1ms để giữ độ sáng cho led, chuyển sang hiển thị hàng đơn vị cũng Delay 1ms, chuyển sang hiển thị hàng thập phân. Kế đến kích ADC biến đổi (CLR P1.0) và chờ ADC biến đổi xong thì đọc về thanh ghi A thông qua Port 0, sau đó chia đôi (do độ phân giải của mạch đo nhiệt độ là 0.5oC ) và biến đổi sang số BCD rồi cất vào hai ô nhớ 34H và 35H. Sau khi xong sẽ Delay 1ms và quay về hiển led tiếp. Quá trình cứ lặp lại theo chu kì.
Cũng như trên, Slave đo nhiệt độ cũng giao tiếp với Master thông qua Port nối tiếp chế độ 3 (truyền thông đa xử lí) và sử dụng phương pháp dùng ngắt Port nối tiếp. Khi có ngắt xảy ra Slave sẽ kiểm tra xem có đúng địa chỉ của mình không, nếu đúng thì nó sẽ cấm ngắt và thực hiện nhận 2 byte dữ liệu tiếp theo (chứa nội dung về nhiệt độ cần hiển thị ra LED), byte đầu là thành phần nguyên, byte 2 là thành phần thập phân của nhiệt độ được cất lần lượt vào các ô nhớ 32H và 33H. Tiếp theo Slave sẽ truyền về cho Master cũng 2 byte chứa thông tin về nhiệt độ của môi trường đó là nội dung của hai ô nhớ 34H và 35H, giá trị mặc định ban đâu của ô nhớ 34H là 25, ô nhớ 35H là 0. Cuối cùng Slave sẽ cho phép ngắt trở lại và thoát khỏi chương trình ngắt trở về chương trình chính.
Hình 6.8 Lưu đồ giải thuật của Slave đo nhiệt độ.
Chương trình ngắt:
Hình 6.9 Lưu đồ giải thuật của chương trình ngắt.
6.2.4. Chương Trình Của Slave Báo Động, Điều Khiển Mở Cửa Và Cảm Biến Cháy.
Slave này sẽ đảm nhận công việc: Mở cửa khi có yêu cầu, báo động khi có cháy và báo cáo về Master hay PC trạng thái của cảm biến cháy.
Chương trình của Slave được thiết kế có dùng ngắt, và chương trình chính sẽ lặp lại công việc của nó mãi cho đến khi có ngắt thì thực thi chương trình ngắt và lại quay về chương trình chính. Lưu đồ giải thuật xem hình 6.2.4a.
Khởi tạo các giá trị ban đầu cho vi xử lí: khai báo sử dụng ngắt Port nối tiếp, ngăn không cho Rơle hoạt động bằng cách xoá chân Port P1.0, xoá chân Port P1.2 để tắt mạch báo động vì khi Reset vi xử lí giá trị mặc định của các chân Port là mức 1.
ORG 0000H
LJMP MAIN
ORG 0023H ;Khai báo ngắt Port nối tiếp
LJMP SPISR
ORG 0030H
MAIN: CLR P1.0 ;Không cho Rơle hoạt động
CLR P1.2 ;Tất mạch báo động
MOV SCON,#0F0H ; Khởi động Port nối tiếp chế độ 3.
MOV TMOD,#21H ; Sử dụng bộ định thời 1,chế độ 2,bộ định thời 0 chế độ 1.
MOV TH1,#-3 ; Tốc độ Baud 9600bit/s.
MOV TL1,#-3
SETB TR1
MOV IE,#90H ;Cho phép ngắt Port nôí tiếp
CLR P3.2 ; Cho phép nhận từ master
MOV 30H,#0
MOV 31H,#0
MOV 32H,#0
SETB C
Chương trình chính kiểm tra nội dung ô nhớ 30H, nếu nó là 1 thì PC truyền lệnh mở cửa xuống và Slave sẽ kích chân Port P1.0 lên mức cao để đóng Rơlay kích động cơ hoạt động mở cửa, trì hoãn 30 giây để cửa được mở ra. Sau đó xoá chân Port P1.0 tắt động cơ và xoá đi nội dung ô nhớ 30H để báo là cửa đã được mở tránh chương trình chính mở cửa lần hai trong cùng một lệnh từ PC bởi vì chương trình chính sẽ lặp lại việc kiểm tra các ô nhớ theo chu kì.
Kế đến kiểm tra nội dung ô nhớ 31H và ô nhớ 32H nếu một trong hai ô nhớ có giá trị bằng 1 thì Slave sẽ báo động bằng cách set chân Port P1.2 cho phép mạch báo động phát tín hiệu âm thanh báo động. Ô nhớ 31H chứa nội dung mã lệnh mà PC truyền xuống nếu là 1 thì phát tín hiệu báo động, ô nhớ 32H chứa trạng thái của cảm biến cháy. Sau cùng sẽ kiểm tra cảm biến cháy bằng cách đọc chân Port P1.1, ghi vào ô nhớ 32H giá trị là 1 nếu có cháy tức là P1.1 có giá trị 0. Chương trình sẽ quay lại từ đầu.
Giống như các Slave trên, Slave này cũng dùng ngắt Port nối tiếp để giao tiếp với Master. Khi ngắt xảy ra, chương trình chính sẽ tạm dừng để đi vào chương trình ngắt.Trong chương trình ngắt Slave sẽ đọc địa chỉ và kiểm tra xem có đúng địa chỉ của mình không, nếu đúng thì nó sẽ cấm ngắt, xoá bit SM2 của thanh ghi SCON để chuyển sang chế độ nhận 9 bit dữ liệu. Slave sẽ nhận hai byte dữ liệu liên tiếp (chứa nội dung về mở cửa và báo động) cất vào ô nhớ 30H và 31H. Đồng thời set bit TI và chân Port P3.2 để sẵn sàng phát byte dữ liệu về Master và truyền đi một byte dữ liệu báo cáo về trạng thái của cảm biến cháy chứa trong ô nhớ 32H. Khi truyền xong thì set bit SM2 lên một, và xoá chân Port P3.2 để sẵn sàng nhận địa chỉ từ Master và Slave thoát khỏi chương trình ngắt trở về chương trình chính.
Hình 6.10 Lưu đồ giải thuật của chương trình chính.
Hình 6.11 Lưu đồ giải thuật của chương trình ngắt.
Các file đính kèm theo tài liệu này:
- Hệ thống đa xử lí.doc