Lệnh đọc thanh ghi điều khiển (RCR) cho phép vi điều khiển đọc bất kì 
các thanh ghi nào của ETH, MAC, MII. Lệnh đọc bộ nhớ đệm(RBM)cho phép vi 
điều khiển có thể đọc các bytes bên trong bộ nhớ đệm truyền và nhận.Lệnh viết 
thanh ghi điều khiển viết WCR cho phép vi điều khiển viết tới bất kì các thanh 
ghi nào của ETH, MAC, MII. Lệnh viết tới bộ nhớ đệm WBM cho phép vi điều 
khiển viết các bytes trong 8-Kbyte bộ nhớ đệm truyền và nhận. Lệnh BSF dùng 
để thiết lập 8 bits điều khiển trong thanh ghi ETH. Lệnh này không được sử 
dụng với thanh ghi MAC, PHY, MII hay bộ nhớ đệm. Lệnh BFC dùng để xóa 8 
bits trong thanh ghi điều khiển ETH. Lệnh reset hệ thống SRC cho phép vi điều 
khiển phát ra lệnh SSR. Không giống như các lệnh SPI khác. Lệnh SRC chỉ là 
lệnh 1 byte, không tác động lên các thanh ghi khác.
                
              
                                            
                                
            
 
            
                 69 trang
69 trang | 
Chia sẻ: lylyngoc | Lượt xem: 3059 | Lượt tải: 5 
              
            Bạn đang xem trước 20 trang tài liệu Đề tài Điều khiển thiết bị điện qua Internet và GSM_EvaVer, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
: 
 Mỗi trạm đều phải tự nghe đường dẫn (carrier sense), nếu đường dẫn rỗi 
(không có tín hiệu ) thì mới được phát. 
 Do việc lan truyền tín hiệu cần một thời gian nào đó, nên vẫn có khả năng 
hai trạm cùng phát tín hiệu lên đường dẫn. Chính vì vậy, trong khi phát thì 
18 
mỗi trạm vẫn phải nghe đường dẫn để so sánh tín hiệu phát đi với tín hiệu 
nhận được xem có xảy ra xung đột hay không (collision detection). 
 Trong trường hợp xảy ra xung đột, mỗi trạm đều phải hủy bỏ bức điện của 
mình, chờ một thời gian ngẫu nhiên và thử gửi lại. 
2.2 Họ giao thức TCP/IP 
TCP/IP là viết tắt của Transmission Control Protocol / Internet Protocol 
(Giao thức Điều Khiển Truyền Thông /Giao thức Internet). Các tầng trong mô 
hình này là: 
 Tầng Ứng Dụng (Application Layer). 
 Tầng Giao Vận (Transport Layer). 
 Tầng Liên Mạng (Internet Layer). 
 Tầng Giao Tiếp Mạng (Network Interface Layer). 
Hình 2.2: Cấu trúc họ giao thức TCP/IP. 
19 
2.2.1 Tầng ứng dụng (Application Layer) 
Gồm nhiều giao thức cung cấp cho các ứng dụng người dùng. Được sử 
dụng để định dạng và trao đổi thông tin người dùng và hệ thống. Một số giao 
thức thông dụng trong tầng này là: HTTP,FTP,SMTP,…Trong phạm vi đồ 
án,chúng ta sử dụng giao thức HTTP mà cụ thể là xây dựng một Webserver 
nhúng vào hệ thống. 
HTTP là giao thức truyền tải siêu văn bản (HyperText Transfer Protocol). 
HTTP xác định cách các thông điệp được định dạng và truyền tải ra sao và hoạt 
động của Webserver và các trình duyệt Web. Trong mô hình của HTTP, 
Webserver đồng thời cũng là TCPServer, mở sẵn port mặc định dành cho dịch 
vụ HTTP là TCP80 (ở chế độ listen), sẵn sàng đợi yêu cầu kết nối từ các client. 
Các client sẽ khởi tạo kết nối TCP thông qua port này, sau khi Webserver chấp 
nhận kết nối, client sẽ gửi một bản tin HTTP (HTTP message) gọi là HTTP 
request tới server trên kết nối TCP vừa thiết lập. Server sẽ trả lời lại bằng một 
bản tin HTTP khác là HTTP response. Bản tin này sẽ chứa nội dung trang Web 
yêu cầu (được viết bằng ngôn ngữ HTML). Như vậy giao thức HTTP sẽ dựa cơ 
bản trên các bản tin HTTP, gồm 2 loại là HTTP request và HTTP response. 
Giả sử ta truy nhập vào địa chỉ IP của webserver là 192.168.1.10 qua trình duyệt: 
 Lúc đó, máy tính của chúng ta sẽ gửi đi một bản tin request của giao thức 
HTTP là HTTP Get thông qua giao thức TCP (với cổng TCP được qui 
định cho giao thức HTTP là 80) đến địa chỉ webserver trên. 
 Webserver, ở đây chính là vi điều khiển của chúng ta nhận được bản tin 
này (khi đã đi qua hết các lớp giao thức ethernet, IP, TCP rồi mới đến 
HTTP). Tại đây vi điều khiển sẽ đọc và phân tích bản tin HTTP request 
này để biết máy tính đang yêu cầu tải nội dung trang web nào. 
 Sau đó vi điều khiển sẽ lấy nội dung trang web này (được soạn thảo theo 
ngôn ngữ HTML) chứa trên trên ROM, nó cũng có thể thêm vào trang 
20 
web đó một số thông tin (ví dụ đọc giá trị từ các sensor cảm biến nhiệt độ 
và đưa vào trong trang web), và gửi toàn bộ nội dung trang web thông qua 
giao thức TCP trở lại cho máy tính. Nếu nội dung trang web lớn nó có thể 
được gửi đi trên rất nhiều gói tin, vì mỗi gói tin chỉ chứa tối đa 1460 byte 
dữ liệu. 
 Máy tính nhận nội dung trang web và trình duyệt sẽ hiển thị lên cho chúng 
ta thấy. 
 Để điều khiển thiết bị kết tới hệ thống từ xa qua web, trên trang web ta có 
