Luận văn Quản lý thiết bị sử dụng công nghệ GSM

Ngày nay với sự phát triển của hệ thống thông tin di động GSM và hệ thống định vị GPS, nhu cầu của việc giám sát, quản lý ngày càng tăng. Song song với nhu cầu định vị, chỉ đường dùng công nghệ GPS, nhu cầu giám sát thiết bị trên xe cũng ngày càng cấp thiết. Module Wavecom Fastrack Supreme được tích hợp nhiều cổng giao tiếp mở rộng cho những chức năng khác nhau như GPS, Bluetooth, Wifi, cùng các chuẩn giao tiếp chuẩn thông dụng như USB,RS232, đã đáp ứng được hai nhu cầu định vị và giám sát trên. Trong đề tài luận văn này, chúng em thiết kế hệ thống để cụ thể mô hình trên. Thiết bị gắn trên xe tải sẽ làm nhiệm vụ chính là thu sóng GPS xác định tọa độ của nó và gửi tọa độ đó cùng các thông số đo được trên xe gửi về trung tâm quản lý. Cụ thể như sau: - Thiết kế khối trung giao tiếp với GSM modem - Thiết kế khối ngoại vi kiểm tra nhiệt độ - Giao tiếp khối ngoại vi và khối trung tâm dùng RF module giao tiếp không dây - Kết hợp hệ thống GPS để giám sát xe tải PHẦN 1: CƠ SỞ LÝ THUYẾT Chương 1: Giới thiệu vi xử lý ATmega16 Chương 2: Giới thiệu cảm biến DS18B20 Chương 3: Khái quát module RF Chương 4: Giới thiệu GSM modem và tập lệnh AT PHẦN 2: THIẾT KẾ VÀ THI CÔNG Chương 5: Cơ sở thiết kế Chương 6: Lưu đồ giải thuật và chương trình Chương 7: Kết quả thi công và hướng phát triển triển

