Khái quát 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. SMS xuất hiện đầu tiên ở Châu âu vào năm 1992. Ở thời điểm đó, nó bao gồm cả các chuẩn về GSM (Global System for Mobile Communications). Một thời gian sau đó, nó phát triển sang công nghệ wireless như CDMA và TDMA. Các chuẩn GSM và SMS có nguồn gốc phát triển bởi ETSI. ETSI là chữ viết tắt của European Telecommunications Standards Institute. Ngày nay thì 3GPP (Third Generation Partnership Project) đang giữ vai trò kiểm soát về sự phát triển và duy trì các chuẩn GSM và SMS. Như đã nói ở trên về tên đầy đủ của SMS là Short Message Service, từ cụm từ đó, có thể thấy được là 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 (mã hóa kí tự 7 bit thì phù hợp với mã hóa các lí tự latin chẳng hạn như các lí tự alphabet của tiếng Anh). + 70 kí tự nếu như mã hóa kí tự 16 bit Unicode UCS2 được sử dụng (các tin nhắn SMS không chứa các kí tự latin như kí tự chữ Trung Quốc phải sử dụng mã hóa kí tự 16 bit). 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.Bên cạnh gữi tin nhắn dạng text thì tin nhắn SMS còn có thể mang các dữ liệu dạng binary. Nó còn cho phép gửi nhạc chuông, hình ảnh cùng nhiều tiện ích khác … tới một điện thoại khác. GVHD: Ks. Phạm Quang Trí Page 1 SVTH: Trần Nguyên Hoàng Hệ thống cảnh báo và điều khiển từ xa bằng tin nhắn SMS Một trong những ưu điểm nổi trội của SMS đó là nó được hỗ trợ bởi các điện thoại có sử dụng GSM hoàn toàn. Hầu hết tất cả các tiện ích cộng thêm gồm cả dịch vụ gửi tin nhắn giá rẻ được cung cấp, sử dụng thông qua sóng mang wireless. Không giống như SMS, các công nghệ mobile như WAP và mobile Java thì không được hỗ trợ trên nhiều model điện thoại. Sử dụng tin nhắn SMS ngày càng phát triển và trở lên rộng khắp : - Các tin nhắn SMS có thể được gửi và đọc tại bất kỳ thời điểm nào. Ngày nay, hầu hết mọi người đều có điện thoại di động của riêng mình và mang nó theo người hầu như cả ngày. Với một điện thoại di động , bạn có thể gửi và đọc các tin nhắn SMS bất cứ lúc nào bạn muốn, sẽ không gặp khó khăn gì khi bạn đang ở trong văn phòng hay trên xe bus hay ở nhà… - Tin nhắn SMS có thể được gửi tới các điện thoại mà tắt nguồn. Nếu như không chắc cho một cuộc gọi nào đó thì bạn có thể gửi một tin nhắn SMS đến bạn của bạn thậm chí khi người đó tắt nguồn máy điện thoại trong lúc bạn gửi tin nhắn đó. Hệ thống SMS của mạng điện thoại sẽ lưu trữ tin nhắn đó rồi sau đó gửi nó tới người bạn đó khi điện thoại của người bạn này mở nguồn. - Các tin nhắn SMS ít gây phiền phức trong khi bạn vẫn có thể giữ liên lạc với người khác Việc đọc và viết các tin nhắn SMS không gây ra ồn ào. Trong khi đó, bạn phải chạy ra ngoài khỏi rạp hát, thự viện hay một nơi nào đó để thực hiện một cuộc điện thoại hay trả lời một cuộc gọi. Bạn không cần phải làm như vậy nếu như tin nhắn SMS được sử dụng. - Các điện thoại di động và chúng có thể được thay đổi giữa các sóng mang Wireless khác nhau. Tin nhắn SMS là một công nghệ rất thành công và trưởng thành. Tất cả các điện thoại mobile ngày nay đều có hỗ trợ nó. Bạn không chỉ có thể trao đổi các tin nhắn SMS đối với người sử dụng mobile ở cùng một nhà cung cấp dịch vụ mạng sóng mang wireless, mà đồng thời bạn cũng có thể trao đổi nó với người sử dụng khác ở các nhà cung cấp dịch vụ khác. GVHD: Ks. Phạm Quang Trí Page 2 SVTH: Trần Nguyên Hoàng Hệ thống cảnh báo và điều khiển từ xa bằng tin nhắn SMS - cùng với nó. SMS là một công nghệ phù hợp với các ứng dụng Wireless sử dụng Nói như vậy là do: Thứ nhất, tin nhắn SMS được hỗ trợ 100% bởi các điện thoại có sử dụng công nghệ GSM. Xây dựng các ứng dụng wireless trên nền công nghệ SMS có thể phát huy tối đa những ứng dụng có thể dành cho người sử dụng. Thứ hai, các tin nhắn SMS còn tương thích với việc mang các dữ liệu binary bên cạnh gửi các text. Nó có thể được sử dụng để gửi nhạc chuông, hình ảnh, hoạt họa … Thứ ba, tin nhắn SMS hỗ trợ việc chi trả các dịch vụ trực tuyến.
Trang 1Phần 1 TỔNG QUAN VỀ CÁC LINH KIỆN DÙNG TRONG ĐỀ TÀI
I Giới thiệu về GSM Module SIM900
1 Khái quát 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 SMS xuất hiện đầu tiên ở Châu âu vào năm 1992 Ở thời điểm đó, nó bao gồm cả các chuẩn về GSM (Global System for Mobile Communications) Một thời gian sau đó, nó phát triển sang công nghệ wireless như CDMA và TDMA Các chuẩn GSM và SMS có nguồn gốc phát triển bởi ETSI ETSI là chữ viết tắt của European Telecommunications Standards Institute Ngày nay thì 3GPP (Third Generation Partnership Project) đang giữ vai trò kiểm soát về sự phát triển và duy trì các chuẩn GSM và SMS
Như đã nói ở trên về tên đầy đủ của SMS là Short Message Service, từ cụm
từ đó, có thể thấy được là 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 (mã hóa kí tự 7 bit thì phù hợp với mã hóa các lí tự latin chẳng hạn như các lí tự alphabet của tiếng Anh)
+ 70 kí tự nếu như mã hóa kí tự 16 bit Unicode UCS2 được sử dụng (các tin nhắn SMS không chứa các kí tự latin như kí tự chữ Trung Quốc phải sử dụng mã hóa kí tự 16 bit)
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.Bên cạnh gữi tin nhắn dạng text thì tin nhắn SMS còn
có thể mang các dữ liệu dạng binary Nó còn cho phép gửi nhạc chuông, hình ảnh cùng nhiều tiện ích khác … tới một điện thoại khác
Trang 2Một trong những ưu điểm nổi trội của SMS đó là nó được hỗ trợ bởi các điện thoại có sử dụng GSM hoàn toàn Hầu hết tất cả các tiện ích cộng thêm gồm cả dịch
vụ gửi tin nhắn giá rẻ được cung cấp, sử dụng thông qua sóng mang wireless Không giống như SMS, các công nghệ mobile như WAP và mobile Java thì không được hỗ trợ trên nhiều model điện thoại
Sử dụng tin nhắn SMS ngày càng phát triển và trở lên rộng khắp :
- Các tin nhắn SMS có thể được gửi và đọc tại bất kỳ thời điểm nào Ngày nay, hầu hết mọi người đều có điện thoại di động của riêng mình và mang nó theo người hầu như cả ngày Với một điện thoại di động , bạn có thể gửi
và đọc các tin nhắn SMS bất cứ lúc nào bạn muốn, sẽ không gặp khó khăn gì khi bạn đang ở trong văn phòng hay trên xe bus hay ở nhà…
- Tin nhắn SMS có thể được gửi tới các điện thoại mà tắt nguồn
Nếu như không chắc cho một cuộc gọi nào đó thì bạn có thể gửi một tin nhắn SMS đến bạn của bạn thậm chí khi người đó tắt nguồn máy điện thoại trong lúc bạn gửi tin nhắn đó Hệ thống SMS của mạng điện thoại sẽ lưu trữ tin nhắn đó rồi sau
đó gửi nó tới người bạn đó khi điện thoại của người bạn này mở nguồn
- Các tin nhắn SMS ít gây phiền phức trong khi bạn vẫn có thể giữ liên lạc với người khác
Việc đọc và viết các tin nhắn SMS không gây ra ồn ào Trong khi đó, bạn phải chạy ra ngoài khỏi rạp hát, thự viện hay một nơi nào đó để thực hiện một cuộc điện thoại hay trả lời một cuộc gọi Bạn không cần phải làm như vậy nếu như tin nhắn SMS được sử dụng
- Các điện thoại di động và chúng có thể được thay đổi giữa các sóng mang Wireless khác nhau
Tin nhắn SMS là một công nghệ rất thành công và trưởng thành Tất cả các điện thoại mobile ngày nay đều có hỗ trợ nó Bạn không chỉ có thể trao đổi các tin nhắn SMS đối với người sử dụng mobile ở cùng một nhà cung cấp dịch vụ mạng sóng mang wireless, mà đồng thời bạn cũng có thể trao đổi nó với người sử dụng khác ở các nhà cung cấp dịch vụ khác
Trang 3- SMS là một công nghệ phù hợp với các ứng dụng Wireless sử dụng cùng với nó
Nói như vậy là do:
Thứ nhất, tin nhắn SMS được hỗ trợ 100% bởi các điện thoại có sử dụng công nghệ GSM Xây dựng các ứng dụng wireless trên nền công nghệ SMS có thể phát huy tối đa những ứng dụng có thể dành cho người sử dụng
Thứ hai, các tin nhắn SMS còn tương thích với việc mang các dữ liệu binary bên cạnh gửi các text Nó có thể được sử dụng để gửi nhạc chuông, hình ảnh, hoạt họa …
Thứ ba, tin nhắn SMS hỗ trợ việc chi trả các dịch vụ trực tuyến
2 Giới thiệu GSM Module SIM900
SIM900 là 1 Module GSM/GPRS 4 băng tần làm việc ở các tần số: GSM 850MHz, EGSM 900MHZ, DCS 1800MHz và PCS 1900MHz SIM900 có đầy đủ các tính năng cơ bản của 1 điện thoại di động GSM như gọi và nhận cuộc gọi, nhắn
và nhận tin SMS, gửi và nhận dữ liệu bằng kết nối GPRS thông qua tập lệnh AT
Trang 4Hạn chế : - 40ºC tới -30ºC và +80ºC tới +85ºC
Nhiệt độ bảo quản: -45ºC tới 90ºC
Dữ liệu GPRS:
GPRS dữ liệu download: Max 85.6 kbps
GPRS dữ liệu upload: Max 42.8 kbps
Giao tiếp SIM card: Hỗ trợ sim card: 1,8v ; 3v
Anten ngoài: có tiếp điểm kết nối với antena ngoài
Giao tiếp qua chân DBG_TXD và DBG_RXD
Dùng cho việc chỉnh sửa và nâng cấp firmware
Quản lý danh sách: Hỗ trợ các mẫu danh sách: SM, FD, LD, RC,ON, MC
Đồng hồ thời gian thực
Đặc tính vật lý (đặc điểm):
Trang 5• Kích thướt 24x24x3mm
Hình 1.1: Kích thước của SIM900
Trang 6Hình 1.2: Hình chụp mặt trên và mặt dưới SIM900
3 Sơ đồ chân và chức năng từng chân của SIM900
Hình 1.3: Sơ đồ chân SIM900 Chân 1,2 : điều khiển tắt/mở module
Chân 3, 4, 5, 6, 7, 8, 9, 10: chân giao tiếp cổng COM
Trang 7- DTR : Data Terminal ready ( DTE sẵn sàng làm việc)
- RI : Ring Indicator (báo chuông)
- DCD : Data Carier detect (DCE phát hiện sóng mang)
- DSR : Data Set Ready (DCE sẵn sàng làm việc)
- CTS : Clear To Send (DCE sẵn sàng nhận dữ liệu)
- RTS : Request To Send (DTE yêu cầu truyền dữ liệu)
- TXD : Transmitted Data (dữ liệu truyền)
- RXD : Received Data (dữ liệu nhận)
Chân 11, 12, 13, 14: chân giao tiếp màn hình LCD Chức năng giao tiếp LCD không hỗ trợ trong firmware tiêu chuẩn, để sử dụng, người dùng phải sửa đổi firmware
Chân 15 (VDD_EXT): nguồn 2.8V cung cấp cho mạch ngoài
Chân 16 (NRESET): reset module (tích cực mức thấp)
Chân 17, 18, 29, 39, 45, 46, 53, 54, 58, 59, 62, 63, 64, 65 (GND): chân mas Chân 19, 20 (MIC_P, MIC_N): ngõ vào micro
Chân 21, 22 (SPK_P, SPK_N): ngõ ra loa
Chân 23, 24 (LINEIN_R, LINEIN_L): ngõ vào âm thanh
Chân 25 (ADC): ngõ vào bộ chuyển đổi Analog-Digital (0 ~ 2.8V)
Chân 26 (VRTC): nguồn cung cấp cho RTC
Chân 27, 28 (DBG_TXD, DBG_RXD): dùng để tuỳ chỉnh và nâng cấp firmware
Chân 30, 31, 32, 33, 34 (SIM_VDD, SIM_DATA, SIM_CLK, SIM_RESET, SIM_PRESENCE): các chân giao tiếp với SIM card
- SIM_VDD: chân cấp nguồn cho SIM
- SIM_DATA: ngõ vào, ra dữ liệu
- SIM_CLK: cấp xung clock cho SIM
- SIM_RESET: reset SIM
- SIM_PRESENCE: chân giúp phát hiện thẻ SIM
Trang 8Chân 35, 36 (PWM1, PWM2): ngõ ra điều chế xung dùng cho đèn bàn phím
và bộ rung
Chân 37, 38 (SDA, SCL): chân dùng cho giao tiếp I²C
Chân 40-44, 47-51, 67, 68: các ngõ vào ra và kết nối với Keypad
Chân 52 (NETLIGH): ngõ ra đèn hiển thị trạng thái mạng
Chân 55, 56, 57 (VBAT): ngõ vào nguồn cung cấp cho Module
Chân 60 (RF_ANT): kết nối với antena ngoài
Chân 66 (STATUS): ngõ ra đèn hiển thị trạng thái hoạt động của Module
4 Tập lệnh AT của Module SIM900:
Module SIM900 giao tiếp với vi điều khiển hoặc máy tính thông qua giao tiếp RS232 và được điều khiển thông qua bộ tập lệnh AT viết tắt của từ Attention
do Dennis Hayes phát minh ra vào năm 1977 Trong tập lệnh AT, mỗi câu lệnh được bắt đầu với chữ “AT” hoặc “at”
Các thuật ngữ:
- <CR> : Carriage return (0x0D)
- <LF> : Line Feed (0x0A)
- MT (Mobile Terminal): Thiết bị đầu cuối mạng (trong trường hợp này là Module SIM900)
- TE (Terminal Equipment) Thiết bị đầu cuối (máy tinh, vi điều khiển)
4.1 Các lệnh khởi tạo GSM Module SIM900
Các lệnh khởi tạo chỉ cần được thực thi 1 lần, sau đó lưu lại và trở thành cấu hình mặc định của modem Cấu hình mặc định này không thay đổi, kể cả khi mất nguồn Phần khởi tạo này không liên quan đến quá trình hoạt dộng sau này của modem Do đó có thể khởi tạo riêng trước khi đưa vào vận hành trong hệ thống
ATZ<CR> : Reset modem, kiểm tra module đã hoạt động bình
ATZ<CR><CR><LF>OK<CR><LF>
Trang 9 ATE0<CR> : Tắt chế độ echo lệnh Chuỗi trả về có dạng ATE0<CR><CR><LF>OK<CR><LF>
AT+CLIP=1<CR> : Định dạng chuỗi trả về khi nhận cuộc gọi Thông thường, ở chế độ mặc định, khi có cuộc gọi đến, chuỗi trả
AT+CNMI=2,0,0,0,0<CR> : Thiết lập chế độ thông báo cho
TE khi MT nhận được tin nhắn mới Chuỗi trả về sẽ có dạng:
<CR><LF>OK<CR><LF>
Sau khi lệnh trên được thiết lập, tin nhắn mới nhận được sẽ được lưu trong SIM, và MT không truyền trở về TE bất cứ thông báo nào TE sẽ đọc tin nhắn được lưu trong SIM trong trường hợp cần thiết
AT+CSAS<CR> : Lưu cấu hình cài đặt được thiết lập bởi các lệnh AT+CMGF và AT+CNMI
4.2 Các lệnh thực hiện cuộc gọi
ATDxxxxxxxxxx;<CR> : Quay số cần gọi Chuỗi trả về có dạng:
<CR><LF>OK<CR><LF>
Trang 10Chuỗi này thông báo lệnh trên đã được nhận và đang được thực thi Sau đó là những chuỗi thông báo kết quả quá trình kết nối (nếu như kết nối không được thực hiện thành công)
Nếu MT không thực hiện được kết nối do sóng yếu, hoặc không có sóng (thử bằng cách tháo antenna của modem GSM), chuỗi trả về sẽ có dạng:
<CR><LF>NO DIAL TONE<CR><LF>
Nếu cuộc gọi bị từ chối bởi người nhận cuộc gọi, hoặc số máy đang gọi tạm thời không hoạt động (chẳng hạn như bị tắt máy) chuỗi trả về
có dạng: <CR><LF>NO CARRIER<CR><LF>
Nếu cuộc gọi không thể thiết lập được do máy nhận cuộc gọi đang bận (ví dụ như đang thông thoại với một thuê bao khác), chuỗi trả về sẽ có dạng:
Quá trình kết thúc cuộc gọi được diễn ra trong hai trường hợp: Đầu nhận cuộc gọi gác máy trước: chuỗi trả về sẽ có dạng:
Trang 11Với x là vị trí của tin nhắn được lưu trong Sim card
Đọc tin nhắn trong ngăn 1 bằng lệnh AT+CMGR=1<CR>
Nếu ngăn 1 không chứa tin nhắn, chỉ có chuỗi sau được trả về:
<CR><LF>OK<CR><LF>
Nếu ngăn 1 có chứa tin nhắn, nội dung tin nhắn sẽ được gửi trả về
TE với định dạng như sau:
UNREAD","+841228678499",,"07/05/12,09:32:05+28"
<CR><LF>NỘI DUNG<CR><LF>
<CR><LF>OK<CR><LF>
Trang 12Các tham số trong chuỗi trả về bao gồm trạng thái của tin nhắn (REC UNREAD), số điện thoại gửi tin nhắn (+841228678499) và thời gian gửi tin nhắn (07/05/12,09:32:05+28) và nội dung tin nhắn
Đây là định dạng mặc định của module SIM900 lúc khởi động Dạng mở rộng có thể được thiết lập bằng cách sử dụng lệnh AT+CSDH=1 trước khi thực hiện đọc tin nhắn
Sau khi đọc, tin nhắn được xóa đi bằng lệnh AT+CMGD=1<CR>
Số tham chiếu này có giả trị nằm trong khoảng từ 0 đến 255
Thời gian gửi một tin nhắn vào khoảng 3-4 giây (kiểm tra với mạng Mobi phone)
Trang 13Nếu tình trạng sóng không cho phép thực hiện việc gửi tin nhắn (thử bằng cách tháo antenna), hoặc chức năng RF của modem không được cho phép hoạt động (do sử dụng các lệnh AT+CFUN=0 hoặc AT+CFUN=4), hoặc số tin nhắn trong hàng đợi phía tổng đài vượt qua giới hạn cho phép, hoặc bộ nhớ chứa tin nhắn của MT nhận được tin nhắn bị tràn, MT sẽ gửi thông báo lỗi trở về và có định dạng như sau:
<CR><LF>+CMS ERROR: 193<CR><LF>
<CR><LF>+CMS ERROR: 515<CR><LF>
Chức năng truyền nhận tin nhắn và chức năng thoại được tách biệt Khi đang thông thoại vẫn có thể truyền nhận được tin nhắn Khi truyền nhận tin nhắn vẫn có thể tiến hành thiết lập và kết thúc cuộc gọi
4.4 Các lệnh về GPRS
AT+CGATT : lệnh gán hay tách thiết bị khỏi GPRS
AT+CGDCONT : định nghĩa dạng PDP
AT+CGQMIN : chất lượng dich vụ ở mức thấp nhất
AT+CGQREQ : chất lượng dich vụ
AT+CGDATA : trạng thái dữ liệu vào
AT+CGREG : tình trạng đăng ký của mạng
AT+CGCOUNT : đếm gói dữ liệu vào
Trong giới hạn của đề tài, ta chỉ sử dụng đến các lệnh thực hiện việc gửi và đọc tin nhắn SMS
II Giới thiệu Vi điều khiển Microchip PIC16F877A
1 Khái quát về Vi điều khiển PIC16F877A
Khối xử lí trung tâm đóng vai trò chính là PIC16F877A 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 PIC16F877A 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ề
Trang 14mặ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 VĐK
họ 89 với nhiều module được tích hợp sẵn như ADC 10 BIT, PWM 10 BIT, EEPROM 256 BYTE, COMPARATER, VERF COMPARATER…Về mặt giá cả thì có đôi chút chênh lệch như giá 1 con 89S52 khoảng 20.000 thì PIC16F877A là 80.000 nhưng khi so sánh như thế thì ta nên xem lại phần linh kiện cho việc thiết kế mạch nếu như sử dụng VĐK họ 89 muốn có ADC phải dùng thêm IC ADC chẳng hạn như ADC 0808 hay 0809 với giá vài chục ngàn và bộ opamp thì khi sử dung PIC nó đã tích hợp cho ta sẵn các module đó có nghĩa là không cần bổ sung thêm ADC, Opam, EPPROM vì PIC đã có sẵn trong nó Ngoài ra việc sử dụng VĐK PIC16F877A có nhiều thuận lợi hơn trong thiết kế board, khi đó board mạch sẽ nhỏ gọn và đẹp hơn dễ thi công hơn rất nhiều, vì tính về giá cả tổng cộng cho đến lúc thành phẩm thì PIC có thể xem như rẻ hơn VĐK họ 89 Một điều đặc biệt nữa là tất
cả các con PIC được sử dụng thì đều có chuẩn PI tức chuẩn công nghiệp thay vì chuẩn PC (chuẩn dân dụng)
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 với rất nhiều trình biên dịch như CCS, HTPIC, MirkoBasic,… Bên cạnh đó với bề dày của sự phát triển lâu đời PIC đã tạo ra rất nhiều diễn đàn sôi nổi về PIC cả trong và ngoài nước 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 PIC16F877A đượ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 với độ dài 14bit rất dễ nhớ và dễ học 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à 20MHz với 1 chu kỳ lệnh là 200ns
- Bộ nhớ chương trình: 8K x 14 words; bộ nhớ dữ liệu: 368 x 8 Bytes (RAM);
bộ nhớ dữ liệu EEPROM 256 x 8 bytes
- Khả năng ngắt lên đến 14 nguồn ngắt
Trang 15- Dải điện thế hoạt động rộng: từ 2.0V đến 5.5V
- Mức công suất tiêu thụ thấp:
Nhỏ hơn 0.6 mA khi điện thế cấp là 3V, tần số thạch anh 4 MHz
20 μA khi điện thế cấp là 3V, tần số thạch anh 32 kHz
Nhỏ hơn 1 μA ở chế độ chờ với nguồn dự phòng
- Số PORT I/O là 5 với 33 pin I/O
- Các đặc tính ngoại vi bao gồm các khối chức năng sau:
Timer0: bộ đếm/ định thời 8 bit với bộ chia tần số 8 bit
Timer1: bộ đếm/ định thời 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động
ở chế độ sleep
Timer2: bộ đếm/ định thời 8 bit
2 bộ Capture (thu thập) 16 bit với độ chính xác tối đa là 12.5ns
2 bộ Compare (so sánh) 16 bit với độ chính xác tối đa là 200ns
2 bộ PWM (điều chế độ rộng xung) 10 bit
Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI (Serial Peripheral Interface Bus) và I²C (Inter-Integrated Circuit)
Chẩn giao tiếp nối tiếp USART với 9 bit địa chỉ
Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển RD, WR, CS ở bên ngoài
1 bộ ADC với 8 kênh 10 bit
Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:
Bộ nhớ Flash với khả năng ghi xoá được 100.000 lần
Bộ nhớ EEPROM với khả năng ghi xoá được 1.000.000 lần
Dữ liệu bộ nhớ 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
Trang 16 Nạp được chương trình ngay trên mạch điện ICSP (In Circuit Serial Programming) thông qua 2 chân
Watchdog Timer với bộ dao động trong
Chức năng bảo mật mã chương trình
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
Trang 172 Sơ đồ khối và khái quát cấu trúc phần cứng của VĐK PIC16F877A
2.1 Sơ đồ khối vi điều khiển PIC16F877A
Trang 182.2 Một số đặc tính của CPU
2.2.1 Configuration bit
Đây là các bit dùng để lựa chọn các đặc tính của CPU Các bit này được
chứa trong bộ nhớ chương trình tại địa chỉ 2007h và chỉ có thể được truy xuất trong
quá trình lập trình cho VĐK Chi tiết về các bit này như sau:
Bit 13 : CP (Code Protection)
1: tắt chế bảo vệ mã chương trình
0: bật chế độ bảo vệ mã chương trình
Bit 12, 5, 4 : không quan tâm và được mặc định mang giá trị 0
Bit 11 : DEBUG (In-circuit debug mode bit)
1: không cho phép, RB7 và RB6 được xem như các pin xuất nhập bình thường
0: cho phép, RB6 và RB7 là các pin được sử dụng cho quá trình debug
Bit 10, 9 : WRT1 : WRT0 (Flash Program Memory Write Enable bit)
11: tắt chức năng chống ghi, EECON sẽ điều khiển quá trình ghi lên tòan bộ nhớ chương trình
10: chỉ chống ghi từ địa chỉ 0000h : 00FFh
01: chỉ chống ghi từ địa chỉ 0000h : 07FFh
00: chỉ chống ghi từ địa chỉ 0000h : 0FFFh
Trang 19Bit 8 : CPD (Data EEPROM Memory Write Protection bit)
1: tắt chức năng bảo vệ mã của EEPROM
Bit 6 : BODEN (Brown-out Reset Enable bit)
1: cho phép BOR (Brown-out Reset)
0: không cho phép BOR
Bit 3 : PWRTEN (Power-up Timer Enable bit)
Trang 2001: sử dụng XT oscillator
00: sử dụng LP oscillator
2.2.2 Các đặc tính của Oscillator
PIC16F877A có khả năng sử dụng một trong 4 lọai oscillator, đó là:
LP: (Low Power Crystal)
ra bất chấp trạng thái của bit GIE, tuy nhiên họat độ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/INT và TMR0 nằm trong thanh ghi INTCON, thanh ghi này còn chứa bit cho phép các ngắt ngọai vi PEIE Bit điều khiển các ng8át nằm trong thanh ghi PIE1 và PIE2 Cờ ngắt của các ngắt nằm trong thanh ghi PIR1 và PIR2
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 được cất vào bộ nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h Lệnh RETFIE được dùng để thóat khỏi chương trình ngắt và quay trở về chương trình chính, đồng thời
Trang 21bit GIE cũng được set để cho phép các ngắt họat độ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 chính trước khi cho phép ngắt tiếp tục họat động trở lại để ta có thể phát hiện thời điểm tiếp theo mà ngắt xảy ra
Đối với các ngắt ngọai 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, 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
2.2.3.1 Ngắt INT Ng8át này dựa trên sự thay đổi trạng thái của pin RB0/INT Cạnh tác động gây ra ng8át có thể là cạnh lên hay cạnh xuống và được điều khiển bởi bit INTEDG (thanh ghi OPTIONREG<6>) Khi có cạnh tác động thích hợp xuất hiện tại pin RB0/INT, cờ ngắt INTF được set bất chấp trạng thái các bit điều khiển GIE và PEIE Ngắt này có khả năng đánh thức CĐK từ chế độ sleep nếu bit cho phép ngắt được set trước khi lệnh SLEEP được thực thi
Trang 222.2.3.2 Ngắt do sự thay đổi trạng thái các pin trong PORTB Các pin PORTB<7:4> được dùng cho ngắt này và được điều khiển bởi bit RBIE (thanh ghi INTCON<4>) Cờ ngắt của ngắt này là bit RBIF (INTCON<0>)
2.3 Các cổng xuất nhập của PIC16F877A
VĐK PIC16F877A có 5 cổng xuất nhập, bao gồm PORTA, PORTB, PRTC, PORTD, PORTE Muốn xác lập chức năng của một chân trong PORT A 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 PORT A là output, ta clear bit điều khiển tương ứng với trong đó trong thanh ghi TRISA 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 PORT A là TRISA, đối với PORT B
là TRISB, đối với PORT C là TRISC, đối với PORT D là TRISD, đối với PORT D
là TRISD)
2.3.1 PORT A
PORT A (RPA) bao gồm 6 I/O pin Đây là các chân “hai chiều” (bidirectional pin), nghĩa là 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ỉ 85h) Bên cạnh đó PORT A còn là ngõ vào của
bộ ADC, bộ so sánh, ngõ vào xung clock của Timer0 và ngõ vào của bộ giao tiếp MSSP (Master Synchronous Serial Port)
Các thanh ghi SFR liên quan đến PORTA bao gồm:
o PORTA (địa chỉ 05h) : chứa giá trị các pin trong PORTA
o TRISA (địa chỉ 85h) : điều khiển xuất nhập
o CMCON (địa chỉ 9Ch) : thanh ghi điều khiển bộ so sánh điện
áp
o ADCON1 (địa chỉ 9Fh) : thanh ghi điều khiển bộ ADC
Trang 23Các thanh ghi SFR liên quan đến PORTB bao gồm:
o PORTB (địa chỉ 06h, 106h) : chứa giá trị các pin trong PORT B
o TRISB (địa chỉ 86h, 186h) : điều khiển xúât nhập
Trang 24o OPTION_REG (địa chỉ 81h, 181h): điều khiển ngắt ngoại vi và bộ Timer0
Hình 1.6: Sơ đồ khối các chân RB3:RB0
Hình 1.7: Sơ đồ khối các chân
RB7:RB4
2.3.3 PORT C
PORT C (RPC) gồm 8 pin I/O Bên cạnh đó, PORT C còn chứa các chân chức năng của bộ so sánh, bộ Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I²C, SPI, SSP, USART
Các thanh ghi điều khiển liên quan đến PORT C;
o PORTC (địa chỉ 07h) : chứa giá trị các pin trong PORT C
o TRISC (địa chỉ 87h) : điều khiển xuất nhập
Trang 25Hình 1.9: Sơ đồ khối các chân RC2:RC0 và RC7:RC5 Hình 1.10: Sơ đồ khối các chân Rc4:RC3
2.3.4 PORT D
PORT D (RPD) gồm 8 pin I/O PORT D còn là cổng xúât dữ liệu của chuẩn giao tiếp PSP (Parallel Slave Port)
Các thanh ghi liên quan đến PORT D bao gồm:
o Thanh ghi PORTD : chứa giá trị các pin trong PORT D
o Thanh ghi TRISD : điều khiển xuất nhập
Trang 26Hình 1.21: Sơ đồ khối các chân RD7:RD0
2.3.5 PORT E
PORT E (RPE) gồm 3 chân I/O Các chân của PORT E có ngõ vào analog Bên cạnh đó PORTE còn là các chân điều khiển của chuẩn giao tiếp PSP
Các thanh ghi liên quan đến PORT E bao gồm:
thông số cho chuẩn giao tiếp PSP
Trang 27Hình 1.22: Sơ đồ khối các chân RE2:RE0
Để mã hoá được địa chỉ của 8K word bộ nhớ chương trình, bộ đếm chương tirnh2 có dung lượng 13 bit (PC<12:0>)
Trang 28Khi vi điều khiển được reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h (Reset Vector) Khi có ngắt xảy ra, bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h (Interrupt Vector)
Bộ nhớ chương trình không bao gồm bộ nhớ stack và kh6ong được địa chỉ hoá bởi bộ đếm chương trình
Hình 1.23: Sơ đồ bộ nhớ chương trình PIC16F877A
2.4.2 Bộ nhớ dữ liệu
Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia làm nhiều Bank Đối với PIC16F877A, bộ nhớ dữ liệu được chia làm 4 Bank Mỗi Bank có dung lượng
Trang 29128 Byte, bao gồm các thanh ghi có chức năng đặc biệt SFR (Special Functin Register) nằm ở các vùng địa chỉ thấp và các thanh ghi mục đích chung GPR (General Purpose Register) nằm ở vùng địa chỉ còn lại trong Bank Các thanh ghi SFR thường xuyên được sử dụng (ví dụ như thanh ghi STATUS) sẽ được đặt ở tất
cả các Bank của bộ nhớ dữ liệu giúp thuận tiện trong quá trình truy xuất và làm giảm bớt lệnh của chương trình Sơ đồ cụ thể của bộ nhớ dữ liệu PIC16F877A như sau:
Trang 30Hình 1.24: Sơ đồ bộ nhớ dữ liệu PIC16F877A
Trang 312.4.2.1 Thanh ghi chức năng đặc biệt SFR
Đây là các thanh ghi được sử dụng bởi CPU hoặc được dùng để thiết lập và điều khiển các khối chức năng tích hợp bên trong VĐK Có thể phân thanh ghi SFR làm 2 loại: thanh ghi SFR liên quan đến các chức năng bên trong (CPU) và thanh ghi SFR dùng để thiết lập và điều khiển các khối chức năng bên ngoài ( ví dụ: ADC, PWM…) Phần này sẽ đề cập đến các thanh ghi liên quan đến chức năng bên trong Các thanh ghi dùng để thiết lập và điều khiển các khối chức năng sẽ được nhắc đến khi ta đề cập đến các khối chức năng đó
Thanh ghi STATUS (03h, 83h, 103h, 183h): thanh ghi chứa kết quả thực hiện phép toán của khối ALU, trạng thái reset và các bit chọn bank cần truy xuất trong bộ nhớ dữ liệu
Thanh ghi OPTION_REG (81h, 181h): thanh ghi này cho phép đọc và ghi, cho phép điều khiển chức năng pull-up của các chân trong PORTB, xác lập các tham số về xung tác động, cạnh tác động của ngắt ngoại vi và bộ đếm Timer0
Thanh ghi INTCON (0Bh, 8Bh, 10Bh, 18Bh): thanh ghi này cho phép đọc và ghi, chứa các bit điều khiển và các bit cờ hiệu khi Timer 0 bị tràn, ngắt ngoại vi RB0/INT và ngắt interrupt-on-change tại các chân của PORTB
Thanh ghi PIE1(8Ch): chứa các bit điều khiển chi tiết các ng8át của các khối chức năng ngọai vi
Trang 32 Thanh ghi PIR1 (0Ch) chứa cờ ngắt của các khối chức năng ngọai vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE1
Thanh ghi PIE2 (8Dh): chứa các bit điều khiển các ngắt của các khối chức năng CCP2, SSP bus, ng8át của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM
Thanh ghi PIR2 (0Dh): chứa các cờ ngắt của các khối chức năng ngọai vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE2
Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái các chế
độ reset của vi điều khiển
2.4.2.2 Thanh ghi mục đích chung GPR
Các thanh ghi này có thể được truy xuất trực tiếp hoặc gián tiếp thông qua thanh ghi FSG (File Select Register) Đây là các thanh ghi dữ liệu thông thường, người sử dụng có thể tùy theo mục đích chương trình mà có thể dùng cá thanh ghi này để chứa các biến số, hằng số, kết quả hoặc các tham số phục vụ cho chương trình
Trang 332.4.3 STACK
Stack không nằm trong bộ nhớ chương trình hay bộ nhớ dữ liệu mà là một vùng nhớ đặc biệt không cho phép đọc hay ghi Khi lệnh CALL được thực hiện hay khi 1 ngắt xảy ra làm chương trình bị rẽ nhánh, giá trị của bộ đếm chương trình PC
tự động được VĐK cất vào trong stack
Bộ nhớ stack trong VĐK PIC họ 16F87xA có khả năng chứa được 8 địa chỉ
và hoat động theo cơ chế xoay vòng Nghĩa là giá trị cất vào bộ nhớ stack lần thứ 9
sẽ ghi đè lên giá trị cất vào stack lần đầu tiên
Không có cờ hiệu nào cho biết trạng thái stack, do đó không thể biết được khi nào stack tràn Các thao tác với bộ nhớ stack sẽ hòan toàn được điều khiển bởi CPU
2.5 Timer 0
Đây là một trong ba bộ đếm hoặc bộ định thời của VĐK PIC16F877A Timer 0 là bộ đếm 8 bit được kết nối với bộ chia tần số (prescaler) 8 bit Cấu trúc của Timer 0 cho phép ta lựa chọn xung clock tác động và cạnh tích cực của xung clock Ngắt Timer 0 sẽ xuất hiện khi Timer 0 bị tràn Bit TMR0IE (INTCON<5>) là bit điều khiển của Timer 0 TMR0IE = 1 cho phép ngắt Timer 0 tác động, TMR0IE
= 0 không cho phép ngắt Timer 0 tác động
Muốn Timer 0 họat động ở chế độ timer ta clear bit TOSC (OPTION_REG<5>), khi đó giá trị thanh ghi TMR0 sẽ tăng theo từng chu kì xung đồng hồ (tần số vào Timer 0 bằng ¼ tần số oscillator) Khi giá trị thanh ghi TMR0
từ FFh trở về 00h, ngắt Timer 0 sẽ xuất hiện Thanh ghi TMR0 cho phép ghi và xóa giúp ta ấn định thời điểm ngắt Timer0 xuất hiện một cách linh động
Muốn Timer 0 họat động ở chế độ Counter ta set bit TOSC (OPTION_REG<5>) Khi đó xung tác động lên bộ đếm được lấy từ chân RA4/TOCK1 Bit TOSE (OPTION_REG<4>) cho phép lực chọn cạnh tác động vào
bộ đếm Cạnh tác động là cạnh lên nếu TOSE = 0 và cạnh tác động là cạnh xuống nếu TOSE = 1
Trang 34Hình 1.25: Sơ đồ khối của Timer 0 Khi thanh ghi TMR0 bị tràn, bit TMR0IF (INTCON<2>) sẽ được set Đây chính là cờ ngắt của Timer0 Cờ ngắt này phải được xóa bằng chương trình trước khi bộ đếm bắt đầu thực hiện quá trình đếm Ngắt Timer0 không thể “đánh thức” VĐK từ chế độ sleep
Bộ chia tần số (prescaler) được chia sẻ giữa Timer 0 và WDT (Watchdog Timer) Điều đó có nghĩa là nếu prescaler được sử dụng cho Timer 0 thì WDT sẽ không có được hỗ trợ của prescaler và ngược lại
2.6 ADC
ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu từ dạng tương
tự sang dạng số VĐK PIC16F877a có 8 ngõ vào analog (RA4:RA0 và RE2:RE0) Hiệu điện thế chuẩn VREF có thể lựa chọn là VDD, VSS hay hiệu điện thế chuẩn được xác lập trên 2 chân RA2 và RA3 Kết quả chuyển đổi từ tín hiệu tương tự sang
Trang 35tín hiệu số là 10 bit số tương ứng và được lưu trong 2 thanh ghi ASRESH:ADRESL Khi không sử dụng bộ chuyển đổi ADC, các thanh ghi này có thể được sử dụng như các thanh ghi thông thường khác
Hình 1.26: Sơ đồ khối bộ chuyển đổi ADC Qui trình chyển đổi từ tương tự sang số bao gồm các bước sau:
1- Thiết lập các thông số cho bộ chuyển đổi ADC:
Chọn ngõ vào Analog, chọn điện áp mẫu (dựa trên các thông số của thanh ghi ADCON1)
Chọn kênh chuyển đổi AD (thanh ghi ADCON0)
Trang 36 Chọn xung clock cho kênh chuyển đổi AD (thanh ghi ADCON0)
Cho phép bộ chuyển đổi AD họat động (thanh ghi ADCON0)
2- Thiết lập cá cờ ngắt cho bộ AD
Clear bit ADIF
Set bit ADIE
Set bit PEIE
Set bit GIE
3- Đợi cho tới khi quá trình lấy mẫu hòan tất
4- Bắt đầu quá trình chuyển đổi (set bit GO/DONE)
5- Đợi cho tới khi quá trình chuyển đổi hòan tất bằng cách:
Kiểm tra bit GO/DONE Nếu GO/DONE =0, quá trình chuyển đổi đã hòan tất