thể thiết kế một nút nhấn chẳng hạn. Khi ta nhấn nút này trên trình duyệt, 
máy tính sẽ gửi đi một bản tin HTTP nữa là HTTP Get. Vi điều khiển sẽ 
nhận bản tin HTTP post này, phân tích dữ liệu chứa trong đó để có đáp 
ứng tương ứng (bật tắt bóng đèn) sau đó nó sẽ gửi trả lại lần nữa nội dung 
trang web đã cập nhật những thay đổi vừa rồi.Trình duyệt sẽ cập nhật nội 
dung này lên và ta sẽ thấy được tác động của thao tác điều khiển đó. 
2.2.2 Tầng giao vận (Transport Layer) 
Nhiệm vụ của tầng là thiết lập phiên truyền thông giữa các máy tính và 
quy định cách truyền dữ liệu. Hai giao thức chính trong tầng này gồm UDP 
(User Datagram Protocol) và TCP (Transmission Control Protocol). Do UDP 
cung cấp các kênh truyền thông phi kết nối nên nó không đảm bảo truyền dữ liệu 
một cách tin cậy nên trong phạm vi đồ án chúng ta sử dụng thức TCP. Ngược lại 
với UDP, TCP cung cấp các kênh truyền thông hướng kết nối và đảm bảo truyền 
dữ liệu 1 cách tin cậy. TCP thường truyền các gói tin có kích thước lớn và yêu 
cầu phía nhận xác nhận về các gói tin đã nhận. 
Cấu trúc gói TCP: 
21 
Hình 2.3: Cấu trúc gói TCP. 
Chú thích: 
- Số port đích và số port nguồn: để phân biệt các tiến trình ứng dụng đang xảy 
ra trong máy tính 
- Các số sequence và Acknowledgement: số sequence để phân biệt các segment 
khác nhau trong một dòng dữ liệu, các số Acknowledgement dùng trong cơ 
chế xác nhận 
- Vùng Data offset: chiều dài của Header tính theo đơn vị 32 bit 
- Một số cờ (flags): 
.URG (Urgent): thiết lập 1 khi có dữ liệu quan trọng cần truyền ngay. 
.ACK: cho biết có số xác nhận nằm trong vùng Acknowledgement 
.PSH (Push): được thiết lập trong trường hợp dữ liệu nên được giao tức 
thời 
.RST (Reset): chỉ thị một lỗi sai và hủy bỏ phiên làm việc 
22 
.SYN (Synchronize): trong các bản tin khởi tạo khi thiết lập một kết nối 
truyền dữ liệu 
. FIN (Finish): dùng đóng 1 phiên làm việc 
- Vùng Window: chỉ ra số lượng không gian bộ đệm khả dụng để nhận dữ liệu 
- Vùng Checksum: vùng kiểm tra sai cho cả segment 
- Vùng Urgent Pointer: chỉ ra chiều dài của dữ liệu urgent 
- Vùng Options: xác định kích thước cực đại của 1 segment 
Cụ thể hơn, vai trò của TCP trong chồng giao thức TCP gồm 3 chức năng 
chính: điều khiển luồng, kiểm soát lỗi và báo nhận. 
- Điều khiển luồng: điều phối tốc độ và kích thước luồng dữ liệu để đảm bảo 
phía nhận đủ khả năng nhận và xử lý luồng dữ liệu. 
- Kiểm soát lỗi: đảm bảo các gói tin đến đúng và đủ. 
- Báo nhận: khi nhận được dữ liệu và không có lỗi, phía nhận phải báo lại với 
phía gửi biết. 
Để thực hiện được các chức năng đó, một quá trình truyền dữ liệu qua giao 
thức TCP (mà ta gọi là phiên truyền thông – session) gồm có 3 giai đoạn: Thiết 
lập kết nối, truyền dữ liệu và giải phóng kết nối. 
Để có thể giám sát chặt chẽ trạng thái và mọi sự kiện xảy ra trong một kết 
nối TCP, trạng thái của một kết nối TCP được chuyển đổi tuân theo một lưu đồ 
trạng thái như sau: 
23 
Hình 2.4: Lưu đồ trạng thái kết nối TCP. 
Giải thích: 
TCP là giao thức hướng kết nối, dạng client – server. Tức là trong một 
phiên truyền thông thì sẽ có một phía đóng vai trò client, phía còn lại, lúc nào 
cũng ở trạng thái chờ đợi các client thiết lập kết nối tới chính là server. 
Ví dụ khi ta truy cập web, thì máy tính của ta là client, máy chủ chứa trang web 
chính là server – vi điều khiển, lúc nào cũng ở trạng thái đợi các máy tính client 
kết nối đến (và phải có khả năng thiết lập đồng thời nhiều kết nối, vì có thể có 
nhiều client kết nối tới cùng lúc). 
24 
Trong lưu đồ trên, áp dụng cho cả client và server. Cả client và server đều 
bắt đầu bằng trạng thái “Close”. Client sẽ thiết lập kết nối theo con đường Active 
Open (nó chủ động thiết lập kết nối). Server sẽ thiết lập kết nối theo con đường 
Passive Open (thụ động, vì nó đợi client bắt đầu mà) 
Quá trình chuyển trạng thái: 
- Cả hai bắt đầu bằng trạng thái close, không có kết nối nào tồn tại. 
- Khi Server mở một port TCP để đợi client thiết lập kết nối, nó chuyển 
sang trạng thái “Listen”. 
- Khi client gửi đi bản tin SYN, nó chuyển sang trạng thái “SYN sent”. 
- Lúc này khi server nhận được bản tin SYN từ client và gửi đáp lại 1 bản 
tin SYN, nó chuyển sang trạng thái “SYN Received”. 
- Lúc này client gửi lại bản tin xác nhận ACK (bước 3 trong ví dụ), nó 
chuyển sang trạng thái thiết lập kết nối “Established”. 
- Server nhận được bản tin ACK trên của client, nó cũng chuyển sang trạng 
thái “Established”. 
- Sau đó hai bên tiến hành truyền dữ liệu, trạng thái cả hai đều là 
“Established”. Một trong hai phía truyền xong dữ liệu, đến đây thì vai trò 
hai bên là như nhau, ta giả sử client truyền xong dữ liệu trước, nó sẽ gửi 
bản tin FIN, và chuyển sang trạng thái “FIN wait 1”. 
- Phía server nhận được bản tin này, gửi xác nhận ACK, và chuyển sang 
trạng thái “Close wait”. 
- Khi client nhận được xác nhận từ server (nhận được bản tin ACK trên) thì 
nó chuyển sang trạng thái “FIN wait 2”. 
25 
- Đến lúc này server vẫn có thể tiếp tục gửi dữ liệu và client vẫn tiếp tục 
nhận (vì chỉ có client báo là gửi xong dữ liệu). 
- Đến khi nào server cũng gửi hết dữ liệu, nó sẽ gửi đi bản tin FIN, cho biết 
nó cũng đã gửi xong dữ liệu và chuyển sang trạng thái “LAST ACK”. 
Khi client nhận được bản tin FIN trên từ server, nó gửi xác nhận (ACK) và 
chuyển sang trạng thái “Time wait”, sau đó chờ 1 khoảng thời gian 
Timeout và đóng kết nối, quay lại trạng thái “Close”. 
- Khi server nhận được nó cũng chuyển từ “Last ACK” sang “Close” 
(không cần đợi Timeout) 
2.2.3 Tầng Internet (Internet Layer) 
Nằm bên trên tầng truy nhập mạng. Tầng này có chức năng gán địa chỉ, 
đóng gói và định tuyến (Route) dữ liệu. 4 giao thức quan trọng nhất trong tầng 
này gồm: 
- IP (Internet Protocol): Có chức năng gán địa chỉ cho dữ liệu trước khi 
truyền và định tuyến chúng tới đích. 
- ARP (Address Resolution Protocol): Có chức năng biên dịch địa chỉ IP 
của máy đích thành địa chỉ MAC. 
- ICMP (Internet Control Message Protocol): Có chức năng thông báo lỗi 
trong trường hợp truyền dữ liệu bị hỏng. 
- IGMP (Internet Group Management Protocol): Có chức năng điều khiển 
truyền đa hướng (Multicast) . 
Cấu trúc của gói IP: 
26 
Hình 2.5: Cấu trúc gói tin IP. 
Ý nghĩa: 
- Version (có chiều dài 4 bit): cho biết phiên bản của giao thức, đối với 
trường hợp của chúng ta, giao thức là IP version 4, trường này sẽ luôn có 
giá trị là 4 (0100). 
- Header Length (4 bit): cho biết chiều dài của header IP, tính theo đơn vị 4 
byte (32 bit). 
- TOS (8 bit): Type of Service. 
- Total Length (16 bit): 16 bit tổng chiều dài của gói IP gồm cả phần header. 
- Identification (16 bit): dùng nhận diện các phân đoạn của gói IP. 
- Flags: 
. Bit đầu tiênkhông sử dụng. 
. Bit 2: DF (Don’t Fragment) = 1 có nghĩa là không phân đoạn gói này. 
. Bit 3: MF (More Fragment) = 0 => đây là phân đoạn cuối cùng. 
- Fragmented offset (13 bit): độ dời (đơn vị 8 byte) tính từ điểm bắt đầu của. 
Header tới điểm bắt đầu của phân đoạn 
27 
- TTL (Time to Live) (8 bit): thời gian tồn tại trên mạng hoặc số chặng trên 
mạng mà gói đi qua trước khi bị hủy bỏ. 
- Protocol (8 bit): nhận diện Protocol trên lớp IP. 
- Header checksum (16 bit): sửa sai cho phần Header. 
- Các vùng địa chỉ nguồn, địa chỉ đích: địa chỉ IP 32 bit. 
- Option: các tùy chọn dùng cho việc kiểm tra: Loose source routing, Strict 
source routing, Record route và Timestamp. 
- Padding: Gồm các số zero được thêm vào sao cho chiều dài của vùng 
Header là bội số của 32 bit. 
Cách thức mà dữ liệu được gửi qua giao thức IP được tiến hành như sau: 
- Khi nhận được một segment dữ liệu (từ giao thức lớp trên là TCP) cần gửi 
đến đích nào đó, địa chỉ đích này phải được xác định bằng địa chỉ IP (tức 
là địa chỉ mạng hay địa chỉ luận lý). Lớp giao thức IP sẽ gắn thêm vào đầu 
segment dữ liệu một header IP để tạo thành gói IP hoàn chỉnh. Trong 
header IP này có chứa 2 thông tin quan trọng, đó là địa chỉ host gửi 
(source IP address) và địa chỉ host nhận (destination IP address). Địa chỉ 
source đương nhiên là địa chỉ của bản thân nó, còn địa chỉ đích phải được 
cung cấp cho lớp IP khi muốn gửi dữ liệu qua giao thức này. 
- Gói tin IP này sau đó được chuyển đến lớp giao thức ethernet để thêm 
phần header ethernet vào và gửi đi. 
Nhưng giao thức ethernet lại gửi các khung dữ liệu đi dựa vào một loại địa 
chỉ khác là địa chỉ MAC (hay còn gọi là địa chỉ vật lý). Tại sao lại cần đến 2 địa 
chỉ như vậy? Lý do là địa chỉ vật lý chỉ có giá trị trong phạm vi mạng LAN, nó 
sẽ không thể giúp xác định vị trí host ở bên ngoài phạm vi mạng LAN. Khi gửi 
dữ liệu ra ngoài mạng LAN, các router sẽ chuyển dữ liệu đi dựa và địa chỉ IP. 
Như vậy trong phần địa chỉ MAC nguồn và địa chỉ MAC đích trong 
header của khung ethernet, ta sẽ điền các địa chỉ nào? Đối với địa chỉ MAC 
28 
nguồn, đương nhiên ta sẽ điền địa chỉ MAC của chính ENC28J60 đã được xác 
lập. Nhưng còn địa chỉ MAC đích, sẽ có 2 trường hợp xảy ra: 
- Nếu host đích nằm trong cùng 1 mạng LAN với chúng ta, ta sẽ điền địa 
chỉ MAC đích là địa chỉ tương ứng của host đích. Frame dữ liệu sẽ được 
gửi thẳng đến đích. 
- Nếu host đích nằm bên ngoài mạng LAN, rõ ràng ta không thể gửi dữ liệu 
trực tiếp đến host đích mà phải thông qua gateway, khi đó địa chỉ MAC 
đích phải là địa chỉ gateway. 
Vẫn còn một vấn đề nữa mà ta phải giải quyết. Đó là trong cả hai trường 
hợp trên, dù là cần gửi cho gateway hay thẳng đến host đích, thì đến đây, ta mới 
chỉ biết địa chỉ IP của host đích (hay của gateway) mà không biết địa chỉ MAC 
tương ứng. Vậy nảy sinh một vấn đề là làm sao biết được địa chỉ MAC của một 
host khi biết địa chỉ IP? 
Đến đây, chính là phát sinh vai trò của giao thức phân giải địa chỉ (APR – 
Address Resolution Protocol). Vai trò của giao thức này là tìm ra địa chỉ MAC 
khi biết địa chỉ IP của 1 host. 
Cấu trúc gói ARP: 
Hình 2.6: Cấu trúc gói tin ARP. 
29 
Ý nghĩa: 
 Hardware type (2 bytes): cho biết loại địa chỉ phần cứng, đối với địa chỉ 
