Đề tài 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

Tài liệu Đề tài 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: BỘ GIÁO DỤC VÀ ĐÀO TẠO CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI Độc lập – Tù do – Hạnh phóc NHIỆM VÔ THIẾT KẾ TỐT NGHIỆP Họ và tên Ngô Quốc Toàn Khoá: 4 Khoa: Điện Ngành Điều khiển Tự động 1. ĐÒ tài: 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. 2. Các số liệu ban đầu: ………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………… …………………………………………………………………………………… 3. Nội dung các phần thuyết minh và tính toán: ………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… 4. Các bản vẽ đồ thị (ghi rõ các loại bản vẽ và kích thước các bản vẽ): …………………………………………………………………………………………………………………………………...

doc82 trang | Chia sẻ: hunglv | Lượt xem: 1197 | Lượt tải: 2download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài 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, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
BỘ GIÁO DỤC VÀ ĐÀO TẠO CỘNG HÒA Xà HỘI CHỦ NGHĨA VIỆT NAM TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI Độc lập – Tù do – Hạnh phóc NHIỆM VÔ THIẾT KẾ TỐT NGHIỆP Họ và tên Ngô Quốc Toàn Khoá: 4 Khoa: Điện Ngành Điều khiển Tự động 1. ĐÒ tài: 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. 2. Các số liệu ban đầu: ………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………… …………………………………………………………………………………… 3. Nội dung các phần thuyết minh và tính toán: ………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… 4. Các bản vẽ đồ thị (ghi rõ các loại bản vẽ và kích thước các bản vẽ): ………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………… 5. Cán bộ hướng dẫn: …………..…Vũ Vân Hà … ……………………… 6. Ngày giao nhiệm vụ thiết kế:…………………………..………………... 7. Ngày hoàn thành nhiệm vụ:..…………………………………………….. Ngày tháng 04 năm 2006 CHỦ NHIỆM BỘ MÔN CÁN BỘ HƯỚNG DẪN (Ký, ghi rõ họ tên) (Ký, ghi rõ họ tên) Sinh viên đã hoàn thành Ngày tháng 04 năm 2006 (Ký, ghi rõ họ tên) Mục Lục Lời cảm ơn.......................................................................................................7 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 Lời cảm ơn Trước hết chúng em gửi lời cám ơn tới tập thể các thầy cô giáo bộ môn Điều khiển tự động - Khoa điện trường Đại học Bách khoa Hà Nội. Đã luôn giúp đỡ và truyền đạt cho chóng em những kiến thức quý báu trong qúa trình học tập tại trường. Chóng em xin chân thành cảm ơn thầy giáo hướng dẫn Vũ Vân Hà đã nhiệt tình hưỡng dẫn chúng em trong quá trình làm đồ án . Sinh viên thực hiện Trịnh Mạnh Hùng Nguyễn Xuân Linh Ngô Quốc Toàn MỞ ĐẦU Đề tài: Thiết kế mạch thí nghiệm dùng Vi điÒu khiển 80C51 phối ghép với thiết bị ngoại vi : LCD, ADC0809, RTC DS12887 và bàn phím sè HEX. Điều khiển tự động, ngày nay đã và đang được ứng dụng vào rất nhiều ngành sản xuất và cuộc sống. Từ những nhà máy, dây chuyền sản xuất cho đến những đồ dùng phục vô sinh hoạt nh­: máy giặt, lò vi sóng… Để thực hiện việc điều khiển tự động có nhiều phương pháp, cách thức nh­ bằng máy tính, vi xử lý hay hệ điều khiển chuyên dụng. Tùy vào lĩnh vực mà lùa chọn hệ thống điều khiển thích hợp. Với sinh viên học chuyên ngành điều khiển tự động phải nắm bắt được tất cả những kiến thức cơ sở, tổng quát nhất để từ đó có thể giải quyết các bài toán điều khiển đặt ra trong công việc sau này. Một trong những kiến thức cần phải có đó là việc nghiên cứu và thiết kế mạch ứng dụng sử dụng bộ vi điều khiển. Do đó chúng em đã chọn đề tài : 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à HEX-keypad. Các công việc thực hiện: · Tìm hiểu về Vi điều khiển 8051, và các thiết bị ngoại vi. · Thiết kế mạch nguyên lý. · Xây dựng các bài toán điều khiển. Phương pháp thực hiện · Tìm hiểu các thiết bị · Vẽ mạch nguyên lý bằng phần mềm Protel · Viết phần mềm bằng hợp ngữ bằng KeilC Phần I :tổng quan về Vi đIều khiển 8051 và các thiết bị ngoại vi CHƯƠNG I: VI ĐIỀU KHIỂN 8051 I. KHÁI NIỆM CHUNG VỀ VI ĐIỀU KHIỂN I.1. Sù ra đời Vào năm 1971 tập đoàn Intel đã giới thiệu 8080, bé vi xử lí thành công đầu tiên, tiếp đó không lâu Motorola, RCA, MOS Technology và Zilog còng đã giới thiệu các bộ vi xử lí tương tù : 6800, 1801, 6502 và Z80. Bản thân các vi mạch này tuy không có nhiều hiệu quả sử dụng nhưng khi là một phần của một máy tinh đơn board (Single Board Computer), chóng trở thành thành phần trung tâm trong các sản phẩm có Ých dùng để nghiên cứu và thiết kế. Năm 1976 Intel giới thiệu bộ vi điều khiển( Micro Controller) 8748, mét chip tương tù nh­ các bộ vi xử lí và là chip đầu tiên trong họ vi điều khiển MCS-48. 8748 là một vi mạch chứa trên 17000 transistor bao gồm một CPU, 1Kbyte EPROM, 64 byte RAM, 27 chân xuất nhập và một bộ định thời 8 bit. Sù ra đời của IC này và các IC khác của họ MCS-48 đã nhanh chóng trở thành chuẩn công nghiệp trong các ứng dụng hướng điều khiển (Control Oriented Application). Độ phức tạp, kích thước và khả năng của bộ vi điều khiển được tăng thêm một bậc quan trọng vào năm 1980 khi Intel công bè chip 8051, bé vi điều khiển đầu tiên của họ vi điều khiển MCS-51. So với 8048, chip 8051 chứa trên 60000 transistor bao gồm 4Kbyte ROM, 128 byte RAM, 32 đường xuất nhập, 1 port nối tiếp và 2 bộ định thời 16 bit. Vi điều khiển 8051 còng nh­ họ vi điều khiển MCS-51 là một trong những bộ vi điều khiển 8-bit mạnh và linh hoạt nhất, đã trở thành bộ vi điều khiển hàng đầu trong những năm gần đây. I.2 ĐiÓm khác biệt giữa vi điÒu khiển và vi xử lý dùng chung Những bé vi xử lý dùng chung thường gặp nh­ họ Intel x86 (8086, 80286, 80386, 80486, Pentium..) hoặc họ 680x0 của Motorola (6800, 68010, 68020, 68030, 68040…). Những bộ vi xử lý này không có RAM, ROM và không có các port I/O trên chip, do đã khi sử dụng thiết kế hệ thống phải bổ sung thêm RAM, ROM, I/O và các bộ định thời (Timer/Counter) ngoài để cho chúng hoạt động được. Tuy việc này làm cho hệ thống cồng kềnh, phức tạp và giá thành cao hơn nhưng chúng lại có ưu điÓm là linh hoạt hơn so với vi điều khiển. Trong khi đó với vi điều khiển nó có sẵn : 1 CPU( bé vi xử lý) cùng 1 lượng cố định RAM, ROM, các cổng I/O và Timer/Counter được tích hợp tất cả trên cùng 1 chip. I.3 Tiêu chuẩn lùa chọn 1 bé vi điều khiển Hiện nay có nhiều loại vi điều khiển, với loại vi điều khiển 8bit có 4 loại chính sau: 6811 (Motorola), 8051 (Intel), Z8 (Zilog) và PIC16x (Micro Technology). Mỗi loại trên đều có 1 tập lệnh và thanh ghi riêng nên chúng đều không tương thích lẫn nhau. Ngoài ra còn có những bộ vi điều khiển 16bit và 32bit, vì thế để lùa chọn bé vi điÒu khiển trong thiết kế cần phải dùa trên những tiêu chuẩn sau: Đáp ứng nhu cầu tính toán của bài toán 1 cách hiệu quả về giá thành và đầy đủ chức năng có thể nhìn thấy được: Tốc độ: tốc độ lớn nhất mà bộ vi điều khiển hỗ trợ là bao nhiêu? Kiểu đóng vỏ: kiểu DIP (Dual In-line Package) hay QFP (Quadrangle Flat Package). Đây là điÒu quan trọng đối với yêu cầu về không gian, kiểu lắp ráp và tạo mẫu cho sản phẩm. Công suất tiêu thụ. Dung lượng RAM, ROM trên chip. Số cổng vào/ra và Timer/Counter trên chip. Giá thành trên 1 đơn vị sản phẩm. Công cụ phát triển phần mềm. Nguồn cung cấp các bộ vi điều khiển: tức khả năng sẵn sàng đáp ứng về số lượng trong hiện tại và tương lai. II. VI ĐIỀU KHIỂN 8051 Vi điều khiển 8051 là thành viên đầu tiên của họ MCS-51 của Intel, sau đố các nhà sản xuất IC khác nh­ Siemens, Advanded Devices, Phillips …được cấp phép làm nhà cung cấp thứ 2 cho các chip của họ MCS-51. II.1 Sơ đồ khối của 8051 Chip 8051 có các đặc trưng cơ bản sau: 4 Kbyte ROM 128 Byte RAM 4 I/O port 8bit 1 bộ điÒu khiển ngắt ( Interrupt Control) 1 Mạch dao động nội (Oscillatior) 1 bộ điÒu khiển bus (Bus Control) 2 Timer 16bit Mạch giao tiếp nối tiếp Không gian nhớ chương trình (mã) ngoài 64Kbyte Không gian nhớ dữ liệu ngoài 64Kbyte Bộ xử lý bit 210 vị trí nhớ được định địa chỉ Nhân/chia trong 4ms Hình 1: Sơ đồ khối của chip 8051 II.2 SƠ ĐỒ VÀ CHỨC NĂNG CÁC CHÂN CỦA 8051 II.2.1 Sơ đồ các chân : Hình 2: Sơ đồ các chân của 8051 II.2.2 Chức năng của các chân Port 0 : Port 0 (các chân từ 32 ® 39) có 2 công dụng: có thể được sử dụng làm nhiệm vụ xuất/nhập hoặc trở thành bus địa chỉ và bus dữ liệu đa hợp. Port 1: Port 1 (các chân từ 1® 8) chỉ có 1 công dụng là xuất/nhập. Port 2: Port 2 (các chân từ 21® 28) có 2 công dụng: hoặc làm nhiệm vụ xuất/nhập hoặc là byte địa chỉ cao của bus địa chỉ 16-bit. Port 3: Port 3 (các chân 10® 17) có 2 công dụng. Khi không hoạt động xuất/nhập, các chân của Port 3 có nhiều chức năng riêng. Bit Tên Địa chỉ bit Chức năng P3.0 RXD B0H Chân nhận dữ liệu của port nối tiếp P3.1 TXD B1H Chân phát dữ liệu của port nối tiếp P3.2 B2H Ngõ vào ngắt ngoài 0 P3.3 B3H Ngõ vào ngắt ngoài 1 P3.4 T0 B4H Ngõ vào của Timer/Counter 0 P3.5 T1 B5H Ngõ vào của Timer/Counter 0 P3.6 B6H ĐiÒu khiển ghi bé nhớ dữ liệu ngoài P3.7 B7H ĐiÒu khiển đọc bộ nhớ dữ liệu ngoài Hình 2: Sơ đồ các chân của 8051 Chân (Program Store Enable) : (chân 29) đây là tín hiệu điÒu khiển cho phép truy xuất bộ nhớ chương trình ngoài. Chân này thường được nối với chân cho phép xuất OE (Output Enable) của EPROM (hoặc ROM) để cho phép đọc các byte lệnh. Tín hiệu ở mức logic 0 trong suốt thời gian tìm và nạp lệnh. Khi thực thi chương trình ở ROM nội , được duy trì ở mức logic 1 (logic không tích cực). Chân ALE (chân 30): chân xuất tín hiệu cho phép chốt địa chỉ (Address Latch Enable) để giải đa hợp (Demultiplexing) bus dữ liệu và bus địa chỉ. Tín hiệu ALE có tần số f=1/6 fosc (fosc: tần số của bộ dao động bên trong 8051) và có thể được dùng làm xung clock cho các phần còn lại của hệ thống. Chân ALE còn được dùng để nhận xung ngõ vào lập trình cho EPROM. Chân truy xuất ngoài (chân 31) : ngõ vào này có thể được nối +5V (mức logic 1) hoặc nối đất (mức logic 0). Nếu chân này có mức logic 1: 8051 thực thi chương trình trong ROM nội, còn khi ở mức logic 0 thì 8051 thực thi chương trình chứa ở bộ nhớ ngoài. Các phiên bản EPROM của 8051 còn sử dụng chân làm chân nhận điện áp cấp điện 21V cho việc lập trình EPROM nội. Chân RESET (chân 9): đây là ngõ vào xóa chính (Master reset) của 8051, dùng để thiết lập lại trạng thái ban đầu cho hệ thống hay gọi tắt là Reset hệ thống. Khi ngõ vào này được treo ở mức logic 1 tối thiểu là 2 chu kỳ máy, các thanh ghi bên trong 8051 được nạp các giá trị thích hợp cho việc khởi động lại hệ thống. XTAL1 và XTAL2 ( chân 18 và 19): Mạch dao động bên trong chip 8051 được ghép với thạch anh bên ngoài ở hai chân XTAL1 và XTAL2 (chân 18 và 19). Tần số danh định của thạch anh là 12 MHz cho hầu hết các chip của họ MCS-51. XTAL1: Ngõ vào đến mạch khuếch đại đảo của mạch dao động. XTAL2: Ngõ ra từ mạch khuếch đại đảo của mạch dao động. Chân Vcc (chân 40) lấy nguồn nuôi +5V để cấp cho chip. Chân Vss ( chân 20) chân nối đất. II.2.3. Cấu trúc của các cổng xuất/nhập. Việc ghi đến một chân của port sẽ nạp dữ liệu bộ chốt điều khiển của port, ngõ ra Q của bộ chốt điều khiển của mét transistor trường và transistor này nối với chân của port. Khả năng fanout của port 1,2,3 là 4 tải vi mạch TTL loại schottky công suất thấp còn của port 0 là 8 tải loại LS. Lưu ý: khi điện trở kéo lên sẽ không có ở port 0 (trừ khi port làm nhiệm vô của bus địa chỉ/dữ liệu đa hợp). Do vậy một điện trở kéo lên bên ngoài phải được cần đến. Giá trị của điện trở này phụ thuộc vào đặc tính ngõ vào của thành phần ghép nối với chân của port. II.3 Tổ chức bộ nhớ 8051 8051 có không gian bộ nhớ riêng cho chương trình và dữ liệu: cả 2 bộ nhớ chương trình và dữ liệu đều đặt bên trong chip, tuy nhiên vẫn có thể mở rộng bộ nhớ chương trình và bộ nhớ dữ liệu bằng cách sử dông chip nhí bên ngoài với dung lượng tối đa 64Kbyte cho bộ nhớ chương trình và bộ nhớ dữ liệu. Bộ nhớ nội trong chip bao gồm cả RAM và ROM. RAM trên chip bao gồm vùng RAM đa chức năng, vùng RAM với từng bit được định địa chỉ, dãy thanh ghi (bank register) và các thanh ghi chức năng đặc biệt SFR (special function register). Hai đặc tính đáng lưu ý là : các thanh ghi và các port xuất/nhập được định địa chỉ theo kiểu ánh xạ bộ nhí (memory mapped) và được truy xuất nh­ mét vị trí nhớ trong bộ nhớ vùng stack thường trú trong RAM trên chip (RAM nội) thay vì ở trong RAM ngoài nh­ các bộ vi xử lý. II.3.1 Vùng RAM đa mục đích Vùng RAM đa mục đích có 80 byte đặt ở địa chỉ từ 30H đến 7FH, bên dưới vùng này từ địa chỉ 00H đến 2FH là vùng nhớ có thể được sử dụng tương tự. Bất kỳ vị trí nhớ nào trong vùng RAM đa mục đích đều có thể được truy xuất tự do bằng cách sử dụng các kiểu định địa chỉ trực tiếp hoặc gián tiếp. II.3.2. Vùng RAM định địa chỉ bit 8051 chứa 210 vị trí bit được định địa chỉ trong đó 128 bit chứa trong các byte ở địa chỉ từ 20H đến 2FH (16 byte x 8 bit = 128 bit) và phần còn lại chứa trong các thanh ghi đặc biệt. Ngoài ra 8051 còn có các port xuất/nhập có thể định địa chỉ từng bit, điều này làm đơn giản việc giao tiếp bằng phần mềm với các thiết bị xuất/nhập đơn bit. II.3.3 Các dãy thanh ghi 32 vị trí thấp nhất của bộ nhớ nội chứa các dãy thanh ghi . Các lệnh của 8051 hỗ trợ 8 thanh ghi từ R0 đến R7 thuộc dãy 0 (bank 0). Đây là dãy mặc định sau khi reset hệ thống. Các thanh ghi này ở các địa chỉ từ 00H đến 07H. Lệnh sử dụng các thanh ghi từ R0 đến R7 là các lệnh ngắn và thực hiện nhanh hơn so với các lệnh tương đương sử dụng kiểu định địa chỉ trực tiếp. Các giá trị dữ liệu thường được sử dụng nên chứa trong các thanh ghi này. Dãy thanh ghi đang được sử dụng gọi là dãy thanh ghi tích cực. II.3.4 Các thanh ghi chức năng đặc biệt (SFR) Cũng như các thanh ghi từ R0 đến R7, ta có 21 thanh ghi chức năng đặc biệt SFR chiếm phần trên của RAM nội từ địa chỉ 80H đến FFH. Ta cần lưu ý là không phải tất cả 128 địa chỉ từ 80H đến FFH đều được định nghĩa mà chỉ có 21 địa chỉ được định nghĩa. II.3.4.1 Từ trạng thái chương trình PSW ( Program Status Word) Địa chỉ byte: D0H 7 6 5 4 3 2 1 0 CY AC F0 RS1 RS0 OV - P Bit Ký hiệu Địa chỉ Mô tả bit PSW.7 CY D7H Cờ nhí (carry flag). Cờ này được set nếu có bit nhí từ bit 7 trong phép cộng hoặc được set nếu có bit mượn cho bit 7 trong phép trừ PSW.6 AC D6H Cờ nhí phụ. Cờ này được set trong phép cộng nếu có bit nhí từ bit 3 sang bit 4 hoặc nếu kết quả trong 4 bit thấp nằm trong khoảng từ 0AH → 0FH PSW.5 F0 D5H Cờ O, cờ này dành cho người sử dụng PSW.4 RS1 D4H Chọn dãy thanh ghi (bit 1) PSW.3 RS0 D3H Chọn dãy thanh ghi (bit 0) 00 = bank 0 : địa chỉ từ 00H → 07H 01 = bank 1 : địa chỉ từ 08H → 0FH 10 = bank 2 : địa chỉ từ 10H → 17H 11 = bank3 : địa chỉ từ 18H → 1FH PSW.2 OV D2H Cờ tràn (Overflow flag), cờ này được set sau khi cộng hoặc trừ nếu có 1 số tràn số học (nghĩa là tràn trên các phép toán số có dấu: kết quả của phép toán lớn hơn +127 hoặc nhỏ hơn -128) PSW.1 -- D1H Dự trữ PSW.0 P D0H Cờ kiểm tra chẵn/lẻ. Cờ này được set hoặc clear bởi phần cứng sau mỗi 1 chu kỳ lệnh, để chỉ ra rằng có 1 số chẵn hoặc số lẻ bit 1 trong thanh chứa II.3.4.2 Thanh ghi B Thanh ghi B ở địa chỉ F0H được dùng chung với thanh chứa A trong các phép toán nhân, chia. Lệnh MUL AB nhân 2 sè 8 bit không dấu chứa trong A và B và chứa kết quả 16 bit vào cặp thanh ghi B, A (thanh chứa A cất byte thấp và thanh ghi B cất byte cao). Lệnh chia DIV AB chia A bởi B, thương số cất trong thanh chứa A và dư số cất trong thanh ghi B. Thanh ghi B còn được xử lý nh­ mét thanh ghi nháp. Các bit được định địa chỉ của thanh ghi B có địa chỉ từ F0H đến F7H. II.3.4.3 Con trá stack (Stack pointer) Con trá stack SP (stack pointer) là 1 thanh ghi 8 bit ở địa chỉ 81H. SP chứa địa chỉ của dữ liệu hiện đang ở đỉnh của stack. Các lệnh liên quan đến stack bao gồm lệnh cất dữ liệu vào stack và lệnh lấy dữ liệu ra khái stack. Việc cất vào stack làm tăng SP trước khi ghi dữ liệu và việc lấy dữ liệu ra khái stack sẽ giảm SP. Vùng stack của 8051 được giữ trong RAM nội và được giới hạn đến các địa chỉ truy xuất được bởi kiểu định địa chỉ gián tiếp. Các lệnh PUSH và POP sẽ cất dữ liệu vào stack và lấy dữ liệu từ stack, các lệnh gọi chương trình con (ACALL, LCALL) và lệnh trở về (RET, RETI) cũng cất và phục hồi nội dung của bộ đếm chương trình PC (program counter). II.3.4.4 Con trỏ dữ liệu DPTR Con trỏ dữ liệu DPTR (data pointer) được dùng để truy xuất bộ nhớ chương trình ngoài hoặc bộ nhớ dữ liệu ngoài. DPTR là một thanh ghi 16 bit có địa chỉ là 82H (DPL, byte thấp) và 83H (DPH, byte cao). II..3.4.5 Các thanh ghi port Các port xuất/nhập của 8051 bao gåm Port 0 tại địa chỉ 80H, Port 1 tại địa chỉ 90H, Port 2 tại địa chỉ A0H và Port 3 tại địa chỉ B0H. Tất cả các port đều được định địa chỉ từng bit nhằm cung cấp các khả năng giao tiếp mạnh. II.3.4.6 Các thanh ghi định thời TMOD (Timer Mode Register) và TCON (Timer/Counter Control Register) 8051 có 2 bộ đếm/định thời (counter/timer) 16 bit để định các khoảng thời gian hoặc để đếm các sự kiện. Bộ định thời 0 có địa chỉ 8AH (TL0, byte thấp) và 8CH (TH0, byte cao). Bé định thời 1 có địa chỉ 8BH (TL1, byte thấp) và 8DH (TH1, byte cao). Hoạt động của bộ định thời được thiết lập bởi thanh ghi chế độ định thời TMOD (Timer Mode Register) ở địa chỉ 88H. Chỉ có TCON được định địa chỉ từng bit. · TMOD : có chức năng điều khiển chọn chế độ định thời/đếm. Địa chỉ byte là 89H, không được định địa chỉ bit 7 6 5 4 3 2 1 0 GATE M1 M0 GATE M1 M0 GATE : Bit điều khiển cổng. Khi bit TRx trong TCON được set = 1 và GATE = 1 thì bé Timer/Counter chỉ hoạt động trong khi INTx ở mức cao (điều khiển cứng). Khi GATE = 0 bé Timer/Counter chỉ hoạt động khi TRx =1 (điều khiển mềm).  : bit chọn chức năng đếm (counter) hay định thời (timer). Khi = 0 bé Timer/Counter hoạt động định thời (dùng xung clock nội của hệ thống). Khi = 1, Timer/Counter hoạt động đếm (dùng xung clock nhận từ ngõ vào Tx). M1, M0 : Bit chọn chế độ M1 M0 Chế độ 0 0 0 Bộ định thời 13 bit 0 1 1 Bộ định thời/đếm 16 bit 1 0 2 Bộ định thời/đếm 8 bit tù động nạp lại 1 1 3 Bộ định thời 0: TL0 là bộ định thời/đếm 8 bit được điều khiển bởi các bit điều khiển bộ định thời 0. TH0 là bộ định thời 8 bit được điều khiển bởi các bit điều khiển bộ định thời 1. Bộ định thời/đếm 1 ngưng hoạt động · TCON : có chức năng điều khiển bộ định thời/đếm. Địa chỉ byte là 88H, có định địa chỉ bit 7 6 5 4 3 2 1 0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 Ký hiệu Vị trí Địa chỉ Mô tả TF1 TCON.7 8FH Cờ tràn bộ định thời 1 : được set bởi phần cứng khi bộ định thời/đếm bị tràn, xóa bằng phần mềm hoặc bởi phần cứng khi trình phục vụ ngắt được trỏ đến TR1 TCON.6 8EH Bit điều khiển bộ định thời 1 hoạt động, được set/clear bởi phần mềm. TF0 TCON.5 8DH Cờ tràn bộ định thời 0 TR0 TCON.4 8CH Bit điều khiển bộ định thời 0 hoạt động IE1 TCON.3 8BH Cờ ngắt ngoài 1, tác động cạnh. Được set bởi phần cứng khi phát hiện có ngắt ngoài tác động cạnh, được xóa bởi phần cóng khi ngắt đã được xử lý IT1 TCON.2 8AH Bit điều khiển chọn loại ngắt, được set/xóa để xác định ngắt ngoài thuộc loại tác động cạnh âm (xuống) hay tác động mức thấp IE0 TCON.1 89H Cờ ngắt ngoài 0, tác động cạnh IT0 TCON.0 88H Bit điều khiển chọn loại ngắt II.3.4.7 Thanh ghi của cổng nối tiếp (Serial Port) Bên trong 8051 có một port nối tiếp để truyền thông với các thiết bị nối tiếp như các thiết bị đầu cuối hoặc modem, hoặc để giao tiếp với các IC khác có mạch giao tiếp nối tiếp (như các thanh ghi dịch chẳng hạn). Chế độ hoạt động của cổng nối tiếp được thiết lập bằng cách ghi từ điều khiển lên thanh ghi chọn chế độ SCON( Serial Port Control Register). SCON có địa chỉ byte là 98H, định địa chỉ bit. 7 6 5 4 3 2 1 0 SM0 SM1 SM2 REN TB8 RB8 TI RI Ký hiệu Vị trí Địa chỉ Mô tả SM0 SCON.7 9FH Bit chọn chế độ SM1 SCON.6 9EH Bit chọn chế độ SM2 SCON.5 9DH Bit này cho phép truyền thông đa xử lý ở các chế độ 2 & 3. Trong chế độ 2 hoặc 3 nếu SM2 = 1, RT sẽ không được tích cực nếu bit nhận được thứ 9 (RB8) bằng = 0. Trong chế độ 1, nếu SM2 = 1, RI sẽ không được tích cực nếu ta không nhân được bit stop hợp lệ. REN SCON.4 9CH Cho phép thu. Việc set hoặc xóa bit này bởi phần mềm sẽ cho phép hoặc không cho phép hoạt động thu. TB8 SCON.3 9BH Bit phát 8, bit thứ 9 được phát ở các chế độ 2 & 3. Bit này được set hoặc xóa bằng phần mềm. RB8 SCON.2 9AH Bit thu 8. Trong các chế độ 2 & 3, RB8 là bit dữ liệu thứ 9 thu được. Trong chế độ 1, nếu SM2 = 0, RB8 là bit stop thu được. Trong chế độ 0, RB8 không được sử dụng. TI SCON.1 99H Cờ ngắt phát, cờ này được set bởi phần cứng ở cuối thời gian phát bit thứ trong chế độ 0 hoặc ở giữa thời gian của bit stop trong các chế độ khác. Cờ TI phải được xóa bằng phần mềm. RI SCON.0 98H Cờ ngắt thu, cờ này được set bởi phần cứng ở cuối thời gian thu bit thứ 8 trong chế độ 0 hoặc ở giữa thời gian của bit stop trong các chế độ khác. Cê RI phải được xóa bởi phần mềm. SM0 SM1 Chế độ Mô tả Tốc độ baud 0 0 0 Thanh ghi dịch fosc ¸ 12 0 1 1 8-bit UART Thay đổi 1 0 2 9-bit UART fosc ¸ 64 hoặc fosc ¸ 32 1 1 3 9-bit UART Thay đổi II.3.4.8 Các thanh ghi ngắt 8051 có cấu trúc ngắt với 2 mức ưu tiên và 5 nguyên nhân ngắt (5 source, 2 priority level interrupt structure). Các ngắt bị vô hiệu hóa sau khi reset hệ thống và sau đó được cho phép bằng cách ghi vào thanh ghi cho phép ngắt IE (Interrupt Enable register) ở địa chỉ A8H. Mức ưu tiên ngắt được thiết lập qua thanh ghi ưu tiên ngắt IP (Interrupt Priority register) ở địa chỉ B8H. Cả 2 thanh ghi này đều được định địa chỉ từng bit. II.3.4.9 Thanh ghi điều khiển nguồn Thanh ghi điều khiển nguồn PCON (Power Control Register) có địa chỉ 87H chứa các bit điều khiển được tóm tắt trong bảng sau đây Bit Ký hiệu Mô tả 7 SMOD Tăng gấp đôi tốc độ baud. Nếu bộ định thời 1 được dùng để tạo ra tốc độ baud và SMOD = 1, tốc độ baud được tăng gấp đôi khi Port nối tiếp được sử dụng ở các chế độ 1, 2 hoặc 3. 6 - Dự trữ 5 - Dự trữ 4 - Dự trữ 3 GF1 Bit cờ đa mục đích 1 2 GF0 Bit cờ đa mục đích 0 1 PD Bit chế độ nguồn giảm. Việc set bit này bằng 1 tác động đến thao tác nguồn giảm trong các phiên bản CMOS của 8051. 0 IDL Bit chế độ nghỉ. Việc set bit này bằng 1 tác động đến chế độ nghỉ trong các phiên bản CMOS của 8051. · Chế độ nguồn giảm Lệnh thiết lập bit PD bằng 1 sẽ là lệnh sau cùng được thực thi trước khi đi vào chế độ nguồn giảm. Ở chế độ nguồn giảm : mạch dao động trên chip ngõng hoạt động mọi chức năng ngừng hoạt động nội dung của RAM trên chip được duy trì các chân port duy trì mức logic của chúng ALE và PSEN được giữ ở mức thấp. Chỉ ra khỏi chế độ này bằng cách reset hệ thống. Trong suốt thời gian ở chế độ nguồm giảm, Vcc có điện áp là 2V. Cần phải giữ cho Vcc không thấp hơn sau khi đạt được chế độ nguồn giảm và cần phục hồi Vcc = 5V tối thiểu 10 chu kỳ dao động trước khi chân RST đạt mức thấp lần nữa. · Chế độ nghỉ Lệnh thiết lập bit IDL bằng 1 sẽ là lệnh sau cùng được thực thi trước khi đi vào chế độ nghỉ. ở chế độ nghỉ, tín hiệu clock nội được khóa không cho đến CPU nhưng không khóa đối với các chức năng ngắt, định thời và port nối tiếp. Trạng thái của CPU được duy trì và nội dung của tất cả các thanh ghi cũng được giữ không đổi. Các chân port còng được duy trì các mức logic của chúng. ALE và PSEN được giữ ở mức cao. Chế độ nghỉ kết thúc bằng cách cho phép ngắt hoặc bằng cách reset hệ thống. Cả hai cách vừa nêu đều xóa bit IDL. II.4 Bộ nhớ ngoài Các bé vi điều khiển cần có khả năng mở rộng các tài nguyên trên chip, cấu trúc của MCS-51 cho ta khả năng mở rộng không gian bộ nhớ chương trình đến 64K và không gian bộ nhớ dữ liệu đến 64K. ROM và RAM ngoài được thêm vào khi cần. Các IC giao tiếp ngoại vi cũng có thể được thêm vào để mở rộng khả năng xuất / nhập. Chúng trở thành một phần của không gian bộ nhớ dữ liệu ngoài bằng cách sử dụng cách định địa chỉ kiểu I/O ánh xạ bộ nhớ. Khi bộ nhớ ngoài được sử dông, port 0 không làm nhiệm vụ của port xuất /nhập, port này trở thành bus địa chỉ (A0-A7) và bus dữ liệu (D0-D7) đa hợp. Ngõ ra ALE chốt byte thấp của địa chỉ ở thời điểm bắt đầu mỗi một chu kỳ bộ nhớ ngoài. Port 2 thường làm byte cao của bus địa chỉ . II.4.1 Truy xuất bộ nhớ chương trình ngoài Bộ nhớ chương trình ngoài là bộ nhớ chỉ đọc được cho phép bởi tín hiệu . Khi có 1 EROM ngoài được sử dông thì port 0 và port 2 đều không còn là các port xuất/ nhập. Mét chu kỳ máy của 8051 có 12 chu kỳ dao động. Nếu một dao động trên chip có tần số 12 MHz, mét chu kỳ dài 1ms. trong mét chu kỳ máy điển hình, ALE có hai xung và 2 byte của lệnh được đọc từ bộ nhớ chương trình. II.4.2 Truy xuất bé nhớ dữ liệu ngoài Bộ nhớ dữ liệu ngoài là bộ nhớ đọc/ghi được cho phép bởi các tín hiệu và ở các chân P3.7 và P3.6, lệnh dùng để truy xuất bộ nhớ dữ liệu ngoài là MOVX, sử dụng hoặc con trỏ dữ liệu 16 bit DPTR hoặc R0, R1 làm thanh ghi chứa địa chỉ. RAM có thể giao tiếp với 8051 theo cùng cách nh­ EPROM nhưng khác là đường nối với đường cho phép xuất của RAM và nối với đường ghi của RAM. Các kết nối với bus dữ liệu và bus địa chỉ giống EPROM, và dung lượng RAM ngoài lên đến 64K được kết nối với 8051. Nếu có nhiều EPROM hoặc nhiều RAM hoặc cả 2 giao tiếp với 8051 ta cần phải có thêm bộ giải mã địa chỉ. Một IC giải mã điển hình là 74HC138 được dùng với các ngõ ra được nối với các ngõ chọn chip của các IC nhí. II.4.3 Hoạt động Reset 8501 được reset bằng cách giữ chân RST ở mức cao tối thiểu 2 chu kỳ máy và sau đó chuyển về mức thấp. RST có thể tác động bằng tay hoặc được tác động khi cần nguồn bằng cách dùng một mạch RC. Quan trọng nhất trong các thanh ghi này có lẽ là thanh ghi PC được nạp 0000H. Khi RST trở lại mức thấp, việc thực hiện chương trình luôn luôn bắt đầu ở vị trí đầu tiên trong bộ nhớ chương trình: địa chỉ 0000H. Nội dung của RAM trên chip không bị ảnh hưởng bởi hoạt động của Reset. Hai mạch dùng reset hệ thống : a)Reset bằng tay b) Reset khi cấp nguồn III. TẬP LỆNH CỦA 8051 Tập lệnh của MCS-51 được tối ưu hóa cho các ứng dụng điều khiển 8 bit. Nhiều kiểu định địa chỉ cô đọng và nhanh chóng để truy xuất RAM nội được dùng đến nhằm tạo thuận lợi cho các thao tác trên các cấu trúc dữ liệu nhỏ. Tập lệnh cũng hỗ trợ các biến 1 bit cho phép quản lý bit trực tiếp trong các hệ logic và điều khiển có yêu cầu xử lý bit. Các lệnh của 8051 có các opcode 8 bit, do vậy số lệnh có thể lên đến 256 lệnh (thực tế có 255 lệnh, 1 lệnh không được định nghĩa). Ngoài opcode, mét số lệnh còn có thêm 1 hoặc 2 byte nữa cho dữ liệu hoặc địa chỉ. Tập lệnh có 139 lệnh 1 byte, 92 lệnh 2 byte và 24 lệnh 3 byte. III.1 CÁC KIỂU ĐỊNH ĐỊA CHỈ Vi điều khiển 8051 có 8 kiểu định địa chỉ Thanh ghi (Register) Trực tiếp (Direct) Gián tiếp (Indirect) Tức thời (Immediate) Tương đối (Relative) Tuyệt đối (Absolute) Dài (Long) Chỉ sè (Indexed) III.1.1 Định địa chỉ thanh ghi (Register Addressing) 8051 cho phép truy xuất 8 thanh ghi “làm việc”, được đánh số từ R0 → R7. Các lệnh sử dụng kiểu định địa chỉ thanh ghi được mã hóa bằng các dùng 3 bit thấp nhất của opcode( của lệnh) để chỉ ra 1 thanh ghi bên trong không gian địa chỉ logic này. Vậy : 1 mã chức năng + địa chỉ toán hạng → 1 lệnh ngắn 1 byte. III.1.2 Định địa chỉ trực tiếp (Direct addressing) Kiểu định địa chỉ trực tiếp được sử dụng để truy xuất các biến nhớ hoặc các thanh ghi trên chip. Mét byte thêm vào tiếp theo opcode dùng để xác định địa chỉ. Trong 8051 có 128 byte bộ nhớ RAM. Bộ nhớ RAM được gán địa chỉ từ 00H đến FFH và được phân chia nh­ sau: - Các ngăn nhớ từ 00H đến 1FH được gán cho các dãy thanh ghi và ngăn xếp. - Các ngăn nhớ từ 20H đến 2FH được dành cho không gian định địa chỉ bit để lưu dữ liệu theo từng bit. - Các ngăn nhớ từ 30H đến 7FH là không gian để lưu dữ liệu có kích thước 1 byte. Chế độ định địa chỉ trực tiếp có thể truy cập toàn bộ không gian của bộ nhớ RAM. Tuy nhiên, chế độ này thường được dùng để truy cập các ngăn nhớ RAM từ 30H đến 7FH, vì thực tế đối với không gian nhớ dành cho dãy thanh ghi thì đã được truy cập bằng tên thanh ghi nh­ R0- R7. Ở chế độ định địa chỉ trực tiếp , địa chỉ ngăn nhớ RAM chứa dữ liệu là toán hạng của lệnh . Ví dô : MOV R0, 40 ; sao nội dung ngăn nhớ 40H của RAM vào R0 MOV R4, 7FH ; chuyển nội dung ngăn nhớ 7FH vào R4 . Một ứng dụng quan trọng của chế độ định địa chỉ trực tiếp là ngăn xếp. Trong họ 8051, chỉ có chế độ định địa chỉ trực tiếp là được phép cất và lấy dữ liệu từ ngăn xếp. III.1.3 Định địa chỉ gián tiếp (Indirect addressing) Ở chế độ này, thanh ghi được dùng để trỏ đến dữ liệu có trong bộ nhớ. Nếu dữ liệu có trên chip CPU thì chỉ các thanh ghi R0 và R1 mới được sử dụng, và như vậy cũng có nghĩa là không thể dùng các thanh ghi R2-R7 để trỏ đến địa chỉ của toán hạng ở chế độ định địa chỉ này. Nếu R0 và R1 được dùng làm con trỏ, nghĩa là chúng lưu địa chỉ của ngăn nhớ RAM thì trước các thanh ghi cần đặt dấu "@" như các ví dụ sau: MOV A, @R0 ; chuyển ngăn nhớ RAM có địa chỉ ở R0 vào A MOV @R1, B ; chuyển B vào ngăn nhớ RAM có địa chỉ ở R1 Chó ý: ở đây R0 còng nh­ R1 đều có dấu "@" đứng trước. Nếu không có dấu "@" đứng trước thì đó là lệnh chuyển nội dung thanh ghi R0 và R1 chứ không phải dữ liệu ngăn nhớ có địa chỉ trong R0 và R1. Mét trong những ưu điểm của chế độ định địa chỉ gián tiếp là cho phép truy cập dữ liệu linh hoạt hơn so với chế độ định địa chỉ trực tiếp. Tuy nhiên R0 và R1 là các thanh ghi 8 bit, nên chúng chỉ được phép truy cập đến các ngăn nhớ RAM trong, từ địa chỉ 30H đến 7FH và các thanh ghi SFR. Trong thực tế, có nhiều trường hợp cần truy cập dữ liệu được cất ở RAM ngoài hoặc không gian ROM trên chip. Trong những trường hợp đó chúng ta cần sử dụng thanh ghi 16 bit DPTR. III.1.4 Định địa chỉ tức thời (Immediate addressing) Khi toán hạng là một hằng số thay vì là một biến, hằng số này có thể đưa vào lệnh và đây là byte dữ liệu tức thời. Trong hợp ngữ, các toàn hạng tức thời được nhận biết nhờ vào ký tù '# ' đặt trước chúng. Toán hạng này có thể là một hằng số học, một biến hoặc một biểu thức số học sử dụng các hằng số, các ký hiệu và các toán tử. Trình dịch hợp ngữ tính giá trị và thay thế dữ liệu tức thời vào trong lệnh. Ví dụ lệnh : MOV A, #12 ; ;Nạp giá trị 12(OCH) vào thanh chứa A Tất cả các lệnh sử dụng kiểu định địa chỉ tức thời đều sử dụng hằng dữ liệu 8 bit làm dữ liệu tức thời. Có một ngoại lệ khi ta khởi động con trỏ dữ liệu 16-bit DPTR, hằng địa chỉ 16 bit được cần đến. III.1.5 Định địa chỉ tương đối (Relative addressing) Kiểu định địa chỉ tương đối chỉ được sử dụng cho các lệnh nhảy. Một địa chỉ tương đối là một giá trị 8 bit có dấu. Giá trị này được cộng với một bộ đếm chương trình để tạo ra địa chỉ của lệnh tiếp theo cần thực thi. Định địa chỉ tương đối có điểm lợi là cung cấp cho ta mã không phụ thuộc vào vị trí, nhưng lại có điểm bất lợi là các đích nhảy bị giới hạn trong tầm. III.1.6 Định địa chỉ tuyệt đối (Absolute addressing) Kiểu định địa chỉ này được sử dụng với các lệnh ACALL và AJMP. Đây là các lệnh 2 byte cho phép rẽ nhánh chương trình trong trang 2k hiện hành của bộ nhớ chương trình bằng cách cung cấp 11 bit thấp của địa chỉ đích. Trong đó có 3 bit cao (A8-A10) và 8 bit thấp (A0-A7) thành lập byte thứ 2 của lệnh. III.1.7 Định địa chỉ dài (Long addressing) Kiểu định địa chỉ dài chỉ được dùng cho các lệnh LCALL và LJMP. Các lệnh 3 byte này chứa địa chỉ đích 16 bit. Lợi Ých của kiểu định địa chỉ này là sử dụng hết toàn bộ không gian nhớ chương trình 64K, nhưng lại có điểm bất lợi là lệnh dài đến 3-byte và phụ thuộc vào vị trí. III.1.8 Định địa chỉ chỉ sè (Indexed addressing) Chế độ định địa chỉ chỉ số được sử dụng rộng rãi khi truy cập các phần tử dữ liệu của bảng trong không gian ROM chương trình của 8051. Lệnh được dùng cho mục đích này là "MOVC A, @A+DPTR". Thanh ghi 16 bit DPTR và thanh ghi A được dùng để tạo ra địa chỉ của phần tử dữ liệu được lưu trong ROM trên chip. Ở lệnh này, nội dung của A được cộng với nội dung thanh ghi 16- bit DPTR để tạo ra địa chỉ 16 bit. III.2 CÁC LOẠI LỆNH III.2.1 Lệnh số học ADD A, source Cộng toán hạng A với nguồn. A, Rn (A)¬ (A) + (Rn) A, Direct (A)¬ (A) + (Direct) A, @Ri (A)¬ (A) + ((Ri)) A, #data (A)¬ (A) + #data ADDC A, source Cộng có cờ nhí (add with carry) A, Rn (A)¬ (A) + (C)+ (Rn) A, Direct (A)¬ (A) + (C)+ (Direct) A, @Ri (A)¬ (A) + (C)+ ((Ri)) A, #data (A)¬ (A) + (C)+ #data SUBB A, source Trừ số có mượn A, Rn (A)¬ (A) - (C) - (Rn) A, Direct (A)¬ (A) - (C) - (Direct) A, @Ri (A)¬ (A) - (C) - ((Ri)) A, #data (A)¬ (A) - (C) - #data INC Byte Tăng bởi 1 A (A) ¬ (A) + 1 Rn (Rn) ¬ (Rn) + 1 Direct (Direct) ¬ (Direct) + 1 @Ri ((Ri)) ¬ ((Ri)) + 1 DEC Byte Giảm bởi 1 A (A) ¬ (A) - 1 Rn (Rn) ¬ (Rn) - 1 Direct (Direct) ¬ (Direct) - 1 @Ri ((Ri)) ¬ ((Ri)) – 1 MUL A B Nhân (B) ¬ High byte of (A) x (B) : byte cao của kết quả phép nhân được chứa trong thanh ghi B (A) ¬ Low byte of (A) x (B) : byte thấp của kết quả nhân được chứa trong thanh ghi A. DIV A B Chia (A) ¬ Quotient of (A) / (B) : thương số của phép chia được chứa trong thanh ghi A. (B) ¬ Remainder of (A) / (B) : phần dư được chứa trong thanh ghi B. III.2.2 Các lệnh Logic ANL ANL A, #data A, Direct (A)¬ (A) AND + (source) A, @Ri A, Rn Direct , A (Direct) ¬ (Direct) AND (A) Direct, #data (Direct) ¬ (Direct) AND #data ANL C, bit (C) ¬ (C) AND (bit) C, /bit (C) ¬ (C) AND NOT(bit) ORL ORL A, #data A, Direct (A)¬ (A) OR + (source) A, @Ri A, Rn Direct , A (Direct) ¬ (Direct) OR (A) Direct, #data (Direct) ¬ (Direct) OR #data ORL C, bit (C) ¬ (C) OR (bit) C, /bit (C) ¬ (C) OR NOT(bit) XRL XRL A, #data A, Direct (A)¬ (A) XOR + (source) A, @Ri A, Rn Direct , A (Direct) ¬ (Direct) XOR (A) Direct, #data (Direct) ¬ (Direct) XOR #data CLR CLR A (A) ¬ 0 C (C) ¬ 0 CPL CPL A (A) ¬ NOT (A) C (C) ¬ NOT (C) SWAP A (A3 - A0) ¬® (A7 - A4) III.2.3 Nhóm lệnh di chuyển dữ liệu MOV MOV A, #data (A) ¬ #data A, Direct (A) ¬ (Direct) A, @Ri (A) ¬ ((Ri)) A, Rn (A) ¬ (Rn) MOV Rn, #data (Rn) ¬ #data Rn, Direct (Rn) ¬ (Direct) Rn, A (Rn) ¬ (Rn) MOV Direct, #data (Direct) ¬ #data Direct, Direct (Direct) ¬ (Direct) Direct, @Ri (Direct) ¬ ((Ri)) Direct, Rn (Direct) ¬ (Rn) MOV @Ri, A ((Ri)) ¬ (A) @Ri, Direct ((Ri)) ¬ (Direct) @Ri, #data ((Ri)) ¬ #data MOV C, bit (C) ¬ (bit) Bit, C (bit) ¬ (C) MOV DPTR, #data16 (DPTR) ¬ #data 16 MOVC MOVC A, @A + DPTR (A) ¬ ((A) + (DPTR)) A, @A + PC (A) ¬ ((A) + (PC)) MOVX MOVX A, @Ri (A) ¬ ((Ri)) A, @DPTR (A) ¬ ((DPTR)) @Ri, A ((Ri)) ¬ (A) @DPTR, A ((DPTR)) ¬ (A) XCH XCH A, Rn (A) ¬ ® (Rn) A, Direct (A) ¬ ® (Direct) A, @Ri (A) ¬ ® ((Ri)) XCHD A, @Ri (A3 - A0) ¬ ® (R3 - R0) III.2.4 Các lệnh xử lý bit CLR Xóa bit CLR C (C) ¬0 Bit bit ¬ 0 SETB Lệnh set bit SETB C (C) ¬ 1 Bit Bit ¬ 1 CPL Lệnh đảo bit CPL C (C) ¬ NOT(C) Bit bit ¬ NOT(bit) JC Label Nhảy nếu cờ nhớ được set bằng 1 JNC Label Nhảy nếu cờ nhớ không được set bằng 1 JB Bit, label Nhảy nếu bit được set bằng 1 JBC Bit, label Nhảy nếu bit được set bằng 1 và xóa bit JNB Bit, label Nhảy nếu bit không được set bằng 1 III.2.5 Các lệnh rẽ nhánh · Lệnh nhảy AJMP Addr11 Nhảy đến địa chỉ tuyệt đối (Absolute jump - 14 bit(2k)) (PC) ¬ (PC) +2 (PC10 - PC 0) ¬ địa chỉ trong JMP @A + DPTR Nhảy gián tiếp (PC) ¬ (PC) + (A) + (DPTR) JNZ Label Nhảy nếu nội dung thanh chứa khác 0. (PC) ¬ (PC) + 2 IF (A) 0 THEN (PC) ¬ (PC) +byte_2 JZ Label Nhảy nếu nội dung thanh chứa bằng 0. (PC) ¬ (PC) + 2 IF (A) = 0 THEN (PC) ¬ (PC) +byte_2 SJMP Label Nhảy ngắn (short jump) (PC) ¬ (PC) +2 (PC) ¬ (PC) + byte_2 LJMP Addr16 Nhảy dài (Long jump - 16 bits (64K)) (PC) ¬ addr15 ¸ addr0 · So sánh và nhảy ( Compare and Jump) CJNE A, Direct, label A, #data, label Compare 1st op to 2st and jump to label if not equal Rn, #data, label @Ri, #data, label So sánh giá trị của 2 toán hạng và rẽ nhánh nếu các giá trị của 2 toán hạng không bằng nhau. · Giảm và nhảy (Decrement and Jump) DJNZ Direct, label Giảm và nhảy nếu khác 0. (PC) ¬ (PC) +2 Rn, label (Rn) ¬ (Rn) -1 (Direct) ¬ (Direct) -1 Jump if not zero · Lệnh điều khiển chương trình con ACALL Addr11 Gọi đến địa chỉ tuyệt đối (absolute call - 11bit). LCALL Addr16 Gọi chương trình con (Long call - 16bits) RET Trở về từ chương trình con (Return from subroutine ). RETI Trở về từ trình phục vụ ngắt (Return from ISR). III.2.6 Nhóm lệnh dịch, quay. RL A ; Quay trái A RLC A ;Quay trái A cộng với cờ nhớ RR A ; Quay phải A RRC A; Quay phải A cộng với cờ nhớ III.2.7 Các lệnh làm việc với Stack. PUSH Direct Cất dữ liệu vào stack (SP) ¬ (SP) -1 ((SP)) ¬ (Direct) POP Direct Lấy dữ liệu ra từ stack. (Direct) ¬ ((SP)) (SP) ¬ (SP) -1 IV.HOẠT ĐỘNG ĐỊNH THỜI 8051 có hai bộ định thời/đếm. Chúng có thể được dùng làm bộ định thời để tạo trễ thời gian hoặc làm các bộ đếm để đếm các sự kiện xảy ra bên ngoài bộ vi điều khiển. IV.1. Các bộ định thời của 8051 8051 có hai bộ định thời là 8051 cã hai bé ®Þnh thêi lµ Timer 0 và Timer 1. Cả hai bộ định thời Timer0 và Timer1 đều có độ dài 16 bit. Do 8051 có cấu trúc 8 bit, nên mỗi bộ định thời được truy cập dưới dạng hai thanh ghi độc lập là byte thấp và byte cao. Thanh ghi của bộ Timer 0: Thanh ghi 16 bit của bé Timer 0 được truy cập theo hai byte là byte cao và byte thấp. Thanh ghi byte thấp được gọi là TL0 và thanh ghi byte cao là TH0. Các thanh ghi này có thể được truy cập nh­ là mọi thanh ghi khác. Ví dụ, lệnh "MOV TL0, #4FH" là chuyển giá trị 4FH vào TL0 - byte thấp của bộ định thời 0. Thanh ghi của bộ Timer 1: Bộ định thời Timer 1 cũng dài 16 bit và thanh ghi 16 bit còng được chia ra thành hai byte là TL1 và TH1. Các thanh ghi này được truy cập và được đọc giống nh­ các thanh ghi của bé Timer 0 ở trên. IV.2. Thanh ghi chế độ bộ định thời TMOD Cả hai bộ định thời Timer 0 và Timer 1 đều dùng chung 1 thanh ghi được gọi là TMOD để thiết lập các chế độ làm việc khác nhau của bộ định thời. Thanh ghi TMOD là thanh ghi 8 bit gồm có 4 bit thấp dành cho bé Timer 0 và 4 bit cao dành cho bé Timer 1. Trong đó 2 bit thấp của chúng dùng để thiết lập chế độ của bộ định thời, còn 2 bit cao dùng để xác định phép toán. IV.2.1. Các chế độ định thời và cờ tràn Do ta có hai bộ định thời trên chip 8051, ta dùng ký hiệu “x” để chỉ bộ định thời 0 hoặc bộ định thời 1. Ví dô : THx có nghĩa là TH0 hoặc TH1 tuỳ theo bộ định thời 0 hay 1. IV.2.1.1. Chế độ định thời 13-bit (chế độ 0) Chế độ 0 là chế độ định thời 13- ChÕ ®é 0 lµ chÕ ®é ®Þnh thêi 13-bit cung cấp khả năng tương thích với bộ vi điều khiển tiề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