doc103 trang | Chia sẻ: tuandn | Lượt xem: 1944 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Luận văn Quản lý thiết bị sử dụng công nghệ GSM, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ÐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ÐẠI HỌC BÁCH KHOA KHOA ÐIỆN – ÐIỆN TỬ BỘ MÔN VIỄN THÔNG  LUẬN VĂN TỐT NGHIỆP QUẢN LÝ THIẾT BỊ SỬ DỤNG CÔNG NGHỆ GSM GVHD: ThS. Ðinh Quốc Hùng SVTH: Bùi Mạnh Khánh 40501241 Võ Thành Long 40501532 - Tp. Hồ Chí Minh, Tháng 1-2010 - BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐH BÁCH KHOA CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Thành phố Hồ Chí Minh Độc Lập – Tự Do – Hạnh Phúc ( ( ( ( ( ( Số:______/BKĐT Khoa: Điện – Điện tử Bộ Môn: Viễn Thông NHIỆM VỤ LUẬN VĂN TỐT NGHIỆP Họ và tên: BÙI MẠNH KHÁNH MSSV: 40501241 Họ và tên: VÕ THÀNH LONG MSSV: 40501532 Ngành: VIỄN THÔNG LỚP: DD05DV2 Đầu đề luận văn: “Quản lý thiết bị sử dụng GSM” Nhiệm vụ ( Yêu cầu về nội dung và số liệu ban đầu): Ngày giao nhiệm vụ luận văn: Ngày hoàn thành nhiệm vụ: Họ và tên người hướng dẫn: Phần hướng dẫn Nội dung và yêu cầu LVTN đã được thông qua Bộ Môn. Ngày tháng năm 2009 CHỦ NHIỆM BỘ MÔN NGƯỜI HƯỚNG DẪN CHÍNH (Ký và ghi rõ họ tên) (Ký và ghi rõ họ tên) PHẦN DÀNH CHO KHOA, BỘ MÔN: Người duyệt (chấm sơ bộ): Đơn vị: Ngày bảo vệ: Điểm tổng kết: Nơi lưu trữ luận văn: TRƯỜNG ĐH BÁCH KHOA CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN – ĐIỆN TỬ Độc Lập – Tự Do – Hạnh Phúc --o0o-- Ngày tháng năm 2010 PHIẾU CHẤM BẢO VỆ LVTN (Dành cho người hướng dẫn) Họ và tên: BÙI MẠNH KHÁNH MSSV: 40501241 Họ và tên: VÕ THÀNH LONG MSSV: 40501532 Ngành: VIỄN THÔNG LỚP: DD05DV2 Đề tài: “Quản lý thiết bị sử dụng GSM” Họ tên người hướng dẫn: ThS ĐINH QUỐC HÙNG Tổng quát về bản thuyết minh: Số trang Số chương Số bảng số liệu Số hình vẽ Số tài liệu tham khảo Phần mềm tính toán Tổng quát về các bản vẽ: - Số bản vẽ: bản A1 bản A2 khổ khác - Số bản vẽ tay số bản vẽ trên máy tính Những ưu điểm chính của LVTN: Những thiếu sót chính của LVTN: Đề nghị: Được bảo vệ (, Bổ sung thêm để bảo vệ (, Không được bảo vệ (. 3 câu hỏi sinh viên trả lời trước Hội Đồng: a) b) c) Đánh giá chung (bằng chữ: giỏi, khá, TB): Điểm ……………………. Ký tên (ghi rõ họ tên) LỜI CẢM ƠN Lời đầu tiên, sinh viên muốn gửi lời cảm ơn chân thành đến giáo viên, Thạc sĩ Đinh Quốc Hùng, trong thời gian vừa qua, đã hướng dẫn và giúp đỡ sinh viên nghiên cứu từ đồ án 2, thực tập tốt nghiệp đến luận văn tốt nghiệp. Những lời nhận xét, góp ý và hướng dẫn của giáo viên đã giúp sinh viên có một định hướng đúng trong quá trình thực hiện đề tài, giúp sinh viên nhìn ra được ưu khuyết điểm của đề tài và từng bước khắc phục để ngày một tốt hơn. Đồng thời sinh viên cũng muốn gửi lời cảm ơn sâu sắc đến gia đình và bạn bè đã động viên và cổ vũ tinh thần sinh viên trong suốt quãng thời gian học tập, đặc biệt là bố mẹ sinh viên, người đã chăm lo và hi sinh rất nhiều cho sinh viên để sinh viên có thể chuyên tâm học tập. Bên cạnh đó, sinh viên muốn nói lời cảm ơn đến những giáo viên đã đứng trên bục giảng truyền đạt kinh nghiệm, kiến thức cho sinh viên trong suốt 4 năm đại học vừa qua. Một lần nữa, sinh viên xin gửi lời cảm ơn chân thành và sâu sắc đến bố mẹ, thầy cô và bạn bè, những người luôn ở cạnh động viên, giúp đỡ và cổ vũ tinh thần cho sinh viên. Hồ Chí Minh, ngày 11 tháng 01 năm 2010 BÙI MẠNH KHÁNH VÕ THÀNH LONG TÓM TẮT LUẬN VĂN Mục tiêu chính của đề tài luận văn là thiết kế mạch giao tiếp với GSM modem nhằm quản lý thiết bị bằng tin nhắn SMS. Khối giao tiếp này phải được thiết kế một cách linh hoạt nhằm truyền tải thông tin từ người sử dụng tới các thiết bị quản lý. Lý thuyết về GSM modem đã được tìm hiểu trong đồ án hai, trong phần luận văn này tập trung xây dựng hệ thống gồm phần giao tiếp với GSM modem (node trung tâm) và thiết bị giám sát nhiệt độ (node ngoại vi). Node ngoại vi và node trung tâm sử dụng giao tiếp không dây nhằm đảm bảo tính thẩm mỹ,tiện lợi cho người dùng.Mạch cảm biến nhiệt độ là một thí dụ điển hình cho thiết bị giám sát.Với thiết kế, lập trình linh hoạt người dùng có thể thêm nhiều thiết bị giám sát khác vào hệ thống mà không cần thay đổi gì node trung tâm. Nhóm sinh viên thực hiện BÙI MẠNH KHÁNH VÕ THÀNH LONG MỤC LỤC Đề mục Trang Trang bìa i Nhiệm vụ luận văn Lời cảm ơn ii Tóm tắt luận văn iii Mục lục iv Danh sách hình vẽ vii Danh sách bảng biểu xi Nội dung luận văn Phần 0 – GIỚI THIỆU CHUNG Phần I – CƠ SỞ LÝ THUYẾT Chương 1: Giới thiệu vi xử lý ATmega16 1.1 Giới thiệu chung 05 1.2 Cấu trúc AVR 06 1.2.1 Cấu trúc tổng quát 06 1.2.2 ALU. 07 1.2.3 Thanh ghi trạng thái 07 1.2.4 Các thanh ghi chức năng 08 1.2.5 Con trỏ ngăn xếp (SP) 08 1.2.6 Quản lý ngắt 09 1.3 Cấu trúc bộ nhớ 10 1.4 Các cổng ngoài ra (I/O) 12 1.5 Bộ định thời 14 1.5.1 Các thanh ghi 15 1.5.2 Đơn vị đếm 15 1.5.3 Đơn vị so sánh ngõ ra 16 1.5.4 Mô tả các thanh ghi 17 1.6 USART 19 1.6.1 Tạo xung clock 20 1.6.2 Định dạng khung truyền 21 1.6.3 Khởi tạo USART 22 1.6.4 Truyền thông dữ liệu –bộ truyền USART 23 1.6.5 Nhận dữ liệu –bộ phận USART 24 1.7 Bộ biến đổi A/D 26 Chương 2: GIỚI THIỆU CẢM BIẾN DS18B20 2.1 Sơ đồ chân cảm biến nhiệt độ DS18B20 34 2.2 Các đặc tính cơ bản của DS18B20 35 2.3 Lệnh ROM và các lệnh chức năng 37 2.3.1 Lệnh ROM 37 2.3.2 Lệnh chức năng bộ nhớ 38 2.4 Các cách kết nối DS18B20 với vi điều khiển 39 Chương 3: KHÁI QUÁT MODULE RF 3.1 Các đặc tính của RF module 42 3.2 Chức năng các chân module 43 Chương 4: GIỚI THIỆU GSM MODEM VÀ TẬP LỆNH AT 4.1 Giới thiệu về kết nối GSM modem và RS232 46 4.1.1 Sơ đồ nhân của GSM modem 46 4.1.2 Kết nối anten 47 4.1.3 Nguồn cung cấp cho kết nối 47 4.1.4 Các chân kết nối của GSM modem 48 4.2 Giới thiệu vế tập lệnh ATcommand 50 Phần II – THIẾT KẾ VÀ THI CÔNG Chương 5: CƠ SỞ THIẾT KẾ 5.1 Sơ đồ nguyên lý và sơ đồ khối 55 5.1.1 Sơ đồ khối 55 5.1.2 Sơ đồ nguyên lý 60 5.2 Giới thiệu IC max232 62 Chương 6: LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH 6.1 Cách sử dụng codevisionAVR 65 6.2 Lưu đồ giải thuật khối trung tâm 74 6.3 Lưu đồ giải thuật khối ngoại vi 78 6.4 Chương trình chính 80 6.4.1 Chương trình khối trung tâm 80 6.4.2 Chương trình khối ngoại vi 81 Chương 7: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 7.1 Kết quả thi công 86 7.1.1 Mạch in trung tâm 86 7.1.2 Mạch in ngoại vi 86 7.1.3 Mạch thực tế 87 7.2 Kết luận và hướng phát triển 87 TÀI LIỆU THAM KHẢO DANH SÁCH HÌNH VẼ Hình 1.1: Sơ đồ cấu trúc ATmega16 Hình 1.2: Sơ đồ cấu trúc CPU của ATmega16 Hình 1.3: Thanh ghi trạng thái SREG Hình 1.4: Thanh ghi chức năng chung Hình 1.5:Thanh ghi con trỏ ngăn xếp Hình 1.6: Bản đồ bộ nhớ chương trình Hình 1.7: Bản đồ bộ nhớ dữ liệu SRAM Hình 1.8: Sơ đồ cấu trúc bộ định thời Hình 1.9: Đơn vị đếm Hình 1.10: Sơ đồ đơn vị so sánh ngõ ra Hình 1.11: Thanh ghi điều khiển bộ định thời Hình 1.12: Thanh ghi bộ định thời Hình 1.13: Thanh ghi so sánh ngõ ra Hình 1.14: Thanh ghi mặt nạ ngắt TIMSK Hình 1.15: Thanh ghi mặt nạ ngắt TIMSK Hình 1.16: Sơ đồ khối bộ USART Hình 1.17: Đơn vị tạo xung clock Hình 1.18: Định dạng khung truyền Hình 1.19: Sơ đồ bộ biến đổi A/D Hình 1.20: Thanh ghi ADMUX Hình 1.21: Thanh ghi điều khiển và trạng thái ADC Hình 1.22: Thanh ghi dữ liệu ADC Hình 2.1 : Sơ đồ chân DS18B20 Hình 2.2 Phương pháp nối dây của DS18B20 Hình 2.3: Nội dung giải mã 64 bit trên bộ nhớ ROM Hình 2.4 : Kết nối “1 dây” Hình 2.5: Kết nối dùng nguồn ngoài Hình 3.1: Module giao tiếp RF Hình 3.2:Cấu trúc chân RF module Hình 3.3:Kết nối RF Hình 4.1: Sơ đồ khối bên trong GSM modem. Hình 4.2: Kết nối SMA cho anten Hình 4.3 Nguồn cung cấp kết nối Hình 4.4 15 chân kết nối Hình 5.1: Sơ đồ khối tổng quát Hình 5.2: Quá trình truyền tin(1) Hình 5.3: Quá trình truyền tin(2) Hình 5.4: Quá trình truyền tin(3) Hình 5.5: Sơ đồ khối trung tâm Hình 5.6: Sơ đồ khối ngoại vi Hình 5.7: Sơ đồ nguyên lý trung tâm Hình 5.8 : Sơ đồ nguyên lý ngoại vi Hình 5.9: Sơ đồ chân MAX232. Hình 5.10: Sơ đồ khối bên trong MAX232. Hình 6.1: Cách sử dụng codevisionAVR(1) Hình 6.2: Cách sử dụng codevisionAVR(2) Hình 6.3: Cách sử dụng codevisionAVR(3) Hình 6.4: Cách sử dụng codevisionAVR(4) Hình 6.5: Cách sử dụng codevisionAVR(5) Hình 6.6: Cách sử dụng codevisionAVR(6) Hình 6.7: Cách sử dụng codevisionAVR(7) Hình 6.8: Cách sử dụng codevisionAVR(8) Hình 6.9: Cách sử dụng codevisionAVR(9) Hình 6.10: Cách sử dụng codevisionAVR(10) Hình 6.11: Cách sử dụng codevisionAVR(11) Hình 6.12: Cách sử dụng codevisionAVR(12) Hình 6.13: Cách sử dụng codevisionAVR(13) Hình 6.14: Cách sử dụng codevisionAVR(14) Hình 6.15:Lưu đồ node trung tâm 1 Hình 6.16 : Lưu đồ node trung tâm 2 Hình 6.17: Lưu đồ giải thuật khối ngoại vi Hình 6.18:Lưu đồ chương trình đọc giá trị nhiệt độ Hình 7.1: Mạch in trung tâm Hình 7.2: Mạch in ngoại vi Hình 7.1: Mạch thực tế DANH SÁCH BẢNG BIỂU Báng 1.1:Bảng 3 bít chọn xung đồng hồ Bảng 1.2: Chọn điện áp tham khảo ADC Bảng 4.1: Chân nguồn và ngoại vi Bảng 4.2:Các chân kết nối GSM modem DANH MỤC TỪ VIẾT TẮT GSM Groupe Special Mobile SMS Short Message Services GPS Global Positioning System GPRS General Packet Radio Service CPU Central Processing Unit RF Radio frequency FSK Frequency Shift Keying FDMA Frequency Division Multiplexing Access  Ngày nay với sự phát triển của hệ thống thông tin di động GSM và hệ thống định vị GPS, nhu cầu của việc giám sát, quản lý ngày càng tăng. Song song với nhu cầu định vị, chỉ đường dùng công nghệ GPS, nhu cầu giám sát thiết bị trên xe cũng ngày càng cấp thiết. Module Wavecom Fastrack Supreme được tích hợp nhiều cổng giao tiếp mở rộng cho những chức năng khác nhau như GPS, Bluetooth, Wifi,… cùng các chuẩn giao tiếp chuẩn thông dụng như USB,RS232,…đã đáp ứng được hai nhu cầu định vị và giám sát trên. Trong đề tài luận văn này, chúng em thiết kế hệ thống để cụ thể mô hình trên. Thiết bị gắn trên xe tải sẽ làm nhiệm vụ chính là thu sóng GPS xác định tọa độ của nó và gửi tọa độ đó cùng các thông số đo được trên xe gửi về trung tâm quản lý. Cụ thể như sau: Thiết kế khối trung giao tiếp với GSM modem Thiết kế khối ngoại vi kiểm tra nhiệt độ Giao tiếp khối ngoại vi và khối trung tâm dùng RF module giao tiếp không dây Kết hợp hệ thống GPS để giám sát xe tải PHẦN 1: CƠ SỞ LÝ THUYẾT Chương 1: Giới thiệu vi xử lý ATmega16 Chương 2: Giới thiệu cảm biến DS18B20 Chương 3: Khái quát module RF Chương 4: Giới thiệu GSM modem và tập lệnh AT PHẦN 2: THIẾT KẾ VÀ THI CÔNG Chương 5: Cơ sở thiết kế Chương 6: Lưu đồ giải thuật và chương trình Chương 7: Kết quả thi công và hướng phát triển triển Chương 1 GIỚI THIỆU VI XỬ LÝ ATMEGA16 Giới thiệu chung ATmega16 là vi điều khiển 8 bit dựa trên kiến trúc RISC. Với khả năng thực hiện mỗi lệnh trong vòng một chu kỳ xung clock, ATmega16 có thể đạt được tốc độ 1MIPS trên mỗi MHz (1 triệu lệnh/s/MHz).Dưới đây là sơ đồ khối của ATmega16  Hình 1.1: Sơ đồ cấu trúc ATmega16 ATmega16 có các đặc điểm sau: 16KB bộ nhớ Flash với khả năng đọc trong khi ghi, 512 byte bộ nhớ EEPROM, 1KB bộ nhớ SRAM, 32 thanh ghi chức năng chung, 32 đường vào ra chung, 3 bộ định thời/bộ đếm, ngắt nội và ngắt ngoại, USART, giao tiếp nối tiếp 2 dây, 8 kênh ADC 10 bit,.... ATmega 16 hỗ trợ đầy đủ các chương trình và công cụ phát triển hệ thống như: trình dịch C, macro assemblers, chương trình mô phỏng/sửa lỗi, kit thử nghiêm,... Cấu trúc nhân AVR CPU của AVR có chức năng bảo đảm sự hoạt động chính xác của các chương trình. Do đó nó phải có khả năng truy cập bộ nhớ, thực hiện các quá trình tính toán, điều khiển các thiết bị ngoại vi và quản lý ngắt. 1.2.1 Cấu trúc tổng quát  Hình 1.2: Sơ đồ cấu trúc CPU của ATmega16 AVR sử dụng cấu trúc Harvard, tách riêng bộ nhớ và các bus cho chương trình và dữ liệu. Các lệnh được thực hiện chỉ trong một chu kỳ xung clock. Bộ nhớ chương trình được lưu trong bộ nhớ Flash. 1.2.2 ALU ALU làm việc trực tiếp với các thanh ghi chức năng chung. Các phép toán được thực hiện trong một chu kỳ xung clock. Hoạt động của ALU được chia làm 3 loại: đại số, logic và theo bit. 1.2.3 Thanh ghi trạng thái Đây là thanh ghi trạng thái có 8 bit lưu trữ trạng thái của ALU sau các phép tính số học và logic.  Hình 1.3: Thanh ghi trạng thái SREG C: Carry Flag ;cờ nhớ (Nếu phép toán có nhớ cờ sẽ được thiết lập) Z: Zero Flag ;Cờ zero (Nếu kết quả phép toán bằng 0) N: Negative Flag (Nếu kết quả của phép toán là âm) V: Two’s complement overflow indicator (Cờ này được thiết lập khi tràn số bù 2) V, For signed tests (S=N XOR V)(S: N H: Half Carry Flag (Được sử dụng trong một số toán hạng sẽ được chỉ rõ sau) T: Transfer bit used by BLD and BST instructions(Được sử dụng làm nơi trung gian trong các lệnh BLD,BST). I: Global Interrupt Enable/Disable Flag (Đây là bit cho phép toàn cục ngắt. Nếu bit này ở trạng thái logic 0 thì không có một ngắt nào được phục vụ.) 1.2.4 Các thanh ghi chức năng chung  Hình 1.4: Thanh ghi chức năng chung 1.2.5 Con trỏ ngăn xếp (SP) Là một thanh ghi 16 bit nhưng cũng có thể được xem như hai thanh ghi chức năng đặc biệt 8 bit. Có địa chỉ trong các thanh ghi chức năng đặc biệt là $3E (Trong bộ nhớ RAM là $5E). Có nhiệm vụ trỏ tới vùng nhớ trong RAM chứa ngăn xếp.  Hình 1.5:Thanh ghi con trỏ ngăn xếp Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí. Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện lệnh push. Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2. Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá trị khởi tạo ngăn xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục vụ. Và giá trị ngăn xếp ít nhất cũng phải lớn hơn hoặc bằng 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi. 1.2.6 Quản lý ngắt Ngắt là một cơ chế cho phép thiết bị ngoại vi báo cho CPU biết về tình trạng sẵn sàng trao đổi dữ liệu của mình.Ví dụ:Khi bộ truyền nhận UART nhận được một byte nó sẽ báo cho CPU biết thông qua cờ RXC, hoặc khi nó đã truyền được một byte thì cờ TX được thiết lập… Khi có tín hiệu báo ngắt CPU sẽ tạm dừng công việc đạng thực hiện lại và lưu vị trí đang thực hiên chương trình (con trỏ PC) vào ngăn xếp sau đó trỏ tới vector phuc vụ ngắt và thức hiện chương trình phục vụ ngắt đó chơ tới khi gặp lệnh RETI (return from interrup) thì CPU lại lấy PC từ ngăn xếp ra và tiếp tục thực hiện chương trình mà trước khi có ngăt nó đang thực hiện. Trong trường hợp mà có nhiều ngắt yêu cầu cùng một lúc thì CPU sẽ lưu các cờ báo ngắt đó lại và thực hiện lần lượt các ngắt theo mức ưu tiên. Trong khi đang thực hiện ngắt mà xuất hiện ngắt mới thì sẽ xảy ra hai trường hợp. Trường hợp ngắt này có mức ưu tiên cao hơn thì nó sẽ được phục vụ. Còn nó mà có mức ưu tiên thấp hơn thì nó sẽ bị bỏ qua. Bộ nhớ ngăn xếp là vùng bất kì trong SRAM từ địa chỉ 0x60 trở lên. Để truy nhập vào SRAM thông thường thì ta dùng con trỏ X,Y,Z và để truy nhập vào SRAM theo kiểu ngăn xếp thì ta dùng con trỏ SP. Con trỏ này là một thanh ghi 16 bit và được truy nhập như hai thanh ghi 8 bit chung có địa chỉ: SPL:0x3D/0x5D(IO/SRAM) và SPH:0x3E/0x5E. Khi chương trình phục vụ ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí.Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện lệnh push. Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2. Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá trị khởi tạo ngăn xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục vụ. Và giá trị ngăn xếp ít nhất cũng phải lớn hơn 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi. Ví dụ: char cSREG; cSREG = SREG; /* store SREG value */ /* disable interrupts during timed sequence */ CLI(); EECR |= (1<<EEMWE); /* start EEPROM write */ EECR |= (1<<EEWE); SREG = cSREG; /* restore SREG value (I-bit) */ Cấu trúc bộ nhớ AVR có 2 không gian bộ nhớ chính là bộ nhớ dữ liệu và bộ nhớ chương trình. Ngoài ra ATmega16 còn có thêm bộ nhớ EEPROM để lưu trữ dữ liệu. Bộ nhớ chương trình (Bộ nhớ Flash) Bộ nhớ Flash 16KB của ATmega16 dùng để lưu trữ chương trình. Do các lệnh của AVR có độ dài 16 hoặc 32 bit nên bộ nhớ Flash được sắp xếp theo kiểu 8KX16. Bộ nhớ Flash được chia làm 2 phần, phần dành cho chương trình boot và phần dành cho chương trình ứng dụng.  Hình 1.6: Bản đồ bộ nhớ chương trình Bộ nhớ dữ liệu SRAM 1120 ô nhớ của bộ nhớ dữ liệu định địa chỉ cho file thanh ghi, bộ nhớ I/O và bộ nhớ dữ liệu SRAM nội. Trong đó 96 ô nhớ đầu tiên định địa chỉ cho file thanh ghi và bộ nhớ I/O, và 1024 ô nhớ tiếp theo định địa chỉ cho bộ nhớ SRAM nội.  Hình 1.7: Bản đồ bộ nhớ dữ liệu SRAM Bộ nhớ dữ liệu EEPROM ATmega16 chứa bộ nhớ dữ liệu EEPROM dung lượng 512 byte, và được sắp xếp theo từng byte, cho phép các thao tác đọc/ghi từng byte một. Các cổng vào ra (I/O) Vi điều khiểnATmega16 có 32 đường vào ra chia làm bốn nhóm 8 bit một. Các đường vào ra này có rất nhiều tính năng và có thể lập trình được. Ở đây ta sẽ xét chúng là các cổng vào ra số. Nếu xét trên mặt này thì các cổng vào ra này là cổng vào ra hai chiều có thể định hướng theo từng bit. Và chứa cả điện trở pull-up (có thể lập trình được). Mặc dù mỗi port có các đặc điểm riêng nhưng khi xét chúng là các cổng vào ra số thì dường như điều khiển vào ra dữ liệu thì hoàn toàn như nhau. Chúng ta có thanh ghi và một địa chỉ cổng đối với mỗi cổng, đó là : thanh ghi dữ liệu cổng (PORTA, PORTB, PORTC, PORTD), thanh ghi dữ liệu điều khiển cổng (DDRA, DDRB, DDRC, DDRD) và cuối cùng là địa chỉ chân vào của cổng (PINA, PINB, PINC, PIND). Thanh ghi DDRx Đây là thanh ghi 8 bit (ta có thể đọc và ghi các bit ở thanh ghi này) và có tác dụng điều khiển hướng cổng PORTx (tức là cổng ra hay cổng vào). Nếu như một bit trong thanh ghi này được set thì bit tương ứng đó trên PORTx được định nghĩa như một cổng ra. Ngược lại nếu như bit đó không được set thì bit tương ứng trên PORTx được định nghĩa là cổng vào. Thanh ghi PORTx Đây cũng là thanh ghi 8 bit (các bit có thể đọc và ghi được) nó là thanh ghi dữ liệu của cổng PORTx và trong trường hợp nếu cổng được định nghĩa là cổng ra thì khi ta ghi một bit lên thanh ghi này thì chân tương ứng trên port đó cũng có cùng mức logic. Trong trường hợp mà cổng được định nghĩa là cổng vào thì thanh ghi này lại mang dữ liệu điều khiển cổng. Cụ thể nếu bit nào đó của thanh ghi này được set (đưa lên mức 1) thì điện trở kéo lên (pull-up) của chân tương ứng của port đó sẽ được kích hoạt. Ngược lại nó sẽ ở trạng thái hi-Z. Thanh ghi này sau khi khởi động Vi điều khiểnsẽ có giá trị là 0x00. Thanh ghi PINx Đây là thanh ghi 8 bit chứa dữ liệu vào của PORTx (trong trường hợp PORTx được thiết lập là cổng vào) và nó chỉ có thể đọc mà không thể ghi vào được. Tóm lại: 1. Để đọc dữ liệu từ ngoài thì ta phải thực hiện các bước sau: Đưa dữ liệu ra thanh ghi điều khiển DDRxn để đặt cho PORTx (hoặc bit n trong port) đó là đầu vào (xóa thanh ghi DDRx hoặc bit). Sau đó kích hoạt điện trở pull-up bằng cách set thanh ghi PORTx ( bit). Cuối cùng đọc dữ liệu từ địa chỉ PINxn (trong đó x: là cổng và n là bit). 2. Để đưa dữ liệu từ vi điều khiển ra các cổng cũng có các bước hoàn toàn tương tự. Ban đầu ta cũng phải định nghĩa đó là cổng ra bằng cách set bit tương ứng của cổng đó…và sau đó là ghi dữ liệu ra bit tương ứng của thanh ghi PORTx. Ví dụ: unsigned char i; ... /* Define pull-ups and set outputs high */ /* Define directions for port pins */ PORTB = (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0); DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0); /* Insert nop for synchronization*/ _NOP(); /* Read port pins */ i = PINB; Bộ định thời Bộ định thời (timer/counter0) là một module định thời/đếm 8 bit, có các đặc điểm sau: Bộ đếm một kênh