MAC của giao thức ethernet thì giá trị này được qui định là "0x0001". 
 Protocol type (2 bytes): cho biết loại địa chỉ giao thức lớp trên, đối với địa 
chỉ IP, giá trị này được qui định là “0x0800”. 
 HLEN (1 byte): cho biết chiều dài của địa chỉ vật lý (địa chỉ MAC). 
 PLEN (1 byte): cho biết chiều dài của địa chỉ giao thức (địa chỉ IP). 
 Operation (2 bytes): cho biết hoạt động đang thực hiện trong gói tin này 
(request hay reply). 
 Sender H/W (hardware address, 6 bytes): địa chỉ vật lý của phía gửi. 
 Sender IP (4 bytes): địa chỉ IP của phía gửi. 
 Target H/W (6 bytes): địa chỉ vật lý của phía nhận, nếu chưa biết thì sẽ là 
chứa toàn 0. 
 Target IP (4 bytes): địa chỉ IP của phía nhận. 
Cách thức mà dữ liệu được gửi qua giao thức ARP được tiến hành như sau: 
- Khi giao thức IP đưa xuống yêu cầu tìm chỉ MAC của host có IP là a.b.c.d 
thì nó phải trả lời ngay địa chỉ MAC của địa chỉ trên dạng 
XX:XX:XX:XX:XX:XX. 
- Cách thức ARP lấy thông tin giải quyết vấn đề trên là: giao thức ARP duy 
trì một bảng gọi là ARP cache gồm hai cột, một cột ghi địa chỉ IP, một cột 
ghi địa chỉ MAC tương ứng với địa chỉ IP đó. Mỗi khi được hỏi bởi giao 
thức IP, nó sẽ tra bảng này để tìm câu trả lời. Khi được hỏi về một địa chỉ 
IP a.b.c.d nào đó mà không có sẵn trong bảng ARP cache, nó sẽ lập tức 
tìm trong mạng LAN phần tử có địa chỉ IP là a.b.c.d bằng cách gửi yêu 
cầu tới các phần tử trong mạng LAN. Các phần tử này đều nhận được yêu 
cầu và phần tử nào có IP a.b.c.d sẽ trả lời lại địa chỉ MAC của nó là 
XX:XX:XX:XX:XX:XX. Vậy giao thức ARP sẽ lập tức thêm cặp địa chỉ 
30 
IP a.b.c.d và địa chỉ MAC XX:XX:XX:XX:XX:XX vào trong bảng ARP 
cache và trả lời lại cho giao thức IP. 
2.2.4 Tầng giao tiếp mạng 
Tầng giao tiếp mạng liên quan tới việc trao đổi dữ liệu giữa hai trạm thiết 
bị trong cùng một mạng. Giao thức được sử dụng trong phạm vi đồ án là giao 
thức Ethernet. Phần cứng được sử dụng chip giao tiếp Ethernet ENC28J60 giao 
tiếp qua chuẩn SPI ( Serial Pheripheral Interface ). 
Trong chồng giao thức TCP/IP, giao thức Ethernet đóng vai trò lớp truy 
nhập và truyền dẫn. Việc gửi và nhận dữ liệu ở lớp Ethernet được thực hiện dựa 
vào địa chỉ vật lý hay còn gọi là địa chỉ MAC. Trong mỗi khung Ethernet đều 
chứa 2 địa chỉ MAC: một địa chỉ của host gửi và một địa chỉ của host nhận. Khi 
lớp Ethernet nhận được một khung dữ liệu, trước hết nó sẽ kiểm tra địa chỉ host 
nhận xem có phải là địa chỉ của nó không (tức là gửi cho nó), nếu đúng nó sẽ 
nhận khung này và chuyển đến lớp IP. Ngoài ra còn có 1 trường hợp nữa lớp 
Ethernet sẽ nhận khung là nếu địa chỉ host nhận là địa chỉ broadcast (tức là gửi 
cho tất cả mọi máy trong mạng LAN), trong trường hợp này frame sẽ được nhận 
và xử lý. 
Ngoài việc kiểm tra địa chỉ, trong khng Ethernet còn có 1 trường chứa mã 
kiểm tra lỗi giúp phát hiện những lỗi xảy ra trong quá trình truyền, các khung bị 
xác định là có lỗi sẽ bị bỏ qua. 
Trong mạch của chúng ta, việc kiểm tra lỗi và kiểm tra địa được thực hiện 
tự động bởi IC ENC28J60, do đó ta không cần lập trình cho các chức năng này. 
Mỗi khi nhận được một khung trên đường truyền, ENC28J60 sẽ kiểm tra lỗi xem 
có sai sót không, tiếp đó nó sẽ đối chiếu địa chỉ host nhận với địa chỉ đã được 
cấu hình cho nó (trong các thanh ghi địa chỉ MAC: MAADR0-5). 
31 
2.3 Microchip TCP/IP Stack 
2.3.1 Cấu trúc của Microchip TCP/IP Stack 
TCP/IP Stack là bộ thư viện và một số công cụ phần mềm của Microchip 
để hỗ trợ viết phần mềm cho hệ thống nhúng sử dụng vi điều khiển của hãng. 
Thư viện đã xây dựng hầu hết các hàm giao tiếp giữa các lớp cũng như hỗ trợ 
xây dựng một Webserver nhúng. 
TCP/IP cũng có các Module sử dụng cho lớp ứng dụng như: HTTP cho 
Web, SMTP cho gửi và nhận Email, SNMP cho giao thức trạng thái và điều 
khiển. Telnet cho điều khiển từ xa, TFTP. 
Hình 2.7: Cấu trúc của Stack. 
Hình 2.8: So sánh cấu trúc TCP/IP tham khảo và cấu trúc Stack của Microchip. 
32 
Ngoài những module chính giống như cấu trúc TCP/IP tham khảo thì 
Microchip đưa thêm vào Stack 2 module mới đó là StackTask và ARPTask. 
StackTask quản lý sự vận hành và tất cả các module của Stack. Trong khi đó, 
ARPTask quản lý các dịch vụ của lớp ARP ( Address Resolution Protocol). 
2.3.2 Hoạt động của TCP/IP Stack 
 Hoạt động của TCP/IP Stack là các nhiệm vụ sẽ được chia thành các tác 
vụ ( ở đây là TCP, UDP, Ping,…). Tất cả hoạt động của TCP/IP sẽ được một 
đồng hồ chung quản lí theo Time Split. Tức là có một Timer hệ thống (Timer1), 
cứ mỗi khoảng thời gian ngắn sẽ ngắt (gọi là một TICK), khi bị ngắt, hệ thống sẽ 
treo lại, ngữ cảnh của tất cả các tác vụ được bộ lập lịch lôi ra, xem xét tác vụ nào 
được chạy theo kiểu chia sẻ thời gian (vì không có mức ưu tiên cho tác vụ). Sau 
đó cho phép tác vụ đó chiếm quyền thực thi của CPU. Đến TICK tiếp theo, hệ 
thống lại treo lại, và lại lôi ngữ cảnh ra, cứ tiếp tục như vậy mãi. 
 Với cơ chế hoạt động này, vi điều khiển được coi như một lúc có thể vừa 
thực hiện TCP, vừa thực hiện UDP, Ping,…vừa có thể là Server và Client cùng 
một lúc. 
 Vì vậy, PIC nếu được thiết lập ở chế độ TCP Server/Client sẽ hoạt động 
đồng thời cả hai hoạt động này. Server lắng nghe kết nối từ Client nào đó trên 
mạng. Còn Client thì gửi lệnh mở cổng kết nối tới một Server nào đó cũng ở trên 
mạng, mà ta có thể xác lập được. 
 Vì vậy, hoạt động của các tác vụ là độc lập với nhau, không chịu ảnh 
