Thiết kế mạch thí nghiệm dùng Vi điều khiển 80C51 phối ghép với các thiết bị ngoại vi: LCD, ADC0809, RTC DS12887 và bàn phím số HEX

Mục Lục Lời cảm ơn7 MỞ ĐẦU .8 Phần I: Tổng quan về VđK 8051 và Các thiết bị ngoại vi .9 CHƯƠNG I: VI ĐIỀU KHIỂN 8051 9 I. KHÁI NIỆM CHUNG VỀ VI ĐIỀU KHIỂN .9 I.1 Sù ra đời 9 I.2 Điểm khác biệt giữa VĐK và VXL dùng chung 9 I.3 Tiêu chuẩn lùa chọn 1 bé vi điều khiển 10 II. VI ĐIỀU KHIỂN 8051 10 II.1 Sơ đồ khối của 8051 10 II.2 Sơ đồ và chức năng các chân của 8051 .11 II.2.1 Sơ đồ các chân .11 II.2.2 Chức năng của các chân 11 II.2.3 Cấu trúc của các cổng xuất/nhập 14 II.3 Tổ chức bộ nhớ 8051 .14 II.3.1 Vùng RAM đa mục đích .15 II.3.2 Vùng RAM định địa chỉ bit 15 II.3.3 Các dãy thanh ghi 15 II.3.4 Các thanh ghi chức năng đặc biệt .15 II.3.4.1 Từ trạng thái chương trình PSW .15 II.3.4.2 Thanh ghi B .16 II.3.4.3 Con trá stack 16 II.3.4.4 Con trỏ dữ liệu .17 II.3.4.5 Các thanh ghi port 17 II.3.4.6 Các thanh ghi định thời TMOD và TCON .17 II.3.4.7 Thanh ghi của cổng nối tiếp .19 II.3.4.8 Các thanh ghi ngắt 20 II.3.4.9 Thanh ghi điều khiển nguồn .20 II.4 Bộ nhớ ngoài .21 II.4.1 Truy xuất bộ nhớ chương trình ngoài 21 II.4.2 Truy xuất bé nhớ dữ liệu ngoài 22 II.4.3 Hoạt động Reset 23 III. TẬP LỆNH CỦA 8051 .24 III.1 Các kiểu định địa chỉ .24 III.1.1 Định địa chỉ thanh ghi .24 III.1.2 Định địa chỉ trực tiếp .24 III.1.3 Định địa chỉ gián tiếp 25 III.1.4 Định địa chỉ tức thời 26 III.1.5 Định địa chỉ tương đối .26 III.1.6 Định địa chỉ tuyệt đối 26 III.1.7 Định địa chỉ dài .27 III.1.8 Định địa chỉ chỉ số .27 III.2 Các loại lệnh .27 III.2.1 Lệnh số học 27 III.2.2 Các lệnh Logic .28 III.2.3 Nhóm lệnh di chuyển dữ liệu .30 III.2.4 Các lệnh xử lý bit .31 III.2.5 Các lệnh rẽ nhánh 31 III.2.6 Nhóm lệnh dịch, quay 33 III.2.7 Các lệnh làm việc với Stack .33 IV. HOẠT ĐỘNG ĐỊNH THỜI .33 IV.1 Các bộ định thời của 8051 .33 IV.2 Thanh ghi chế độ bộ định thời 34 IV.2.1 Các chế độ định thời và cờ tràn .34 IV.2.1.1 Chế độ định thời 13-bit 34 IV.2.1.2 Chế độ định thời 16-bit 34 IV.2.1.3 Chế độ tự nạp lại 8-bit .34 IV.2.1.4 Chế độ định thời chia xẻ 35 IV.3 Nguồn xung clock định thời .35 V. HOẠT ĐỘNG NGẮT 35 V.1 Tổ chức ngắt của 8051 35 V.1.1 Cho phép và không cho phép ngắt . 35 V.1.2 Ưu tiên ngắt 35 V.1.3 Chuỗi vòng 36 V.2 Xử lý ngắt 36 V.3 Các vector ngắt .36 V.4 Các ngắt do port nối tiếp 36 V.5 Các ngắt ngoài 37 VI. LẬP TRÌNH HỢP NGỮ 37 VI.1 Trình dịch hợp ngữ 37 VI.2 Khuôn dạng của chương trình hợp ngữ 37 VI.3 Cấu trúc chương trình 38 VI.4. Tổ chức chương trình 38 CHƯƠNG II: CÁC THIẾT BỊ NGOẠI VI 39 I. ĐỒNG HỒ THỜI GIAN THỰC DS12887 39 I.1 Hoạt động .40 I.2 Chức năng các chân .41 I.3 Bản đồ địa chỉ .43 I.4 Các thanh ghi điều khiển 46 I.5 Minh họa ghép nối giữa DS12887 với 8051 .49 II. THIẾT BỊ HIỂN THỊ LCD 49 II.1 LCD .49 II.2 Minh họa ghép nối giữa LCD với 8051 .52 III. ADC0809 52 III.1 Sơ đồ các chân của ADC0809 53 III.2 Các bước lập trình cho ADC0809 54 III.3 Minh họa ghép nối ADC0809 với 8051 .55 IV.BÀN PHÍM HEX 55 IV.1 Minh họa ghép nối bàn phím với 8051 56 V. GIẢI MÃ ĐỊA CHỈ 74LS138 57 VI. CHỐT ĐỊA CHỈ 74HC373 .57 V.1.Sơ đồ chân của 74HC373 57 V.2 Hoạt động của 74LS373 57 PHẦN II. THIẾT KẾ 59 CHƯƠNG I: THIẾT KẾ PHẦN CỨNG .59 I. Mạch nguyên lý .59 II.Sơ đồ mạch 61 CHƯƠNG II: THIẾT KẾ PHẦN MỀM .62 I. Chuơng trình quét bàn phím HEX .62 II. Đọc thời gian từ đồng hồ thời gian thực RTC DS12887 67 III. ĐiÒu khiển ADC0809 để thực hiện chuyển đổi 74 KẾT LUẬN .78 TÀI LIỆU THAM KHẢO 79

