Lời nói đầu
***
Với sự phát triển mạnh mẽ của Khoa học kĩ thuật trong những thập niên gần đây, ngành Bưu chính viễn thông đã tạo ra bước ngoặc quan trọng trong lĩnh vực thông tin để đáp ứng nhu cầu của con người. Hiện nay, hệ thống thông tin qua mạng điện thoại đã được toàn cầu hóa, trở nên gần gũi và quen thuộc với con người. Nhờ hệ thống thông tin này mà con người đã không bị hạn chế về khoảng cách liên lạc. Trong lĩnh vực thông tin đã đáp ứng được nhu cầu cần thông tin của con người. Vậy trong lĩnh vực điều khiển tự động thì sao?
Thật vậy, trong việc điều khiển có nhiều cách như: điều khiển bằng tia hồng ngoại, điều khiển bằng vô tuyến nhưng các cách ấy đều phụ thuộc vào khoảng cách, chỉ có tác dụng trong phạm vi điều khiển gần.
Với sự phát triển của KHKT, với mức độ nhu cầu của con người ngày càng cao, đòi hỏi con người phải điều khiển được một thiết bị điện nào đó mà không bị hạn chế về khoảng cách điều khiển. Từ đó, ý tưởng đề tài là phải thiết kế một hệ thống dùng ngay chính đường truyền có sẵn của mạng thông tin qua điện thoại để điều khiển.
Với kết quả khả quan trong việc nghiên cứu, thiết kế đề tài của một số tài liệu tham khảo và thực tế đã chắc chắn rằng việc sử dụng điện thoại di động để điều khiển thiết bị điện là một vấn đề hoàn toàn có thể được, có tính khả thi, phù hợp với xu thế mới của con người. Đó cũng chính là vấn đề mà sinh viên thực hiện đề tài đang quan tâm.
Với lượng kiến thức được truyền đạt trong suốt khóa học, với khả năng của bản thân và thời gian cho phép để thực hiện đề tài nên cá nhân sinh viên thực hiện vẫn còn những giới hạn cụ thể trong đề tài.
Sau một thời gian thực hiện luận văn tốt nghiệp,bản thân sinh viên đã được mở rộng và hiểu biết thêmvề các thiết bị chế tạo, cũng như phát hiện ra nhiều thiếu sót.Ngoài ra, nó còn giúp cho em tìm hiểu thêmmột số ứng dụng thực tế của nhiều thiết bị, linh kiện trong thực tiễnvà làm cho kiến thức của em ngày càng được nâng cao.
Qua đó, em xin chân thành cám ơncôTh.S Vũ Thị Hồng Nga và thầy Th.S Trần Nguyên Bảo Trânkhoa Công nghệ điện tử đã nhiệt tình giúp đỡvà hướng dẫn em hoàn thành tốt đề tài luận văn tốt nghiệp.
Nếu trong quá trình trình bày có gì không đúnghay chưa hợp lý thì kính mong quí thầy côsửa chữa và có những ý kiến đóng
Mục Lục
***
Trang
Lời nói đầu 1
Nhận xét của GV hướng dẫn 2
Nhận xét của GV phản biện 3
CHƯƠNG 1: Lý thuyết liên quan .5
1. Các phương thức giao tiếp qua máy tính
2. Module Sim300C .17
2.1 Giới thiệu
2.2 Cấu tạo .18
2.3 Giao tiếp giữa Module với VXL 22
3. Vi xử lý 8951 .24
4. Giải quyết vấn đề .44
CHƯƠNG 2: Thực hiện đồ án 45
1. Linh kiện
2. Sơ đồ khối của mô hình .61
3. Sơ đồ mạch nguyên lý .62
4. Sơ đồ mạch Layout 74
5. Nguyên lý hoạt động .76
6. Lưu đồ giải thuật .80
7. Chương trình vi xử lý 82
CHƯƠNG 3: Đánh giá – Kết luận . 118
1. Kết quả thực hiện đề tài
2. Đánh giá đề tài đã thực hiện
3. Kết luận - Hướng phát triển của đề tài 119
*Tài liệu tham khảo
119 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 3160 | Lượt tải: 3
Bạn đang xem trước 20 trang tài liệu Điều khiển và kiểm tra thiết bị điện bằng điện thoại di động qua soạn tin nhắn, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
- Port 0: là port có 2 chức năng ở các chân 32-39 của 8951. Đối vớ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.
- Port 1: là port I/O trên các chân 1-8. Chỉ được dùng cho giao tiếp với các thiết bị bên ngoài.
- Port 2: là port có tác dụng kép trên các chân 21-28, được dùng như các đường xuất nhập.
- 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.
1.7 MAX3238:
Hình 2.11: Sơ đồ chân của MAX3238.
1.8 PT2262:
Hình 2.12: Sơ đồ chân của PT2262.
Hình 2.13: Sơ đồ khối của PT2262.
Hình 1.14: Sơ đồ nguyên lý của bộ phát.
1.9 PT2272 L4/M4:
Hình 2.15: Sơ đồ chân của PT2272.
Hình 2.16: Sơ đồ khối của PT2272.
1.10 UL2803 :
Hình 1.17: Sơ đồ nguyên lý cổng vào – ra của UL2803.
Hình 2.18: Sơ đồ chân của UL2803.
2. Sơ đồ khối của mô hình
Thiết bị ĐK Th.bị Bộ Thu Sóng RF Bộ Phát
Không dây
ĐK
Th.bị
Có dây
Vi Điều Khiển
Ăngten
Cảm ứng dòng Cổng
thiết bị RS-232
Module Sim300C
GSM / GPRS
Điện thoại di động
Mobile
Hình 2.19: Sơ đồ khối của mô hình.
+ Dùng phương pháp soạn tin nhắn SMS từ điện thoại di động của người quản lý gửi đến một số SIM bất kỳ đã được lắp đặt sẵn trên hộp Module Sim300C(GSM / GPRS) bằng việc sử dụng anten thu sóng. Khi nội dung tin nhắn hay dữ liệu đã được Module Sim300C (GSM / GPRS) nhận thì nó đưa vào vi điều khiển xử lý thông qua việc sử dụng cổng giao tiếp RS-232, bằng chương trình các câu lệnh đã được lập trình sẵn trên vi xử lý 89C51 thì nó sẽ điều khiển các thiết bị hoạt động (có thể điều khiển không dây bằng bộ thu – bộ phát và có dây) theo đúng yêu cầu nội dung tin nhắn của người quản lý.
+ Khi thiết bị đã hoạt động hay không hoạt động (tạm ngừng hoặc hư hỏng) thì có một bộ phận cảm ứng dòng (cuộn dây) sẽ cảm ứng dòng điện của thiết bị để xác định tình trạng họat động của thiết bị, rồi đưa về bộ phận vi điều khiển nhận biết và xử lý, tạo nên một tin nhắn hay dữ liệu báo kết quả về số máy điện thoại của người quản lý thông qua Module Sim300C (GSM / GPRS).
3. Sơ đồ mạch nguyên lý
3.1 Khối vi điều khiển:
Hình 2.20: Sơ đồ nguyên lý khối vi điều khiển.
Khối vi điều khiển được chia làm 3 phần chính :
+ Khối nguồn
+ Khối reset
+ Khối xử lý và lưu trữ dữ liệu
a. Khối nguồn:
7805
Hình 2.21: Sơ đồ mạch khối nguồn.
Nhiệm vụ khối nguồn là cung cấp mức điện áp 5VDC ổn định cho mạch điện. Sử dụng nguồn AC qua cầu chỉnh lưu -> 12V, qua IC 7805 tạo ra điện áp 5VDC.
b. Khối Reset:
Reset
(p_9)
Hình 2.22: Sơ đồ mạch của khối reset.
Nhiệm vụ của khối reset là tạo lại trạng thái ban đầu khi khối xử lý bị treo (không thể tiếp tục họat động được). Khối này sử dụng IC 555, IC 4518 và IC 4001 (có 4 cổng NOR).
c. Khối xử lý và lưu trữ dữ liệu:
Khối này có nhiệm vụ lưu trữ thông tin dữ liệu (DS12C887), xử lý dữ liệu (89C51) từ module Sim300C đưa tới và xuất lệnh để điều khiển (89C51) đóng ngắt thiết bị.
+ Dallas DS12C887 vừa có tính năng là đồng hồ thời gian thực vừa có tính năng lưu trữ dữ liệu tạm thời. Xem chi tiết ở phần 1.5 tr50.
+ Vi xử lý có chức năng như sau :
Thu nhận dữ liệu từ module Sim300C thông qua cổng RS-232 và xuất ra lệnh từ các port để điều khiển khối relay đóng ngắt thiết bị.
Khi thiết bị đóng hoặc mở thông qua khối cảm biến dòng đưa tín hiệu về các chân port của vi xử lý. 89C51 sẽ xử lý và xuất lệnh đưa đến module Sim300C để thông báo cho người quản lý.
P0.0, P0.2, P0.4, P0.6, P2.5, P2.7 được nối vào chân số 2 (chân katốt của diode phát) của opto 4N35. Nhiệm vụ đóng mở relay cho thiết bị.
P0.1, P0.3, P0.5, P0.7, P2.4, P2.6 được nối vào chân số 1 ngõ ra của IC HA17358. Nhiệm vụ nhận tín hiệu hồi về của thiết bị (đóng hoặc mở).
P1.0 – P1.7 được nối với chân 4 - 11 của Dallas DS12C887. Đây là lọai bus đa hợp, vừa là chân địa chỉ vừa là chân dữ liệu. Nhiệm vụ truyền thông tin dữ liệu qua lại.
P3.3 dùng để điều khiển khối reset khi mô hình bị treo.
P3.4 được nối với chân 13 (CE\) (CS) của DS12C887. Ngõ vào lựa chọn RTC. Xem chi tiết ở tr49.
P3.5 được nối với chân 14 (AS) của DS12C887. Chân chốt địa chỉ. Xem chi tiết ở tr49.
P3.6 được nối với chân 15 (R/W\) của DS12C887. Ngõ vào cho phép đọc/ghi. Xem chi tiết ở tr49.
P3.7 được nối với chân 17 (DS) của DS12C887. Chân chốt dữ liệu. Xem chi tiết ở tr49.
3.2 Khối Relay:
Khối này có nhiệm vụ đóng mở thiết bị khi có lệnh từ vi xử lý và cảm biến dòng khi thiết bị đóng hoặc mở để đưa về vi xử lý.
+ Khi có lệnh từ vi xử lý (P0.0, P0.2, P0.4, P0.6, P2.5, P2.7) ở mức cao (logic 1) thì opto 4N35 không dẫn -> relay không đóng -> thiết bị không họat động. Còn ở thấp (logic 0) thì diode sẽ sáng -> trans dẫn -> relay được đóng -> thiết bị hoạt động.
+ Khi thiết bị hoạt động thì sẽ có dòng hồi về thông qua cuộn dây vì giá trị dòng nhỏ nên mới cho qua mạch khuếch đại dòng (IC HA17358) ở mức cao (logic 1) đưa đến vi xử lý bởi các port P0.1, P0.3, P0.5, P0.7, P2.4, P2.6. Còn nếu thiết bị không hoạt động -> không có dòng hồi về thì tại các chân port sẽ ở mức thấp (logic 0).
Hình 2.23: Sơ đồ nguyên lý khối Relay.
3.3 Khối Module Sim300C:
Hình 2.24: Sơ đồ nguyên lý của Module Sim300C.
a. Khối nguồn:
Có 3 mức nguồn cơ bản mà Module Sim300C sử dụng đến là 4V, 3V3, 2V5.
Hình 2.25: Sơ đồ nguyên lý khối nguồn.
b. Khối giao tiếp giữa Sim300C và RS232:
Hình 2.26: Sơ đồ nguyên lý giao tiếp của MAX3238.
MAX3238 là bộ thu phát vô tuyến. MAX3238 bao gồm 5 bộ phát, 3 bộ thu được cung cấp bởi nguồn 3V và khối Autoshutdown Plus.
Hình 2.27: Sơ đồ chân của MAX3238.
- Chân 5, 6, 7, 10, 12 (T1out – T5out): ngõ ra của bộ phát được truyền đến cổng RS232.
- Chân 24, 23, 22, 19, 17 (T1in – T5in): ngõ vào của bộ phát nhận tín hiệu từ Sim300C.
- Chân 8, 9, 11 (R1in – R3in): ngõ vào của bộ thu nhận tín hiệu từ RS232.
- Chân 21, 20, 18 (R1out – R3out): ngõ ra của bộ thu được truyền đến Sim300C.
- Chân 26 là chân nguồn (Vcc), chân 2 nối mass (GND).
- Khối Autoshutdown Plus (khối điều khiển) có nhiệm vụ On hoặc Off họat động nguồn trên mạch điện khi nó nhận biết được một tín hiệu không hợp lý trong việc chuyển từ trạng thái này sang trạng thái khác trên những ngõ vào của những bộ phát và bộ thu.
- Tất cả những chân vào ra của bộ phát và thu đều được bảo vệ bởi mạch ESD.
- Điểm đặc trưng là cung cấp được nguồn dòng 10nA.
- Ngòai ra, MAX3238 còn tương đương với MAX3248 đều sử dụng mức nguồn từ 3V đến 5V5. Nó chỉ khác nhau ở điểm bắt đầu của ngõ vào. MAX3248 có điện áp ngõ vào thấp từ 0.6V đến 1.2V, còn MAX3238 có điện áp ngõ vào chuẩn ở mức 1.8V.
- Tụ C3, C4 dùng để nạp xả điện tích nhanh chóng. Còn tụ C2, C5 có thể tích trữ điện tích lớn cung cấp cho V+ và V-.
- Nếu chân ForceOFF\ nối mass thì các bộ phát và bộ thu ngưng họat động và các ngõ ra có tổng trở cao, ngọai trừ chân R1outB.
c. Khối xử lý trung tâm (Sim300C):
Hình 2.28: Sơ đồ chân của Sim300C.
- Chân 1, 3, 5, 7, 9 nối nguồn. VBAT từ 3V4 – 4V5, thường là 4V.
- Chân 2, 4, 6, 8, 10 và 51 nối mass (GND).
Sim300C MAX3238
DBGTX T1IN
CTS Truyền T2IN
DCD T3IN
RI T4IN
DTR T5IN
DBGRX Nhận R1OUT
RTS R2OUT
DTR R3OUT
Sim VDD
Sim RST
Sim CLK
Sim I/O
Sim Prese RS-232
DCD
RD
Truyền TD
DTR
MASS
DSR
SimCard RTS
CTS
Sim VDD RI
Sim RST
Sim CLK
Sim I/O
Sim Prese
Hình 2.29: Sơ đồ khối của Sim300C truyền và nhận dữ liệu.
- Chân 17 (VDD_EXT): từ 2.85V đến 3.15V, thường là 3V.
- Chân 16 (Network Led): có điện áp ngõ ra cao hoặc thấp tùy thuộc trạng thái làm việc của Sim300C.
- CTS: Clear to Send.
- DCD: Data Carrier Detection.
- RI: Ring Indicator.
- DTR: Data Terminal Ready.
- RTS: Request to Send.
d. Khối giao tiếp với Sim Card:
Hình 2.30: Sơ đồ chân IC EZ630.
- EZ630 dùng để giao tiếp giữa Sim Card với Sim300C.
Hình 2.31: Sơ đồ chân của Sim Card (Mobile).
- SIM_VDD: nguồn Sim Card được cung cấp bởi ngõ ra Sim300C, có 2 mức điện áp: 3v và 1.8v, dòng là 10mA.
- SIM_I/O: ngõ vào/ra dữ liệu của Sim Card.
- SIM_CLK: xung Clock của Sim Card.
- SIM_RST(27): khởi động lại Sim Card.
- SIM Presence(33): giao tiếp Sim Card.
e. Khối báo trạng thái làm việc của Sim300C:
Hình 2.32: Sơ đồ nguyên lý của khối báo trạng thái làm việc.
- Led đỏ để báo trạng thái nguồn 4V.
- Led trắng chỉ trạng thái làm việc của mạng lưới (network).
- Led trắng ON hoặc OFF tùy thuộc vào chân 16 (Network Led) của Sim300C ở mức cao hay thấp. H91 tương đương như một Transitor dùng để đóng mở. Chân Network được nối với cực B Trans, khi Network ở mức cao hoặc thấp thì Trans sẽ đóng hoặc mở Led trắng.
Bảng biểu hiện trạng thái làm việc như sau:
Trạng thái
Chức năng của Sim300C
OFF
Sim300C ngừng họat động
64ms ON/800ms OFF
Sim300C không tìm thấy network
64ms ON/3000ms OFF
Sim300C tìm thấy network
64ms ON/300ms OFF
GPRS Communication
3.4 Khối Phát – Thu:
a. Bộ Phát:
Hình 2.33: Sơ đồ nguyên lý bộ phát.
- Chức năng của IC 2803 là đệm dòng và có 8 cổng đảo.
- 2803 có 8 ngõ vào từ I0 – I7 và 8 ngõ ra từ O0 – O7.
- Chức năng của PT2262 là phát (truyền) dữ liệu đi.
- Nó có 4 ngõ vào và một ngõ ra dữ liệu. Ngòai ra, PT2262 còn có 8 đường địa chỉ (A0 – A7) và bộ dao động OSC.
- Bộ Transmitter bao gồm mạch cộng hưởng LC và cuộn dây L (ăngten) để phát tín hiệu đi.
- TE\ là chân cho phép truyền dữ liệu.
- Điện áp Vcc khỏang từ 5V – 15V (thường 12V).
b. Bộ thu:
- LM358 gồm 2 bộ op-amp có nhiệm vụ khuếch đại tín hiệu nhận được.
- Chức năng của PT2272-M4 là nhận dữ liệu không có chốt.
- Nó cũng có 8 đường địa chỉ A0 – A7, bộ dao động OSC, 4 ngõ ra (D0 – D3) và một ngõ vào dữ liệu (Din).
- VT (Valid Transmission) là chân ở mức cao khi có dữ liệu ở ngõ ra (D3).
- Điện áp Vcc từ 5V – 12V (thường là 5V).
Hình 2.34: Sơ đồ nguyên lý bộ thu.
4. Sơ đồ mạch Layout
Hình 2.35: Sơ đồ layout của khối vi điều khiển.
Hình 2.36: Sơ đồ layout của khối Relay.
Hình 2.37: Sơ đồ layout của bộ phát.
5. Nguyên lý hoạt động
5.1 Cú pháp lệnh:
+ Khi soạn tin nhắn gởi đi:
“HELLO!SIM300”: đây là câu lệnh chào. Khi đó Sim300C sẽ gởi tin nhắn chào lại như sau: “HELLO! CHAO BAN, MOI BAN NHAP LENH DIEU KHIEN”.
“TEST/123456”: đây là câu lệnh dùng để kiểm tra 6 thiết bị, xem thiết bị đó hoạt động hay không. Từ 1 -> 6 tương đương cho th/bị 1 -> th/bị 6.
“CONTROL/123456/XXXXXX”: đây là câu lệnh dùng để điều khiển đóng hoặc mở 1 trong 6 thiết bị mà người quản lý chọn.
X: giữ trạng thái trước đó (ON or OFF).
1: là mở cho thiết bị hoạt động (ON).
0: là ngắt cho thiết bị ngưng hoạt động (OFF).
+ Khi trả lời đến máy điện thoại người quản lý thì có nội dung sau:
>LIGHT WALL: ON or OFF (thiết bị số 1)
>LIGHT MIRROR: ON or OFF (thiết bị số 2)
>LIGHT PICTURE: ON or OFF (thiết bị số 3)
>LIGHT ENTRANCE: ON or OFF (thiết bị số 4)
>TIVI: ON or OFF (thiết bị số 5)
>AIR: ON or OFF (thiết bị số 6)
“ON”: thiết bị đã hoạt động.
“OFF”: thiết bị đã ngưng hoạt động.
5.2 Giải thích:
Khi người quản lý sử dụng điện thoại di động soạn tin nhắn SMS (đtdđ được xem như thiết bị điều khiển) với cú pháp như trên gởi đến số sim bất kỳ đã được lắp đặt sẵn trên module Sim300C (như sim mobile, sim vina,…) thì ăngten có nhiệm vụ bắt sóng và thu dữ liệu (nội dung tin nhắn) chuyển xuống Sim300C. Sim300C sẽ đọc dữ liệu đó. Cấu trúc dữ liệu (nội dung tin nhắn) đó được viết bằng câu lệnh AT.
Khi dữ liệu (nội dung tin nhắn) được gởi từ người quản lý cho đến lúc module Sim300C nhận được thì câu lệnh AT sẽ có cú pháp như sau:
“+CMT: ,,,,,,”
: địa chỉ khởi đầu.
: thời gian. “YY/MM/DD,hh:mm:ss + hoặc - zz”. “zz”: có nghĩa là chênh lệch múi giờ.
: byte đầu tiên của SMS.
: nhận dạng byte của SMS.
: mã của dữ liệu.
: địa chỉ gởi tin nhắn đến. (số điện thọai của người quản lý)
: nơi mà dữ liệu được gởi đến. (viết bằng mã GSM)
‘+CMT’ là ngôn ngữ (câu lệnh) mặc định của SMS .
Sim300C MAX3238
Truyền
DBGTX T1IN
CTS T2IN
Nhận
DBGRX R1OUT
Sim VDD
Sim RST R1IN
Sim CLK T1OUT
Sim I/O T2OUT
Sim Prese
Truyền RS-232
RD
CTS
SimCard TD
Mass
Sim VDD
SimRST S Sim CLK MAX232
Sim I/O T1OUT
Sim Prese R1IN
R1OUT
T1IN
VXL
TXD
RXD
P2.3
Hình 2.38: Sơ đồ truyền và nhận tín hiệu.
Sau khi module Sim300C đọc dữ liệu (nội dung tin nhắn) xong, sẽ đưa dữ liệu đến ngõ vào (chân 13-R1in) của MAX232 thông qua (chân 2-RXD) cổng giao tiếp RS-232. Ngòai ra, MAX232 kết hợp với opto 4N35 còn có nhiệm vụ ngăn chặn các tín hiệu khác đến khi tín hiệu cũ còn đang thực hiện. Dữ liệu tại ngõ ra (chân 12-R1out) của MAX232 được đưa đến (chân10-RXD) vi xử lý 89C51.
Khi 89C51 nhận dữ liệu thì nó sẽ xử lý câu lệnh AT bằng cách so sánh dữ liệu nhận được với chương trình đã viết sẵn và 89C51 sẽ chuyển dữ liệu sang bộ nhớ tạm thời (DS12C887) để lưu trữ.
Ví dụ: Khi người quản lý gởi CONTROL/123456/XXXXXX. Module Sim300C sẽ nhận dữ liệu và đưa đến vi xử lý 89C51 là : ‘+CMT:“+84XXXXXXXXX”,,”XXXXXXXXXXXX”’
Và ‘CONTROL/123456/XXXXXX’. Khi đó 89C51 sẽ kiểm tra dữ liệu nhận được từ module đưa đến có đúng với câu lệnh đã được đặt trong chương trình là ‘+CMT:“+84XXXXXXXXX”,,”XXXXXXXXXXXX”’ và ‘CONTROL/123456/XXXXXX’ không.
“+84XXXXXXXXX”: là số điện thoại của người quản lý gởi đến.
“XXXXXXXXXXXX”: là một chuỗi mã nhị phân của GSM (Global Standard for Mobile Equipment Identity). Chuỗi mã nhị phân này có thể thay đổi từ GSM và không có ảnh hưởng đến việc thực thi chương trình.
CONTROL/123456/XXXXXX: là câu lệnh dùng để điều khiển cho các thiết bị. Ta có thể thay đổi câu lệnh CONTROL/123456/XXXXXX tùy ý bằng cách đặt tên cho câu lệnh trong chương trình. Vì trong chương trình ta đã đặt tên là CONTROL/123456/XXXXXX nên khi người quản lý điều khiển thiết bị phải sọan đúng như trên.
Nếu vi xử lý 89C51 nhận đúng cấu trúc dữ liệu là: ‘+CMT:“+84XXXXXXXXX”,,”XXXXXXXXXXXX”’ và ‘CONTROL/123456/XXXXXX’ thì sẽ thực thi lệnh theo đúng chương trình đã được viết. Còn nếu 89C51 nhận không đúng câu lệnh như trên thì sẽ không thực thi lệnh.
Đoạn chương trình minh họa:
TABLE_SIM_CM2 :
DB '+CMT: "+84XXXXXXXXX",,"XXXXXXXXXXX"'
DB 'CONTROL/123456/XXXXXX'
CHECK_CM2 :
MOV DPTR,#TABLE_SIM_CM2
MOV DPTR_SIM,#SIM_BUFFER
LCALL PROCESS_COMMAND
LCALL LOAD_TEL_NUMBER
LCALL CONTROL_DEVICE
Xử lý câu lệnh xong, nó sẽ xuất ra lệnh để điều khiển (bằng port 0 và port 2) đóng ngắt relay cho thiết bị hoạt động hoặc ngưng hoạt động thông qua opto 4N35. Khi thiết bị hoạt động hoặc ngưng hoạt động thì sẽ có bộ phận cảm biến dòng (sử dụng cuộn dây kết hợp IC HA17358) đưa về vi xử lý. Nếu thiết bị hoạt động thì có dòng cảm biến đưa về vi xử lý, còn ngược lại thì không có dòng đưa về vi xử lý. Tiếp theo, 89C51 sẽ gởi dữ liệu (đã được viết trong chương trình bằng câu lệnh AT) đến module Sim300C và Sim300C sẽ truyền dữ liệu đi (bằng ăngten) đến điện thoại di động cho người quản lý biết.
Khi dữ liệu (nội dung tin nhắn) được gởi từ module đến đtdđ của người quản lý thì câu lệnh AT sẽ có cú pháp như sau:
“AT+CGMS= [,]”
“ ”.
: địa chỉ gởi tin nhắn đến. (số điện thoại được lắp trên module)
: dữ liệu (nội dung tin nhắn).
: nơi mà dữ liệu được gởi đến. (viết bằng mã GSM)
: bắt đầu truyền dữ liệu đi.
‘AT+CGMS=’ cũng là ngôn ngữ (câu lệnh) mặc định của SMS, được sử dụng để gởi dữ liệu (nội dung tin nhắn) đi.
Ví dụ: để điều khiển cho thiết bị 1 hoạt động (LIGHT WALL), thiết bị 5(TIVI)ngưng họat động và các thiết bị còn lại vẫn giữ nguyên trạng thái. Soạn tin nhắn như sau:
“CONTROL/123456/1XXX0X”
Sau khi thực thi việc điều khiển xong, thì người quản lý sẽ nhận được nội dung tin nhắn phản hồi là:
>LIGHT WALL: ON
>LIGHT MIRROR: ON or OFF
>LIGHT PICTURE: ON or OFF
>LIGHT ENTRANCE: ON or OFF
>TIVI: OFF
>AIR: ON or OFF
Đoạn chương trình minh họa:
TABLE_CMGS :
DB 'AT+CMGS='
CHECK_CM2 :
MOV DPTR,#TABLE_CMGS
LCALL TRANS_MESSAGE
LCALL TRANS_TEL_NUMBER
LCALL TRANS_ENTER
LCALL TRANS_STATUS_ALL_DEVICE
LCALL TRANS_CTRL_Z
EXIT_CHECK_CM2 :
RET
6. Lưu đồ giải thuật
Chương trình chính
Bắt đầu
Đọc dữ liệu từ Sim300C
N
Có dữ liệu
RI=1
Y
Lưu dữ liệu vào RAM
DS12C887
Y
Dữ liệu bằng Chương trình kiểm tra Exit
cú pháp 1 thiết bị
Y
Dữ liệu bằng Chương trình điều khiển Exit
cú pháp 2 thiết bị
Y
Dữ liệu bằng Gửi lời chào SMS qua Exit
cú pháp 3 module Sim300C
N
Dữ liệu khác Exit
Chương trình kiểm tra
Bắt đầu trạng thái thiết bị Exit
Cho phép đóng thiết bị Gởi thông báo cho Sim300C
Kiểm tra t/h hồi tiếp Thbị đang mở và vẫn còn tốt
dòng từ port
Y
Dòng = 0 Y Cho phép tắt thbị Dòng = 0
N N
Thiết bị đang đóng Thiết bị đã bị hư
và vẫn còn tốt
Gửi thông báo cho Gửi thông báo lỗi thbị
Sim300C cho Sim300C
Exit Exit
7. Chương trình vi xử lý
ORG 0000H
LJMP PROGRAM
ORG 0023H
LJMP SERIAL_ISR
;***-----------------------***
PROGRAM :
VAR :
WALL_RELAY BIT P0.0 ;-------------------------------------------------------Bit điều khiển Relay
MIRROR_RELAY BIT P0.2
PICTURE_RELAY BIT P2.7
ENTRANCE_RELAY BIT P2.5
TIVI_RELAY BIT P0.4
AIR_RELAY BIT P0.6
AMP_WALL BIT P0.1 ;-------------------------------------------------------Bit kiểm tra AMP của tải
AMP_MIRROR BIT P0.3
AMP_PICTURE BIT P2.6
AMP_ENTRANCE BIT P2.4
AMP_TIVI BIT P0.5
AMP_AIR BIT P0.7
AUTORESET BIT P3.3 ;-------------------------------------------------------Bit auto reset hệ thống
CE_DS BIT P3.4 ;--------------------------------------------------Cho phép chọn chip DS12887
DE_DS BIT P3.7 ;--------------------------------------------------Cho phép bus dữ liệu DS12887
AE_DS BIT P3.5 ;--------------------------------------------------Cho phép bus địa chỉ DS12887
RW_DS BIT P3.6 ;--------------------------------------------------Read/Write DS12887
OFFSET_BIT EQU 20H ;----------------------------------Bit 00H - 07H OFFSET dữ liệu từ DS12887
OFFSET_BIT0 BIT 00H
OFFSET_BIT1 BIT 01H
OFFSET_BIT2 BIT 02H
OFFSET_BIT3 BIT 03H
OFFSET_BIT4 BIT 04H
OFFSET_BIT5 BIT 05H
OFFSET_BIT6 BIT 06H
OFFSET_BIT7 BIT 07H
STATUS_LED EQU 21H
;---------------Led hiển thị trạng thái thiết bị
WALL_LED BIT 08H
MIRROR_LED BIT 09H
PICTURE_LED BIT 0AH
ENTRANCE_LED BIT 0BH
TIVI_LED BIT 0CH
AIR_LED BIT 0DH
MEM_RELAY EQU 22H ;---------------Bit 10H - 17H lưu trạng thái của 06 Relay điều khiển thiết bị
MEM_RELAY1 BIT 10H
MEM_RELAY2 BIT 11H
MEM_RELAY3 BIT 12H
MEM_RELAY4 BIT 13H
MEM_RELAY5 BIT 14H
MEM_RELAY6 BIT 15H
COUNTER EQU 30H ;----------------------------------------Đếm thời gian nhận dữ liệu
STATUS_SYS EQU 37H ;---------------------Thông báo tình trạng hệ thống >G(GOOD), F(FALSE)
STATUS_WALL EQU 38H ;---------------------Trạng thái đến WALL >N(ON), O(OFF), F(FALSE)
STATUS_MIRROR EQU 39H ;---------------------Trạng thái đến MIRROR >N(ON), O(OFF), F(FALSE)
STATUS_PICTURE EQU 3AH ;---------------------Trạng thái đến PICTURE >N(ON), O(OFF), F(FALSE)
STATUS_ENTRANCE EQU 3BH ;-----------------Trạng thái đến ENTRANCE >N(ON), O(OFF), F(FALSE)
STATUS_TIVI EQU 3CH ;---------------------Trạng thái đến TIVI >N(ON), O(OFF), F(FALSE)
STATUS_AIR EQU 3DH ;---------------------Trạng thái đến AIR >N(ON), O(OFF), F(FALSE)
ADDRESS_DS EQU 3EH ;---------------------Lưu địa chỉ giao tiếp với DS12887
DATA_DS EQU 3FH ;---------------------Lưu dữ liệu giao tiếp với DS12887
DPTR_SIM EQU 40H ;---------------Con trỏ truy xuất dữ liệu SIM300C
DPTR_RELAY EQU 11H ;---------------Thanh ghi BACKUP trạng thái các RELAY trong DS12887
DPTR_RA EQU 0AH
;---------------------------------Địa chỉ truy xuất thanh ghi A trong DS12887
DPTR_RB EQU 0BH ;---------------------------------Địa chỉ truy xuất thanh ghi B trong DS12887
TEL_BUFFER EQU 12H ;-----------------------------Lưu số điện thoại nhắn tin hoặc gởi đến SIM300C (12H - 22H = 16 Byte = 16 Number)
E_TEL_BUFFER EQU 22H ;-----------------------------Kết thúc vùng RAM lưu số điện thoại
SIM_BUFFER EQU 22H ;-----------------------------Vùng RAM lưu dữ liệu nhận từ SIM300C(22H - 7FH = 94 Byte)
E_SIM_BUFFER EQU 7FH ;-----------------------------Kết thúc vùng RAM lưu dữ liệu nhận từ SIM300C
;R0, R1 :Thanh ghi đa năng
;R7 :Thanh ghi Relay
;***-----------------------***
START_PRO :
MOV TMOD,#21H ;------------------------------------Timer 1 autoreload, Timer 0 counter 16 bit
MOV SCON,#01010000B
MOV IE,#10010000B ;------------------------------------Cho phép ngắt nối tiếp
MOV TL1,#00H
MOV TH1,#-3 ; 9600 Baud
CLR EA
SETB TR1 ;Mở Timer 1
SETB ES ;Cho phép ngắt nối tiếp họat động
SETB WALL_RELAY
SETB MIRROR_RELAY
SETB PICTURE_RELAY
SETB ENTRANCE_RELAY
SETB TIVI_RELAY
SETB AIR_RELAY
MOV MEM_RELAY,#00000000B
MOV STATUS_SYS,#'G' ;------------------------------ ---'G' = GOOD, 'F' = FLASE
LCALL ERASE_SIM_BUFFER ;----------------------------------Xóa bỏ nhớ BUFFER nhận được từ SIM300C
MOV ADDRESS_DS,#DPTR_RA ;----------------------------------Khởi động tham số cho DS12887
MOV DATA_DS,#00101111B
LCALL WRITE_DS12887
MOV ADDRESS_DS,#DPTR_RB
MOV DATA_DS,#00001010B
LCALL WRITE_DS12887
LCALL RELOAD_STATUS_RELAY ;----------------------------------Load lại giá trị trước đó của các Relay
CLR RI
CLR TI
SETB EA
;***-----------------------***
MAIN :
;///Bắt tay và cho nhận dữ liệu của SIM300C
MOV DPTR_SIM,#SIM_BUFFER ;---------------------------Định vùng RAM lưu dữ liệu từ SIM300C gởi qua
MOV COUNTER,#10 ;--------------Đợi 100mS để nhận dữ liệu từ SIM300C (cho COUNTER=10 mỗi khi có ngắt dữ liệu SERIAL từ SIM300C)
WAIT_DATA_SIM300 :
LCALL DELAY10mS
DJNZ COUNTER,WAIT_DATA_SIM300
CPL AUTORESET
CLR EA ;----------------------Cắm ngắt để dự phòng dữ liệu do các th bị khác gởi về
LCALL CHECK_SIM_BUFFER ;----------------------Xử lý dữ liệu thu được từ SIM300C
LCALL CHECK_STATUS_LED ;----------------------Kiểm tra trạng thái của các thiết bị
LCALL BACKUP_STATUS_RELAY ;----------------------BACKUP trạng thái hiện tại của các Relay
CLR RI ;---------Xóa cờ ngắt nhận dữ liệu tồn tại trong SERIAL BUFFER ,nếu có
SETB EA
LJMP MAIN
;***-----------------------***
CHECK_SIM_BUFFER :
LCALL CHECK_HELLO
LCALL CHECK_CM1
LCALL CHECK_CM2
LCALL ERASE_SIM_BUFFER
RET
;***-----------------------***
CHECK_HELLO :
MOV DPTR,#TABLE_HELLO_SIM
MOV DPTR_SIM,#SIM_BUFFER
LCALL PROCESS_COMMAND
LCALL LOAD_TEL_NUMBER
MOV DPTR,#TABLE_CMGS
LCALL TRANS_MESSAGE
LCALL TRANS_TEL_NUMBER
LCALL TRANS_ENTER
MOV DPTR,#TABLE_HELLO
LCALL TRANS_MESSAGE
LCALL TRANS_CTRL_Z
EXIT_CHECK_HELLO :
RET
;***-----------------------***
CHECK_CM1 :
MOV DPTR,#TABLE_SIM_CM1
MOV DPTR_SIM,#SIM_BUFFER
LCALL PROCESS_COMMAND
LCALL LOAD_TEL_NUMBER
LCALL TEST_ALL_DEVICE
MOV DPTR,#TABLE_CMGS
LCALL TRANS_MESSAGE
LCALL TRANS_TEL_NUMBER
LCALL TRANS_ENTER
LCALL TRANS_STATUS_ALL_DEVICE
LCALL TRANS_CTRL_Z
EXIT_CHECK_CM1 :
RET
;***-----------------------***
CHECK_CM2 :
MOV DPTR,#TABLE_SIM_CM2
MOV DPTR_SIM,#SIM_BUFFER
LCALL PROCESS_COMMAND
LCALL LOAD_TEL_NUMBER
LCALL CONTROL_DEVICE
MOV DPTR,#TABLE_CMGS
LCALL TRANS_MESSAGE
LCALL TRANS_TEL_NUMBER
LCALL TRANS_ENTER
LCALL TRANS_STATUS_ALL_DEVICE
LCALL TRANS_CTRL_Z
EXIT_CHECK_CM2 :
RET
;***-----------------------***
PROCESS_COMMAND :
MOV STATUS_SYS,#'G' ;--------------------------Bắt đầu xử lý lệnh thì cho STATUS_SYS = GOOD
LOOP_PROCESS_COMMAND :
MOV ADDRESS_DS,DPTR_SIM
LCALL READ_DS12887
MOV A,DATA_DS
MOV A,#00H
MOVC A,@A+DPTR
CJNE A,#'X',COMPARE_COMMAND
LJMP CONT_PROCESS_COMMAND
COMPARE_COMMAND :
CJNE A,DATA_DS,ERROR_COMMAND
LJMP CONT_PROCESS_COMMAND
ERROR_COMMAND :
MOV STATUS_SYS,#'F’ ;Dữ liệu False
LJMP EXIT_PROCESS_COMMAND
CONT_PROCESS_COMMAND :
INC DPTR_SIM
INC DPTR
MOV A,#00H
MOVC A,@A+DPTR
CJNE A,#00H,LOOP_PROCESS_COMMAND
MOV STATUS_SYS,#'G' ;Dữ liệu Good
EXIT_PROCESS_COMMAND :
RET
;***-----------------------***
LOAD_TEL_NUMBER :
MOV A,STATUS_SYS
CJNE A,#'G',ERROR_TEL_NUMBER
MOV R0,#TEL_BUFFER
MOV A,#SIM_BUFFER
ADD A,#08
MOV DPTR_SIM,A
MOV ADDRESS_DS,DPTR_SIM
LCALL READ_DS12887
MOV A,DATA_DS
CJNE A,#'"',ERROR_TEL_NUMBER
MOV ADDRESS_DS,R0
MOV DATA_DS,A
LCALL WRITE_DS12887
INC R0
INC DPTR_SIM
LOOP_LOAD_TEL_NUMBER :
MOV ADDRESS_DS,DPTR_SIM
LCALL READ_DS12887
MOV A,DATA_DS
MOV ADDRESS_DS,R0
MOV DATA_DS,A
LCALL WRITE_DS12887
INC R0
INC DPTR_SIM
MOV A,DATA_DS
CJNE A,#'"',CHECK_LENGTH_TEL_NUMBER ;-------------------Chưa gặp dấu " thì kiểm tra độ dài của TEL NUMBER
MOV ADDRESS_DS,R0
MOV DATA_DS,#00H ;-------------------Ghi mã kết thúc dữ liệu cho số TEL NUMBER
LCALL WRITE_DS12887
MOV STATUS_SYS,#'G' ;Dữ liệu Good
LJMP EXIT_LOAD_TEL_NUMBER
CHECK_LENGTH_TEL_NUMBER : ;Kiểm tra độ dài của TEL NUMBER (yêu cầu <16 ký tự = 22H - 12H)
CJNE R0,#E_TEL_BUFFER,LOOP_LOAD_TEL_NUMBER
ERROR_TEL_NUMBER :
MOV STATUS_SYS,#'F' ;Dữ liệu False
EXIT_LOAD_TEL_NUMBER :
RET
;***-----------------------***
TRANS_TEL_NUMBER :
MOV A,STATUS_SYS
CJNE A,#'G',ERROR_TRANS_TEL_NUMBER
MOV DPTR_SIM,#TEL_BUFFER
MOV R0,#TEL_BUFFER
LOOP_TRANS_TEL_NUMBER :
MOV ADDRESS_DS,R0
LCALL READ_DS12887
MOV A,DATA_DS
CJNE A,#00H,CONT_TRANS_TEL_NUMBER
MOV STATUS_SYS,#'G' ;Dữ liệu Good
LJMP EXIT_TRANS_TEL_NUMBER
CONT_TRANS_TEL_NUMBER :
CLR TI
MOV SBUF,A
JNB TI,$
CLR TI
INC R0
LCALL DELAY50mS
CJNE R0,#E_TEL_BUFFER,LOOP_TRANS_TEL_NUMBER
ERROR_TRANS_TEL_NUMBER :
MOV STATUS_SYS,#'F' ;Dữ liệu False
EXIT_TRANS_TEL_NUMBER :
RET
;***-----------------------***
TRANS_MESSAGE :
MOV A,STATUS_SYS
CJNE A,#'G',EXIT_TRANS_MESSAGE
LOOP_TRANS_MESSAGE :
MOV A,#00H
MOVC A,@A+DPTR
CJNE A,#00H,CONT_TRANS_MESSAGE
MOV STATUS_SYS,#'G' ;Dữ liệu Good
LJMP EXIT_TRANS_MESSAGE
CONT_TRANS_MESSAGE :
CLR TI
MOV SBUF,A
JNB TI,$
CLR TI
INC DPTR
LCALL DELAY50mS
LJMP LOOP_TRANS_MESSAGE
EXIT_TRANS_MESSAGE :
RET
;***-----------------------***
TRANS_ENTER :
MOV A,STATUS_SYS
CJNE A,#'G',EXIT_TRANS_ENTER
CLR TI
MOV SBUF,#13 ;Truyền mã Enter
JNB TI,$
CLR TI
LCALL DELAY50mS
EXIT_TRANS_ENTER :
RET
;***-----------------------***
TRANS_CTRL_Z :
MOV A,STATUS_SYS
CJNE A,#'G',EXIT_TRANS_CTRL_Z
CLR TI
MOV SBUF,#26 ;Truyền Byte CTRL_Z
JNB TI,$
CLR TI
LCALL DELAY50mS
EXIT_TRANS_CTRL_Z :
RET
;***-----------------------***
TRANS_STATUS_ALL_DEVICE :
MOV A,STATUS_SYS
CJNE A,#'G',EXIT_TRANS_STATUS_ALL_DEVICE
LCALL TRANS_STATUS_WALL
LCALL TRANS_STATUS_MIRROR
LCALL TRANS_STATUS_PICTURE
LCALL TRANS_STATUS_ENTRANCE
LCALL TRANS_STATUS_TIVI
LCALL TRANS_STATUS_AIR
EXIT_TRANS_STATUS_ALL_DEVICE :
RET
;***-----------------------***
TRANS_STATUS_WALL :
MOV A,STATUS_SYS
CJNE A,#'G',EXIT_TRANS_STATUS_WALL
MOV DPTR,#TABLE_LIGHT_WALL
LCALL TRANS_MESSAGE
MOV A,STATUS_WALL
CHECK_ON_WALL :
CJNE A,#'N',CHECK_OFF_WALL
MOV DPTR,#TABLE_STATUS_ON
LCALL TRANS_MESSAGE
LJMP EXIT_TRANS_STATUS_WALL
CHECK_OFF_WALL :
CJNE A,#'O',CHECK_FALSE_WALL
MOV DPTR,#TABLE_STATUS_OFF
LCALL TRANS_MESSAGE
LJMP EXIT_TRANS_STATUS_WALL
CHECK_FALSE_WALL :
CJNE A,#'F',EXIT_TRANS_STATUS_WALL
MOV DPTR,#TABLE_STATUS_FALSE
LCALL TRANS_MESSAGE
EXIT_TRANS_STATUS_WALL :
LCALL TRANS_ENTER
RET
;***-----------------------***
TRANS_STATUS_MIRROR :
MOV A,STATUS_SYS
CJNE A,#'G',EXIT_TRANS_STATUS_MIRROR
MOV DPTR,#TABLE_LIGHT_MIRROR
LCALL TRANS_MESSAGE
MOV A,STATUS_MIRROR
CHECK_ON_MIRROR :
CJNE A,#'N',CHECK_OFF_MIRROR
MOV DPTR,#TABLE_STATUS_ON
LCALL TRANS_MESSAGE
LJMP EXIT_TRANS_STATUS_MIRROR
CHECK_OFF_MIRROR :
CJNE A,#'O',CHECK_FALSE_MIRROR
MOV DPTR,#TABLE_STATUS_OFF
LCALL TRANS_MESSAGE
LJMP EXIT_TRANS_STATUS_MIRROR
CHECK_FALSE_MIRROR :
CJNE A,#'F',EXIT_TRANS_STATUS_MIRROR
MOV DPTR,#TABLE_STATUS_FALSE
LCALL TRANS_MESSAGE
EXIT_TRANS_STATUS_MIRROR :
LCALL TRANS_ENTER
RET
;***-----------------------***
TRANS_STATUS_PICTURE :
MOV A,STATUS_SYS
CJNE A,#'G',EXIT_TRANS_STATUS_PICTURE
MOV DPTR,#TABLE_LIGHT_PICTURE
LCALL TRANS_MESSAGE
MOV A,STATUS_PICTURE
CHECK_ON_PICTURE :
CJNE A,#'N',CHECK_OFF_PICTURE
MOV DPTR,#TABLE_STATUS_ON
LCALL TRANS_MESSAGE
LJMP EXIT_TRANS_STATUS_PICTURE
CHECK_OFF_PICTURE :
CJNE A,#'O',CHECK_FALSE_PICTURE
MOV DPTR,#TABLE_STATUS_OFF
LCALL TRANS_MESSAGE
LJMP EXIT_TRANS_STATUS_PICTURE
CHECK_FALSE_PICTURE :
CJNE A,#'F',EXIT_TRANS_STATUS_PICTURE
MOV DPTR,#TABLE_STATUS_FALSE
LCALL TRANS_MESSAGE
EXIT_TRANS_STATUS_PICTURE :
LCALL TRANS_ENTER
RET
;***-----------------------***
TRANS_STATUS_ENTRANCE :
MOV A,STATUS_SYS
CJNE A,#'G',EXIT_TRANS_STATUS_ENTRANCE
MOV DPTR,#TABLE_LIGHT_ENTRANCE
LCALL TRANS_MESSAGE
MOV A,STATUS_ENTRANCE
CHECK_ON_ENTRANCE :
CJNE A,#'N',CHECK_OFF_ENTRANCE
MOV DPTR,#TABLE_STATUS_ON
LCALL TRANS_MESSAGE
LJMP EXIT_TRANS_STATUS_ENTRANCE
CHECK_OFF_ENTRANCE :
CJNE A,#'O',CHECK_FALSE_ENTRANCE
MOV DPTR,#TABLE_STATUS_OFF
LCALL TRANS_MESSAGE
LJMP EXIT_TRANS_STATUS_ENTRANCE
CHECK_FALSE_ENTRANCE :
CJNE A,#'F',EXIT_TRANS_STATUS_ENTRANCE
MOV DPTR,#TABLE_STATUS_FALSE
LCALL TRANS_MESSAGE
EXIT_TRANS_STATUS_ENTRANCE :
LCALL TRANS_ENTER
RET
;***-----------------------***
TRANS_STATUS_TIVI :
MOV A,STATUS_SYS
CJNE A,#'G',EXIT_TRANS_STATUS_TIVI
MOV DPTR,#TABLE_TIVI
LCALL TRANS_MESSAGE
MOV A,STATUS_TIVI
CHECK_ON_TIVI :
CJNE A,#'N',CHECK_OFF_TIVI
MOV DPTR,#TABLE_STATUS_ON
LCALL TRANS_MESSAGE
LJMP EXIT_TRANS_STATUS_TIVI
CHECK_OFF_TIVI :
CJNE A,#'O',CHECK_FALSE_TIVI
MOV DPTR,#TABLE_STATUS_OFF
LCALL TRANS_MESSAGE
LJMP EXIT_TRANS_STATUS_TIVI
CHECK_FALSE_TIVI :
CJNE A,#'F',EXIT_TRANS_STATUS_TIVI
MOV DPTR,#TABLE_STATUS_FALSE
LCALL TRANS_MESSAGE
EXIT_TRANS_STATUS_TIVI :
LCALL TRANS_ENTER
RET
;***-----------------------***
TRANS_STATUS_AIR :
MOV A,STATUS_SYS
CJNE A,#'G',EXIT_TRANS_STATUS_AIR
MOV DPTR,#TABLE_AIR
LCALL TRANS_MESSAGE
MOV A,STATUS_AIR
CHECK_ON_AIR :
CJNE A,#'N',CHECK_OFF_AIR
MOV DPTR,#TABLE_STATUS_ON
LCALL TRANS_MESSAGE
LJMP EXIT_TRANS_STATUS_AIR
CHECK_OFF_AIR :
CJNE A,#'O',CHECK_FALSE_AIR
MOV DPTR,#TABLE_STATUS_OFF
LCALL TRANS_MESSAGE
LJMP EXIT_TRANS_STATUS_AIR
CHECK_FALSE_AIR :
CJNE A,#'F',EXIT_TRANS_STATUS_AIR
MOV DPTR,#TABLE_STATUS_FALSE
LCALL TRANS_MESSAGE
EXIT_TRANS_STATUS_AIR :
LCALL TRANS_ENTER
RET
;***-----------------------***
TEST_ALL_DEVICE :
MOV A,STATUS_SYS
CJNE A,#'G',ERROR_TEST_ALL_DEVICE
LJMP TEST_WALL
ERROR_TEST_ALL_DEVICE :
MOV STATUS_SYS,#'F' ;Dữ liệu False
LJMP EXIT_TEST_DEVICE
TEST_WALL :
MOV C,WALL_RELAY ;-----Lưu lại trạng thái của thiết bị (chú ý bit C có thể gây ra lỗi hệ thống)
JNB WALL_LED,CONT_TEST_WALL
CPL WALL_RELAY ;-----Nếu thiết bị đang ổn thì đưa trở về OFF
LCALL DELAY1S ;-----Ổn định trạng thái thiết bị
LCALL CHECK_WALL_LED ;-----Kiểm tra AMP của thiết bị
CONT_TEST_WALL :
JB WALL_LED,ERROR_WALL
CPL WALL_RELAY ;-----Cho thiết bị về trạng thái ON
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_WALL_LED ;---------------Kiểm tra AMP của thiết bị
JB WALL_LED,GOOD_WALL
ERROR_WALL :
MOV WALL_RELAY,C ;---------------Phục hồi lại trạng thái ban đầu của thiết bị trước lúc kiểm tra
MOV STATUS_WALL,#'F' ;Thbị False
LJMP EXIT_TEST_WALL
GOOD_WALL :
MOV WALL_RELAY,C ;---------------Phục hồi lại trạng thái ban đầu của thiết bị trước lúc kiểm tra
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_WALL_LED ;---------------Kiểm tra AMP của thiết bị
EXIT_TEST_WALL :
TEST_MIRROR :
MOV C,MIRROR_RELAY ;---------------Lưu lại trạng thái hiện tại của thiết bị
JNB MIRROR_LED,CONT_TEST_MIRROR
CPL MIRROR_RELAY ;---------------Nếu thiết bị đang ON thì đưa trở về OFF
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_MIRROR_LED ;---------------Kiểm tra AMP của thiết bị
CONT_TEST_MIRROR :
JB MIRROR_LED,ERROR_MIRROR
CPL MIRROR_RELAY ;---------------Cho thiết bị về trạng thái ON
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_MIRROR_LED ;---------------Kiểm tra AMP của thiết bị
JB MIRROR_LED,GOOD_MIRROR
ERROR_MIRROR :
MOV MIRROR_RELAY,C ;---------------Phục hồi lại trạng thái ban đầu của thiết bị trước lúc kiểm tra
MOV STATUS_MIRROR,#'F' ;---------------Thiết bị False
LJMP EXIT_TEST_MIRROR
GOOD_MIRROR :
MOV MIRROR_RELAY,C ;---------------Phục hồi lại trạng thái ban đầu của thiết bị trước lúc kiểm tra
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_MIRROR_LED ;---------------Kiểm tra AMP của thiết bị
EXIT_TEST_MIRROR :
TEST_PICTURE :
MOV C,PICTURE_RELAY ;---------------Lưu lại trạng thái hiện tại của thiết bị
JNB PICTURE_LED,CONT_TEST_PICTURE
CPL PICTURE_RELAY ;---------------Nếu thiết bị đang ON thì đưa trở về OFF
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_PICTURE_LED ;---------------Kiểm tra AMP của thiết bị
CONT_TEST_PICTURE :
JB PICTURE_LED,ERROR_PICTURE
CPL PICTURE_RELAY ;-----Cho thiết bị về trạng thái ON
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_PICTURE_LED ;---------------Kiểm tra AMP của thiết bị
JB PICTURE_LED,GOOD_PICTURE
ERROR_PICTURE :
MOV PICTURE_RELAY,C ;---------------Phục hồi lại trạng thái ban đầu của thiết bị trước lúc kiểm tra
MOV STATUS_PICTURE,#'F' ;Thiết bị False
LJMP EXIT_TEST_PICTURE
GOOD_PICTURE :
MOV PICTURE_RELAY,C ;---------------Phục hồi lại trạng thái ban đầu của thiết bị trước lúc kiểm tra
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_PICTURE_LED ;---------------Kiểm tra AMP của thiết bị
EXIT_TEST_PICTURE :
TEST_ENTRANCE :
MOV C,ENTRANCE_RELAY ;---------------Lưu lại trạng thái hiện tại của thiết bị
JNB ENTRANCE_LED,CONT_TEST_ENTRANCE
CPL ENTRANCE_RELAY ;---------------Nếu thiết bị đang ON thì đưa trở về OFF
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_ENTRANCE_LED ;---------------Kiểm tra AMP của thiết bị
CONT_TEST_ENTRANCE :
JB ENTRANCE_LED,ERROR_ENTRANCE
CPL ENTRANCE_RELAY ;-----Cho thiết bị về trạng thái ON
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_ENTRANCE_LED ;---------------Kiểm tra AMP của thiết bị
JB ENTRANCE_LED,GOOD_ENTRANCE
ERROR_ENTRANCE :
MOV ENTRANCE_RELAY,C ;---------------Phục hồi lại trạng thái ban đầu của thiết bị trước lúc kiểm tra
MOV STATUS_ENTRANCE,#'F' ;---------------Thiết bị False
LJMP EXIT_TEST_ENTRANCE
GOOD_ENTRANCE :
MOV ENTRANCE_RELAY,C ;---------------Phục hồi lại trạng thái ban đầu của thiết bị trước lúc kiểm tra
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_ENTRANCE_LED ;---------------Kiểm tra AMP của thiết bị
EXIT_TEST_ENTRANCE :
TEST_TIVI :
MOV C,TIVI_RELAY ;---------------Lưu lại trạng thái hiện tại của thiết bị
JNB TIVI_LED,CONT_TEST_TIVI
CPL TIVI_RELAY ;---------------Nếu thiết bị đang ON thì đưa trở về OFF
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_TIVI_LED ;---------------Kiểm tra AMP của thiết bị
CONT_TEST_TIVI :
JB TIVI_LED,ERROR_TIVI
CPL TIVI_RELAY ;---------------Cho thiết bị về trạng thái ON
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_TIVI_LED ;---------------Kiểm tra AMP của thiết bị
JB TIVI_LED,GOOD_TIVI
ERROR_TIVI :
MOV TIVI_RELAY,C ;---------------Phục hồi lại trạng thái ban đầu của thiết bị trước lúc kiểm tra
MOV STATUS_TIVI,#'F' ;Thbị False
LJMP EXIT_TEST_TIVI
GOOD_TIVI :
MOV TIVI_RELAY,C ;---------------Phục hồi lại trạng thái ban đầu của thiết bị trước lúc kiểm tra
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_TIVI_LED ;---------------Kiểm tra AMP của thiết bị
EXIT_TEST_TIVI :
TEST_AIR :
MOV C,AIR_RELAY ;---------------Lưu lại trạng thái hiện tại của thiết bị
JNB AIR_LED,CONT_TEST_AIR
CPL AIR_RELAY ;---------------Nếu thiết bị đang ON thì đưa trở về OFF
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_AIR_LED ;---------------Kiểm tra AMP của thiết bị
CONT_TEST_AIR :
JB AIR_LED,ERROR_AIR
CPL AIR_RELAY ;---------------Cho thiết bị về trạng thái ON
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_AIR_LED ;---------------Kiểm tra AMP của thiết bị
JB AIR_LED,GOOD_AIR
ERROR_AIR :
MOV AIR_RELAY,C ;---------------Phục hồi lại trạng thái ban đầu của thiết bị trước lúc kiểm tra
MOV STATUS_AIR,#'F' ;Thiết bị False
LJMP EXIT_TEST_AIR
GOOD_AIR :
MOV AIR_RELAY,C ;---------------Phục hồi lại trạng thái ban đầu của thiết bị trước lúc kiểm tra
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_AIR_LED ;---------------Kiểm tra AMP của thiết bị
EXIT_TEST_AIR :
EXIT_TEST_DEVICE :
RET
;***-----------------------***
CONTROL_DEVICE :
MOV A,STATUS_SYS
CJNE A,#'G',ERROR_CONTROL_DEVICE
MOV A,#SIM_BUFFER
ADD A,#63
MOV DPTR_SIM,A
LJMP CONTROL_WALL
ERROR_CONTROL_DEVICE :
MOV STATUS_SYS,#'F' ;Dữ liệu False
LJMP EXIT_CONTROL_DEVICE
CONTROL_WALL :
MOV A,STATUS_WALL
CJNE A,#'F',CONTROL_ON_WALL
LJMP EXIT_CONTROL_WALL
CONTROL_ON_WALL :
MOV ADDRESS_DS,DPTR_SIM
LCALL READ_DS12887
MOV A,DATA_DS
CJNE A,#'1',CONTROL_OFF_WALL
JB WALL_LED,EXIT_CONTROL_WALL
CPL WALL_RELAY
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_WALL_LED ;---------------Kiểm tra AMP của thiết bị
JB WALL_LED,EXIT_CONTROL_WALL
MOV STATUS_WALL,#'F' ;Thbị False
LJMP EXIT_CONTROL_WALL
CONTROL_OFF_WALL :
CJNE A,#'0',EXIT_CONTROL_WALL
JNB WALL_LED,EXIT_CONTROL_WALL
CPL WALL_RELAY
LCALL DELAY1S ;---------------Ổn định trạng thái thiết bị
LCALL CHECK_WALL_LED ;---------------Kiểm tra AMP của thiết bị
JNB WALL_LED,EXIT_CONTROL_WALL
MOV STATUS_WALL,#'F' ;Thbị False
EXIT_CONTROL_WALL :
INC DPTR_SIM
CONTROL_MIRROR :
MOV A,STATUS_MIRROR
CJNE A,#'F',CONTROL_ON_MIRROR
LJMP EXIT_CONTROL_MIRROR
CONTROL_ON_MIRROR :
MOV ADDRESS_DS,DPTR_SIM
LCALL READ_DS12887
MOV A,DATA_DS
CJNE A,#'1',CONTROL_OFF_MIRROR
JB MIRROR_LED,EXIT_CONTROL_MIRROR
CPL MIRROR_RELAY
LCALL DELAY1S LCALL CHECK_MIRROR_LED
JB MIRROR_LED,EXIT_CONTROL_MIRROR
MOV STATUS_MIRROR,#'F'
LJMP EXIT_CONTROL_MIRROR
CONTROL_OFF_MIRROR :
CJNE A,#'0',EXIT_CONTROL_MIRROR
JNB MIRROR_LED,EXIT_CONTROL_MIRROR
CPL MIRROR_RELAY
LCALL DELAY1S
LCALL CHECK_MIRROR_LED
JNB MIRROR_LED,EXIT_CONTROL_MIRROR
MOV STATUS_MIRROR,#'F'
EXIT_CONTROL_MIRROR :
INC DPTR_SIM
CONTROL_PICTURE :
MOV A,STATUS_PICTURE
CJNE A,#'F',CONTROL_ON_PICTURE
LJMP EXIT_CONTROL_PICTURE
CONTROL_ON_PICTURE :
MOV ADDRESS_DS,DPTR_SIM
LCALL READ_DS12887
MOV A,DATA_DS
CJNE A,#'1',CONTROL_OFF_PICTURE
JB PICTURE_LED,EXIT_CONTROL_PICTURE
CPL PICTURE_RELAY
LCALL DELAY1S
LCALL CHECK_PICTURE_LED
JB PICTURE_LED,EXIT_CONTROL_PICTURE
MOV STATUS_PICTURE,#'F'
LJMP EXIT_CONTROL_PICTURE
CONTROL_OFF_PICTURE :
CJNE A,#'0',EXIT_CONTROL_PICTURE
JNB PICTURE_LED,EXIT_CONTROL_PICTURE
CPL PICTURE_RELAY
LCALL DELAY1S
LCALL CHECK_PICTURE_LED
JNB PICTURE_LED,EXIT_CONTROL_PICTURE
MOV STATUS_PICTURE,#'F'
EXIT_CONTROL_PICTURE :
INC DPTR_SIM
CONTROL_ENTRANCE :
MOV A,STATUS_ENTRANCE
CJNE A,#'F',CONTROL_ON_ENTRANCE
LJMP EXIT_CONTROL_ENTRANCE
CONTROL_ON_ENTRANCE :
MOV ADDRESS_DS,DPTR_SIM
LCALL READ_DS12887
MOV A,DATA_DS
CJNE A,#'1',CONTROL_OFF_ENTRANCE
JB ENTRANCE_LED,EXIT_CONTROL_ENTRANCE
CPL ENTRANCE_RELAY
LCALL DELAY1S
LCALL CHECK_ENTRANCE_LED
JB ENTRANCE_LED,EXIT_CONTROL_ENTRANCE
MOV STATUS_ENTRANCE,#'F'
LJMP EXIT_CONTROL_ENTRANCE
CONTROL_OFF_ENTRANCE :
CJNE A,#'0',EXIT_CONTROL_ENTRANCE
JNB ENTRANCE_LED,EXIT_CONTROL_ENTRANCE
CPL ENTRANCE_RELAY
LCALL DELAY1S
LCALL CHECK_ENTRANCE_LED
JNB ENTRANCE_LED,EXIT_CONTROL_ENTRANCE
MOV STATUS_ENTRANCE,#'F'
EXIT_CONTROL_ENTRANCE :
INC DPTR_SIM
CONTROL_TIVI :
MOV A,STATUS_TIVI
CJNE A,#'F',CONTROL_ON_TIVI
LJMP EXIT_CONTROL_TIVI
CONTROL_ON_TIVI :
MOV ADDRESS_DS,DPTR_SIM
LCALL READ_DS12887
MOV A,DATA_DS
CJNE A,#'1',CONTROL_OFF_TIVI
JB TIVI_LED,EXIT_CONTROL_TIVI
CPL TIVI_RELAY
LCALL DELAY1S
LCALL CHECK_TIVI_LED
JB TIVI_LED,EXIT_CONTROL_TIVI
MOV STATUS_TIVI,#'F'
LJMP EXIT_CONTROL_TIVI
CONTROL_OFF_TIVI :
CJNE A,#'0',EXIT_CONTROL_TIVI
JNB TIVI_LED,EXIT_CONTROL_TIVI
CPL TIVI_RELAY
LCALL DELAY1S
LCALL CHECK_TIVI_LED
JNB TIVI_LED,EXIT_CONTROL_TIVI
MOV STATUS_TIVI,#'F'
EXIT_CONTROL_TIVI :
INC DPTR_SIM
CONTROL_AIR :
MOV A,STATUS_AIR
CJNE A,#'F',CONTROL_ON_AIR
LJMP EXIT_CONTROL_AIR
CONTROL_ON_AIR :
MOV ADDRESS_DS,DPTR_SIM
LCALL READ_DS12887
MOV A,DATA_DS
CJNE A,#'1',CONTROL_OFF_AIR
JB AIR_LED,EXIT_CONTROL_AIR
CPL AIR_RELAY
LCALL DELAY1S
LCALL CHECK_AIR_LED
JB AIR_LED,EXIT_CONTROL_AIR
MOV STATUS_AIR,#'F'
LJMP EXIT_CONTROL_AIR
CONTROL_OFF_AIR :
CJNE A,#'0',EXIT_CONTROL_AIR
JNB AIR_LED,EXIT_CONTROL_AIR
CPL AIR_RELAY
LCALL DELAY1S
LCALL CHECK_AIR_LED
JNB AIR_LED,EXIT_CONTROL_AIR
MOV STATUS_AIR,#'F' EXIT_CONTROL_AIR :
EXIT_CONTROL_DEVICE :
RET
;***-----------------------***
ERASE_SIM_BUFFER :
MOV DPTR_SIM,#SIM_BUFFER
LOOP_ERASE_SIM_BUFFER :
MOV ADDRESS_DS,DPTR_SIM
MOV DATA_DS,#00H ;-------------Nếu không có dữ liệu thì data trong BUFFER_SIM300 = 00H
LCALL WRITE_DS12887
INC DPTR_SIM
MOV A,DPTR_SIM
CJNE A,#E_SIM_BUFFER,LOOP_ERASE_SIM_BUFFER
RET
;***-----------------------***
CHECK_STATUS_LED :
LCALL CHECK_WALL_LED
LCALL CHECK_MIRROR_LED
LCALL CHECK_PICTURE_LED
LCALL CHECK_ENTRANCE_LED
LCALL CHECK_TIVI_LED
LCALL CHECK_AIR_LED
RET
;***-----------------------***
CHECK_WALL_LED :
MOV R0,#15
LOOP_CHECK_WALL_LED :
JB AMP_WALL,ON_WALL_LED
LCALL DELAY5mS
DJNZ R0,LOOP_CHECK_WALL_LED
CLR WALL_LED
MOV STATUS_WALL,#'O' ;Thbị OFF
LJMP EXIT_CHECK_WALL_LED
ON_WALL_LED :
SETB WALL_LED
MOV STATUS_WALL,#'N' ;Thbị ON
EXIT_CHECK_WALL_LED :
CPL AUTORESET
RET
;***-----------------------***
CHECK_MIRROR_LED :
MOV R0,#15
LOOP_CHECK_MIRROR_LED :
JB AMP_MIRROR,ON_MIRROR_LED
LCALL DELAY5mS
DJNZ R0,LOOP_CHECK_MIRROR_LED
CLR MIRROR_LED
MOV STATUS_MIRROR,#'O' ;--------------Thiết bị OFF
LJMP EXIT_CHECK_MIRROR_LED
ON_MIRROR_LED :
SETB MIRROR_LED
MOV STATUS_MIRROR,#'N' ;--------------Thiết bị ON
EXIT_CHECK_MIRROR_LED :
CPL AUTORESET
RET
;***-----------------------***
CHECK_PICTURE_LED :
MOV R0,#15
LOOP_CHECK_PICTURE_LED :
JB AMP_PICTURE,ON_PICTURE_LED
LCALL DELAY5mS
DJNZ R0,LOOP_CHECK_PICTURE_LED
CLR PICTURE_LED
MOV STATUS_PICTURE,#'O' ;----------------Thiết bị OFF
LJMP EXIT_CHECK_PICTURE_LED
ON_PICTURE_LED :
SETB PICTURE_LED
MOV STATUS_PICTURE,#'N' ;----------------Thiết bị ON
EXIT_CHECK_PICTURE_LED :
CPL AUTORESET
RET
;***-----------------------***
CHECK_ENTRANCE_LED :
MOV R0,#15
LOOP_CHECK_ENTRANCE_LED :
JB AMP_ENTRANCE,ON_ENTRANCE_LED
LCALL DELAY5mS
DJNZ R0,LOOP_CHECK_ENTRANCE_LED
CLR ENTRANCE_LED
MOV STATUS_ENTRANCE,#'O'
;-----------------Thiết bị OFF
LJMP EXIT_CHECK_ENTRANCE_LED
ON_ENTRANCE_LED :
SETB ENTRANCE_LED
MOV STATUS_ENTRANCE,#'N' ;-----------------Thiết bị ON
EXIT_CHECK_ENTRANCE_LED :
CPL AUTORESET
RET
;***-----------------------***
CHECK_TIVI_LED :
MOV R0,#15
LOOP_CHECK_TIVI_LED :
JB AMP_TIVI,ON_TIVI_LED
LCALL DELAY5mS
DJNZ R0,LOOP_CHECK_TIVI_LED
CLR TIVI_LED
MOV STATUS_TIVI,#'O' ;----------------Thiết bị OFF
LJMP EXIT_CHECK_TIVI_LED
ON_TIVI_LED :
SETB TIVI_LED
MOV STATUS_TIVI,#'N' ;----------------Thiết bị ON
EXIT_CHECK_TIVI_LED :
CPL AUTORESET
RET
;***-----------------------***
CHECK_AIR_LED :
MOV R0,#15
LOOP_CHECK_AIR_LED :
JB AMP_AIR,ON_AIR_LED
LCALL DELAY5mS
DJNZ R0,LOOP_CHECK_AIR_LED
CLR AIR_LED
MOV STATUS_AIR,#'O' ;Thbị OFF
LJMP EXIT_CHECK_AIR_LED
ON_AIR_LED :
SETB AIR_LED
MOV STATUS_AIR,#'N' ;Thbị ON
EXIT_CHECK_AIR_LED :
CPL AUTORESET
RET
;***-----------------------***
BACKUP_STATUS_RELAY :
MOV C,WALL_RELAY
MOV MEM_RELAY1,C
MOV C,MIRROR_RELAY
MOV MEM_RELAY2,C
MOV C,PICTURE_RELAY
MOV MEM_RELAY3,C
MOV C,ENTRANCE_RELAY
MOV MEM_RELAY4,C
MOV C,TIVI_RELAY
MOV MEM_RELAY6,C
MOV C,AIR_RELAY
MOV MEM_RELAY7,C
MOV ADDRESS_DS,#DPTR_RELAY
MOV DATA_DS,MEM_RELAY
LCALL WRITE_DS12887
RET
;***-----------------------***
RELOAD_STATUS_RELAY :
MOV ADDRESS_DS,#DPTR_RELAY
LCALL READ_DS12887
MOV MEM_RELAY,DATA_DS
MOV C,MEM_RELAY1
MOV WALL_RELAY,C
MOV C,MEM_RELAY2
MOV MIRROR_RELAY,C
MOV C,MEM_RELAY3
MOV PICTURE_RELAY,C
MOV C,MEM_RELAY4
MOV ENTRANCE_RELAY,C
MOV C,MEM_RELAY6
MOV TIVI_RELAY,C
MOV C,MEM_RELAY7
MOV AIR_RELAY,C
RET
;***-----------------------***
WRITE_DS12887 :
SETB CE_DS
SETB DE_DS
SETB RW_DS
SETB AE_DS
MOV A,ADDRESS_DS
LCALL OFFSET_PORT1
MOV P1,A
CLR CE_DS
NOP
CLR AE_DS
MOV P1,#0FFH
CLR RW_DS
MOV A,DATA_DS
LCALL OFFSET_PORT1
MOV P1,A
SETB RW_DS
SETB CE_DS
SETB AE_DS
MOV P1,#0FFH
RET
;***-----------------------***
READ_DS12887 :
SETB CE_DS
SETB RW_DS
SETB DE_DS
SETB AE_DS
MOV A,ADDRESS_DS
LCALL OFFSET_PORT1
MOV P1,A
CLR CE_DS
NOP
CLR AE_DS
MOV P1,#0FFH
CLR DE_DS
NOP
MOV A,P1
LCALL OFFSET_PORT1
MOV DATA_DS,A
SETB DE_DS
SETB CE_DS
SETB AE_DS
MOV P1,#0FFH
RET
;***-----------------------***
OFFSET_PORT1 :
RLC A
MOV OFFSET_BIT0,C
RLC A
MOV OFFSET_BIT1,C
RLC A
MOV OFFSET_BIT2,C
RLC A
MOV OFFSET_BIT3,C
RLC A
MOV OFFSET_BIT4,C
RLC A
MOV OFFSET_BIT5,C
RLC A
MOV OFFSET_BIT6,C
RLC A
MOV OFFSET_BIT7,C
MOV A,OFFSET_BIT
RET
;***-----------------------***
SERIAL_ISR :
CLR EA
PUSH ACC
MOV A,SBUF
CLR RI
LJMP LOAD_DATA_SIM
;///Kiểm tra và xử lý dữ liệu nhận được từ SIM300C
LOAD_DATA_SIM :
MOV ADDRESS_DS,DPTR_SIM
MOV DATA_DS,A
LCALL WRITE_DS12887
INC DPTR_SIM
MOV A,DPTR_SIM
CJNE A,#E_SIM_BUFFER,CONT_LOAD_DATA_SIM
LJMP EXIT_LOAD_DATA_SIM
CONT_LOAD_DATA_SIM :
MOV COUNTER,#10
EXIT_LOAD_DATA_SIM :
LJMP EXIT_SERIAL_ISR
EXIT_SERIAL_ISR :
POP ACC
SETB EA
RETI
;***-----------------------***
DELAY120uS :
MOV TL0,#LOW(-120)
MOV TH0,#HIGH(-120)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
DELAY300uS :
MOV TL0,#LOW(-300)
MOV TH0,#HIGH(-300)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
DELAY2mS :
MOV TL0,#LOW(-2000)
MOV TH0,#HIGH(-2000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
DELAY5mS :
MOV TL0,#LOW(-5000)
MOV TH0,#HIGH(-5000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
DELAY10mS :
MOV TL0,#LOW(-10000)
MOV TH0,#HIGH(-10000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
DELAY20mS :
MOV TL0,#LOW(-20000)
MOV TH0,#HIGH(-20000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
DELAY50mS :
MOV TL0,#LOW(-50000)
MOV TH0,#HIGH(-50000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
CPL AUTORESET
RET
DELAY100mS :
MOV R7,#10
LOOP_DELAY100mS :
LCALL DELAY10mS
DJNZ R7,LOOP_DELAY100mS
CPL AUTORESET
RET
DELAY1S :
MOV R6,#10
LOOP_DELAY1S :
LCALL DELAY100mS
DJNZ R6,LOOP_DELAY1S
RET
;***-----------------------***
TABLE_HELLO_SIM :
DB 13,10,'+CMT: "+84XXXXXXXXX",,"XXXXXXXXXXXXXXXXXXXX"'
DB 13,10,'HELLO! SIM300',13,10,00H
TABLE_SIM_CM1 :
DB 13,10,'+CMT: "+84XXXXXXXXX",,"XXXXXXXXXXXXXXXXXXXX"'
DB 13,10,'TEST/123456',13,10,00H
TABLE_SIM_CM2 :
DB 13,10,'+CMT: "+84XXXXXXXXX",,"XXXXXXXXXXXXXXXXXXXX"'
DB 13,10,'CONTROL/123456/XXXXXX',13,10,00H
TABLE_CMGS :
DB 'AT+CMGS=',00H
TABLE_HELLO :
DB 'HELLO! CHAO BAN, MOI BAN NHAP LENH DIEU KHIEN',00H
TABLE_LIGHT_WALL :
DB '>LIGHT WALL: ',00H
TABLE_LIGHT_MIRROR :
DB '>LIGHT MIRROR: ',00H
TABLE_LIGHT_PICTURE :
DB '>LIGHT PICTURE: ',00H
TABLE_LIGHT_ENTRANCE :
DB '>LIGHT ENTRANCE:',00H
TABLE_TIVI :
DB '>TIVI: ',00H
TABLE_AIR :
DB '>AIR: ',00H
TABLE_STATUS_ON :
DB 'ON',00H
TABLE_STATUS_OFF :
DB 'OFF',00H
TABLE_STATUS_FALSE :
DB 'FALSE',00H
TABLE_STATUS_GOOD :
DB 'GOOD',00H
END
CHƯƠNG 3
Đánh giá – Kết luận
Kết quả thực hiện đề tài
Hình 3.1: Mô hình điều khiển và kiểm tra thiết bị điện bằng đtdđ.
2. Đánh giá đề tài đã thực hiện
2.1 Ưu điểm:
Đề tài “ Điều khiển và Kiểm tra thiết bị điện bằng việc soạn tin nhắn SMS qua điện thoại di động” là một hệ thống khá hoàn chỉnh. Với chức năng điều khiển và kiểm tra thiết bị điện vào mọi thời điểm và ở mọi nơi một cách chính xác đã tạo cho người sử dụng an tâm, tin dùng.
Hệ thống này có thể lắp đặt ở nhà, phòng ngủ, văn phòng, cơ quan, xí nghiệp, khách sạn, chung cư…
Điểm đặc trưng nổi bậc của đề tài là không phụ thuộc vào thời gian, nơi chốn, môi trường, đối tượng điều khiển.
Nhờ có điều khiển từ xa mà người sử dụng tiết kiệm được thời gian và quá trình đi lại. Đặc biệt là ở môi trường khắc nghiệt, nguy hiểm.
2.2 Khuyết điểm:
Module Sim300C được dùng phổ biến trên thị trường với tính năng dễ sử dụng. Công dụng của module Sim300C là rất đa dạng. Việc điều khiển thiết bị điện bằng điện thoại di động qua sọan tin nhắn SMS chỉ là một phần công dụng. Vì lượng kiến thức của sinh viên còn giới hạn và thời gian thi công cũng hạn chế nên chỉ thực hiện được theo yêu cầu đề tài.
Cấu tạo Sim300C rất phức tạp nên việc chế tạo ra nó còn hạn chế, khó khăn. Trên thị trường module Sim300C này được bán ra với giá cũng khá cao nên việc dùng nó để ứng dụng vào cho từng nhà riêng và nghiên cứu trong học tập còn ít.
Điều khiển thiết bị không dây bằng sóng vô tuyến (RF) còn chưa ổn định vì tín hiệu RF hay bị nhiễu và tần số cộng hưởng LC giữa bộ phát và bộ thu.
3. Kết luận - Hướng phát triển đề tài
Qua thời gian làm đề tài tốt nghiệp, sinh viên đã hoàn thành tốt cả lý thuyết lẫn thi công. Với đề tài này, nó giúp cho sinh viên học được nhiều điều bổ ích và nắm vững hơn về lý thuyết điện tử.
Với hạn chế về thời gian thực hiện đề tài và tài liệu, vì vậy đòi hỏi sinh viên phải cố gắng tìm tòi, nhiệt tình trong công việc nghiên cứu, sự tận tình của giáo viên hướng dẫn và cuối cùng đề tài cũng được hoàn thành một cách khá đầy đủ chi tiết.
Trong đề tài này, chúng ta có thể phát triển theo hướng đưa hệ thống này giao tiếp với máy tính. Vì tính năng đa dạng của module Sim300C nên chúng ta có thể lắp đặt thêm hệ thống báo cháy, camera để chụp lại hoạt động hiện tại của các thiết bị và gởi nó về điện thoại di động của người quản lý qua GPRS. Ngoài ra, người quản lý còn có thể lập trình một chương trình xử lý gởi đến module Sim300C để thay đổi chương trình hiển thị trên bảng quang báo…
Với những gì đã làm ở đề tài này cùng với hướng phát triển đã nêu trên, nó sẽ là gợi ý và là ý tưởng để cho những người yêu thích tìm hiểu và phát triển đề tài hơn nữa.
* Tài liệu tham khảo:
+ Mạch điện tử - Linh kiện điện tử của thầy Nguyễn Tấn Phước.
+ Sách tra chân IC của thầy Dương Minh Trí.
+ Vi xử lý 89C51 của thầy Tống Văn On.
+ Giao tiếp và điều khiến bằng máy tính của thầy Nguyễn Đức Thành.
Và một số trang wed giới thiệu về Module Sim300C, lệnh AT-command.
THE END