hưởng lẫn nhau. 
Việc cấu hình cho Stack được thực hiện trong file TCPIPConfig.h của 
Project. 
33 
CHƯƠNG 3: TỔNG QUAN VỀ TIN NHẮN SMS VÀ 
MODULE SIM900 
3.1 Tổng quan về tin nhắn SMS 
SMS là từ viết tắt của Short Message Service. Đó là một công nghệ cho 
phép gửi và nhận các tín nhắn giữa các điện thoại với nhau. Dữ liệu có thể được 
lưu giữ bởi một tin nhắn SMS là rất giới hạn. Một tin nhắn SMS có thể chứa tối 
đa là 140 byte (1120 bit) dữ liệu. Vì vậy, một tin nhắn SMS chỉ có thể chứa : 
+ 160 kí tự nếu như mã hóa kí tự 7 bit được sử dụng. 
+ 70 kí tự nếu như mã hóa kí tự 16 bit Unicode UCS2 được sử dụng. 
Tin nhắn SMS dạng text hỗ trợ nhiều ngôn ngữ khác nhau. Nó có thể hoạt 
động tốt với nhiều ngôn ngữ mà có hỗ trợ mã Unicode, bao gồm cả Arabic, 
Trung Quốc, Nhật bản và Hàn Quốc. 
3.2 Giới thiệu Module SIM900 
3.2.1 Tổng quan về Module SIM900 
Hình 3.1: Module Sim900 
34 
Sim900 là một module GSM/GPRS cực kỳ nhỏ gọn, được thiết kế cho thị 
trường toàn cầu. Sim900 hoạt động được ở 4 băng tần GSM 850MHz, EGSM 
900MHz, DCS 1800MHz và PCS 1900MHz như là một loại thiết bị đầu cuối với 
một Chip xử lý đơn nhân đầy sức mạnh, tăng cường các tính năng quan trọng 
dựa trên nền vi xử lý ARM926EJ-S, mang lại nhiều lợi ích từ kích thước nhỏ 
gọn (24x24 mm), đáp ứng những yêu cầu về không gian trong các ứng dụng 
M2M. 
3.2.2 Khảo sát sơ đồ chân và chức năng từng chân 
Hình 3.2 Sơ đồ chân của Module Sim900 
35 
CHƯƠNG 4: THIẾT KẾ VÀ THI CÔNG 
4.1 Phân tích yêu cầu điều khiển 
Trong một gia đình thông thường ngày nay, TV, hệ thống nghe nhìn, máy 
tính, đèn chiếu sáng, rèm cửa và điện thoại di động, ngày càng trở nên dễ sử 
dụng và đa năng hơn, nhưng mỗi thiết bị hoạt động độc lập với các bộ điều khiển 
dùng riêng. Điều này có nghĩa là có rất nhiều bộ điều khiển, nút chỉnh làm cho 
cuộc sống thêm phức tạp. 
Với ý nghĩa một ngôi nhà “thông minh”, các thiết bị nói trên sẽ được tích 
hợp trong một hệ thống đồng nhất, cung cấp các chức năng của từng loại thiết bị 
nhưng được điều khiển tập trung từ bộ điều khiển trung tâm. Như vây, các thiết 
bị “thông minh” rời rạc trước đây giờ đây là các thành phần cấu thành nên một 
hệ thống “thông minh”. 
Phân tích các thiết bị điện cần điều khiển trong một gia đình thông thường, 
ta nhận thấy các thiết bị điện trong gia đình chủ yếu là các biến logic, chỉ có 2 
trạng thái tắt hoặc mở ví dụ như quạt, điều hòa, tivi, bóng đèn… Song bên cạnh 
đó cũng có một số biến có dạng số nguyên, số thực như nhiệt độ phòng, mức 
nước trong bể, độ mở của rèm cửa… Với những biến kiểu logic, ta chỉ cần xác 
định trạng thái của thiết bị và yêu cầu điều khiển để bật hoặc mở thiết bị khi có 
yêu cầu. Còn với những biển kiểu số nguyên, số thực như nhiệt độ, mức nước 
trong bể… thì ta cần có cảm biến đo để xác định được giá trị của biến ở thời 
điểm hiện tại. Ví dụ, muốn hệ thống tự động bật điều hòa khi nhiệt độ phòng 
cao thì ta cần ta cần có một cảm biến nhiệt độ để xác định nhiệt độ phòng tại thời 
điểm hiện tại. Nếu nhiệt độ phòng cao hơn một giá trị ta định trước thì hệ thống 
sẽ tự động điều khiển để bật điều hòa lên, và khi nhiệt độ hạ thấp giá trị ta định 
trước thì hệ thống sẽ điều khiển để tắt điều hòa đi. 
36 
 Yêu cầu điều khiển được đặt ra đối với hệ thống là người dùng có thể sử 
dụng máy tính có nối mạng, hoặc điện thoại, máy tính bảng có tính năng nhắn tin 
SMS để đưa ra yêu cầu điều khiển từ xa. Bộ điều khiển nhận lệnh, xử lý rồi sau 
đó đưa ra tín hiệu điều khiển thích hợp, sau khi điều khiển xong thì thông báo 
ngược lại cho người sử dụng biết đã thực hiện thành công cũng như thông báo 
trạng thái của thiết bị hiện thời. 
Nhà thông minh là một đề tài mở với rất nhiều các ứng dụng, các tiện ích 
có thể áp dụng nhằm phục vụ nhu cầu ngày càng nâng cao của con người. Chính 
vì vậy mà giới hạn trong đồ án tốt nghiệp chúng em không thể giải quyết được 
hết các bài toán trên thực tế. Trước mắt, chúng em sẽ thi công một bộ điều khiển 
có khả năng giao tiếp truyền thông qua mạng Ethernet và tin nhắn SMS, từ đó 
người sử dụng có thể đưa ra yêu cầu điều khiển để đóng hoặc mở một số thiết bị 
điện từ xa, ngoài ra bộ điều khiển còn có khả năng nhận tín hiệu từ cảm biến 
nhiệt độ và thông báo cho người sử dụng biết thông tin về nhiệt độ trong phòng. 
Về hướng đi trong tương lai, chúng em sẽ mở rộng và phát triển thêm 
nhiều module, nâng cao khả năng giao tiếp của thiết bị hơn nữa, tăng tính tương 
tác với người sử dụng cũng như tăng độ an toàn cho ngôi nhà thông minh. 
37 
4.2 Thiết kế phần cứng mạch chính 
38 
4.4 Thiết kế Webserver 
39 
TÀI LIỆU THAM KHẢO 
[1] Hoàng Minh Sơn –Mạng Truyền Thông Công Nghiệp – NXB Khoa Học Và 
Kỹ Thuật – 2006. 
[2] Muhammad Ali Mazidi, Rolin D.McKinlay, Danny Causey – PIC 
Microcontroller and Embedded Systems – Courier Kendallville, Inc – 2008 
[3] Jeremy Bentham – TCP/IP Lean – CMP Book – 2002 
[4] Một Số Trang Web Tham Khảo: 
 www.picvietnam.com 
 www.dientuvietnam.com 
 www.eprojects.ljcv.net 
 www.google.com.vn 
40 
PHỤ LỤC 1: VI ĐIỀU KHIỂN PIC18F8722 
1. GIỚI THIỆU TỔNG QUAN VỀ PIC18F8722 
1.1. Giới thiệu về PIC18F8722 
Khối xử lí trung tâm mà đóng vai trò chính là PIC 18F8722 sẽ làm nhiệm 
vụ chính là tiếp nhận và xử lí các dữ liệu đến và đi một cách tự động. Đề tài sử 
dụng PIC 18F8722 vì những ưu điểm vượt trội của nó so với các vi điều khiển 
khác.Về mặt tính năng và công năng thì có thề xem PIC vượt trội hơn rất nhiều 
so với các dòng VĐK khác với nhiều module được tích hợp sẵn như ADC 10 
BIT, FLASH 128Kb, PWM 10 BIT, EEPROM 1024 BYTE, 2 
COMPARATER… 
Vi điều khiển này hoàn toàn đáp ứng được các yêu cầu về bộ nhớ 
RAM,khả năng xử lý. Nó còn đáp ứng tốt về mặt cơ học và vật lý như độ bền, 
khả năng tin cậy, khả năng tiết kiệm điện. Tích hợp sẵn bộ ADC để chuyển tín 
hiệu từ các cảm biến đưa vào vi điều khiển.Vi điều khiển này có đầy đủ các 
chuẩn truyền thông như UART hay SPI để thực hiện nhiệm vụ truyền thông và 
giao tiếp giữa VĐK và SIM900,hay IC ENC28J60 
Ngoài ra, PIC có ngôn ngữ hổ trợ cho việc lập trình ngoài ngôn ngữ 
Asembly còn có ngôn ngữ C thì có thề sử dụng nhiều công cụ lập trình như CCS, 
MPLAB, MirkoBasic.. Chính vì vậy chúng ta sẽ có nhiều thuận lợi trong việc dễ 
dàng tìm kiếm các thông tin lập trình cho các dòng PIC. 
Dòng PIC 18F8722 được chọn sử dụng trong đề tài là dòng phổ thông với 
các tính năng cơ bản và dễ cho việc sử dụng với: 
Tập lệnh để lập trình chỉ có 35 lệnh rất dễ nhớ và dễ học, có độ dài 16bit. 
Mỗi lệnh đều được thực thi trong 1 chu kỳ xung clock. Tốc độ hoạt động tối đa 
cho phép là 40MHz. 
Thông số và tính năng cơ bản của vi điều khiển PIC18F8722 
 128k Flash Rom. 
