Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 198 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
198
Dung lượng
4,23 MB
Nội dung
Khi đọc qua tài liệu này, phát sai sót nội dung chất lượng xin thông báo để sửa chữa thay tài liệu chủ đề tác giả khác Tài li u bao g m nhi u tài li u nh có ch đ bên Ph n n i dung b n c n có th n m gi a ho c cu i tài li u này, s d ng ch c Search đ tìm chúng Bạn tham khảo nguồn tài liệu dịch từ tiếng Anh đây: http://mientayvn.com/Tai_lieu_da_dich.html Thông tin liên hệ: Yahoo mail: thanhlam1910_2006@yahoo.com Gmail: frbwrthes@gmail.com CHƯƠNG I Các vi điều khiển 8051 1.1 vi điều khiển xử lý nhúng Trong mục bàn nhu cầu vi điều khiển (VĐK) so sánh chúng với vi xử lý dạng chung Pentium vi xử lý × 86 khác Chúng ta xem xét vai trò vi điều khiển thị trường sản phẩm nhúng Ngoài ra, cung cấp số tiêu chuẩn cách lựa chọn vi điều khiển 1.1.1 Bộ vi điều khiển so với vi xử lý dùng chung Sự khác vi điều khiển vi xử lý gì? Bộ vi xử lý vi xử lý công dung chung họ Intell × 86 (8086, 80286, 80386, 80486 Pentium) họ Motorola 680 × 0(68000, 68010, 68020, 68030, 68040 v.v ) Những VXL RAM, ROM cổng vào chíp Với lý mà chúng gọi chung vi xử lý công dụng chung CPU GeneralPurpose Microprocess or Data b RA M RO M Address b (a) General-Purpose Microcessor S t I/O Port Time Seria l COM Port CPU RA M I/O Time RO M Seria l COM Port (b) Mi t ll Hình 1.1: Hệ thống vi xử lý so sánh với hệ thống vi điều khiển a) Hệ thống vi xử lý công dụng chung b) Hệ thống vi điều khiển Một nhà thiết kế hệ thống sử dụng vi xử lý công dụng chung chẳng hạn Pentium hay 68040 phải bổ xung thêm RAM , ROM, cổng vào định thời để làm cho chúng hoạt động Mặc dù việc bổ xung RAM, ROM cổng vào bên làm cho hệ thống cồng cềnh đắt hơn, chúng có ưu điểm linh hoạt chẳng hạn người thiết kế định số lượng RAM, ROM cổng vào cần thiết phù hợp với toán tầm tay Điều có vi điều khiển Một vi điều khiển có CPU (một vi xử lý) với lượng cố định RAM, ROM, cổng vào định thời tất chíp Hay nói cách khác xử lý, RAM, ROM cổng vào định thời nhúng với chíp; người thiết kế bổ xung thêm nhớ ngoài, cổng vào định thời cho Số lượng cố định RAM, ROM chíp số cổng vào - vi điều khiển làm cho chúng trở nên lý tưởng nhiều ứng dụng mà giá thành không gian lại hạn chế Trong nhiều ứng dụng, ví dụ điều khiển TV từ xa không cần công suất tính toán vi sử lý 486 chí 8086 Trong nhiều ứng dụng không gian chiếm, công suất tiêu tốn giá thành đơn vị cân nhắc nghiêm ngặt nhiều so với công suất tính toán Những ứng dụng thường yêu cầu số thao tác vào - để đọc tín hiệu tắt - mở bit định Vì lý mà số người gọi xử lý IBP (“Itty-Bitty-Processor”), (tham khảo “Good things in small packages are Generating Big product opportunities” Rick Grehan viết tạp BYTE tháng 9.1994; WWW Byte Com để biết trao đổi tuyệt vời vi điều khiển) Điều thú vị số nhà sản xuất vi điều khiển xa tích hợp chuyển đổi ADC ngoại vi khác vào vi điều khiển Bảng 1.1: Một số sản phẩm nhúng sử dụng vi điều khiển Thiết bị nội thất gia đình Đồ điện nhà Máy đàm thoại Máy điện thoại Các hệ thống an toàn Các mở cửa ga-ra xe Văn phòng ô tô Điện thoại Máy tính hành trình Máy tính Điều khiển động Các hệ thống an Túi đệm khí toàn Thiết bị ABS Máy Fax Đo lường Lò vi sóng Hệ thống bảo mật Máy trả lời Máy Fax Máy tính gia đình Tivi Truyền hình cáp VCR Máy quy camera Điều khiển từ xa Trò chơi điện tử Điện thoại tổ ong Các nhạc cụ điện tử Máy khâu Điều khiển ánh sáng Máy nhắn tin Máy chơi Pootball Đồ chơi Các dụng cụ tập thể hình Máy chụp Máy in lazer Máy in màu Máy nhắn tin Đíũu khiển truyền tin Giải trí Điều hoà nhiệt độ Điện thoại tổ ong Mở cửa không cần chìa khoá 1.1.2 Các VĐK cho hệ thống nhúng Trong tài liệu vi xử lý ta thường thấy khái niệm hệ thống nhúng (Embeded system) Các vi xử lý vi điều khiển sử dụng rộng rãi sản phẩm hệ thống nhúng Một sản phẩm nhúng sử dụng vi xử lý (hoặc vi điều khiển để thực nhiệm vụ mà Một máy in ví dụ việc nhúng xử lý bên làm việc nhận liệu in Điều khác với máy tình PC dựa xử lý Pentium (hoặc PC tương thích với IBM × 86 bất kỳ) Một PC sử dụng cho số trạm dịch vụ in, đầu cuối kiểm kê nhà băng, máy chơi trò chơi điện tử, trạm dịch vụ mạng trạm đầu cuối mạng Internet Phần mềm cho ứng dụng khác nạp chạy Tất nhiên lý hiển nhiên để PC thực hàng loạt công việc có nhớ RAM hệ điều hành nạp phần mềm ứng dụng thường đốt vào ROM Một máy tính PC × 86 chứa nối tới sản phẩm nhúng khác chẳng hạn bàn phím, máyin, Modem, điều khiển đĩa, Card âm thanh, điều khiển CD = ROM Chuột v.v Một nội ngoại vi có vi điều khiển bên để thực công việc, ví dụ bên chuột có vi điều khiển để thực thi công việc tìm vị trí chuột gửi đến PC Bảng 1.1 liệt kê số sản phẩm nhúng 4.1.3 Các ứng dụng nhúng PC × 86 Mặc dù vi điều khiển lựa chọn ưa chuộng nhiều hệ thống nhúng có nhiều vi điều khiển không đủ cho công việc Vì lý mà năm gần nhíều nhà sản xuất vi sử lý công dụng chung chẳng hạn Intel, Motorla, AMD (Advanced Micro Devices, Inc ) Và Cyric (mà phận National Senicon ductir, Inc) hướng tới vi xử lý cho hiệu suất cao thị trường nhúng Trong Intel, AMD Cyrix đẩy xử lý × 86 họ vào cho thị trường nhúng thị trường máy tính PC để bán Motorola kiên định giữ họ vi xử lý 68000 lại chủ yếu hướng cho hệ thống nhúng hiệu suất cao Apple không dùng 680 × máy tính Macintosh Trong năm đầu thập kỷ 90 kỷ 20 máy tính Apple bắt đầu sử dụng vi xử lý Power PC (như 603, 604, 620 v.v ) thay cho 680 ×0 Macintosh Bộvi xử lý Power PC kết liên doanh đầu tư IBM Motorola hướng cho thị trướng nhúng hiệu suất cao cho thị trường máy tính PC Cần phải lưu ý công ty hướng vi xử lý công dụng chung cho thị trường nhúng tối ưu hoá xử lý sử dụng cho hệ thống nhúng Vì lý mà vi xử lý thường gọi xử lý nhúng hiệu suất cao Do khái niệm vi điều khiển xử lý nhúng thường sử dụng thay đổi Một nhu cầu khắt khe hệ thống nhúng giảm công suất tiêu thụ không gian Điều đạt cách tích hợp nhiều chức vào chíp CPU Tất xử lý nhúng dựa × 86 680 × có công suất tiêu thu thấp bổ xung số dạng cổng vào - ra, cổng COM nhớ ROM chíp Trong xử lý nhúng hiệu suất cao có xu hướng tích hợp nhiều nhiều chức chíp CPU cho phép người thiết kế định đặc tính họ muốn sử dụng Xu hướng chiếm lĩnh thiết kế hệ thống PC Bình thường thiết kế bo mạch chủ PC (Motherboard) ta cần CPU cộng chíp - set có chứa cống vào - ra, điều khiển cache, nhớ Flash ROM có chứa BIOS cuối nhớ cache thứ cấp Những thiết kế khẩn trương vào công nghiệp sản xuất hàng loạt Ví dụ Cyrix tuyên bố họ làm việc Comment [URG1]: chíp có chứa toàn máy tính PC ngoại trừ DRAM Hay nói cách khác xắp nhìn thấy máy tính PC chíp Hiện chuẩn hoá MS - DOS Windows nên hệ thống nhúng sử dụng máy tình PC × 86 Trong nhiều trường hợp việc sử dụng máy tính PC × 86 cho ứng dụng nhúng hiệu suất cao không tiết kiệm tiền bạc, làm rút ngắn thời gian phát triển có thư viện phần mềm bao la viết cho DOS Windows Thực tế Windows sử dụng rộng rãi dễ hiểu có nghĩa việc phát triển sản phẩm nhúng dựa Windows làm giảm giá thành rút ngắn thời gian phát triển đáng kể 1.1.4 Lựa chọn vi điều khiển Có vi điều khiển bit Đó 6811 Motorola, 8051 Intel z8 Xilog Pic 16 × Microchip Technology Mỗi kiểu loại có tập lệnh ghi riêng nhất, chúng không tương thích lẫn Cũng có vi điều khiển 16 bit 32 bit sản xuất hãng sản xuất chíp khác Với tất vi điều khiển khác lấy làm tiêu chuẩn lựa chọn mà nhà thiết kế phải cân nhắc? Có ba tiêu chuẩn để lựa chọn vi điều khiển là: 1) Đáp ứng nhu cầu tính toán toán cách hiệu mặt giá thành đầy đủ chức nhìn thấy (khả dĩ) 2) Có sẵn công cụ phát triển phần mềm chẳng hạn trình biên dịch, trình hợp ngữ gỡ rối 3) Nguồn vi điều khiển có sẵn nhiều tin cậy 1.1.5 Các tíêu chuẩn lựa chọn vi điều khiển Tiêu chuẩn đầu tiênvà trước hết tronglựa chọn vi điều khiển phải đáp ứng nhu cầu toán mặt công suất tính toán giá thành hiệu Trong phân tích nhu cầu dự án dựa vi điều khiển trước hết phải biết vi điều khiển bit, 16 bit hay 32 bit đáp ứng tốt nhu cầu tính toán toán mộ tcách hiệu nhất? Những tiêu chuẩn đưa để cân nhắc là: a) Tốc độ: Tốc độ lớn mà vi điều khiển hỗ trợ b) Kiểu đóng vỏ: Đó kíểu 40 chân DIP hay QFP kiểu đóng vỏ khác (DIP -đóng vỏ theo hàng chân QFP đóng vỏ vuông dẹt)? Đây điều quan trọng yêu cầu không gian, kiểu lắp ráp tạo mẫu thử cho sản phẩm cuối c) Công suất tiêu thụ: Điều đặc biệt khắt khe sản phẩm dùng pin, ắc quy d) Dung lượng nhớ RAM ROM chíp e) Số chân vào - định thời chíp f) Khả dễ dàng nâng cấp cho hiệu suất cao giảm công suất tiêu thụ g) Giá thành cho đơn vị: Điều quan trọng định giá thành cuối sản phẩm mà vi điều khiển sử dụng Ví dụ có vi điều khiển giá 50 cent đơn vị mua 100.000 lúc 2) Tiêu chuẩn thứ hai lựa chọn vi điều khiển khả phát triển sản phẩm xung quanh dễ dàng nào? Các câu nhắc chủ yếu bao gồm khả có sẵn trình lượng ngữ, gỡ rối, trình biên dịch ngôn ngữ C hiệu mã nguồn, trình mô hỗ trợ kỹ thuật khả sử dụng nhà môi trường Trong nhiều trường hợp hỗ trợ nhà cung cấp thứ ba (nghĩa nhà cung cấp khác hãng sản xuất chíp) cho chíp tốt như, không tốt hơn, hỗ trợ từ nhà sản xuất chíp 3) Tiêu chuẩn thứ ba lựa chọn vi điều khiển khả sẵn sàng đáp ứng số lượng tương lai Đối với số nhà thiết kế điều chí quan hai tiêu chuẩn Hiện nay, vi điều khiển bit dấu đầu, họ 8051 có số lương lớn nhà cung cấp đa dạng (nhiều nguồn) Nhà cung cấp có nghĩa nhà sản xuất bên cạnh nhà sáng chế vi điều khiển Trong trường hợp 8051 nhà sáng chế Intel, có nhiều hãng sản xuất (cũng trước sản xuất) Các hãng bao gồm: Intel, Atmel, Philips/signe-tics, AMD, Siemens, Matra Dallas, Semicndictior Bảng 1.2: Địa số hãng sản xuất thành viên họ 8051 Hãng Intel Antel Plips/ Signetis Siemens Dallas Semiconductor Địa Website www.intel.com/design/mcs51 www.atmel.com www.semiconductors.philips.co m www.sci.siemens.com www.dalsemi.com Cũng nên lưu ý Motorola, Zilog Mierochip Technology dành lượng tài nguyên lớn để đảm bảo khả sẵn sàng thời gian phạm vi rộng cho sản phẩm họ từ sản phẩm họ vào sản xuất ổn định, hoàn thiện trở thành nguồn Trong năm gần họ bắt đầu bán tế bào thư viện Asic vi điều khiển 1.2 Tổng quan họ 8051 Trong mục xem xét số thành viên khác họ vi điều khiển 8051 đặc điểm bên chúng Đồng thời ta điểm qua số nhà sản xuất khác sản phẩm họ có thị trường 1.2.1 Tóm tắt lịch sử 8051 Vào năm 1981 Hãng Intel giới thiệu số vi điều khiển gọi 8051 Bộ vi điều khiển có 128 byte RAM, 4K byte ROM chíp, hai định thời, cổng nối tiếp cổng (đều rộng bit) vào tất đặt chíp Lúc coi “hệ thống chíp” 8051 xử lý bit có nghĩa CPU làm việc với bit liệu thời điểm Dữ liệu lớn bit chia thành liệu bit xử lý 8051 có tất cổng vào - I/O cổng rộng bit (xem hình 1.2) Mặc dù 8051 có ROM chíp cực đại 64 K byte, nhà sản xuất lúc cho xuất xưởng với 4K byte ROM chíp Điều bàn chi tiết sau 8051 trở nên phổ biến sau Intel cho phép nhà sản xuất khác sản xuất bán dạng biến 8051 mà họ thích với điều kiện họ phải để mã lại tương thích với 8051 Điều dẫn đến đời nhiều phiên 8051 với tốc độ khác dung lượng ROM chíp khác bán nửa nhà sản xuất Điều quan trọng có nhiều biến thể khác 8051 tốc độ dung lương nhớ ROM chíp, tất chúng tương thích với 8051 ban đầu lệnh Điều có nghĩa ta viết chương trình cho phiên chạy với phiên khác mà không phân biệt từ hãng sản xuất Bảng 1.3: Các đặc tính 8051 Đặc tính ROM chíp RAM Số lượng 4K byte 128 byte Bộ định thời Các chân vào - Cổng nối tiếp Nguồn ngắt 32 1.2.2 Bộ ví điều khiển 8051 Bộ vi điều khiển 8051 thành viên họ 8051 Hãng Intel ký hiệu MCS51 Bảng 3.1 trình bày đặc tính 8051 EXTERNAL INTERRUPTS ETC ON CHIP TIMER TIMER I/O PORTS SERIAL PORT COUNTER S INTERRUP T CPU OS C BUS CONTRO Hình 1.2: Bố trí bên sơ đồ khối 8051 1.2.3 thành viên khác họ 8051 D họ RXD8051 8052 P Pviên P P khác TX Có hai vi điều khiển thành 8031 ADDRESS/DAT A a- Bộ vi điều khiển 8052: Bộ vi điều khiển 8052 thành viên khác họ 8051, 8052 có tất đặc tính chuẩn 8051 có thêm 128 byte RAM định thời Hay nói cách khác 8052 có 256 byte RAM định thời Nó có 8K byte ROM Trên chíp thay 4K byte 8051 Xem bảng 1.4 Bảng1.4: so sánh đặc tính thành viên họ 8051 Đặc tính ROM chíp RAM Bộ định thời Chân vào - Cổng nối tiếp Nguồn ngắt 8051 4K byte 8052 8K byte 128 byte 32 256 byte 32 8031 OK 128 byte 32 Chế độ BSR: Đây chế độ thiết lập/ xoá bit (Bit Set/ Reset) chế độ có bit riêng rẽ cổng C lập trình (sẽ trình bày mục 15.3) Bảng 15.1: Chọn cổng 8255 CS A1 A0 Chọn cổng 0 0 0 1 x 1 X Cổng A Cổng B Cổng C Thanh ghi điều khiển 8255 không chọn Group A D7 D1 D6 Group A D5 D4 D3 D2 D0 Mode Selcction = Mode Pont A = Input 0= O t t = I/O Mode Mode Selection 00 = Mode 01 = Mode 1 M d Port C (Upper PC7 - PCA) = Input O t t Port (Lowe PC3 - PCC) = Input Port B = Input = Output Hình 15.3: Định dạng từ điều khiển 8255 (chế độ vào/ ra) 15.1.3 Lập trình chế độ vào/ đơn giản Hãng Intel gọi chế độ chế độ vào/ sở Một thuật ngữ dùng chung vào/ đơn giản Trong chế độ cổng A, B, C lập trình cổng đầu vào cổng đầu Cần lưu ý chế độ cổng cho vừa làm đầu vào lại vừa làm đầu lúc Ví dụ 15.1: Hãy tìm từ điều khiển 8255 cho cấu hình sau: Tất cổng A, B C cổng đầu (chế độ 0) PA đầu vào, PB đầu ra, PCL đầu vào PCH đầu Lời giải: Từ hình 15.3 ta tìm được: a) 1000 0000 = 80H; b) 1001 000 = 90H 15.1.4 Nối ghép 8031/51 với 8255 Chíp 8255 lập trình bốn chế độ vừa trình bày cách gửi byte (hãng Intel gọi từ điều khiển) tới ghi điều khiển 8255 Trước hết phải tìm địa cổng gán cho cổng A, B, C ghi điều khiển Đây gọi ánh xạ cổng vào/ (mapping) Như nhìn thấy từ hình 15.4 8255 nối tới 8031/51 nhớ RAM Để việc sử dụng tín hiệu RD WR Phương pháp nối chíp vào/ nhớ ánh xạ vào không gian nhớ Hay nói cách khác, ta sử dụng không gian nhớ để truy cập thiết bị vào/ Vì ly??? mà ta dùng lệnh MOVX để truy cập RAM ROM Đối với 8255 nối tới 8031/51 ta phải dùng lệnh MOVX để truyền thông với Điều thể ví dụ 15.2 Ví dụ 15.2: Đối với hình 15.4: a) Hãy tìm địa vào/ gán cho cổng A, B, C ghi điều khiển b) Hãy lập trình 8255 cho cổng A, B C thành cổng đầu c) Viết chương trình để gửi 55H AAH đến cổng liên tục Lời giải: a) Địa sở dành cho 8255 sau: A 15 x A 14 A1 x A 12 x A1 x A1 x A9 x A x A x A x A x A x A x A X A A 0 x x x x x x x x x x x x X x x x x x x x x x x x x X x x x x x x x x x x x x X 1 =4000HP A =4000HP B =4000HP C =4000HC R b) Byte (từ) điều khiển cho tất cổng đầu 80H tính ví dụ 15.1 c) MOV MOV ghi điều khiển MOVX MOV AGAIN: MOV MOVX INC MOVX INC MOVX CPL ACALL SJMP 8051 A, #80H DPTR, # 4003H ; Từ điển khiển ; Nạp địa cổng @DPTR, A ; Xuất từ điển khiển A, # 55H ; Gán A = 55 DPTR, # 4000H ; Địa cổng PA @DPTR, A ; Lấy bit cổng PA DPTR ; Địa cổng PB @DPTR, A ; Lấy bít cổng PB DPTR ; Địa cổng PC @DPTR, A ; Lấy bít cổng PC A ; Lấy bít ghi A DELAY ; Chờ AGAIN ; Tiếp tục RD WR P3.7 P3.6 A1 CS WR RD P2.7 ALE P0.7 P0.0 8255 G AD7 AD0 DQ 74LS373 A1 A0 A1 A0 D7 P P P D0 Hình 15.4: Nối ghép 8051 với 8255 cho ví dụ 15.2 Ví dụ 15.3: Đối với hình 15.5: a) Tìm địa cổng vào gán cho cổng A, B, C thanhg ghi điều khiển b) Tìm byte điều khiển PA đầu vào, PB đầu ra, PC đầu c) Viết chương trình để nhận liệu từ PA gửi đến cổng B cổng C Lời giải: a) Giả sử tất các bit không dùng đến địa cổng sở cho 8255 1000H Do ta có: 1000H PA; 1001H PB; 1002H PC 1003H ghi điều khiển b) Từ điều khiển cho trường hợp 10010000 hay 90H c) MOV MOV A, #90H ; PA đầu vào, PB đầu ra, PC đầu DPTR, #1003H ; Nạp địa cổng ghi điều MOVX MOV MOVX INC MOVX INC MOVX @DPTR, A ; Xuất từ điều khiển DPTR, #1000H ; Địa PA A, @DPTR ; Nhận liệu từ PA DPTR ; Địa PB @DPTR, A ; Gửi liệu PB DPTR ; Địa PC @DPTR, A ; Gửi liệu PC khiển 8051 RD WR P3.7 P3.6 A15 P2.7 ALE P0.7 P0.0 WR RD CS A12 G AD7 AD0 D Q 8255 A1 74LS373 OC A0 D7 D0 A1 A0 D7 PA PB PC D0 RE Hình 15.5: Nối ghép 8051 tới 8255 cho ví dụ 15.3 Đối với ví dụ 15.3 ta nên dùng lệnh EQU cho địa cổng A, B, C ghi điều khiển CNTPORT sau: APORT BPORT CPORT CNTPORT EQU EQU EQU EQU 1000H 1001H 1002H 1003H MOV A, #90H đầu MOV DPTR, #CNTPORT khiển MOVX @DPTR, A MOV DPTR, #CNTPORT MOVX DPTR, APORT INC A, @DPTR MOVX DPTR INC DPTR MOVX DPTR, A viết lại sau: CONTRBYT EQU 90H BAS8255P EQU 1000H MOV MOV MOVX MOV ; PA đầu vào, PB đầu ra, PC ; Nạp địa cổng ghi điều ; Xuất từ điều khiển ; Địa PA ; Nhận liệu PA ; Địa PB ; Gửi liệu PB ; Địa PC ; Gửi liệu PC Xác định PA đầu vào, PB PC đầu ; Địa sở 8255 A, #CONTRBYT DPTR, #BAS8255P+3 ; Nạp địa cổng C @DPTR, A ; Xuất từ điều khiển DPTR, #BASS8255P ; Địa cổng A Để ý ví dụ 15.2 15.3 ta sử dụng ghi DPTR địa sở gán cho 8255 16 bit Nếu địa sở dành cho 8255 bit, ta sử dụng lệnh “MOVX A, @R0” “MOVX @R0, A” R0 (hoặc R1) giữ địa cổng bit cổng Xem ví dụ 15.4, ý ví dụ 15.4 ta sử dụng cổng lôgíc đơn giản để giải mã địa chỉa cho 8255 Đối với hệ thống có nhiều 8255 ta sử dụng 74LS138 để giải mã trình bày ví dụ 15.5 15.1.5 Các bí danh địa (Addren Alias) Trong ví dụ 15.4 15.4 ta giải mã bít địa A0 - A7, nhiên ví dụ 15.3 15.2 ta giải mã phần địa cao A8 - A15 Việc giải mã phần dẫn đến gọi bí danh địa (Address Aliases) Hay nói cách khác, cổng vật lý giống có địa khác nhau, cổng mà biết với tên khác Trong ví dụ 15.2 15.3 ta thay đổi tốt x thành tổ hợp số khác thành địa khác nhau, song thực chất chúng tham chiếu đến cổng vật lý Trong tài liệu thuyết minh phần cứng cần phải bảo đảm ghi đầy đủ bí danh địa chỉa có cho người dùng biết địa có sẵn để họ mở rộng hệ thống Ví dụ 15.4: Cho hình 15.6: a) Hãy tìm địa cổng vào/ gán cho cổng A, B, C ghi điều khiển b) Tìm từ điều khiển cho trường hợp PA đầu ra, PB đầu vào, PC - PC3 đầu vào CP4 - CP7 đầu c) Viết chương trình để nhận liệu từ PB gửi PA Ngoài ra, liệu từ PC1 gửi đến CPU Lời giải: a) Các địa cổng tìm thấy sau: BB CS A1 A0 Địa 0010 0010 0010 0010 00 00 00 00 0 1 1 20H 21H 22H 23H Cổng Cổng A Cổng B Cổng C Thanh ghi điều khiển b) Từ điều khiển 10000011 hay 83H c) CONTRBYT APORT BPORT CPORT CNTPORT EQU 83H ; PA đầu ra, PB,PCL đầu vào EQU EQU EQU EQU MOV MOV 20H 21H 22H 23H A, #CONTRBYT A, #CONTRBYT ; PA, PCU đầu ra, PB R0, #CNTPORT ; Nạp địa cổng PCL đầu vào MOV ghi điều khiển MOVX MOV MOVX DEC MOVX MOV MOVX ANL SWAP MOVX 8051 @R0, A R0, #BPORT A, @R0 R0 @R0, A R0, #CPORT A, @R0 A, #0FH A @R0, A ; Xuất từ điều khiển ; Nạp địa PB ; Đọc PB ; Chỉ đến PA (20H) ; Gửi đến PA ; Nạp địa PC ; Đọc PCL ; Che phần cao ; Trao đổi phần cao thấp ; Gửi đến PCU RD WR P3.7 P3.6 A7 CS A2 ALE P0.7 P0.0 AD7 G D Q A1 74LS373 AD0 OC A0 D7 WR RD PA 8255 PB PC A1 PCU A0 D7 D0 RE Hình 15.6: Nối ghép 8051 với 8255 cho ví dụ 15.4 Ví dụ 15.5: Hãy tìm địa sở cho 8255 hình 15.7 Lời giải: GA G 2B G 2A C B A A7 A6 A5 A4 A3 A2 Địa A1 A0 88H 74LS138 A2 A4 A B C A5 G 2A A6 G 2B A7 G1 A3 A0 A1 8255 Y2 CS Hình 15.7: Giải mã địa 8255 sử dụng 74LS138 15.1.6 Hệ 8031 với 8255 Trong hệ thống dựa 8031 mà nhớ chương trình ROM bắt buộc tuyệt đối sử dụng 8255 trào đón Điều thực tế giải trình phối ghép 8031 với nhớ chương trình ROM ta bị hai cổng P0 P2 lại cổng P1 Do vậy, việc nối với 8255 cách tốt để có thêm số cổng Điều hình 15.8 EA 8031 P3.7 P3.6 RD WR VCC PSEN A12 P2.7 P2.0 ALE P0.7 G AD7 D Q A8 A0 CE OE VCC A12 2864 A8 (2764) 8K×8 Program A0 RAM WR RD PA PB 5 PC Hình 15.8: Nối 8031 tới ROM chương trình 8255 15.2 Nối ghép với giới thực 15.2.1 Phối ghép 8255 với động bước Chương 13 nói chi tiết phối ghép động bước với 8051, ta trình bày nối ghép động bước tới 8255 lập trình (xem hình 15.9) 0855 D0 from 8051 D7 D0 D7 PA0 WR RD A0 A1 A2 A7 A0 A1 Decoding Circuyiry ULN200 PA1 PA2 PA3 16 15 14 13 Stepper Motor CS ULN2003 Conection for Stepper Motor Pin = GND Pin = +5v CO CO +5V Hình 15.9: Nối ghép 8255 với động bước Chương trình cho sơ đồ nối ghép sau: MOV A, #80H ; Chọn từ điều khiển để PA đầu MOV MOVX MOV MOV R1, #CRPORT ; Địa cổng ghi điều khiển @R1, A ; Cấu hình cho PA đầu R1, #APORT ; Nạp địa cổng PA A, #66H ; Gán A = 66H, chuyển xung động bước AGAIN: PA MOVX @R1, A ; Xuất chuỗi động đến RR ACALL SJMP A DELAY AGAIN ; Quay chuỗi theo chiều kim đồng hồ ; Chờ 15.2.2 Phối ghép 8255 với LCD Chương trình 15.1 trình bày cách xuất lệnh liệu tới LCD nối tới 8255 theo sơ đồ hình 15.10 Trong chương trình 15.1 ta phải đặt độ trễ trước lần xuất thông tin (lệnh liệu) tới LCD Một cách tốt kiểm tra cờ bận trước xuất thứ tới LCD nói chương 12 Chương trình 15.2 lặp lại chương trình 15.1 có sử dụng kiểm tra cờ bận Để ý lúc không cần thời gian giữ chậm vị trí 15 0855 PA0 LCD D0 VCC VEE PA1 VSS A7 RS R/W E 10K POT PB0 PB1 PB2 RESET Hình 5.10: Nối ghép 8255 với LCD Chương 15.1: ; Ghi lệnh liệu tới LCD kiểm tra cờ bận ; Giả sử PA 8255 nối tới D0 - D7 LCD ; IB - RS, PB1 = R/W, PB2 = E để nối chân điều khiển LCD MOV A, #80H ; Đặt tất cổng 8255 đầu MOV R0, #CNTPORT ; Nẹp địa ghi điều khiển MOVX @R0, A ; Xuất từ điều khiển MOV A, #38H ; Cấu hình LCD có hai dòng ma trận 5×7 ACALL CMDWRT ; Ghi lệnh LCD ACALL DELAY ; Chờ đến lần xuất (2ms) MOV A, # 0EH ; Bật trỏ cho LCD ACALL CMDWRT ; Ghi lệnh LCD ACALL DELAY ; Chờ lần xuất MOV A, # 01H ; Xoá LCD ACALL CMDWRT ; Ghi lệnh LCD ACALL DELAY ; Dịch trỏ sang phải MOV A, # 06 ; Ghi lệnh LCD ACALL CMDWRT ; Chờ lần xuất sau ACALL DELAY ; Ghi lệnh LCD ; v.v cho tất lệnh LCD MOV A, # 'N' ; Hiển thị liệu (chữ N) ACALL DATAWRT ; Gửi liệu LCD để hiển thị ACALL DELAY ; Chờ lần xuất sau MOV A, # '0' ; Hiển thị chữ "0" ACALL DATAWRT ; Gửi LCD để hiển thị ACALL DELAY ; Chờ lần xuất sau ; v.v cho liệu khác ; Chương trình ghi lệnh CMDWRT LCD CMDWRT: MOV R0, # APORT ; Nạp địa cổng A MOVX @R0, A ; Xuất thông tin tới chân liệu LCD MOV R0, # BPORT ; Nạp địa cổng B MOV A, # 00000100B ; RS=0, R/W=1, E=1 cho xung cao MOVX @R0, A ; Kích hoạt chânRS, R/W, E xuống thấp LCD NOP NOP MOV ; Tạo độ xung cho chân E A, # 00000000B ; RS=0, R/W=1, E=1 cho xung cao xuống thấp MOVX @R0, A ; Chốt thông tin chân liệu LCD RET ; Chương trình ghi lệnh DATAWRT ghi liệu LCD CMDWRT: MOV R0, # APORT ; Nạp địa cổng A MOVX @R0, A ; Xuất thông tin tới chân liệu LCD MOV R0, # BPORT ; Đặt RS=1, R/W=0, E=0 cho xung cao xuống thấp MOV A, # 00000101B ; Kích hoạt chân RS, R/W, E MOVX @R0, A ; Tạo độ xung cho chân E NOP NOP MOV A, # 00000001B ; Đặt RS=1, R/W=0, E=0 cho xung cao xuống thấp MOVX @RC, A ; Chốt thông tin chân liệu LCD RET Chương trình 15.2: ; Ghi lệnh liệu tới LCD có sử dụng kiểm tra cờ bận ; Giả sử PA 8255 nối tới D0 - D7 LCD ; PB0 = RS, PB1 = R/W, PB2 = E 8255 tới chân điều khiển LCD MOV A, #80H ; Đặt tất cổng 8255 đầu MOV MOVX MOV R0, #CNTPORT @R0, A A, #38H ; Nạp địa ghi điều khiển ; Xuất từ điều khiển ; Chọn LCD có hai dòng ma trận ACALL MOV ACALL NMDWRT A, # 0EH NMDWRT ; Ghi lệnh LCD ; Lệnh LCD cho trỏ bật ; Ghi lệnh LCD MOV A, # 01H ; Xoá LCD 5×7 ACALL NMDWRT ; Ghi lệnh LCD MOV A, # 06 ; Lệnh dịch trỏ sang phải ACALL CMDWRT ; Ghi lệnh LCD ; v.v cho tất lệnh LCD MOV A, # 'N' ; Hiển thị liệu (chữ N) ACALL NCMDWRT ; Gửi liệu LCD để hiển thị MOV A, # '0' ; Hiển thị chữ "0" ACALL NDADWRT ; Gửi LCD để hiển thị ; v.v cho liệu khác ; Chương trình ghi lệnh NCMDWRT có hiển thị cờ bận NCMDWRT: MOV R2, A ; Lưu giá trị ghi A MOV A, #90H ; Đặt PA cổng đầu vào để đọc trạng thái LCD READY: MOV MOVX MOV MOV MOVX R0, # CNTPORT ; Nạp địa ghi điều khiển @R0, A ; Đặt PA đầu vào, PB đầu A, # 00000110B ; RS=0, R/W=1, E=1 đọc lệnh @R0, BPORT ; Nạp địa cổng B R0, A ; RS=0, R/W=1 cho chân RD RS MOV MOVX RLC JC MOV MOV MOVX MOV MOV MOVX R0, APORT ; Nạp địa cổng A @R0 ; Đọc ghi lệnh A ; Chuyển D7 (cờ bận) vào bit nhớ carry READY ; Chờ LCD sẵn sàng A, #80H ; Đặt lại PA, PB thành đầu R0, #CNTPORT ; Nạp địa cổng điều khiển @R0, A ; Xuất từ điều khiển tới 8255 A, R2 ; Nhận giá trị trả lại tới LCD R0, #APORT ; Nạp địa cổng A @R0, A ; Xuất thông tin tới chân MOV MOV R0, #BPORT ; Nạp địa cổng B A, #00000100B ; Đặt RS=0, R/W=0, E=1 cho xung liệu LCD thấp lên cao MOVX @R0, A ; Kích hoạt RS, R/W, E LCD NOP ; Tạo độ rộng xung chân E NOP MOV A, #00000000B ; Đặt RS=0, R/W=0, E=0 cho xung cao xuống thấp MOVX @R0, A ; Chốt thông tin chân liệu LCD RET ; Chương trình ghi liệu NDATAWRT sử dụng cờ bận NCMDWRT: MOV R2, A ; Lưu giá trị ghi A MOV A, #90H ; Đặt PA cổng đầu vào để đọc trạng thái LCD MOV R0, # CNTPORT ; Nạp địa ghi điều khiển MOVX @R0, A ; Đặt PA đầu vào, PB đầu MOV A, # 00000110B ; RS=0, R/W=1, E=1 đọc lệnh MOV @R0, BPORT ; Nạp địa cổng B MOVX R0, A ; RS=0, R/W=1 cho chân RD RS READY: MOV MOVX RLC JC MOV MOV MOVX MOV MOV MOVX R0, APORT ; Nạp địa cổng A @R0 ; Đọc ghi lệnh A ; Chuyển D7 (cờ bận) vào bit nhớ carry READY ; Chờ LCD sẵn sàng A, #80H ; Đặt lại PA, PB thành đầu R0, #CNTPORT ; Nạp địa cổng điều khiển @R0, A ; Xuất từ điều khiển tới 8255 A, R2 ; Nhận giá trị trả lại tới LCD R0, #APORT ; Nạp địa cổng A @R0, A ; Xuất thông tin tới chân MOV MOV R0, #BPORT ; Nạp địa cổng B A, #00000101B ; Đặt RS=1, R/W=0, E=1 cho xung liệu LCD thấp lên cao MOVX NOP NOP MOV cao xuống thấp @R0, A ; Kích hoạt RS, R/W, E LCD ; Tạo độ rộng xung chân E A, #00000001B ; Đặt RS=1, R/W=0, E=0 cho xung MOVX @R0, A ; Chốt thông tin chân liệu LCD RET 15.2.3 Nối ghép ADC tới 8255 Các ADC trình bày chương 12 Dưới chương trình ADC nối tới 8255 theo sơ đồ cho hình 115.11 MOV A, #80H ; Từ điều khiển với PA = đầu PC = đầu vào MOV MOVX R1, #CRPORT ; Nạp địa cổng điều khiển @R1, A ; Đặt PA = đầu PC = đầu vào BACK: MOV R1, #CPORT ; Nạp địa cổng C MOVX A, @R1 ; Đọc địa cổng C để xem ADC sẵn sàng chưa ANL A,, #00000001B ; Che tất bít cổng C để xem ADC sẵn sàng chưa JNZ BACK ; Giữ hiển thị PC0 che EOC ; Kết thúc hội thoại nhận liệu ADC MOV R1, #APORT ; Nạp địa PA MOVX A, @R1 ; A = đầu vào liệu tương tự Cho đến ta trao đổi chế độ vào/ đơn giản 8255 trình bày nhiều ví dụ Ta xét tiếp chế độ khác ADC804 5V VCC 10k CLK R RD 8255 PA0 D0 D7 A2 A7 PA7 PC0 Decoding Circuyiry RESET WR D0 150pF CLK IN D7 INTR Vin(+) Vin(-) A GND Vref/2 GN 10K POT CS Hình 15.11: Nối ghép ADC 804 với 8255 15.3 Các chế độ khác 8255 15.3.1 Chế độ thiết lập/ xoá bit BSR Một đặc tính cổng C bit điều khiển riêng rẽ Chế độ BSR cho phép ta thiết lập bit PC0 - PC7 lên cao xuống thấp hình 15.12 Ví dụ 15.6 15.7 trình bày cách sử dụng chế độ nào? D7 D6 D5 x x BSR Mode D4 D3 D2 x Not Used Generally = D1 Bit Select 000=Bit0 100=Bit4 001 = Bit1 101=Bit5 010 = Bit2 110=Bit6 011 = Bit3 111=Bit7 D0 S/R Set=1 Reset=0 Hình 15.12: Từ điều khiển chế độ BSR Ví dụ 15.6: Hãy lập trình PCA 8255 chế độ BSR bit D7 từ điều khiển phải mức thấp Để PC4 mức cao, ta cần từ điều khiển "0xxx1001" mức thấp ta cần "0xxx1000" Các bít đánh dấu x ta không cần quan tâm thường chúng đặt MOV MOV MOVX ACALL MOV MOVX ACALL A, 00001001B ; Đặt byte điều khiển cho PC4 =1 R1, #CNTPORT ; Nạp cổng ghi điều khiển @R1, A ; Tạo PC4 = DELAY ; Thời gian giữ chậm cho xung cao A, #00001000B ; Đặt byte điều khiển cho PC4 = @R1, A ; Tạo PC4 = DELAY D0 D7 WR RD A2 A7 A0 A7 Decoding Circuyiry 8255 WR RD A0 A7 PC4 CS Hình 15.13: Cấu hình cho ví dụ 15.6 15.7 Ví dụ 15.7: Hãy lập trình 8255 theo sơ đồ 15.13 để: a) Đặt PC2 lên cao b) Sử dụng PC6 để tạo xung vuông liên tục với 66% độ đầy xung Lời giải: a) MOV MOV MOV b) AGAIN: R0, # CNTPORT A, # 0XXX0101 @R0, A MOV MOV MOVX ; Byte điều khiển A, #00001101B ; Chọn PC6 = R0, #CNTPORT ; Nạp địa ghi điều khiển @R0, A ; Tạo PC6 = Port A Output PC1 OBFB PC2 ACKB INTEB OBFB INTEB iNTEA I/O PC4.5 Port A Output I/O s PB7 PB0 X D7 D6 D5 D4 D3 D2 D1 D0 INTEA WR StatusWord-Mode1Output OBFA INTEB PC0 Port B with Hanshake Signals INTEB 1/0 Port B Output PC6 I/O Mode INTEA Port B Mode1 ACKA Port B Output PC6 PC4.51=Input,0=Outpput OBFA Port A Output PC7 D7 D6 D5 D4 D3 D2 D1 D0 Port A Mode1 S ControlWord-Mode1Output Port A Mode1 INTEA PC4 PC4 DELAY DELAY A, #00001100B ; PC6 = DELAY ; Thời gian giữ chậm AGAIN Port A with Hanshake Signals ACALL ACALL MOV ACALL SJMP INTEA is controlled by PC6 in BSR mode INTEB is controlled by PC2 in BSR mode Hình 15.14: Biểu đồ đầu 8255 chế độ WR OBF INTEB ACK Output Hình 15.15: Biểu đồ định thời 8255 chế độ 15.3.2 8255 chế độ 1: Vào/ với khả bắt tay Một đặc điểm mạnh 8255 khả bắt tay với thiết bị khác Khả bắt tay trình truyền thông qua lại hai thiết bị thông minh Ví dụ thiết bị có tín hiệu bắt tay máy in Dưới ta trình bày tín hiệu bắt tay 8255 với máy in Chế độ 1: Xuất liệu với tín hiệu bắt tay Như trình bày hình 15.14 cổng A B sử dụng cổng đầu để gửi liệu tới thiết bị với tín hiệu bắt tay Các tín hiệu bắt tay cho hai cổng A B cấp bit cổng C Hình 15.15 biểu đồ định thời 8255 Dưới phần giải thích tín hiệu bắt tay tính hợp lý chúng cổng A, cổng B hoàn toàn tương tự Tín hiệu OBFa : Đây tín hiệu đệm đầu đầy cổng A tích cực mức thấp từ chân PC7 để báo CPU ghi byte liệu tới cổng A Tín hiệu phải nối tới chân STROBE thiết bị thu nhận liệu (chẳng hạn máy in) để báo đọc byte liệu từ chốt cổng Tín hiệu ACKa : Đây tín hiệu chấp nhận cổng A có mức tích cực mức thấp nhân chân PC6 8255 Qua tín hiệu ACKa 8255 biết tín hiệu cổng A thiết bị thu nhận lấy Khi thiết bị nhận lấy liệu từ cổng A báo 8255 qua tín hiệu ACKa Lúc 8255 bật OBFa lên cao để báo liệu cổng A liệu cũ CPU ghi byte liệu tới cổng A OBFa lại xuống thấp v.v Tín hiệu INTRa: Đây tín hiệu yêu cầu ngắt cổng A có mức tích cực cao từ chân PC3 8255 Tín hiệu ACK tín hiệu có độ dài hạn chế Khi xuống thấp (tích cực) làm cho OBFa không tích cực, mức thấp thời gian ngắn sau trở nên cao (không tích cực) Sườn lên ACK kích hoạt INTRa lên cao Tín hiệu cao chân INTRa dùng để gây ý CPU CPU thông báo qua tín hiệu INTRa máy in nhận byte cuối sẵn sàng để nhận byte liệu khác INTRa ngắt CPU ngừng thứ làm ép gửi byte tới cổng A để in Điều quan trọng ý INTRa bật lên INTRa, OBFa ACKa mức cao Nó xoá không CPU ghi byte tới cổng A Tín hiệu INTEa: Đây tín hiệu cho phép ngắt cổng A 8255 cấm INTRa để ngăn không ngắt CPU Đây chức tín hiệu INTEa Nó mạch lật Flip - Flop bên thiết kế để che (cấm) INTRa Tín hiệu INTRa bật lên bị xoá qua cổng C chế độ BSR INTEa Flip - Plop điều khiển PC6 Từ trạng thái: 8255 cho phép hiển thị trạng thái tín hiệu INTR, OBF INTE cho hai cổng A B Điều thực cách đọc cổng C vào ghi tổng kiểm tra bit Đặc điểm cho phép thực thi thăm dò thay cho ngắt phần cứng 14 Hình 15.16: Đầu cắm DB-25 13 25 (hình 15.17 mờ không vẽ được) Hình 15.17: Đầu cáp máy in Centronics Bảng 15.2: Các chân tín hiệu máy in Centronics Chân số 10 Mô tả STROBE Dữ liệu D0 Dữ liệu D1 Dữ liệu D2 Dữ liệu D3 Dữ liệu D4 Dữ liệu D5 Dữ liệu D6 Dữ liệu D7 Chân số 11 12 13 14 15 16 17 18-25 Mô tả Bận (busy) Hết giấy (out of paper) Chọn (select) Tự nạp ( Autofeed ) Lỗi ( Error ) Khởi tạo máy in Chọn đầu vào ( Select input ) Đất (ground) ACK (chấp nhận) Các bước truyền thông có bắt tay máy in 8255 Một byte liệu gửi đến bus liệu máy in Máy in báo có byte liệu cần in cách kích hoạt tín hiệu đầu vào STROBE Khi máy nhận liệu báo bên gửi cách kích hoạt tín hiệu đầu gọi ACK (chấp nhận) Tín hiệu ACK khởi tạo trình cấp byte khác đến máy in Như ta thấy từ bước byte liệu tới máy in không đủ Máy in phải thông báo diện liệu Khi liệu gửi máy in bận hết giấy, máy in phải báo cho bên gửi nhận lấy liệu Hình 15.16 15.17 trình ổ cắm DB25 đầu cáp máy in Centronics tương ứng