doc82 trang | Chia sẻ: banmai | Lượt xem: 3718 | Lượt tải: 5download
Bạn đang xem trước 20 trang tài liệu Thiết kế mạch thí nghiệm dùng Vi điều khiển 80C51 phối ghép với các thiết bị ngoại vi: LCD, ADC0809, RTC DS12887 và bàn phím số HEX, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ền nhiệm 8048. Byte cao của bộ định thời THx được ghép cascade với 5-bit thấp của byte thấp của bộ định thời TLx để tạo thành một bộ định thời 13-bit. Ba bit cao của TLx không sử dụng. IV.2.1.2.Chế độ định thời 16-bit (chế độ 1) Chế độ 1 là chế độ định thời 16- ChÕ ®é 1 lµ chÕ ®é ®Þnh thêi 16-bit và có cấu hình giống chế độ định thời 13-bit. Xung clock đặt vào các thanh ghi định thời cao và thấp kết hợp (TLx/THx). Khi có xung clock đến, bộ định thời đếm lên: 0000H, 0001H một tràn sẽ xuất hiện khi có sự chuyển số đếm từ FFFFH xuống 0000H, sự kiện này sẽ set cờ tràn bằng 1 và bộ định thời tiếp tục đếm. IV.2.1.3. Chế độ tự nạp lại 8-bit (chế độ 2) Chế độ 2 là chế độ tự nạp lại 8-bit. Byte thấp của bộ định thời (TLx) hoạt động định thời 8-bit trong khi byte cao của bộ định thời lưu giữ giá trị nạp lại. Khi số đếm tràn từ FFH xuống 00H, không chỉ cờ tràn của bộ định thời được set lên 1 mà giá trị trong THx còn được nạp vào TLx. Việc đếm sẽ tiếp tục từ giá trị này cho đến khi xảy ra một tràn (FFH xuống 00H). IV.2.1.4. Chế độ định thời chia xẻ (chế độ 3) Chế độ 3 là chế độ định thời chia xẻ và có hoạt động khác nhau cho từng bộ định thời. Bộ định thời 0 ở chế độ 3 được chia thành 2 bộ định thời 8-bit hoạt động riêng rẽ TL0 và TH0, mỗi bộ định thời sẽ set các cờ tràn tương ứng TF0 và TF1 khi xảy ra một tràn. IV.3 NGUỒN XUNG CLOCK ĐỊNH THỜI Bộ định thời luôn cần có xung đồng hồ để giữ nhịp. Nếu C/T = 0 thì tần số thạch anh trên chip 8051 được làm nguồn cho đồng hồ của bộ định thời. Điều đó có nghĩa là giá trị của tần số thạch anh của 8051 quyết định tốc độ đồng hồ của các bộ định thời 8051. Tần số của bộ định thời luôn bằng 1/12 tần số của thạch anh trên chip 8051. Nếu C/T=1 bộ định thời bây giê đếm sự kiện, số các sự kiện được xác định trong phần mềm bằng cách đọc các thanh ghi định thời (TLx/THx), giá trị 16-bit trong các thanh ghi này tăng theo mỗi sự kiện. Hai chân của port 3 ( P3.4 và P3.5) bây giê trở thành ngõ vào xung clock cho các bộ định thời. Chân P3.4 là ngõ vào xung clock cho bộ định thời, chân P3.5 là ngõ vào xung clock cho bộ định thời 1. Nếu C/T =0 bộ định thời dùng để định thời một khoảng thời gian. V. HOẠT ĐỘNG NGẮT V.1 Tổ chức ngắt của 8051 Có 5 nguyên nhân tạo ra ngắt đối với 8051: hai ngắt do bên ngoài, hai ngắt do bộ định thời và một ngắt do port nối tiếp. Khi ta thiết lập trạng thái ban đầu cho hệ thống (gọi là reset hệ thống), tất cả các ngắt đều bị vô hiệu hoá và sau đó chúng được cho phép riêng rẽ bằng phần mềm. V.1.1 Cho phép và không cho phép ngắt Mỗi một nguyên nhân ngắt được cho phép hoặc không cho phép riêng rẽ thông qua thanh ghi chức năng đặc biệt định địa chỉ bit. Thanh ghi cho phép ngắt IE có địa chỉ byte là 0A8H. Mỗi mét bit của thanh ghi này cho phép hoặc không cho phép từng nguyên nhân ngắt riêng rẽ, thanh ghi IE đồng thời còn có mét bit toàn cục cho phép hoặc không cho phép ngắt. V.1.2 Ưu tiên ngắt Mỗi một nguyên nhân ngắt được lập trình riêng rẽ để có một trong hai mức ưu tiên thông qua thanh ghi chức năng đặc biệt được định địa chỉ bit, thanh ghi ưu tiên ngắt IP, thanh ghi này có địa chỉ là 0B8H. Khi hệ thống được thiết lập lại trạng thái ban đầu, thanh ghi IP sẽ mặc định đặt tất cả các ngắt ở mức ưu tiên thấp. ý tưởng “ các mức ưu tiên” cho phép một trình phục vụ ngắt được tạm dừng bởi một ngắt khác nếu ngắt mới này có mức ưu tiên cao hơn mức ưu tiên của ngắt hiện đang được phục vụ. Nếu có ngắt với mức ưu tiên cao xuất hiện, trình phục vụ ngắt cho ngắt có mức ưu tiên thấp phải tạm dừng. Ta không thể tạm dừng một chương trình phục vụ ngắt có mức ưu tiên cao. V.1.3 Chuỗi vòng Nếu có hai ngắt có cùng mức ưu tiên xuất hiện đồng thời, chuỗi vòng cố định sẽ xác định ngắt nào được phục vụ trước. Chuỗi vòng này sẽ là: ngắt ngoài 0, ngắt do bộ định thời 0, ngắt ngoài 1, ngắt do bộ định thời 1, ngắt do port nối tiếp. Ngắt do port nối tiếp là kết quả OR của cờ ngắt khi thu RI (cờ ngắt thu) với cờ ngắt khi phát (cờ ngắt phát). V.2 Xử lý ngắt Khi có một ngắt xuất hiện và được CPU chấp nhận, chương trình chính bị ngắt. Các thao tác sau đây xảy ra: - Hoàn tất việc thực thi lệnh hiện hành. - Bé đếm chương trình PC được cất vào stack. - Trạng thái của ngắt hiện hành được lưu giữ. - Các ngắt được chặn lại ở mức ngắt. - Bé đếm chương trình PC được nạp địa chỉ vector của trình phục vụ ngắt ISR (Interrupt Service Routine). - ISR được thực thi. ISR được thực thi để đáp ứng công việc của ngắt. Việc thực thi ISR kết thúc khi gặp lệnh RETI. Lệnh này lấy giá trị cũ của bộ đếm chương trình PC từ stack và phục hồi trạng thái của ngắt cũ. Việc thực thi chương trình chính được tiếp tục ở nơi bị tạm ngừng. V.3 Các vector ngắt Khi một ngắt được chấp nhận, giá trị được nạp cho bộ đếm chương trình PC được gọi là vector ngắt. Vector ngắt là địa chỉ bắt đầu của trình phục vụ ngắt của nguyên nhân ngắt tương ứng. Khi một trình phục vụ ngắt được trỏ tới, cờ gây ra ngắt sẽ tự động được xoá về 0 bởi phần cứng. Các ngoại lệ bao gồm các cờ RI và TI đối với các ngắt trong port nối tiếp. V.4 Các ngắt do port nối tiếp Các ngắt do port nối tiếp xuất hiện khi cờ ngắt được phát TI hoặc cờ ngắt được thu RI được set bằng 1. Một ngắt phát xuất hiện khi việc phát một ký tự đã ghi vào SBUF hoàn tất. Một ngắt thu xuất hiện nh­ mét ký tự được thu nhận đầy đủ và đang ở trong SBUF để chờ được đọc. Nh­ vậy ngắt phát xảy ra khi bộ đệm phát SBUF rỗng, còn ngắt thu xảy ra khi bộ đệm thu SBUF đầy. V.5 Các ngắt ngoài Ngắt ngoài xảy ra khi có mức thấp hoặc có cạnh âm trên chân INT0 hoặc INT1 của 8051. Thực tế các cờ tạo ra các ngắt này là các bit IE0 và IE1 của thanh ghi TCON. Khi một ngắt ngoài được tạo ra, cờ tạo ra ngắt được xoá bởi phần cứng khi CPU trỏ đến trình phục vụ ngắt chỉ nếu ngắt thuộc loại tác động cạnh. Nếu ngắt thuộc loại tác động mức, nguyên nhân ngắt ngoài sẽ điều khiển mức của thay vì là phần cứng trên chip. VI. LẬP TRÌNH HỢP NGỮ (ASSEMBLY LANGUAGE PROGRAMMING) CPU chỉ có thể tính toán trên các số nhị phân và với tốc độ rất cao. Tuy nhiên đối với con người, nếu phải lập trình với các số nhị phân thì thật nhàm chán và chậm chạp. Chương trình chỉ gồm các số 0 và 1 là trình ngôn ngữ máy. Hợp ngữ thay thế các mã nhị phân của ngôn ngữ máy bằng các mã gợi nhớ giúp chúng ta dễ nhớ và dễ lập trình hơn. Một chương trình viết bằng hợp ngữ không thể được thực thi trực tiếp bởi máy tính. Sau khi được viết xong, chương trình này phải được trải qua quá trình dịch thành ngôn ngữ máy. Trình dịch hợp ngữ là chương trình dùng để dịch một chương trình hợp ngữ thành chương trình ngôn ngữ máy. VI.1 Trình dịch hợp ngữ Có nhiều trình dịch hợp ngữ và nhiều chương trình hỗ trợ khác cho phép ta dễ dàng phát triển các ứng dụng trên chip vi điều khiển 8051 ví dụ như ASM51 (của Intel) hay Keil C51… Trình dịch hợp ngữ họ MCS-51 của Intel (ASM51) được dùng làm chuẩn để so sánh với các trình dịch hợp ngữ khác. ASM51 là trình dịch hợp ngữ mạnh, hoạt động tốt trên các hệ thống của Intel và trên các họ máy tính của IBM-PC . Keil C51 là một công cụ phát triển có nhiều ưu điểm cho việc xây dựng các phần mềm ứng dụng cho vi điều khiển. Keil C51 cho phép viết chương trình bằng hợp ngữ hoặc ngôn ngữ C, nó có nhiều thư viện tài nguyên có sẵn giúp việc lập trình được đơn giản hơn. VI.2 Khuôn dạng của chương trình hợp ngữ Các chương trình hợp ngữ bao gồm một chuỗi các dòng lệnh hợp ngữ. Các lệnh (instruction) của bộ vi điều khiển, vi xử lý. Các chỉ dẫn (directive) của trình dịch hợp ngữ. Các điều khiển (control) của trình dịch hợp ngữ. Các chú thích (comment) Khuôn dạng tổng quát của mỗi dòng lệnh nh­ sau: [label:] mnemonic [operand][,operand][…][;comment] · Label: Trường nhãn cho phép chương trình tham chiếu đến một dòng lệnh bằng tên, label không được quá một số ký tự nhất định (tùy thuộc vào chương trình hợp ngữ). · Mnemonic & Operand: Mã gợi nhớ và toán hạng là các trường kết hợp với nhau thực thi công việc thực tế của chương trình và hoàn thiện các nhiệm vụ mà chương trình được viết cho chóng. · Comment: Trường chú thích, trình dịch hợp ngữ sẽ không dịch (bá qua) các chú thÝch nhưng chúng lại rất cần thiết để giúp mô tả chương trình cho người đọc dễ hiểu. VI.3 Cấu trúc chương trình. Việc lập trình có thể thực hiện theo 3 cấu trúc Các phát biểu (Statements) Các vòng lặp (Loop) Sự lùa chọn (choice) VI.4. Tổ chức chương trình. Các chương trình thường được viết từng phần, và được sắp xếp theo thứ tự sau: Các phép gán. Các lệnh khởi động. Phần chính của chương trình. Các chương trình con. Các định nghĩa hằng dữ liệu. Các vị trí dữ liệu trong RAM. CHƯƠNG II: CÁC THIẾT BỊ NGOẠI VI I. ĐỒNG HỒ THỜI GIAN THỰC DS12887 Đồng hồ thời gian thực (real time clock - RTC) DS12887 được sản xuất bởi hãng Dallas Semiconductor. Với nguồn năng lượng lithium, tinh thể thạch anh, khả năng bảo vệ ghi tất cả được đóng gói trong 1 chip 24 chân xếp thành 2 hàng (nh­ hình 6 dưới đây). DS12887 có các chức năng nh­ hoạt động không cần nguồn nuôi từ bên ngoài, có thể đặt chế độ báo thức, lịch trong 100 năm, có khả năng lập trình ngắt, phát xung vuông, cùng với 114 bytes RAM. Đóng vá 24 chân. Bên trong có chứa pin lithium, thạch anh nên có thể hoạt động 10 năm không cần nguồn nuôi. Đếm giây, phót, giê, ngày, ngày trong tuần, ngày trong tháng, tháng, năm. Hiển thị bằng số nhị phân hoặc BCD thời gian, lịch, hẹn giê. Có hai chế độ 12 giê (dùng AM và PM) hoặc 24 giê. Giao tiếp với phần mềm bằng 128 Bytes RAM (bên trong) + 14 bytes đồng hồ và các thanh ghi điều khiển. + 114 bytes RAM dùng cho mục đích căn bản. Có khả năng lập trình phát ra xung vuông. Có thể đặt hẹn giê v.v. Hình 6 : Sơ đồ chân DS12887 AD0 – AD7 : Các bus địa chỉ / dữ liệu N.C : Không sử dụng : Kh«ng sö dông MOT : Chân lùa chọn loại bus : Ch©n lùa chän lo¹i bus : Chọn chip : Chän chip AS : Address Strobe : Address Strobe : Đầu vào Đọc/Ghi DS : Data Strobe : Data Strobe : Đầu vào reset : §Çu vµo reset : Đầu ra ngắt : §Çu ra ng¾t SQW : Đầu phát ra xung vuông : §Çu ph¸t ra xung vu«ng Vcc : Chân cấp nguồn (+5V) : Ch©n cÊp nguån (+5V) GND : Chân nối đất : Ch©n nèi ®Êt I.1 Hoạt động Đồng hồ thời gian thực (RTC) hoạt động liên tục, tất cả RAM, thời gian, lịch, hẹn giê và các vị trí nhớ còn lại không thay đổi cho dù nguồn cung cấp vào (Vcc) thay đổi. Khi nguồn (Vcc) được đưa vào DS12887 và đạt tới mức lớn hơn Hình 7: Sơ đồ khối của DS12887 4,25V, thì thiết bị sẽ được tiếp cận sau 200ms, cung cấp cho máy phát xung hoạt động. Cùng lúc đó cho phép hệ thống trở nên ổn định sau khi nguồn được đưa vào. Khi nguồn (Vcc) giảm xuống dưới 4,25V, ở đầu vào chọn chip có 1 lực bên trong làm cho trở về mức không hoạt động bất kể giá trị ở chân CS. Vì thế DS12887 chuyển sang chế độ chống ghi. Khi DS12887 ở chế độ chống ghi thì tất cả các tín hiệu vào đều bị ngăn và các đầu ra đang ở mức trở kháng cao. Khi Vcc giảm tới mức xấp xỉ 3V, nguồn cung cấp từ ngoài bị đóng lại, nguồn năng lượng bên trong (pin lithium) sẽ được cấp cho RTC và bộ nhớ RAM. I.2 Chức năng các chân. · GND, Vcc Nguồn 1 chiều + 5Vđược cung cấp cho thiết bị thông qua chân 24. Khi nguồn 5V được cung cấp thì ta có thể đọc hoặc ghi dữ liệu trên thiết bị. Khi nguồn vào thấp hơn 4,25V thì việc đọc ghi dữ liệu bị ngăn cấm. Tuy nhiên thiết bị vẫn hoạt động không phụ thuộc vào nguồn vào. Khi mà nguồn vào thấp hơn 3V thì lúc đó thiết bị sẽ sử dụng nguồn pin lithium bên trong để duy trì hoạt động. Độ chính xác của DS12887 là ± 1 phót/1 tháng tại 250C. · MOT (Mode Select) Chân MOT được sử dụng để lùa chọn giữa hai loại bus. Khi được nối với Vcc, chế độ thời gian bus Motorola được chọn. Khi nối với GND hoặc không được nối thì chế độ thời gian bus Intel được chọn. Chân này có điện trở kéo bên trong cỡ 20KW. · SQW (Square-Wave Output) Chân SQW tạo ra tín hiệu xung vuông. Tần số của tín hiệu phát ra từ chân SQW có thể thay đổi bằng cách lập trình trên thanh ghi A (ở bảng 1). Tín hiệu SQW có thể được bật hoặc tắt bằng cách sử dông bit SQWE trong thanh ghi B. Tín hiệu SQW sẽ không có khi Vcc nhỏ hơn 4,25V. · AD0-AD7 Bus địa chỉ và dữ liệu. Thông tin của địa chỉ và thông tin của dữ liệu thời gian chia xẻ trong cùng 1 đường tín hiệu. Địa chỉ được chỉ ra trong suốt phần đầu của chu kỳ bus, cũng những chân này và đường tín hiệu được sử dụng cho dữ liệu trong phần 2 của chu kỳ bus. · AS (Address Strobe Input) Khi ở mức cao AS kéo bus giải đa hợp. Khi ở sườn xuống của AS/ALE đó là nguyên nhân địa chỉ được chốt bên trong DS12887. Ở sườn lên kế tiếp của bus, AS sẽ xóa địa chỉ. · DS (Data Strobe or Read Input) Chân có hai chế độ hoạt động dùa vào chế độ ở chân MOT. Khi chân MOT được nối với Vcc (chế độ thời gian bus Motorola được chọn) trong chế độ này DS được kéo ở mức cao trong suốt phần cuối của chu kỳ bus và được gọi là Data Strobe. Trong suốt chu kỳ đọc DS biểu thị thời gian mà DS12887 điều khiển 2 đường bus trực tiếp. Trong chu kỳ ghi DS12887 chốt dữ liệu ghi. Khi chân MOT nối với GND (chế độ thời gian bus Intel được chọn). Trong chế độ này chân DS được gọi là chân Đọc (). xác định phần thời gian khi DS12887 điều khiển bus cùng với dữ liệu đọc. Bảng 1: Tần số của xung SQW phát ra · (Read/Write Input) Chân có hai chế độ hoạt động. Khi chân MOT được nối với Vcc, ở mức chỉ thị mà không cần biết chu kỳ hiện tại là đọc hay ghi. Chu kỳ đọc được chỉ thị cùng với ở khi DS ở mức cao. Chu kỳ ghi được chỉ thị khi thấp qua DS. Khi chân MOT được nối với GND, tín hiệu là tín hiệu kích hoạt thấp được gọi là . Trong chế độ này chân có ý nghĩa nh­ chân cho phép ghi (write enable-). · (Chip Select Input) Tín hiệu chọn chip phải ở mức thấp để cho chu kỳ bus của DS12887 được truy nhập. phải được giữ cho hoạt động khi DS và AS ở chế độ thời gian Motorola và khi và ở chế độ thời gian Intel. Khi Vcc < 4,25V thì DS12887 cấm các truy nhập trong chu kỳ bằng cách vô hiệu hóa chân . Hoạt động này giúp bảo vệ dữ liệu thời gian và dữ liệu trong RAM khi nguồn ngừng hoạt động. · (Interrupt Request Output) Chân IRQ được kích hoạt ở mức thấp đầu ra của DS12887 và có thể được sử dông nh­ đầu vào ngắt của vi xử lý. Để xóa chân IRQ, vi xử lý dùng chương trình đọc thanh ghi C. Chân xóa khi gửi các ngắt. · (Reset Input) Chân không ảnh hưởng đến đồng hồ, lịch, hoặc RAM. Khi mức năng lượng cao, chân được giữ ở mức thấp trong 1 khoảng thời gian để cho nguồn cấp vào ổn định. Khoảng thời gian giữ ở mức thấp còn dùa vào các ứng dông. Tuy nhiên nếu được sử dụng, thời gian ở mức thấp nên lớn hơn 200ms để chắc chắn bộ định thời bên trong có thể điều khiển DS12887. Khi ở mức thấp và Vcc > 4,25V thì các trường hợp sau xảy ra: a) PIE (Periodic Interrupt Enable) bị xóa = 0. b) AIE (Alarm Interrupt Enable) bị xóa = 0. c) UF (Update Ended Interrupt Flag) bị xóa = 0. d) IRQF (Interrupt Request Status Flag) bị xóa = 0. e) PF (Periodic Interrupt Flag) bị xóa = 0. f) Thiết bị không được truy nhập cho đến khi RESET trở lại mức cao. g) AF (Alarm Interrupt Flag) bị xóa = 0. h) Chân IRQ ở mức trở kháng cao. i) SQWE (Square-Wave Output Enable) bị xóa = 0. j) UIE (Update Ended Interrupt Enable) bị xóa = 0. I.3 Bản đồ địa chỉ (Address Map) Bản đồ địa chỉ của DS12887 được chỉ ra ở hình dưới đây. Bản đồ địa chỉ bao gồm 114 bytes RAM của người sử dụng; 10 bytes RAM chứa RTC thời gian, lịch, dữ liệu hẹn giê; và 4 bytes được sử dụng để điều khiển và thông báo tình trạng. Tất cả 128 bytes có thể đọc ghi trực tiếp trừ những trường hợp sau: Thanh ghi C và D chỉ được phép đọc. Bit 7 của thanh ghi A chỉ được phép đọc. Những bit cao của byte giây chỉ được đọc. Hình 8: Bản đồ địa chỉ của DS12887 00H : Giây 07H : Ngày trong tháng 01H : Cảnh báo (báo thức) theo giây 08H : Tháng 02H : Phót 09H : Năm 03H : Cảnh báo (báo thức) theo phót 0AH : Thanh ghi A 04H : Giê 0BH : Thanh ghi B 05H : Cảnh báo (báo thức) theo giê 0CH : Thanh ghi C 06H : Ngày trong tuần 0DH : Thanh ghi D Thời gian, lịch, báo thức Thông tin về thời gian, lịch, có được bằng cách đọc các byte đặc biệt. Thời gian, lịch, báo thức được đặt bằng cách ghi lên những byte RAM đặc biệt. Nội dung của 10 byte chứa thời gian, lịch, báo thức có thể là mã nhị phân hoặc mã BCD. Trước khi ghi thời gian, lịch và báo thức lên các thanh ghi nội, bit SET trong thanh ghi B phải được đặt lên mức logic 1 để ngăn không cập nhật từ các sự kiện xảy ra khi truy xuất thử. Thêm vào đó, để ghi lên 10 thanh ghi thời gian, lịch, báo thức bằng định dạng đã chọn (nhị phân hoặc BCD), bit chế độ dữ liệu (data mode-DM) của thanh ghi B phải được đặt lên mức logic đặc biệt. Tất cả 10 byte thời gian, lịch, báo thức phải được sử dông nh­ chế độ dữ liệu. Bit SET trong ghi B có thể bị xóa sau khi bit chế độ dữ liệu đã được ghi cho phép RTC cập nhật byte thời gian và byte lịch. RTC có thể cập nhật toàn bộ trong chế độ đã chọn, chế độ dữ liệu không thể thay đổi nếu không bắt đầu lại 10 byte dữ liệu. Bảng dưới đây chỉ ra mã nhị phân và mã BCD của 10 vị trí thời gian, lịch, báo thức. Bảng 2: Chế độ dữ liệu của thời gian, lịch, báo thức Bit 24/12 không thể thay đổi khi không bắt đầu lại vị trí giê. Khi định dạng 12 được chọn, bit cao của byte giê biểu diễn bằng ký hiệu PM khi ở mức logic 1. Các byte thời gian, lịch, báo thức luôn luôn được truy xuất bởi vì chúng là bộ nhớ dữ liệu đôi. 10 byte này được tăng lên mỗi lần bởi 1 giây và kiểm tra điều kiện báo thức. Nếu đọc dữ liệu thời gian, lịch xảy ra trong quá trình cập nhật thì một vấn đề xảy ra khi mà giê, phót, giây không còn liên hệ với nhau. Khả năng đọc không chính xác thời gian và lịch là rất thấp. Ba byte báo thức (cảnh báo) có thể được sử dụng theo 2 cách. - Thứ nhất đó là khi thời gian báo thức được ghi lên các vị trí báo thức nh­ giê, phót, giây, ngắt báo thức được bắt đầu tại thời điểm đặc biệt trong ngày nếu bit cho phép báo thức ở mức cao. - Thứ hai đó là dùng điều kiện chèn “don’t care” vào 1 hoặc nhiều hơn trong 3 byte báo thức. Mã “don’t care” là bất cứ số thập lục phân nào có giá trị từ C0 đến FF. 2 bit quan trọng nhất của mỗi byte được đặt điều kiện “don’t care” khi ở mức logic 1. Báo thức được phát mỗi giê khi mà các bit “don’t care” được đặt ở trong byte giê. Tương tù nh­ vậy báo thức phát mỗi phót với mã “don’t care” được ghi trong byte giê và byte phót báo thức. Mã “don’t care” được ghi lên cả 3 byte báo thức thì sẽ tạo ra ngắt mỗi giây. I.4 Các thanh ghi điều khiển · Thanh ghi A - UIP (Update In Progess) có trạng thái có thể quan sát được. Khi UIP = 1, sù thay đổi cập nhật xảy ra, khi UIP = 0 sù thay đổi cập nhật không xảy ra cho đến hết khoảng thời gian 244ms .Thông tin thời gian, lịch, báo thức trong RAM sẵn sàng cho truy cập khi UIP = 0. UIP chỉ được đọc và không bị ảnh hưởng bởi Reset. Nếu bit SET (trong thanh ghi B) =1 sẽ ngăn không cho thay đổi và xoá trạng thái của bit UIP. - DV0, DV1, DV2: 3 bit này được sử dụng để bật/tắt bộ dao động và reset sù đếm lùi. DV2 DV1 DV0 0 1 0 Bật bé dao động và cho phép đồng hồ thời gian thực giữ thời gian. Sau thời gian 500ms mới có sự cập nhật. X 1 1 Cho phép bộ dao động nhưng giữ sự kiện đếm ngược trong lóc reset - RS3, RS2, RS1, RS0 : 4 bit này dùng để chọn 1 trong 13 tap của bộ chia 15 trạng thái, hoặc dùng để cấm bộ chia. Tap được chọn có thể được sử dụng để phát ra sóng vuông và/hoặc 1 ngắt định kỳ. Người dùng có thể làm theo 1 trong các cách sau: 1. Cho phép bằng bit PIE. 2. Cho phép đầu ra SQW bằng bit SQWE. 3. Cho phép cả 2 cùng thời gian và trị số. 4. Cho phép từng cái 1. · Thanh ghi B - SET: Khi bit SET = 0 chức năng thay đổi cập nhật hoạt động bình thường, đếm từng giây 1. Khi SET = 1 chức năng thay đổi cập nhật bị cấm, chương trình có thể cài đặt thời gian, lịch mà không cần có sự cập nhật xảy ra ở giữa quá trình cài đặt. Quá trình đọc cũng được thực thi tương tù. Bit SET có thể đọc/ghi, nó không bị ảnh hưởng bởi Reset hay các lệnh trong DS12887. - PIE (Periodic Interrupt Enable): Bit cho phép ngắt định kỳ, bit này có thể đọc/ghi, nó cho phép PF (Periodic Interrupt Flag) trong thanh ghi C đặt chân xuống thấp. Khi PIE = 1, ngắt định kỳ được phát ra bởi mức thấp của với các trị số được biểu thị bởi RS3 ® RS0 của thanh ghi A. Khi PIE = 0, đầu ra sẽ bị khoá, nhưng PF vẫn được set. PIE không bị ảnh hưởng bởi các lệnh trong của DS12887, nhưng nó sẽ bị xoá về 0 khi Reset. - AIE (Alarm Interrupt Enable): bit này có thể đọc/ghi. Khi AIE = 1, cho phép AF (Alarm Flag) trong thanh ghi C xác định . Một ngắt cảnh báo xảy ra từng giây khi 3 bytes thời gian bằng 3 bytes cảnh báo với mã cảnh báo 11xx.xxxx. Khi AIE = 0, AF không khởi động tín hiệu . AIE bị xoá bởi reset, các lệnh trong DS12887 không làm ảnh hưởng đến bit AIE. - UIE (Update Ended Interrupt Enable): bit có thể đọc/ghi. Bit này cho phép UF (Update End Flag) trong thanh ghi C xác định . Khi chân xuống thấp hoặc bit SET lên cao sẽ xoá bit UIE. - SQWE (Square Wave Enable). Khi SQWE = 1, 1 tín hiệu sóng vuông với tần số được chọn bởi các bit RS 3 ® RS 0, sẽ xuất hiện ở đầu ra SQW. Khi SQWE = 0 , SQW sẽ giữ ở mức thấp. Trạng thái của SQWE bị xoá bởi , SQWE có thể đọc/ghi. - DM (Dat Mode): bit này dùng để chọn thông tin về thời gian, lịch được định dạng là mã nhị phân hay mã BCD. DM được set bởi phần mềm và có thể đọc nếu cần. DM = 1: mã nhị phân , DM= 0 : mã BCD. - 24/12 : bit điều khiển định dạng byte giê. Khi bit này = 1 chế độ 24giê, khi bit = 0 chế độ 12giê. Bit này có thể đọc/ghi, và không bị ảnh hưởng bởi . - DSE (Daylight Saving Enable): bit có thể đọc/ghi. Bit này dùng để cho phép 2 cập nhật đặc biệt. Khi DSE được set = 1: vào Chủ nhật đầu tiên của tháng 4 khi thời gian tiến đến 1:59:59am được tăng lên thành 3:00:00am. Vào chủ nhật cuối cùng của tháng 10 khi thời gian tiến đến 1:59:59am thì được thay đổi thành 1:00:00am. Khi DSE = 0 sẽ không có sự thay đổi trên. Bit này không bị ảnh hưởng bởi các lệnh trong hay . · Thanh ghi C - IRQF (Interrupt Request Flag) sẽ được set lên 1 khi có 1 trong các sự kiện sau xảy ra: PF = PIE = 1 AF = AIE = 1 UF = UIE = 1 IRQF = PF.PIE + AF.AIE + UF.UIE Khi IRQF =1 thì = 0. Tất cả các bit cờ bị xoá khi thanh ghi C được được bởi phần mềm (chương trình), hay khi xuống thấp. - PF (Periodic Interrupt Flag) là bit chỉ đọc, nó sẽ set =1 khi 1 cạnh được chọn trong Tap của bộ chia. PF được set =1 hoàn toàn độc lập với trạng thái của bit PIE. Khi PF = PIE = 1, tín hiệu tích cực và sẽ set bit IRQF. PF được xoá bởi hay có sự đọc thông tin thanh ghi C của chương trình. - AF (Alarm Interrupt Flag): Khi AF = 1 sẽ cho biết rằng thời gian hiện tại đã bằng thời gian cảnh báo, nếu AIE cũng bằng = 1 thì chân sẽ xuống thấp và IRQF =1. AF được xoá bởi hay có sự đọc thông tin thanh ghi C của chương trình. - UF (Update Ended Interrupt Flag) : bit này được set sau mỗi chu kỳ cập nhật. Khi UIE =1 thì UF = 1 làm cho IRQF = 1 ® được chọn. - Bit 0 ® bit 3: không sử dụng. · Thanh ghi D - VRT (Valid RAM and Time): bit này không cho phép ghi, và khi đọc thì phải luôn có giá trị 1. Nếu lúc nào cũng có giá trị 0, thì điều đó cho biết nguồn nuôi của RTC đã cạn, và kết quả dữ liệu của đồng hồ thời gian thực và RAM rất có thể không còn chính xác. - Bit 0 ® bit 6 : không sử dụng. Luôn có giá trị bằng 0 khi đọc, không cho phép ghi. I.5 Minh họa ghép nối giữa DS12887 với 8051 II. THIẾT BỊ HIỂN THỊ LCD II.1 LCD LCD được nói trong đồ án này là loại LCD 2 dòng ma trận điểm 5x7,có 14 chân, chức năng của các chân được cho trong bảng 3. Vị trí của các chân được mô tả trên hình 9 cho nhiều LCD khác nhau. Hình 9: Các chân của LCD VDD : Cấp dương nguồn +5V. VSS : Chân nối đất. VEE : Được dùng để điều khiển độ tương phản của LCD. RS : Chân chọn thanh ghi (Register Select). Có hai thanh ghi rất quan trọng bên trong LCD, chân RS được dùng để chọn các thanh ghi này nh­ sau: Nếu RS = 0 thì thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng hạn nh­ xoá màn hình, đưa con trỏ về đầu dòng v.v… Nếu RS = 1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD. R/W: Chân đọc/ghi (R/W). Đầu vào đọc/ghi cho phép người dùng ghi thông tin lên LCD khi R/W = 0 hoặc đọc thông tin từ nó khi R/W = 1. E: Chân cho phép (Enable). Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được cấp đến chân dữ liệu thì một xung mức cao xuống thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu. Xung này phải rộng tối thiểu là 450ns. D0 - D7 : Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin lên LCD hoặc đọc nội dung của các thanh ghi trong LCD. Để hiển thị các chữ cái và các con sè, ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và các con số từ 0 - 9 đến các chân này khi bật RS = 1. Cũng có các mã lệnh mà có thể được gửi đến LCD để xoá màn hình hoặc đưa con trỏ về đầu dòng hoặc nhấp nháy con trá. Bảng 4 liệt kê các mã lệnh. Chóng ta cũng sử dụng RS = 0 để kiểm tra bit cờ bận để xem LCD có sẵn sàng nhận thông tin. Cờ bận là D7 và có thể được đọc khi R/W = 1 và RS = 0 nh­ sau: Nếu R/W = 1, RS = 0 khi D7 = 1 (cờ bận 1) thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kỳ thông tin mới nào. Khi D7 = 0 thì LCD sẵn sàng nhận thông tin mới. Chân Ký hiệu I/O Mô tả 1 VSS - Đất 2 VDD - Dương nguồn 5v 3 VEE - Cấp nguồn điều khiển độ tương phản 4 RS I RS = 0 chọn thanh ghi lệnh. RS = 1 chọn thanh ghi dữ liệu 5 RW I R/W = 1 đọc dữ liệu. R/W = 0 ghi 6 E I/O Cho phép 7 D0 I/O Các bit dữ liệu 8 D1 I/O Các bit dữ liệu 9 D2 I/O Các bit dữ liệu 10 D3 I/O Các bit dữ liệu 11 D4 I/O Các bit dữ liệu 12 D5 I/O Các bit dữ liệu 13 D6 I/O Các bit dữ liệu 14 D7 I/O Các bit dữ liệu Bảng 3: Mô tả các chân của LCD. Mã (Hex) Lệnh đến thanh ghi của LCD 01 Xoá màn hình hiển thị 02 Trở về đầu dòng 04 Giảm con trỏ (dịch con trá sang trái) 06 Tăng con trỏ (dịch con trá sang phải) 05 Dịch hiển thị sang phải 07 Dịch hiển thị sang trái 08 Tắt con trỏ, tắt hiển thị 0A Tắt hiển thị, bật con trá 0C Bật hiển thị, tắt con trá 0E Bật hiển thị, nhấp nháy con trá 0F Tắt con trỏ, nhấp nháy con trá 10 Dịch vị trí con trá sang trái 14 Dịch vị trí con trá sang phải 18 Dịch toàn bộ hiển thị sang trái 1C Dịch toàn bộ hiển thị sang phải 80 Đưa con trá về đầu dòng thứ nhất C0 Đưa con trá về đầu dòng thứ hai 38 Khởi tạo LCD 2 dòng và ma trận 5 ´ 7 Bảng 4: Các mã lệnh LCD. II.2 Minh họa ghép nối giữa LCD với 8051 III. ADC0809 Các bộ chuyển đổi ADC thuộc trong những thiết bị được sử dụng rộng rãi nhất để thu dữ liệu. Các máy tính số sử dụng các giá trị nhị phân, nhưng trong thế giới vật lý thì mọi đại lượng ở dạng tương tự (liên tục). Nhiệt độ, áp suất (khí hoặc chất lỏng), độ Èm và vận tốc và một số Ýt trọng những đại lượng vật lý của thế giới thực mà ta gặp hàng ngày. Một đại lượng vật lý được chuyển về dòng điện hoặc điện áp qua một thiết bị được gọi là các bộ biến đổi. Các bộ biến đổi cũng có thể được coi nh­ các bộ cảm biến. Mặc dù chỉ có các bộ cảm biến nhiệt, tốc độ, áp suất, ánh sáng và nhiều đại lượng tự nhiên khác nhưng chúng đều cho ra các tín hiệu dạng dòng điện hoặc điện áp ở dạng liên tục. Do vậy, ta cần một bộ chuyển đổi tương tự số sao cho bé vi điều khiển có thể đọc được chóng. ADC0809 là bộ chuyển đổi tương tự số của hãng National Semiconductor với 8 kênh đa hợp, tương thích với các vi xử lý, vi điều khiển 8 bit. ADC0809 có 8 kênh đầu vào tương tự, cho phép hiển thị 8 bộ biến đổi khác nhau chỉ thông qua 1 chip duy nhất. ADC0809 có những đặc điểm Dễ dàng giao tiếp với tất cả các vi xử lý,vi điều khiển. Nguồn điện áp +5V, tiêu thụ công suất thấp 15mW Điện áp cho phép ở đầu vào 0V ® 5V. Thang điều chỉnh rộng. Thời gian chuyển đổi 100m s. III.1 Sơ đồ các chân của ADC0809 Hình 10 : Sơ đồ chân của ADC0809 · Chức năng của các chân - IN0 ® IN7: 8 đầu vào tương tự, để chọn từng đầu vào dùng 3 chân A, B, C. Kênh tương tự Đường địa chỉ C B A IN0 L L L IN1 L L H IN2 L H L IN3 L H H IN4 H L L IN5 H L H IN6 H H L IN7 H H H Bảng 5: Chọn kênh đầu vào - Vref(+), Vref(-) : 2 chân này dùng để thiết lập điện áp tham chiếu. Nếu Vref(-) nối đất và Vref(+) nối với +5V thì độ phân giải của ADC là 5V/256 = 19.53mV. - ALE (Address Latch Enable): chân này dùng để chốt địa chỉ. - Vcc, Gnd (chân số 11 và 13 – không vẽ trong hình 10): là chân cấp nguồn và chân nối đất. - START : chân kích hoạt ADC thực hiện công việc chuyển đổi. Khi có 1 xung cao – xuống – thấp được đưa vào chân START thì ADC0809 bắt đầu chuyển đổi. - ENABLE: Chân cho phép đọc dữ liệu từ ADC. - EOC (End of Conversion): chân đầu ra báo hiệu kết thúc chuyển đổi. Khi ADC chuyển đổi xong thì nó đưa ra chân EOC 1 xung cao – xuống – thấp. - CLOCK : ADC0809 không có đồng hồ riêng, do vậy phải cấp xung đồng hồ ngoài đến chân CLOCK thì ADC mới hoạt động. III.2 Các bước lập trình cho ADC0809 Chọn 1 kênh đầu vào tương tự bằng các bit tạo địa chỉ A, B, C theo bảng 5. Kích hoạt ALE để chốt địa chỉ, bằng cách đưa 1 xung cao – xuống – thấp vào chân này. Kích hoạt chuyển đổi bằng cách đưa 1 xung cao – xuống – thấp vào START. Hiển thị (quan sát) EOC để quan sát xem chuyển đổi đã được hoàn thành chưa. Kích hoạt ENABLE để cho phép đọc dữ liệu của ADC. Khi có 1 xung cao – xuống – thấp được đưa vào ENABLE thì ADC sẽ cho phép đọc dữ liệu ra khái ADC. Trong ADC 0809 không có đồng hồ riêng và do vậy phải cấp xung đồng bộ ngoài đến chân CLK. Mặc dù tốc độ chuyển đổi phụ thuộc vào tần số đồng hồ được nối đến CLK nhưng nó không nhanh hơn 100ms. III.3 Minh họa cách ghép nối ADC0809 với 8051 Do ADC0809 không có đồng hồ trong, nên ta dùng 2 D-flipflop chia tần số của bộ thạch anh (12Mhz) để cấp xung cho ADC0809 hoạt động. IV.BÀN PHÍM HEX. Bàn phím là 1 thiết bị vào ra thông dụng trong các hệ vi xử lý, vi điều khiển. Trong trường hợp đơn giản nó có thể chỉ là 1 công tắc có gắn phím nối vào 1 chân nào đó của vi điều khiển (vi xử lý), ở mức phức tạp hơn nó có thể là hàng chục công tắc có gắn phím được tổ chức theo 1 ma trận, phức tạp hơn đó là bàn phím có hàng trăm công tắc với bộ vi xử lý riêng có nhiệm vụ nhận ra các phím được gõ và tạo mã để đưa đến bộ vi xử lý. Công tắc của keyboard có hai nhóm chính: - Công tắc tiếp xúc cơ khí (kiểu điện trở, điện trở thay đổi khi Ên và khi nhả phím) - Công tắc không có tiếp xúc cơ khí (kiểu điện dung: điện dung thay đổi khi Ên và nhả phím, hoặc hiệu ứng Hall: điện áp thay đổi khi Ên và nhả phím) Hex-keypad trong đồ án : là loại bàn phím 16 công tắc (theo kiểu tiếp xúc cơ khí) được xắp xếp theo ma trận 4x4, được đánh phím từ 0 ® 9, từ A ® F Hình 11: Bàn phím số Hex Minh họa ghÐp nối bàn phím với 8051. Trong sơ đồ ghép nối dưới đây, ta sử dông luôn cổng P1 vừa làm cổng ra để đưa mẫu quét bàn phím, vừa làm cổng vào để đọc trạng thái của phím (4 bit cao của P1 nối với đầu vào của bàn phím, 4 bit thấp nối với đầu ra) II.5. GIẢI Mà ĐỊA CHỈ 74LS138 74LS138 là một trong những bộ giải mã địa chỉ được sử dụng rộng rãi nhất. Ba chân vào A, B và C dùng để tạo ra 8 tín hiệu ra mức tích cực thấp Y0- Y7, mỗi đầu ra Y được nối đến chân CS của mét chip nhí, cho phép điều khiển 8 khối nhớ. ở 74LS138 ngoài các chân vào A, B vàC để chọn đầu ra thích hợp, còn có 3 đầu vào là G2A, G2B và G1. Trong đó G2A và G2B đều là tích cực mức thấp, còn G1 là tích cực mức cao. Nếu 1 trong 3 đầu vào này không được nối đến tín hiệu địa chỉ thì chúng phải được kích hoạt cố định bằng cách hoặc nối đất hoặc nối nguồn Vcc tuỳ theo mức kích hoạt của từng chân . Nếu có nhiều EROM hoặc nhiều RAM hoặc cả 2 giao tiếp với 8501 ta cần phải giải mã địa chỉ. Việc giải mã là cần thiết cho các bộ xử lí nối các ngõ vào chọn chip CS của các IC nhí cho một bộ nhớ có nhiều EROM và RAM. V. CHỐT ĐỊA CHỈ 74HC373 V.1.Sơ đồ chân của 74HC373 Hình 12 : Sơ đồ chân 74LS373 V.2 Hoạt động của 74LS373: Khi lối vào giữ nhịp (chân 11) được đặt lên mức High, thì các lối ra Q và lối vào D cũng chuyển theo. Khi lối vào giữ nhịp được nối xuống mass các dữ liệu được xếp cuối cùng ở các lối vào D sẽ được lưu trữ bên trong và được dẫn tới các lối ra Q, cho đến khi xung nhịp chuyển trở lại mức High. Một mức điện áp High ở lối vào (chân 1) chuyển tất cả các lối ra sang chế độ ba trạng thái độc lập với trạng thái của các chân lối vào còn lại. Chú ý rằng chỉ có các lối ra bị ngắt còn chức năng bộ nhớ vẫn không bị ảnh hưởng. Bảng chân lý: E Lối vào Lối ra 0 1 1 1 0 1 0 0 0 0 X Q 1 X X T 1: Mức High 0: Mức Low X: Mức tuỳ ý T : Ba trạng thái Q: Dữ liệu được lưu nhớ Lối vào : 1, 3, 4, 7, 8, 11, 13, 14, 17, 18. Lối ra : 2, 5, 6, 9, 12, 15, 16, 19 Khi hoạt động bình thường, lối vào (chân 1) và lối vào giữ nhịp được nối xuống mass. Khi các dữ liệu được đặt ở các lối vào và khi giá trị của chúng là ổn định, thì một xung dương ngắn hạn với độ dài Ýt nhất bằng 10 ns được dẫn tới lối vào giữ nhịp, và dữ liệu được đón nhận vào bộ nhớ. Do khả năng có thể đệm phụ tải cao và do tính chất ba trạng thái nên vi mạch tỏ ra là lý tưởng khi được dùng làm bộ nhớ trung gian dùng cho địa chỉ trong các hệ thống định hướng bus. Khoảng thời gian trễ một kỳ khi có đấu một tải điện dung 50 pF cỡ 50 ns (2V), 22 ns (4,5V), hoặc 19 ns (6V) và khi đấu tải điện dung 150 pF bằng 80 ns (2V), 30 ns (4,5V) hoặc 26 ns (6V). Mỗi lối ra có thể cung cấp một dòng điện bằng 35mA. ở trạng thái tĩnh dòng điện tiêu thụ lớn nhất cỡ 80 mA. PHẦN II. THIẾT KẾ CHƯƠNG I: THIẾT KẾ PHẦN CỨNG I. SƠ ĐỒ NGUYÊN LÝ. Sơ đồ mạch nguyên lý bao gồm: 5 IC : 8051, 74ALS373, 74ALS138, DS12887, ADC0809. 3 tụ điện : C1 = C2= 30pF, C = 10 mF. 10 điện trở : R1® R8=10KW, R9 = 100W, R10 = 10KW. 1 điện trở dãy : 8 x 10KW. 1 biến trở: 10KW. 1 dao động thạch anh : 12MHz. 1 nót bấm. LCD 16x2. Hex- keypad 5 cổng đảo 7404. · Bàn phím số Hex được nối với 8051 qua cổng P1. · ADC0809 được nối với 8051 nh­ sau: Các chân dữ liệu được nối với P0 của 8051. Việc chọn đầu vào In0-In7 được chọn bằng ba chân ADD-A, ADD-B, ADD-C, 3 chân này được nối với 3 chân Q0 - Q1 - Q2 của 74ALS373. Do ADC0809 cần có xung đồng hồ ngoài cấp tới chân Clock thì chip mới hoạt động, vì thế sử dụng luôn xung phát ra từ bộ dao động thạch anh. Nhưng tần số của bộ dao động là 12Mhz lớn hơn tần số xung mà ADC cho phép do vậy phải đưa qua 2 D-flipflop để chia 4 tần số. Chân EOC được nối với chân INT1 của 8051 thông qua cổng đảo 7404, để khi chuyển đổi ta có thể quan sát trạng thái ADC xem đã hoàn thành chuyển đổi chưa. Chân cho ALE được nối với ALE của 8051, chân Start được nối với Y0 của 74ALS138, chân Enable được nối với của 8051 thông qua 1 cổng đảo. · DS12887 được nối với 8051 nh­ sau: Các chân AD0 – AD7 được nối chung cổng P0 với ADC0809. Chân cho phép CS được nối với Y1 của 74ALS138, DS được nối với của 8051, AS nối với chân ALE của 8051, R/W nối với chân của 8051. Chân Reset được nối cùng mạch Reset của 8051. · LCD được nối với 8051 nh­ sau: Các chân dữ liệu D0 – D7 được nối với cổng P2 của 8051. RS, RW được nối với , thông qua các cổng đảo. Chân cho phép E được nối với chân T0 của 8051. Để điều chỉnh độ tương phản của LCD cần dùng thêm 1 biến trở 10KW, được nối nh­ hình vẽ · Do ta sử dụng P0 vừa làm cổng vào vừa làm cổng ra nên cần nối thêm điện trở kéo vào P0 (vì P0 không có điện trở kéo lên). CHƯƠNG II: THIẾT KẾ PHẦN MỀM Từ mạch đã thiết kế, chúng em đã xây dựng 3 bài toán ứng dụng: · Quét bàn phím HEX, hiển thị phím được Ên ra LCD. · Đọc thời gian từ đồng hồ thời gian thực DS12887. · Điều khiển ADC0809 biến đổi tín hiệu tương tự thành số. I. CHUƠNG TRÌNH QUÉT BÀN PHÍM HEX. Chương trình này thực hiện quét bàn phím HEX, kiểm tra xem có phím nào được nhấn không. Nếu có, chuyển thành mã ASCII để hiển thị ra LCD. Nếu không có phím nào được nhấn thì kết thúc. · Lưu đồ của bài toán · Lưu đồ hàm quét bàn phím · Chương trình hợp ngữ $debug $tilte (** TEST PROGRAM for the MyBOARD **) org 0000h main: call scan ; Gọi chương trình quét bàn phím. call convert ; Gọi chương trình đổi Hex®ASCII. call display ; Gọi chương trình hiển thị ra LCD. ;========================================================; ; Chương trình con quét bàn phím SCAN ; ;========================================================; scan: mov A,#00H ; Đưa 0 ra các cột mov P1,A mov A,P1 ; Đọc các hàng anl A,#0F0H ; Che các bit thấp cjne A,#0F0H,scan_key ; Nếu có phím Ên, gọi chương trình tìm ; phím Ên ret ; Không có phím nào Ên thì thoát. ;==========================================================; ; Scan_KEY: đọc trạng thái bàn phím. ; ; trả về C=0 nếu không có phím nào được Ên ; ; trả về C=1 và mã hex của phím Ên trong ACC nếu có phím Ên. ; ;==========================================================; scan_key: mov A,#0FEh ; Bắt đầu quét từ cột 0. mov R6,#4 ; Dùng R6 làm bộ đếm. quet: mov P1,A ; Tích cực cột. mov R7,A ; Lưu mẫu quét mov A,P1 ; Đọc trở lại cổng Port1 anl A,#0F0h ; Che các bit thấp. cjne A,#0F0h, tao_ma ; Có hàng tích cực, thì gọi chương trình ; tạo mã mov A,R7 ; Nếu không, di chuyển tới cột kế. rl A ; quay trái A djnz R6,quet clr C ; Không có phím được Ên. Xóa C=0 sjmp exit ; Thoát tao_ma: mov R7,A ; Lưu trong R7. mov A,#4 ; Chuẩn bị tính trọng số cột. clr C subb A,R6 ; Trọng số cột = 4-R6. mov R6,A ; Lưu trong R6. mov A,R7 ; Phục hồi mã quét. swap A ; Đặt trong 4 bit thấp. mov R5,#4 ; Dùng R5 làm bộ đếm. again: rrc A ; Quay phải A với cờ nhớ. jnc done ; Thực thi xong khi C=0. inc R6 ; Cộng 4 đến khi thấy hàng tích cực. inc R6 inc R6 inc R6 djnz R5,again done: setb C ; C=1 (có phím được Ên) mov A,R6 ; Mã được cất trong A. exit: ret ret ; Kết thúc chương trình quét. ;==========================================================; ; Chương trình hiển thị ra LCD ; ;==========================================================; display: mov R3,A ; Cất dữ liệu trong A vào thanh ghi R3. mov A,#38h ; Khởi tạo LCD 2 dòng, ma trận điểm ;5x7 call write ; Gọi chương trình ghi lệnh điều khiển ; LCD call delay ; Tạo độ trễ cho LCD. mov A,R3 call d_data ; Gọi chương trình hiển thị dữ liệu. write: mov P2,A ; Đưa lệnh ra. clr P3.7 ; Đặt RS = 0 để chọn thanh ghi lệnh. clr P3.6 ; Đặt RW = 0 để ghi lệnh. setb P3.4 ; Đặt E = 1 clr P3.4 ; E = 0, tạo xung cao xuống thấp. ret d_data: mov P2,A ; Sao chép dữ liệu cần hiển thị ra P2. setb P3.7 ; Đặt RS = 1 để chọn thanh ghi dữ liệu. clr P3.6 ; Đặt RW = 0 để ghi dữ liệu. setb P3.4 ; E = 1 clr P3.4 ; E = 0 ret delay: mov R2,#50 ; Tạo độ trễ here: djnz R2,here ret ret ;========================================================; ; Chương trình con Chuyển đổi mã HEX thành mã ASCII ; ;========================================================; convert: anl A,#0Fh ; Xóa các bit cao. cjne A,#0Ah,$+3 ; So sánh xem A có nhỏ hơn 0Ah ;không? jc htoa add A,#7 ; có, cộng thêm 7 htoa: add A,#’0’ ; Không, chuyển đổi trực tiếp. ret END ; Hết chương trình. II. ĐỌC THỜI GIAN TỪ ĐỒNG HỒ THỜI GIAN THỰC RTC DS12887 Để thực hiện công việc đọc thời gian từ DS12887, trước hết ta phải tiến hành chọn chip thông qua 74ALS138. Chân của DS 12887 được nối với chân Y1 của 74ALS138. Để chọn chân Y1, phải đặt A = 0, B = 1, C = 0. Sau khi chọn chip, tiếp theo tiến hành đặt các thông số để đọc dữ liệu: Đặt địa chỉ thanh ghi B của DS12887: đưa địa chỉ của thanh ghi B là 0Bh vào R0 (của 8051). Gửi địa chỉ này đến Port 0 để gửi tới DS12887. Đặt thông số cho thanh ghi B: SET = 0 : không cho phép cập nhật thời gian bởi chương trình. PIE = 1 : Cho phép ngắt. AIE = 0 : Cho phép tín hiệu ngắt ở đầu ra . UIE = 1 SQWE = 0 DM = 0 : dữ liệu thông tin về thời gian được định dạng BCD. = 1: Chế độ thời gian 24h. DSE = 0 : Không sử dụng chế độ giê mùa đông. Ta chỉ quan tâm tới bit SET, PIE, DM, , các bit còn lại của thanh ghi B trong bài toán này không cần chú ý tới. Đọc thời gian : Địa chỉ byte giê trong DS12887 là 04h. Đọc xong lưu vào R2(của 8051). Địa chỉ của byte phót trong DS12887 là 02h. Đọc xong lưu vào thanh ghi R3 (của 8051). Địa chỉ của byte giây trong DS12887 là 00h. Đọc xong lưu vào thanh ghi R4( của 8051). Chuyển đổi dữ liệu thời gian từ mã BCD sang mã ASCII để hiển thị ra LCD. Hiển thị trên LCD. · Lưu đồ bài toán: · Tiến trình đọc thông tin · Lưu đồ hàm khởi tạo LCD · Lưu đồ hàm kiểm tra LCD · Chương trình hợp ngữ $debug $tilte (** TEST PROGRAM for the MyBOARD **) org 0000h ljmp Main org 0003h ; Điểm nhập vector ngắt ngoài 0. ;=======================================================; ; Trình xử lý ngắt ngoài ; ;=======================================================; Ex0IRS: setb P3.0 ; Hủy bỏ việc chọn DS12887 khi ; đọc clr P3.1 ; xong dữ liệu. clr EX0 ; Cấm ngắt ngoài 0. reti ; Hết chương trình xử lý ngắt. ;=======================================================; ; Main Program ; ;=======================================================; org 0030h Main: call select_chip ;Gọi chương trình con chọn ;chip. setb P3.6 ; Cho phép ghi. here: mov A,#0Bh ;Địa chỉ thanh ghi B của ;DS12887. mov P0, A ; Đưa ra cổng P0. setb ALE ; Cho ALE = 1 clr ALE ; ALE = 0, tạo xung cao xuống ; thấp để chân DS cho phép chốt ; địa chỉ trong DS12887. mov P0,#01010010b ; Đặt các giá trị điều khiển cho ; thanh ghi B của DS12887. setb ALE ;Tạo mức cao ở chân DS để giải ; phóng việc chốt địa chỉ. mov A,#0FFh mov P0,A ; Thiết lập P0 làm đầu vào. mov R0,#04h ; Địa chỉ byte giê. clr ALE mov P0,@R0 ; Đọc byte giê. mov R4,P0 ; Lưu giê vào thanh ghi R4(của ;8051). setb ALE mov R0,#02h ; Địa chỉ byte phót. clr ALE mov P0,@R0 ; Đọc phót. mov R3, P0 ; Lưu phót vào thanh ghi R3(của ;8051) setb ALE mov R0,#00h ; Địa chỉ của byte giây. clr ALE mov P0,@R0 ; Đọc giây. mov R2,P0 ; Lưu giây vào thanh ghi R2 ; (của 8051) setb ALE setb EA ; Cho phép ngắt ngoài. setb EX0 ; Cho phép ngắt ngoài 0. set IT0 ; Kích cạnh âm. call LCD_setup ; Khởi tạo LCD. mov A,R2 ; Lấy lại byte giây từ R2. call convert ; Chuyển đổi sang mã ASCII. call display ; Hiển thị ra LCD call Space ; Tạo dấu ‘:’ trên LCD. mov A,R3 ; Lấy lại byte phót từ R3. call convert ; Chuyển mã. call display ; Hiển thị ra LCD call space mov A,R4 ; Lấy lại byte giê từ R4. call convert ; Chuyển mã. call display ; Hiển thị simp $ ;=======================================================; ; Chương trình con CONVERT chuyển mã BCD thành ASCII ; ;=======================================================; convert: mov R5, A ; Tạo bản sao của BCD vào R5. anl A,#0Fh ; Xóa phần bit cao. orl A,#30h ; Tạo thành mã ASCII. mov R6,A ; Lưu lại phần thấp của byte dữ ; liệu đã được chuyển mã. mov A,R5 ; Lấy lại giá trị ban đầu. anl A,#0F0h ; Xóa phần thấp của byte dữ liệu. swap A ; Hoán đổi bit cao « bit thấp orl A,#30h ; Tạo thành mã ASCII. mov R5,A ; Lưu phần cao của byte dữ liệu ; đã được chuyển đổi vào R5. ret ;=======================================================; ; Chương trình con setup LCD ; ;=======================================================; LCD_setup: mov A,#38h ; Khởi tạo LCD 2 dòng ma trận ; 5x7 pixel call ready ; Kiểm tra LCD đã sẵn sàng ;chưa? mov P2,A ; Xuất mã lệnh. clr P3.7 ;Đặt RS = 0, chọn thanh ghi ;lệnh của LCD. clr P3.6 ;RW = 0 cho phép truy cập ;thanh ghi lệnh. setb P3.4 ; E =1 clr P3.4 ; E= 0, tạo xung cao xuống thấp, ; để chốt dữ liệu. ret ;========================================================; ; Chương trình con DISPLAY ; ;========================================================; display call ready ;Kiểm tra LCD đã sẵn sàng ;chưa? mov P2,R6 ; Đọc phần thấp của byte dữ liệu, ; trong R6. call write ; Ghi ra LCD. mov P2,R5 ; Đọc phần cao của byte dữ liệu, ; trong R5. call write ; Đưa ra LCD. ret ;=======================================================; ; Chương trình con WRITE ; ;=======================================================; write: setb P3.7 ; RS = 1, chọn thanh ghi dữ liệu ; của LCD. clr P3.6 ; RW = 0, để ghi dữ liệu. setb P3.4 ; E = 1 clr P3.4 ; E = 0, tạo xung cao xuống thấp ; để cho phép LCD. ret ;=======================================================; ; Chương trình kiểm tra xem LCD đã sẵn sàng chưa? ; ;=======================================================; ready: setb P2.7 ;Lấy P2.7 làm cổng vào kiểm ;tra. clr P3.7 ; RS = 0, chọn thanh ghi lệnh. setb P3.6 ; RW = 1, đọc dữ liệu từ LCD. back: setb P3.4 ; E =1 clr P3.4 ; E = 0, để cho phép LCD jb P2.7,back ; Đợi khi LCD rảnh. ret ;=======================================================; ; Chương trình con tạo dấu “:” dùng để hiển thị thời gian theo kiểu “h:m:s” ; ;=======================================================; space: call ready mov A,#’:’ call write ret ;=======================================================; ; Chương trình con chọn chip ; ;=======================================================; select_chip: clr P3.0 ; A = 0 (74ALS138) setb P3.1 ; B = 1 (74ALS138), C = 0 (do ; chân này được nối đất.) ABC = ; 010 ® Y1 = 0 ret END ; Hết chương trình. III. ĐIỀU KHIỂN ADC0809 ĐỂ THỰC HIỆN CHUYỂN ĐỔI. Giả sử có đầu ra của thiết bị đo (cảm biến,…) được nối vào chân IN0 của ADC0809. Vref(-) = Gnd, Vref(+) = +5V. Xây dùng chương trình để chuyển đổi tín hiệu Analog thành Digital, kiểm tra khi ADC chuyển đổi xong thì đọc dữ liệu đã được ADC chuyển đổi vào Vi điều khiển rồi hiển thị ra LCD. · Lưu đồ bài toán · Chương trình hợp ngữ $debug $tilte (** ADC0809 TEST PROGRAM for the MyBOARD **) org 0000h ljmp Main org 0013h ; Điểm nhập vector ngắt ngoài 1 ;=======================================================; ; Trình xử lý ngắt ngoài ; ;=======================================================; Ex1IRS: setb P3.0 ; Hủy bỏ việc chọn ADC0809 setb P3.1 ; khi đọc xong dữ liệu. clr EX1 ; Cấm ngắt ngoài 1. reti ; Hết chương trình xử lý ngắt. ;=======================================================; ; Main Program ; ;=======================================================; org 0030h ; Điểm nhập chương trình chính. Main: mov P0,#00h ; Chọn địa chỉ đầu vào IN0 clr ALE ; ALE =0; setb ALE ; ALE = 1, tạo xung thấp – lên – ; cao để chốt địa chỉ kênh ở trong ; ADC. clr P3.0 ; Tạo xung cao – xuống – thấp clr P3.1 ; để bắt đầu chuyển đổi setb P3.0 setb P3.1 setb EA ; Cho phép ngắt setb EX1 ; Cho phép ngắt ngoài 1 setb IT1 ; Kích hoạt cạnh âm wait: jnb P3.3,wait ; Chê cho đến khi chuyển đổi ; xong. setb P3.7 ; OE = 1 , clr P3.7 ; OE = 0, tạo xung H-to-L để cho ; phép lấy dữ liệu ra khái ADC. mov A,#0FFh mov P0,A ; Tạo P0 làm đầu vào mov A, P0 ; Đọc dữ liệu vào thanh chứa A call convert ; Gọi chương trình con chuyển ; đổi call display ; Gọi chương trình con hiển thị ;=======================================================; ; Chương trình con CONVERT chuyển mã HEX thành ASCII ; ;=======================================================; convert: anl A,#0Fh ; Xóa phần bit cao. orl A,#30h ; Tạo thành mã ASCII. mov R3,A ; Lưu lại vào R3 ret ;=======================================================; ; Chương trình con DISPLAY ; ;=======================================================; display: mov A,#38h ; Khởi tạo LCD 2 dòng ma trận ; 5x7 pixel call setup_LCD ; Gọi chương trình setup mov A,R3 ; Lấy lại dữ liệu đã lưu trong R3 call write ; Hiển thị dữ liệu lên LCD ret ;========================================================; ; Chương trình con Setup LCD ; ;========================================================; setup_LCD: call ready ; Kiểm tra LCD đã sẵn sàng ; chưa? mov P2,A clr P3.7 ; RS = 0 clr P3.6 ; RW = 0 setb P3.4 ; E = 1 clr P3.4 ; E = 0 ret ;=======================================================; ; Chương trình con WRITE ; ;=======================================================; write: call ready ; Kiểm tra LCD đã sẵn sàng ? mov P2,A setb P3.7 ; RS = 1 clr P3.6 ; RW = 0 setb P3.4 ; E = 1 clr P3.4 ; E = 0 ret ;=======================================================; ; Chương trình kiểm tra xem LCD đã sẵn sàng chưa? ; ;=======================================================; ready: setb P2.7 ; Lấy P2.7 làm cổng vào kiểm ;tra. clr P3.7 ; RS = 0, chọn thanh ghi lệnh. setb P3.6 ; RW = 1, đọc dữ liệu từ LCD. back: clr P3.4 setb P3.4 jb P2.7,back ; Đợi khi LCD rảnh. ret END ; Hết chương trình. Kết luận Sau thời gian thực tập với nhiều cố gắng của bản thân cùng với sự hướng dẫn của thầy Vũ Vân Hà, quyển đồ án này đã hoàn thành đúng thời gian quy định theo yêu cầu đặt ra. Để thực hiện được yêu cầu trên em đã nghiên cứu, tìm hiểu những vấn đề về vi xử lý, các vi mạch và các vấn đề khác có liên quan đến đề tài. Kết quả thu được những kiến thức về: Vi điều khiển 8051. DS12887, ADC0809, 74GC373, 74LS138. Bàn phím số Hex, hiển thị LCD Xây dựng, thiết kế mạch nguyên lý. Xây dựng các bài toàn điều khiển. Tuy nhiên. do thời gian còng nh­ trình độ chuyên môn có hạn nên đề tài chỉ dừng lại ở phần thiết kế sơ đồ nguyên lý và viết chương trình, chứ chưa thực hiện mạch bằng các linh kiện thực. Mong rằng đề tài này sẽ được các bạn sinh viên khóa sau tiếp tục thực hiện và khắc phục được những thiếu sót của đề tài. Sau cùng một lần nữa chúng em xin chân thành cảm ơn thầy Vũ Vân Hà cùng quý thầy cô Khoa Điện đã tận tình hướng dẫn và dẫn dắt em trong suốt nhòng năm học vừa qua. Hà Nội, Ngày tháng 04 năm 2006 Sinh viên thực hiện Trịnh Mạnh Hùng Tài liệu tham khảo [1] Tống Văn On, Hoàng Đức Hải; Họ vi điều khiển 8051. Nhà xuất bản Lao động – Xã hội, 2001 [2] Nguyễn Tăng Cường, Phan Quốc Thắng; Cấu trúc và lập trình họ vi điều khiển 8051. Nhà xuất bản Khoa học Kỹ thuật, 2004. [3] Tài liệu dưới dạng file .pdf DS12887 : www.dallas.com\...\ds12887.pdf ADC0809: www.national.com\...\adc0809.pdf 74ALS373: www.phillips.com\...\74als374.pdf Lập trình hợp ngữ cho 80c51: www.hitex.co.uk\...\c51primer.pdf [4] Giáo trình môn học Vi điều khiển 8051 [5] Văn Thế Minh; Kỹ thuật vi xử lý. Nhà xuất bản Giáo Dục,1997

Các file đính kèm theo tài liệu này:

  • doc8051.doc