41 
 3936 Bytes Ram. 
 1024 Bytes EEPROM 
 9 Port điều khiển vào ra với tín hiệu điều khiển độc lập 
 2 bộ định thời 8 bit và 3 bộ định thời 16 bit 
 2 bộ module CCP và 3 bộ module ECCP. 
 1 bộ ADC với 16 kênh ADC 10 bit. 
 2 bộ so sánh tương tự hoạt động độc lập. 
 Bộ giám sát định thời Watchdog timer. 
 Cổng giao tiếp song song 8 bit với các tín hiệu điều khiển. 
 Chuẩn giao tiếp nối tiếp MSSP (SPI/I2C) 
 Chuẩn giao tiếp nối tiếp USART (AUSART/EUSART) 
 Hỗ trợ giao tiếp I2C. 
 Chế độ sleep tiết kiệm năng lượng. 
 Có thể hoạt động với nhiều dạng Oscillator khác nhau. 
 Tần số hoạt động tối đa là 40Mhz. 
 Bộ nhớ Flash với khả năng ghi xóa được 100.000 lần 
 Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần 
 Dữ liệu EEPROM có thể lưu trữ trên 40 năm 
 Khả năng tự nạp chương trình với sự điều khiển của phần mềm. 
1.2. Sơ đồ khối của PIC18F8722 
42 
Hình 1.1: Sơ đồ khối vi điều khiển PIC18F8722 
43 
2. KHẢO SÁT CHỨC NĂNG VÀ HOẠT ĐỘNG CỦA 
PIC 18F8722 
2.1. Sơ đồ chân của vi điều khiển PIC18F8722 
Hình 1.2: Sơ đồ chân của vi điều khiển PIC18F8722 
2.2. Tổ chức bộ nhớ 
Cấu trúc bộ nhớ của vi điều khiển PIC18F8722 bao gồm bộ nhớ chương 
trình (Program memory) và bộ nhớ dữ liệu (Data Memory). 
2.2.1. Bộ nhớ chương trình. 
44 
Bộ nhớ chương trình của Vi điều khiển PIC 18F8722 là bộ nhớ flash, dung 
lượng bộ nhớ 128K word (1 word = 16bit). 
Khi vi điều khiển được reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 
0000h (Reset vertor). Khi có ngắt mức yêu tiên cao xảy ra, bộ đếm chương trình 
sẽ chỉ đến địa chỉ 0008h. Khi có ngắt mức yêu thấp xảy ra, bộ đếm chương trình 
sẽ chỉ đến địa chỉ 0018h Bộ nhớ chương trình bao gồm bộ nhớ Stack và được địa 
chỉ hóa bởi bộ đếm chương trình. 
Hình 1.3 Bộ nhớ chương trình PIC 18F8722 
2.2.2. Bộ nhớ dữ liệu 
Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia ra làm nhiều bank. 
Đối với PIC 18F8722 bộ nhớ dữ liệu được chia ra làm 16 bank. 
45 
Hình 1.4: Sơ đồ tổ chức bộ nhớ dữ liệu PIC 18F8722 
2.3. Các cổng vào ra của vi điều khiển 
46 
Cổng xuất nhập (I/O port) chính là phương tiện mà vi điều khiển dùng để 
tương tác với thế giới bên ngoài. Sự tương tác này rất đa dạng và thông qua quá 
trình tương tác đó, chức năng của vi điều khiển được thể hiện một cách rõ ràng. 
Một cổng xuất nhập của vi điều khiển bao gồm nhiều chân (I/O pin), tùy 
theo cách bố trí và chức năng của vi điều khiển mà số lượng cổng xuất nhập và 
số lượng chân trong mỗi cổng có thể khác nhau. Bên cạnh đó, do vi điều khiển 
được tích hợp sẵn bên trong các đặc tính giao tiếp ngoại vi nên bên cạnh chức 
năng là cổng xuất nhập thông thường, một số chân xuất nhập còn có thêm các 
chức năng khác để thể hiện sự tác động của các đặc tính ngoại vi nêu trên đối với 
thế giới bên ngoài. Chức năng của từng chân xuất nhập trong mỗi cổng hoàn 
toàn có thể được điều khiển được thông qua các thanh ghi SFR liên quan đến 
chân xuất nhập đó. 
Vi điều khiển PIC18F8722 có 9 cổng xuất nhập, bao gồm PORTA, 
PORTB, PORTC, PORTD, PORTE, PORTF, PORTG, PORTH, PORTJ 
Trong khuôn khổ đồ án sẽ khảo sát PORTA vì đặc điểm và phương pháp 
điều khiển các PORT khác không có nhiều sự khác biệt. Bên cạnh đó mỗi PORT 
còn có thêm các chức năng riêng biệt như ngắt, ADC, bộ so sánh…. 
 PORTA 
PORTA (RPA) bao gồm 8 I/O pin. Đây là các chân có thể xuất và nhập 
được. Chức năng I/O này được điều khiển bởi thanh ghi TRISA (địa chỉ 92h). 
Muốn xác lập chức năng của một chân trong PORTA là input, ta “set” bit điều 
khiển tương ứng với chân đó trong thanh ghi TRISA và ngược lại, muốn xác lập 
chức năng của một chân trong PORTA là output, ta “clear” bit điều khiển tương 
ứng với chân đó trong thanh ghi TRISA. Thao tác này hoàn toàn tương tự đối với 
các PORT và các thanh ghi điều khiển tương ứng TRIS (đối với PORTA là 
TRISA, đối với PORTB là TRISB…..). Các thanh ghi SFR chính liên quan đến 
PORTA bao gồm: 
PORTA : giá trị logic của các chân trong PORTA. 
47 
TRISA : điều khiển hướng xuất nhập cho PORTA 
LATA : thanh ghi điều khiển dữ liệu PORTA. 
2.4. Hoạt động định thời Timer 
Vi điều khiển PIC18F8722 có đến 5 Timer là Timer0, Timer1, Timer2, Timer3 
và Timer4. Trong đó có 2 Timer 8 bit và 3 Timer 16 bit. 
 Bộ định thời Timer1 
Bộ định thời Timer1 là một bộ định thời/bộ đếm 16 bit gồm hai thanh ghi 
TMR1H ( byte cao ) và TMR1L ( byte thấp ) mà có thể đọc hoặc ghi . Cặp thanh 
ghi này tăng số đếm từ 0000h đến FFFFh và một tràn sẽ xuất hiện khi có sự 
chuyển số đếm từ FFFFh xuống 0000h . Ngắt, nếu được phép có thể phát ra khi 
có số đếm tràn và được đặt ở bit cờ ngắt TMR1IF. Ngắt có thể được phép hoặc 
cấm bằng cách đặt hoặc xóa bit cho phép ngắt TMR1IE. 
Bộ định thời Timer1 có thể được cấu hình để hoạt động một trong hai chế 
độ sau: 
 Định thời một khoảng thời gian ( Timer ) 
 Đếm sự kiện ( Counter ) 
Việc lựa chọn một trong hai chế độ được xác định bằng cách đặt hoặc xóa 
bit chọn clock TMR1CS. Trong chế độ định một khoảng thời gian, bộ định thời 
tăng số đếm lên sau mỗi chu kỳ lệnh. Trong chế độ đếm sự kiện, bộ định thời 
tăng sau mỗi cạnh lên của clock ngoài đặt vào. Bộ định thời 1 có thể được phép 
hoặc cấm bằng cách đặt hoặc xóa bit điều khiển TMR1ON. 
Hình 1.5: Thanh ghi điều khiển Timer1 
48 
Hình 1.6: Sơ đồ khối Timer1 
Hình 1.7: Sơ đồ khối Timer1 (16-BIT READ/WRITE MODE) 
Hình 1.8: Các thanh ghi liên quan đến bộ định thời Timer1 
2.5. Ngắt 
49 
PIC18F8722 có nhiều nguồn tạo ra hoạt động ngắt và được điều khiển bởi 
rất nhiều thanh ghi: RCON; INTCON; INTCON2; INTCON3; PIR1, PIR2; 
PIE1, PIE2; IPR1, IPR2. Bên cạnh đó mỗi ngắt còn có một bit điều khiển và cờ 
ngắt riêng. Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt 
xảy ra bất chấp trạng thái của bit GIE, tuy nhiên hoạt động ngắt vẫn phụ thuộc 
vào bit GIE và các bit điều khiển khác. Bit điều khiển ngắt RB0/INT0 và TMR0 
nằm trong thanh ghi INTCON, thanh ghi này còn chứa bit cho phép các ngắt 
ngoại vi PEIE. Bit điều khiển các ngắt nằm trong thanh ghi PIE1 và PIE2. Các 
cờ ngắt ngoại vi được chứa trong hai thanh ghi chức năng đặc biệt : thanh ghi 
PIR1 và PIR2.Các bit cho phép ngắt tương ứng được chứa trong hai thanh ghi 
PIE 1 và PIE 2. 
Trong một thời điểm chỉ có một chương trình ngắt được thực thi, chương 
trình ngắt được kết thúc bằng lệnh RETFIE. Khi chương trình ngắt được thực thi, 
bit GIE tự động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất 
vào trong bộ nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0008h. Lệnh 
RETFIE được dùng để thoát khỏi chương trình ngắt và quay trở về chương trình 
chính, đồng thời bit GIE cũng sẽ được set để cho phép các ngắt hoạt động trở lại. 
Các cờ hiệu được dùng để kiểm tra ngắt nào đang xảy ra và phải được xóa bằng 
chương trình trước khi cho phép ngắt tiếp tục hoạt động trở lại để ta có thể phát 
hiện được thời điểm tiếp theo mà ngắt xảy ra. 
Khi một ngắt được đáp ứng, bit GIE được xóa và cấm tất cả các ngắt 
khác.Cờ ngắt phải được xóa bởi phần mềm trước khi cho phép lại ngắt.Thông 
thường, trước khi thực hiện các chương trình phục vụ ngắt, nội dung các thanh 
ghi w và status nên được lưu lại để bảo đảm an toàn và được phục hồi trước khi 
trở lại chương trình chính. 
Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ sự thay đổi 
trạng thái các Pin của PortB (PORTB interrupt-on-change), việc xác định ngắt 
nào xảy ra cần 3 hoặc 4 chu kì lệnh tùy thuộc vào thời điểm xảy ra ngắt. 
50 
Trong quá trình thực thi ngắt, chỉ có giá trị của bộ đếm chương trình được 
cất vào trong Stack, trong khi một số thanh ghi quan trọng sẽ không được cất và 
có thể bị thay đổi giá trị trong quá trình thực thi chương trình ngắt. Điều này nên 
được xử lí bằng chương trình để tránh hiện tượng trên xảy ra. 
 Hình 1.9: Sơ đồ logic của tất cả các ngắt trong vi điều khiển PIC18F8722 
2.6. Truyền thông nối tiếp 
EUSART (Enhanced Universal Synchronous Asynchronous Receiver 
Transmitter) là một bộ truyền thông nối tiếp. Ở đây sẽ khảo sát bộ truyền thông 
nối tiếp trong chế độ không đồng bộ 
Ở chế độ truyền này EUSART hoạt động theo chuẩn NRZ (None-Return-
to-Zero), nghĩa là các bit truyền đi sẽ bao gồm 1 bit Start, 5,6,7,8 hoặc 9 bit dữ 
liệu và 1 bit Stop. Bit LSB (Least Significant Bit) sẽ được truyền đi trước. Các 
khối truyền và nhận data độc lập với nhau sẽ dùng chung tần số tương ứng với 
51 
tốc độ baud cho quá trình dịch dữ liệu (tốc độ baud gấp 16 hay 64 lần tốc độ dịch 
dữ liệu tùy theo giá trị của bit BRGH), và để đảm bảo tính hiệu quả của dữ liệu 
thì hai khối truyền và nhận phải dùng chung một định dạng dữ liệu. 
Bộ EUSART bất đồng bộ bao gồm các thành phần quan trọng sau: 
 Bộ phát tốc độ baud ( BRG ) 
 Mạch lấy mẫu 
 Bộ phát bất đồng bộ. 
 Bộ thu bất đồng bộ. 
 Bộ phát bất đồng bộ EUSART. 
Phần chính của bộ phát là thanh ghi dịch nối tiếp phát (TSR). Nó nhận dữ 
liệu từ thanh ghi đệm phát TXREG. Thanh ghi TXREG được nạp dữ liệu bởi 
phần mềm.Thanh ghi TXR sẽ không được nạp dữ liệu cho đến khi stop bit đã 
được phát đi trong lần nạp trước đó. ngay khi stop bit được phát.TSR được nạp 
giá trị mới từ thanh ghi TXREG. Mỗi khi TXREG phát dữ liệu đến TSR.TXREG 
rỗng và cờ TXIF được bật.Ngắt này có thể được cho phép hoặc không cho phép 
bằng cách đặt hoặc xóa bit TXIE ( PIE). Cờ TXIF sẽ được đặt bất chấp 
trạng thái của bit TXIE và không thể được xóa bởi phần mềm. Nó chỉ có thể 
được xóa khi dữ liệu mới được nạp vào thanh ghi TXREG. Trong khi bit TXIF 
chỉ ra trạng thái của thanh ghi TXREG thì bit TRMT lại chỉ ra trạng thái của 
thanh ghi TSR.Bit này chỉ có thể đọc, được đặt khi thanh ghi TSR rỗng. 
Việc phát dữ liệu được phép bằng cách cho phép bit TXEN. Việc phát dữ 
liệu thực sư không xảy ra cho đến khi thanh ghi TXREG được nạp dữ liệu và bộ 
BRG tạo ra một clock dịch.Việc phát dữ liệu cũng có thể được bắt đầu bằng nạp 
thanh ghi TXREG và cho phép bit TXEN. 
Để có thể phát 9 bit dữ liệu , bit TX9 được đặt và 9 bit dữ liệu được ghi 
đến bit TX9D.Bit thứ 9 phải được ghi trước khi ghi 8 bit dữ liệu đến TXREG. 
Để thiết lập chế độ phát bất đồng bộ , các bước sau được thực hiện : 
52 
1. Thiết lập tốc độ Baud cho thanh ghi SPBRGH:SPBRG , nếu tốc độ 
baud được yêu cầu cao , đặt bit BRGH. 
2. Set chân điều khiển RX/DT và TX/CK bằng “1”. 
3. Cho phép port nối tiếp bất đồng bộ bằng cách xóa bit SYNC và bit 
SPEN. 
4. Nếu cần phát 9 bit dữ liệu , đặt bit TX9. 
5. Set bit điều khiển CKTXP nếu dữ liệu phát bị đảo ngược. 
6. Cho phép phát dữ liệu bằng cách đặt bit điều khiển TXEN, có thể ngắt 
bit TXIF 
7. Nếu ngắt được yêu cầu , cho phép bit TXIE. Trường hợp có sử dụng 
ngắt , phải bảo đảm rằng bit GIE và bit PEIE trong thanh ghi INTCON 
được đặt. 
8. Nếu cần phát 9 bit dữ liệu , bit thứ 9 sẽ phụ thuộc vào bit dữ liệu 
TX9D 
9. Nhận 8 bit dữ liệu từ thanh ghi TXREG. Có thể bắt đầu truyền dữ liệu. 
Hình 1.10: Sơ đồ khối bộ truyền dữ liệu EUSART bất đồng bộ 
53 
 Hình 1.11: Các thanh ghi liên quan đến quá trình truyền bất đồng bộ 
 Bộ thu bất đồng bộ EUSART 
Sơ đồ khối của bộ thu được chỉ ra ở hình vẽ Dữ liệu nhận trên chân 
RC7/RX/DT và dồn vào khối khôi phục dữ liệu. Khối khôi phục dữ liệu thật ra 
là dịch dữ liệu tốc độ cao, hoạt động nhanh gấp 16 lần tốc độ Baud. Một khi chế 
độ bất đồng bộ được chọn thì việc tiếp nhận được phép bằng cách đặt Bit CREN 
(RCSTA). 
Trung tâm của bộ nhận là thanh ghi dịch nhận RSR. Sau khi lấy mẫu Bit 
Stop dữ liệu nhận trong RSR được truyền đến thanh ghi RCREG. Nếu việc 
truyền hoàn tất thì Bit Cờ RCIF lên 1. Ngắt thật sự cho phép hoặc không cho 
phép bằng cách đặt hoặc xóa Bit RCIE. Cờ RCIF chỉ là 1 Bit chỉ đọc và được xó 
bởi phần cứng. Nó được xóa khi thanh ghi RCREG được đọc và hoàn toàn 
không có dữ liệu. RCREG là 1 thanh ghi bộ đệm đôi (Bởi vì nó cho 2 Byte dữ 
liệu có thể truyền và nhận đồng thời đến RCREG FIFO và Byte thứ 3 bắt đầu 
được dịch chuyển đến thanh ghi RSR). Khi phát hiện ra Bit Stop của Byte thừ 3 
này, Nếu thanh ghi RCREG vẫn còn đầy thì Bit bào lỗi trànOERR(RCSTA), 
sẽ lên 1. Những dữ liệu trong RSR sẽ mất đi. Và thanh ghi RCREG có thể được 
đọc 2 lần để lấy lại 2 Byte trong FIFO. Bit báo tràn OERR phải được xóa trong 
phần mềm. 
Để thiết lập chế độ thu bất đồng bộ, các bước sau được yêu cầu : 
54 
1. Khởi tạo thanh ghi SPBRGH:SPBRG, BRGH và BRG16 bit cho việc chọn 
sai số tốc độ Baud. 
2. Set chân điều khiển RX/DT và TX/CK bằng “1”. 
3. Cho phép nhận qua Port nối tiếp bất đồng bộ bằng cách xóa Bit SYNC và 
cho Bit SPEN lên 1. 
4. Nếu ngắt xảy ra thì set Bit RCIE và Nếu sử dụng ngắt thì set bit GIE và 
PEIE của thanh ghi INTCON. 
5. Nếu nhận 9-Bit dữ liệu thì set Bit RX9 . 
6. Set bit CKTXP nếu dữ liệu nhận bị đảo ngược. 
7. Cho phép nhận dữ liệu bằng cách set Bit CREN. 
8. Sau khi dữ liệu được nhận , Bit Cờ ngắt RCIF sẽ được set và cờ ngắt được 
kích hoạt (nếu bit RCIE được set). 
9. Đọc nội dung thanh ghi RCSTA để nhận bit dữ liệu thứ 9 và xác định các 
lỗi xảy trong quá trình thu dữ liệu. 
10. Nhận 8 bit dữ liệu thu được bằng cách đọc nội dung thanh ghi RCREG. 
11. Nếu xuất hiện lỗi trong quá trình nhận thì xóa lỗi bằng cách xóa BitCREN 
55 
Hình 1.12: Sơ đồ khối bộ nhận dữ liệu EUSART không đồng bộ 
Hình 1.13: Các thanh ghi liên quan đến quá trình nhận dữ liệu không đồng bộ 
2.7. Truyền thông SPI 
SPI (Serial Peripheral Interface) là một dạng giao thức truyền nối tiếp 
được dùng để giao tiếp giữa VĐK với các thiết bị ngoại vi (EEPROM, 
SDcard…) 
2.7.1. Chế độ SPI trong vi điều khiển PIC 
56 
Giao tiếp SPI được hiện thực qua 4 chân của vi điều khiển: 
SDI( Serial Data In ): Tín hiệu nối tiếp được đưa vào vi điều khiển 
SDO( Serial Data Out): Tín hiệu nối tiếp từ vi điều khiển đi ra 
CLK(Clock): xung clock tạo ra bới master 
SS(Slave Select): tích cực mức thấp, dùng để chọn slave để truyền dữ liệu. 
Hình 1.14: Sơ đồ khối bộ SPI 
2.7.2. Các thanh ghi điều khiển SPI 
Chế độ SPI được điều khiển bằng 4 thanh ghi sau: 
 MSSP Control Register 1 (SSPCON1) 
57 
 MSSP Status Register (SSPSTAT) 
 Serial Receive/Transmit Buffer Register(SSPBUF) 
 MSSP Shift Register(SSPSR) – thanh ghi này không được truy xuất 
bởi người dùng 
Hai thanh ghi SSPCON1 và SSPSTAT là hai thanh ghi điều khiển, còn 
thanh ghi SSPSR là thanh ghi dùng để dịch dữ liệu ra/vào vi điều khiển, 
SSPBUF là thanh ghi dùng để đọc dữ liệu từ ngoài vào hoặc ghi dữ liệu để 
truyền ra ngoài. Ở chế độ nhận, 2 thanh SSPBUF và SSPSR là 1 bộ buffer đôi, 
khi dữ liệu từ ngoài truyền vào được lưu đầy đủ trong SSPSR(8 bits) thì dữ liệu 
này được truyền tới thanh ghi SSPBUF để người dùng lấy ra. Còn ở chế độ 
truyền thì khi dữ liệu được ghi vào thanh ghi SSPBUF thì cùng lúc dữ liệu đó 
cũng được ghi vào thanh ghi SSPSR để dịch ra ngoài. 
 Thanh ghi SSPSTAT 
Hình 1.15: Thanh ghi SSPSTAT 
Bit 7: 
SMP Sample bit 
SPI Master mode 
1 = dữ liệu vào sẽ được lấy ở cuối chu kỳ xung clock 
0 = dữ liệu vào sẽ được lấy ở giữa chu kỳ cung clock 
SPI Slave mode 
SMP phải được gán bằng 0 
Bit 6: 
CKE SPI Clock Select bit 
Bit 0: 
58 
BF BuFffer Full Status bit (dành cho quá trình nhận) 
1 = quá trình nhận hoàn thành, SSPBUF đầy 
0 = quá trình nhận đang thực hiện, SSPBUF trống 
 Thanh ghi SSPCON1 
Hình 1.16: Thanh ghi SSPCON1 
Bit 7: 
WCOL Write Collision Detect bit(chỉ dùng ở chế độ truyền tín hiệu) 
1 = thanh ghi SSPBUF được ghi đè dữ liệu trong khi dữ liệu cũ truyền chưa hết 
0 = không có đụng độ 
Bit 6: 
SSPOV Receive Overflow Indicator bit(dùng ở chế độ nhân tín hiệu) 
1 = có dữ liệu mới nhận về ghi đè lên thanh ghi SSPBUF trong khi dữ liệu trước 
đó chưa được đọc. 
0 = dữ liệu không bị ghi đè 
Bit 5: 
SSPEN Synchronous Serial Port Enable bit 
1 = bật chế độ SPI và các chân SDI, SDO, SCK, SS được cấu hình tương ứng. 
0 = tắt chế độ SPI 
Bit 4: 
CKP Clock Polarity Select bit 
1 = thiết lập trạng thái rảnh khi xung clock ở mức cao 
0 = thiết lập trạng thái rảnh khi xung clock ở mức thấp 
Bit 3-0: 
59 
SSPM3:SSPM0 Synchronous Serial Port Mode Select bit 
0101 = chế độ slave, clock = chân SCK, tắt chức năng của chân SS 
0100 = chế độ slave, clock = chân SCK, bật chức năng của chân SS 
0011 = chế độ master, clock = tần số của timer 2 /2 
0010 = chế độ master, clock = Fosc / 64 
0001 = chế độ master, clock = Fosc / 16 
0000 = chế độ master, clock = Fosc / 4 
PHỤ LỤC 2: GIỚI THIỆU VỀ TRÌNH BIÊN DỊCH 
MPLAB C18 
1. GIỚI THIỆU 
MPLAB C18 là một trình biên dịch C theo chuẩn ANSI dùng cho dòng 
PIC18 của Microchip. MPLAB C18 và các công cụ đi kèm cũng có thể được gọi 
bên trong MPLAB IDE. 
Trình biên dịch MPLAB C18 sử dụng ngôn ngữ C chuẩn làm cho sự phát 
triển của các ứng dụng hệ thống nhúng dễ dàng hơn. 
2. CÁC ĐẶC TRƯNG CỦA TRÌNH DỊCH MPLAB C18: 
 Tương thích với chuẩn ANSI-89. 
 Tích hợp MPLAB IDE để có thể dễ dàng quản lý project . 
 Tương thích với các module đối tượng được tạo bởi trình biên dịch 
hợp ngữ MPASM, cho phép kết hợp việc lập trình C và lập trình hợp 
ngữ trong cùng một project. 
 Đọc/ ghi vào bộ nhớ ngoài. 
60 
 Có các thư viện mở rộng hỗ trợ cho PMW, SPI, I2C, UART, USART 
và thư viện toán học. 
3. QUÁ TRÌNH TẠO RA FILE .HEX 
Đầu tiên, MPLAB C18 sẽ biên dịch file2.c và file3.c để tạo ra các file2.o 
và file3.o. MPASM biên dịch file1.asm thành file1.o. Sau đó, file4.o kết hợp 
với file3.o để tạo thành 1 thư viện gọi là lib1.lib. Cuối cùng, các file object 
còn lại liên kết cùng với file lib1.lib bởi trình liên kết MPLINK. MPLINK 
cũng có một linker script ở đầu vào là file script.lkr. MPLINK liên kết tất cả 
các file này để tạo ra các file đầu ra: output.cof, output.map, và output.hex. 
Hình 2.1: Quá trình tạo file .HEX 
61 
PHỤ LỤC 3 : GIAO TIẾP GIỮA PIC VÀ 
ETHERNET 
1. CÁC PHƯƠNG PHÁP GIAO TIẾP 
Thông thường để kết nối thiết bị điều khiển với mạng Ethernet có hai cách, 
một là sử dụng các vi điều khiển tích hợp sẵn phần giao tiếp với Ethernet, phổ 
biến là các dòng PIC18F66J60, PIC18F66J65, PIC18F67J60, PIC18F67J60, 
PIC18F86J60,…. của Microchip. Sử dụng phương thức này có ưu điểm viết mã 
code đơn giản, kích thước bo mạch nhỏ gọn. Ngoài ra còn có cách khác là sử 
dụng chip giao tiếp Ethernet ENC28J60, với cách sử dụng này bo mạch sẽ có 
kích thước lớn hơn, thường tách thành hai module độc lập được kết nối qua card 
hỗ trợ giao tiếp chuẩn SPI ( Serial Pheripheral Interface ). 
Trong module ghép nối Ethernet, ta chọn cách sử dụng chip ENC28J60. 
Các này có ưu điểm là sử dụng được cho bất kỳ vi điều khiển nào hỗ trợ SPI. 
2. CÁCH THỨC HOẠT ĐỘNG CỦA ENC28J60 
2.1. Đặc điểm 
ENC28J60 là thiết bị kết nối Ethernet độc lập theo chuẩn công nghiệp giao 
tiếp SPI. Nó được thiết kế để đáp ứng như một giao diện mạng Ethernet cho bất 
kì bộ điều khiển nào có trang bị giao tiếp SPI. 
Hình 3.1: ENC28J60. 
62 
2.2. Các chức năng của ENC28J60 
ENC28J60 bao gồm 7 khối chức năng chính: 
 Một giao tiếp SPI phục vụ cho kênh truyền thông giữa vi điều khiển với 
ENC28J60. 
 Các thanh ghi điều khiển được sử dụng để điều khiển và giám sát 
ENC28J60. 
 Một bộ nhớ đệm RAM dùng cho nhận và truyền dữ liệu. 
 Một bộ phân xử để điều khiển truy nhập tới bộ đệm RAM khi yêu cầu 
được tạo ra từ DMA, khối nhận và truyền. 
 Giao diện bus để trao đổi dữ liệu và nhận lệnh qua giao tiếp SPI. 
 Module MAC thực hiện phép logic MAC theo IEEE 802.3. 
 Module PHY mã hóa và giải mã dữ liệu tương tự truyền trên cặp đôi dây 
xoắn. 
. 
Hình 3.2 : Giao diện cơ bản ENC28J60 
2.3. Hoạt động 
Tất cả bộ nhớ bên trong ENC28J60 là kiểu RAM tĩnh (SRAM ). 
Có 3 loại bộ nhớ : 
63 
 Bộ nhớ chứa các thanh ghi điều khiển được sử dụng để cấu hình, 
điều khiển và lấy lại trạng thái của ENC28J60. Chúng được đọc và 
ghi trực tiếp bởi giao tiếp SPI. 
 Bộ nhớ chứa các thanh ghi điều khiển được chia thành 4 ngăn 
(bank ), có thể được chọn bởi các bit chọn ngăn BSEL1:BSEL0 
trong thanh ghi ECON1. Mỗi bank dài 32 bytes và được đánh 5 bit 
địa chỉ. Vị trí của 5 bytes cuối cùng (từ 1Bh đến 1Fh) của tất cả các 
bank đều có chung năm thanh ghi EIE, EIR, ESTAT, ECON1, 
ECON2. 
 Bộ đệm Ethernet là bộ nhớ đệm có được sử dụng để truyền và nhận 
dữ liệu. Kích thước của bộ đệm là 8Kbyte và được chia thành bộ 
đệm nhận và bộ đệm truyền. Trong đó, kích thước và vị trí của các 
bộ đệm trên được lập trình bởi vi điều khiển qua giao tiếp SPI. Nội 
dung của bộ đệm Ethernet được truy cập thông qua các con trỏ đọc 
và ghi kết hợp với các lệnh đọc và ghi bộ nhớ đệm SPI. 
Hình 3.3: Các vùng nhớ của ENC28J60. 
64 
Bộ đệm nhận là vùng nhớ tạm thời dùng để lưu dữ liệu nhận được từ mạng 
Ethernet. Các cặp thanh ghi ERXSTH: ERXSTL và ERXNDH : ERXNDL đóng 
vai trò như là các con trỏ để xác định kích thước và vị trí của bộ đệm trong bộ 
nhớ. Khi các byte của dữ liệu nhận được từ giao diện Ethernet thì chúng sẽ được 
ghi vào trong bộ đệm nhận một cách tuần tự. 
Bộ đệm truyền sẽ chiếm phần bộ nhớ còn lại trong bộ đệm Ethernet. Bộ 
đệm này cũng được xác định kích thước và vị trí thông qua các cặp thanh ghi 
ETXST và ETXSN như các con trỏ. Dữ liệu trước khi truyền lên mạng Ethernet 
sẽ được lưu tạm thời trong vùng nhớ này. 
Hình 3.4: Vùng đệm truyền nhận của ENC28J60. 
65 
Các thanh ghi PHY được sử dụng để cấu hình, điều khiển và lấy lại trạng 
thái của module PHY. Các thanh ghi này không được truy nhập trực tiếp qua 
giao diện SPI, chúng chỉ có thể được truy nhập qua MII thực hiện trong MAC. 
Mọi hoạt động của ENC28J60 phụ thuộc vào toàn bộ các lệnh được đưa từ 
vi điều khiển thông qua giao diện SPI. Các lệnh này được sử dụng để truy nhập 
tới bộ nhớ chứa các thanh ghi điều khiển và bộ đệm Ethernet. 
Lệnh đọc thanh ghi điều khiển (RCR) cho phép vi điều khiển đọc bất kì 
các thanh ghi nào của ETH, MAC, MII. Lệnh đọc bộ nhớ đệm(RBM)cho phép vi 
điều khiển có thể đọc các bytes bên trong bộ nhớ đệm truyền và nhận.Lệnh viết 
thanh ghi điều khiển viết WCR cho phép vi điều khiển viết tới bất kì các thanh 
ghi nào của ETH, MAC, MII. Lệnh viết tới bộ nhớ đệm WBM cho phép vi điều 
khiển viết các bytes trong 8-Kbyte bộ nhớ đệm truyền và nhận. Lệnh BSF dùng 
để thiết lập 8 bits điều khiển trong thanh ghi ETH. Lệnh này không được sử 
dụng với thanh ghi MAC, PHY, MII hay bộ nhớ đệm. Lệnh BFC dùng để xóa 8 
bits trong thanh ghi điều khiển ETH. Lệnh reset hệ thống SRC cho phép vi điều 
khiển phát ra lệnh SSR. Không giống như các lệnh SPI khác. Lệnh SRC chỉ là 
lệnh 1 byte, không tác động lên các thanh ghi khác. 
66 
PHỤ LỤC 4: THÔNG SỐ KỸ THUẬT CỦA SIM900 
Hình 4.1: Sim900 
Các thông số kỹ thuật 
1. Nguồn cung cấp khoảng 3,2 – 4,8V 
2. Nguồn lưu trữ 
3. Băng tần 
 EGSM 900Mhz, DCS 1800 Mhz và PCS 1900Mhz 
 Phù hợp với GSM Pha 2/2+ 
4. Loại GSM là loại MS nhỏ 
5. Kết nối GPRS 
 GPRS có nhiều rãnh loại 8 ( lựa chọn ) 
 GPRS có nhiều ránh loại 10 ( tự động ) 
6. Giới hạn nhiêt độ: 
 Bình thường -900 C tới +700C 
 Hạn chế : - 350C tới -900 C và +700C tới +800C 
67 
 Nhiệt độ bảo quản: -450C tới 850C 
7. Dữ liệu GPRS: 
 GPRS dữ liệu tải xuống: Max 85.6 kbps 
 GPRS dữ liệu tải lên: Max 42.8 kbps 
 Sơ đồ mã hóa: CS-1, CS-2, CS-3 và CS-4 
 Sim 900 hổ trợ giao thức PAP ,kiểu sử dụng kết nối PPP 
 Sim 900 tích hợp giao thức TCP/IP 
 Chấp nhận thông tin được điều chỉnh rộng rãi 
8. CSD: 
 Tốc độ truyền dẫn CSD: 2; 4; 8; 9; 6; 14 KPPS 
 Hỗ trợ USSD 
9. SMS: 
 MT, MO, CB, Text and PDU mode 
 Bộ nhớ SMS: Sim, card 
 10. FAX: 
 Nhóm 3 loại 1 
 11.Sim card: 
 Hỗ trợ sim card: 1,8v ; 3v 
 12. Anten ngoài: 
 Kết nối thông qua anten ngoài 500km hoặc đế anten 
 13. Âm thanh: 
 Dạng mã hòa âm thanh. 
 Mức chế độ (ETS 06.20) 
 Toàn bộ chế độ (ETS 06.10) 
 Toàn bộ chế độ tăng cường (ETS 06.50/ 06.06/ 06.80) 
 Loại bỏ tiếng dội 
 14. Giao tiếp nối tiếp và sự ghép nối: 
68 
 Cổng nối tiếp: 7 Cổng nối tiếp( ghép nối) 
 Cổng kết nối có thể Sd với CSD Fax, GPRS và gửi lệnh 
ATCommand tới mudule điều khiển 
 Cổng nối tiếp có thể Sd chức năng giao tiếp 
 Hỗ trợ tốc độ truyền 1200 BPS tới 115200 BPS 
 Cổng hiệu chỉnh lỗi: 2 cổng nối tiếp TXD và RXD 
 Cổng hiệu chỉnh lỗi chỉ sử dụng sữa lỗi 
 15. Quản lý danh sách: 
 Hỗ trợ mẫu danh sách: SM, FD, LD, RC,ON, MC 
 16. Sim Application toolkit: 
 Hỗ trợ SAT loại GSM 11,14 bản 99 
 17. Đồng hồ thời gian thực: 
 Người cài đặt 
 18. Times function: 
 Lập trình thông qua AT Command 
 19. Đặc tính vật lý (đặc điểm): 
 Kích thướt 50±0.15 x 33±0.15 x7.7±0.3mm 
 Nặng 13.8 kg 
            Các file đính kèm theo tài liệu này:
 do_an_9098.pdf do_an_9098.pdf