Giáo trình Các bộ vi điều khiển
1.1 các bộ vi điều khiển và các bộ xử lý nhúng.
Trong mục này chúng ta bàn về nhu cầu đối với các bộ vi điều khiển (VĐK) và
so sánh chúng với các bộ vi xử lý cùng dạng chung như Pentium và các bộ vi xử lý ì 86
khác. Chúng ta cùng xem xét vai trò của các bộ vi điều khiển trong thị trường các sản
phẩm nhúng. Ngoài ra, chúng ta cung cấp một số tiêu chuẩn về cách lựa chọn một bộ
vi điều khiển như thế nào.
1.1.1 Bộ vi điều khiển so với bộ vi xử lý cùng dùng chung
Sự khác nhau giữa một bộ vi điều khiển và một bộ vi xử lý là gì? Bộ vi xử lý ở
đây là các bộ vi xử lý công dung chung như họ Intell ì 86 (8086, 80286, 80386, 80486
và Pentium) hoặc họ Motorola 680 ì 0(68000, 68010, 68020, 68030, 68040 v.v.).
Những bộ VXL này không có RAM, ROM và không có các cổng vào ra trên chíp. Với
lý do đó mà chúng được gọi chung là các bộ vi xử lý công dụng chung.
Tóm tắt nội dung tài liệu: Giáo trình Các bộ vi điều khiển
Ch−ơng I Các bộ vi điều khiển 8051 1.1 các bộ vi điều khiển vμ các bộ xử lý nhúng. Trong mục nμy chúng ta bμn về nhu cầu đối với các bộ vi điều khiển (VĐK) vμ so sánh chúng với các bộ vi xử lý cùng dạng chung nh− Pentium vμ các bộ vi xử lý ì 86 khác. Chúng ta cùng xem xét vai trò của các bộ vi điều khiển trong thị tr−ờng các sản phẩm nhúng. Ngoμi ra, chúng ta cung cấp một số tiêu chuẩn về cách lựa chọn một bộ vi điều khiển nh− thế nμo. 1.1.1 Bộ vi điều khiển so với bộ vi xử lý cùng dùng chung Sự khác nhau giữa một bộ vi điều khiển vμ một bộ vi xử lý lμ gì? Bộ vi xử lý ở đây lμ các bộ vi xử lý công dung chung nh− họ Intell ì 86 (8086, 80286, 80386, 80486 vμ Pentium) hoặc họ Motorola 680 ì 0(68000, 68010, 68020, 68030, 68040 v.v...). Những bộ VXL nμy không có RAM, ROM vμ không có các cổng vμo ra trên chíp. Với lý do đó mμ chúng đ−ợc gọi chung lμ các bộ vi xử lý công dụng chung. Hình 1.1: Hệ thống vi xử lý đ−ợc 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 một bộ vi xử lý công dụng chung chẳng hạn nh− Pentium hay 68040 phải bổ xung thêm RAM , ROM, các cổng vμo ra vμ các bộ định thời ngoμi để lμm cho chúng hoạt động đ−ợc. Mặc dù việc bổ xung RAM, ROM vμ các cổng vμo ra bên ngoμi lμm cho hệ thống cồng cềnh vμ đắt hơn, nh−ng chúng có CPU General- Purpose Micro- processor ROM RA Timer Serial COM Port I/O Port CPU RAM ROM I/O Timer Serial COM Port Data bus (a) General-Purpose Microcessor System Address bus (b) Microcontroller −u điểm lμ linh hoạt chẳng hạn nh− ng−ời thiết kế có thể quyết định về số l−ợng RAM, ROM vμ các cổng vμo ra cần thiết phù hợp với bμi toán trong tầm tay của mình. Điều nμy không thể có đ−ợc đối với các bộ vi điều khiển. Một bộ vi điều khiển có một CPU (một bộ vi xử lý) cùng với một l−ợng cố định RAM, ROM, các cổng vμo ra vμ một bộ định thời tất cả trên cùng một chíp. Hay nói cách khác lμ bộ xử lý, RAM, ROM các cổng vμo ra vμ bộ định thời đều đ−ợc nhúng với nhau trên một chíp; do vậy ng−ời thiết kế không thể bổ xung thêm bộ nhớ ngoμi, cổng vμo ra hoặc bộ định thời cho nó. Số l−ợng cố định của RAM, ROM trên chíp vμ số các cổng vμo - ra trong các bộ vi điều khiển lμm cho chúng trở nên lý t−ởng đối với nhiều ứng dụng mμ trong đó giá thμnh vμ không gian lại hạn chế. Trong nhiều ứng dụng, ví dụ một điều khiển TV từ xa thì không cần công suất tính toán của bộ vi sử lý 486 hoặc thậm chí nh− 8086. Trong rất nhiều ứng dụng thì không gian nó chiếm, công suất nó tiêu tốn vμ giá thμnh trên một đơn vị lμ những cân nhắc nghiêm ngặt hơn nhiều so với công suất tính toán. Những ứng dụng th−ờng yêu cầu một số thao tác vμo - ra để đọc các tín hiệu vμ tắt - mở những bit nhất định. Vì lý do nμy mμ một số ng−ời gọi các bộ xử lý nμy lμ IBP (Itty-Bitty-Processor), (tham khảo cuốn Good things in small packages are Generating Big product opportunities do Rick Grehan viết trên tạp BYTE tháng 9.1994; WWW. Byte. Com để biết về những trao đổi tuyệt vời về các bộ vi điều khiển). Điều thú vị lμ một số nhμ sản xuất các bộ vi điều khiển đã đi xa hơn lμ tích hợp cả một bộ chuyển đổi ADC vμ các ngoại vi khác vμo trong bộ vi điều khiển. Bảng 1.1: Một số sản phẩm đ−ợc nhúng sử dụng các bộ vi điều khiển Thiết bị nội thất gia đình Văn phòng ô tô Đồ điện trong nhμ Máy đμm thoại Máy điện thoại Các hệ thống an toμn Các bộ mở cửa ga-ra xe Máy trả lời Máy Fax Máy tính gia đình Điện thoại Máy tính Các hệ thống an toμn Máy Fax Lò vi sóng Máy sao chụp Máy in lazer Máy in mμu Máy tính hμnh trình Điều khiển động cơ Túi đệm khí Thiết bị ABS Đo l−ờng Hệ thống bảo mật Đíũu khiển truyền tin Giải trí 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 nhắn tin Đ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 bộ VĐK cho các hệ thống nhúng. Trong tμi liệu về các bộ vi xử lý ta th−ờng thấy khái niệm hệ thống nhúng (Embeded system). Các bộ vi xử lý vμ các bộ vi điều khiển đ−ợc sử dụng rộng rãi trong các sản phẩm hệ thống nhúng. Một sản phẩm nhúng sử dụng một bộ vi xử lý (hoặc một bộ vi điều khiển để thực hiện một nhiệm vụ vμ chỉ một mμ thôi. Một máy in lμ một ví dụ về một việc nhúng vì bộ xử lý bên trong nó chỉ lμm một việc đó lμ nhận dữ liệu vμ in nó ra. Điều nμy khác với một máy tình PC dựa trên bộ xử lý Pentium (hoặc một PC t−ơng thích với IBM ì 86 bất kỳ). Một PC có thể đ−ợc sử dụng cho một số bất kỳ các trạm dịch vụ in, bộ đầ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 hoặc trạm đầu cuối mạng Internet. Phần mềm cho các ứng dụng khác nhau có thể đ−ợc nạp vμ chạy. Tất nhiên lμ lý do hiển nhiên để một PC thực hiện hμng loạt các công việc lμ nó có bộ nhớ RAM vμ một hệ điều hμnh nạp phần mềm ứng dụng th−ờng đ−ợc đốt vμo trong ROM. Một máy tính PC ì 86 chứa hoặc đ−ợc nối tới các sản phẩm nhúng khác nhau chẳng hạn nh− bμn phím, máyin, Modem, bộ điều khiển đĩa, Card âm thanh, bộ điều khiển CD = ROM. Chuột v.v... Một nội ngoại vi nμy có một bộ vi điều khiển bên trong nó để thực hiện chỉ một công việc, ví dụ bên trong mỗi con chuột có một bộ vi điều khiển để thực thi công việc tìm vị trí chuột vμ gửi nó đến PC Bảng 1.1 liệt kê một số sản phẩm nhúng. 4.1.3 Các ứng dụng nhúng của PC ì 86. Mặc dù các bộ vi điều khiển lμ sự lựa chọn −a chuộng đối với nhiều hệ thống nhúng nh−ng có nhiều khi một bộ vi điều khiển không đủ cho công việc. Vì lý do đó mμ những năm gần đây nhíều nhμ sản xuất các bộ vi sử lý công dụng chung chẳng hạn nh− Intel, Motorla, AMD (Advanced Micro Devices, Inc...). Vμ Cyric (mμ bây giờ lμ một bộ phận của National Senicon ductir, Inc) đã h−ớng tới bộ vi xử lý cho hiệu suất cao của thị tr−ờng nhúng. Trong khi Intel, AMD vμ Cyrix đẩy các bộ xử lý ì 86 của họ vμo cho cả thị tr−ờng nhúng vμ thị tr−ờng máy tính PC để bán thì Motorola vẫn kiên định giữ họ vi xử lý 68000 lại chủ yếu h−ớng nó cho các hệ thống nhúng hiệu suất cao vμ bây giờ Apple không còn dùng 680 ì trong các máy tính Macintosh nữa. Trong những năm đầu thập kỷ 90 của thế kỷ 20 máy tính Apple bắt đầu sử dụng các bộ vi xử lý Power PC (nh− 603, 604, 620 v.v...) thay cho 680 ì0 đối với Macintosh. Bộvi xử lý Power PC lμ kết quả liên doanh đầu t− của IBM vμ Motorola vμ nó đ−ợc h−ớng cho thị tr−ớng nhúng hiệu suất cao cũng nh− cho cả thị tr−ờng máy tính PC. Cần phải l−u ý rằng khi một công ty h−ớng một bộ vi xử lý công dụng chung cho thị tr−ờng nhúng nó tối −u hoá bộ xử lý đ−ợc sử dụng cho các hệ thống nhúng. Vì lý do đó mμ các bộ vi xử lý nμy th−ờng đ−ợc gọi lμ các bộ xử lý nhúng hiệu suất cao. Do vậy các khái niệm các bộ vi điều khiển vμ bộ xử lý nhúng th−ờng đ−ợc sử dụng thay đổi nhau. Một trong những nhu cầu khắt khe nhất của hệ thống nhúng lμ giảm công suất tiêu thụ vμ không gian. Điều nμy có thể đạt đ−ợc bằng cách tích hợp nhiều chức năng vμo trong chíp CPU. Tất cả mọi bộ xử lý nhúng dựa trên ì 86 vμ 680 ì 0 đều có công suất tiêu thu thấp ngoμi ra đ−ợc bổ xung một số dạng cổng vμo - ra, cổng COM vμ bộ nhớ ROM trên một chíp. Trong các bộ xử lý nhúng hiệu suất cao có xu h−ớng tích hợp nhiều vμ nhiều chức năng hơn nữa trên chíp CPU vμ cho phép ng−ời thiết kế quyết định những đặc tính nμo họ muốn sử dụng. Xu h−ớng nμy cũng đang chiếm lĩnh thiết kế hệ thống PC. Bình th−ờng khi thiết kế bo mạch chủ của PC (Motherboard) ta cần một CPU cộng một chíp - set có chứa các cống vμo - ra, một bộ điều khiển cache, một bộ nhớ Flash ROM có chứa BIOS vμ cuối cùng lμ bộ nhớ cache thứ cấp. Những thiết kế mới đang Comment [URG1]: khẩn tr−ơng đi vμo công nghiệp sản xuất hμng loạt. Ví dụ Cyrix đã tuyên bố rằng họ đang lμm việc trên một chíp có chứa toμn bộ một máy tính PC ngoại trừ DRAM. Hay nói cách khác lμ chúng ta xắp nhìn thấy một máy tính PC trên một chíp. Hiện nay do chuẩn hoá MS - DOS vμ Windows nên các hệ thống nhúng đang sử dụng các máy tình PC ì 86 . Trong nhiều tr−ờng hợp việc sử dụng các máy tính PC ì 86 cho các ứng dụng nhúng hiệu suất cao lμ không tiết kiệm tiền bạc, nh−ng nó lμm rút ngắn thời gian phát triển vì có một th− viện phần mềm bao la đã đ−ợc viết cho nền DOS vμ Windows. Thực tế lμ Windows lμ một nền đ−ợc sử dụng rộng rãi vμ dễ hiểu có nghĩa lμ việc phát triển một sản phẩm nhúng dựa trên Windows lμm giảm giá thμnh vμ rút ngắn thời gian phát triển đáng kể. 1.1.4 Lựa chọn một bộ vi điều khiển. Có 4 bộ vi điều khiển 8 bit chính. Đó lμ 6811 của Motorola, 8051 của Intel z8 của Xilog vμ Pic 16 ì của Microchip Technology. Mỗi một kiểu loại trên đây đều có một tập lệnh vμ thanh ghi riêng duy nhất, nếu chúng đều không t−ơng thích lẫn nhau. Cũng có những bộ vi điều khiển 16 bit vμ 32 bit đ−ợc sản xuất bởi các hãng sản xuất chíp khác nhau. Với tất cả những bộ vi điều khiển khác nhau nh− thế nμy thì lấy gì lμm tiêu chuẩn lựa chọn mμ các nhμ thiết kế phải cân nhắc? Có ba tiêu chuẩn để lựa chọn các bộ vi điều khiển lμ: 1) Đáp ứng nhu cầu tính toán của bμi toán một cách hiệu quả về mặt giá thμnh vμ đầy đủ chức năng có thể nhìn thấy đ−ợc (khả dĩ). 2) Có sẵn các công cụ phát triển phần mềm chẳng hạn nh− các trình biên dịch, trình hợp ngữ vμ gỡ rối. 3) Nguồn các bộ vi điều khiển có sẵn nhiều vμ tin cậy. 1.1.5 Các tíêu chuẩn lựa chọn một bộ vi điều khiển. 1. Tiêu chuẩn đầu tiênvμ tr−ớc hết tronglựa chọn một bộ vi điều khiển lμ nó phải đáp ứng nhu cầu bμi toán về một mặt công suất tính toán vμ giá thμnh hiệu quả. Trong khi phân tích các nhu cầu của một dự án dựa trên bộ vi điều khiển chúng ta tr−ớc hết phải biết lμ bộ vi điều khiển nμo 8 bit, 16 bit hay 32 bit có thể đáp ứng tốt nhất nhu cầu tính toán của bμi toán mộ tcách hiệu quả nhất? Những tiêu chuẩn đ−ợc đ−a ra để cân nhắc lμ: a) Tốc độ: Tốc độ lớn nhất mμ bộ vi điều khiển hỗ trợ lμ bao nhiêu. b) Kiểu đóng vỏ: Đó lμ kíểu 40 chân DIP hay QFP hay lμ kiểu đóng vỏ khác (DIP - đóng vỏ theo 2 hμng chân. QFP lμ đóng vỏ vuông dẹt)? Đâ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 thử cho sản phẩm cuối cùng. c) Công suất tiêu thụ: Điều nμy đặc biệt khắt khe đối với những sản phẩm dùng pin, ắc quy. d) Dung l−ợng bộ nhớ RAM vμ ROM trên chíp. e) Số chân vμo - ra vμ bộ định thời trên chíp f) Khả năng dễ dμng nâng cấp cho hiệu suất cao hoặc giảm công suất tiêu thụ. g) Giá thμnh cho một đơn vị: Điều nμy quan trọng quyết định giá thμnh cuối cùng của sản phẩm mμ một bộ vi điều khiển đ−ợc sử dụng. Ví dụ có các bộ vi điều khiển giá 50 cent trên đơn vị khi đ−ợc mua 100.000 bộ một lúc. 2) Tiêu chuẩn thứ hai trong lựa chọn một bộ vi điều khiển lμ khả năng phát triển các sản phẩm xung quanh nó dễ dμng nh− thế nμo? Các câu nhắc chủ yếu bao gồm khả năng có sẵn trình l−ợng ngữ, gỡ rối, trình biên dịch ngôn ngữ C hiệu quả về mã nguồn, trình mô phỏng hỗ trợ kỹ thuật vμ khả năng sử dụng trong nhμ vμ ngoμi môi tr−ờng. Trong nhiều tr−ờng hợp sự hỗ trợ nhμ cung cấp thứ ba (nghĩa lμ nhμ cung cấp khác không phải lμ hãng sản xuất chíp) cho chíp cũng tốt nh−, nếu không đ−ợc tốt hơn, sự hỗ trợ từ nhμ sản xuất chíp. 3) Tiêu chuẩn thứ ba trong lựa chọn một bộ vi điều khiển lμ khả năng sẵn sμng đáp ứng về số l−ợng trong hiện tại vμ t−ơng lai. Đối với một số nhμ thiết kế điều nμy thậm chí còn quan trong hơn cả hai tiêu chuẩn đầu tiên. Hiện nay, các bộ vi điều khiển 8 bit dấu đầu, họ 8051 lμ có số l−ơng lớn nhất các nhμ cung cấp đa dạng (nhiều nguồn). Nhμ cung cấp có nghĩa lμ nhμ sản xuất bên cạnh nhμ sáng chế của bộ vi điều khiển. Trong tr−ờng hợp 8051 thì nhμ sáng chế của nó lμ Intel, nh−ng hiện nay có rất nhiều hãng sản xuất nó (cũng nh− tr−ớc kia đã sản xuất). Các hãng nμy bao gồm: Intel, Atmel, Philips/signe-tics, AMD, Siemens, Matra vμ Dallas, Semicndictior. Bảng 1.2: Địa chỉ của một số hãng sản xuất các thμnh viên của họ 8051. Hãng Địa chỉ Website Intel Antel www.intel.com/design/mcs51 www.atmel.com Plips/ Signetis Siemens Dallas Semiconductor www.semiconductors.philips.com www.sci.siemens.com www.dalsemi.com Cũng nên l−u ý rằng Motorola, Zilog vμ Mierochip Technology đã dμnh một l−ợng tμi nguyên lớn để đảm bảo khả năng sẵn sμng về một thời gian vμ phạm vi rộng cho các sản phẩm của họ từ khi các sản phẩm của họ đi vμo sản xuất ổn định, hoμn thiện vμ trở thμnh nguồn chính. Trong những năm gần đây họ cũng đã bắt đầu bán tế bμo th− viện Asic của bộ vi điều khiển. 1.2 Tổng quan về họ 8051. Trong mục nμy chúng ta xem xét một số thμnh viên khác nhau của họ bộ vi điều khiển 8051 vμ các đặc điểm bên trong của chúng. Đồng thời ta điểm qua một số nhμ sản xuất khác nhau vμ các sản phẩm của họ có trên thị tr−ờng. 1.2.1 Tóm tắt về lịch sử của 8051. Vμo năm 1981. Hãng Intel giới thiệu một số bộ vi điều khiển đ−ợc gọi lμ 8051. Bộ vi điều khiển nμy có 128 byte RAM, 4K byte ROM trên chíp, hai bộ định thời, một cổng nối tiếp vμ 4 cổng (đều rộng 8 bit) vμo ra tất cả đ−ợc đặt trên một chíp. Lúc ấy nó đ−ợc coi lμ một hệ thống trên chíp. 8051 lμ một bộ xử lý 8 bit có nghĩa lμ CPU chỉ có thể lμm việc với 8 bit dữ liệu tại một thời điểm. Dữ liệu lớn hơn 8 bit đ−ợc chia ra thμnh các dữ liệu 8 bit để cho xử lý. 8051 có tất cả 4 cổng vμo - ra I/O mỗi cổng rộng 8 bit (xem hình 1.2). Mặc dù 8051 có thể có một ROM trên chíp cực đại lμ 64 K byte, nh−ng các nhμ sản xuất lúc đó đã cho xuất x−ởng chỉ với 4K byte ROM trên chíp. Điều nμy sẽ đ−ợc bμn chi tiết hơn sau nμy. 8051 đã trở nên phổ biến sau khi Intel cho phép các nhμ sản xuất khác sản xuất vμ bán bất kỳ dạng biến thế nμo của 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 nμy dẫn đến sự ra đời nhiều phiên bản của 8051 với các tốc độ khác nhau vμ dung l−ợng ROM trên chíp khác nhau đ−ợc bán bởi hơn nửa các nhμ sản xuất. Điều nμy quan trọng lμ mặc dù có nhiều biến thể khác nhau của 8051 về tốc độ vμ dung l−ơng nhớ ROM trên chíp, nh−ng tất cả chúng đều t−ơng thích với 8051 ban đầu về các lệnh. Điều nμy có nghĩa lμ nếu ta viết ch−ơng trình của mình cho một phiên bản nμo đó thì nó cũng sẽ chạy với mọi phiên bản bất kỳ khác mμ không phân biệt nó từ hãng sản xuất nμo. Bảng 1.3: Các đặc tính của 8051 đầu tiên. Đặc tính Số l−ợng ROM trên chíp RAM Bộ định thời Các chân vμo - ra Cổng nối tiếp Nguồn ngắt 4K byte 128 byte 2 32 1 6 1.2.2 Bộ ví điều khiển 8051 Bộ vi điều khiển 8051 lμ thμnh viên đầu tiên của họ 8051. Hãng Intel ký hiệu nó nh− lμ MCS51. Bảng 3.1 trình bμy các đặc tính của 8051. Hình 1.2: Bố trí bên trong của sơ đồ khối 8051. 1.2.3 các thμnh viên khác của họ 8051 Có hai bộ vi điều khiển thμnh viên khác của họ 8051 lμ 8052 vμ 8031. a- Bộ vi điều khiển 8052: Bộ vi điều khiển 8052 lμ một thμnh viên khác của họ 8051, 8052 có tất cả các đặc tính chuẩn của 8051 ngoμi ra nó có thêm 128 byte RAM vμ một bộ định thời nữa. Hay nói cách khác lμ 8052 có 256 byte RAM vμ 3 bộ định thời. Nó cũng có 8K byte ROM. Trên chíp thay vì 4K byte nh− 8051. Xem bảng 1.4. Bảng1.4: so sán ... 15.1.6 Hệ 8031 với 8255. Trong một hệ thống dựa trên 8031 mμ bộ nhớ ch−ơng trình ROM ngoμi lμ một sự bắt buộc tuyệt đối thì sử dụng một 8255 lμ rất đ−ợc trμo đón. Điều nμy lμ do một thực tế lμ trong giải trình phối ghép 8031 với bộ nhớ ch−ơng trình ROM ngoμi ta bị mất hai cổng P0 vμ P2 vμ chỉ còn lại duy nhất cổng P1. Do vậy, việc nối với một 8255 lμ cách tốt nhất để có thêm một số cổng. Điều nμy đ−ợc chỉ ra trên hình 15.8. 8031 AD7 P0.0 P0.7 ALE P3.7 P3.6 PSEN P2.7 P2.0 74LS373 G OC q D AD0 WR EA RD A0 8 2 5 5 RESD7 2864 (2764) 8Kì8 Program RAM CE OE VCC D0 RDWR VCC A1 PA PB PC A0 A0 A8 A12 A12 A8 A0 A0 D7 D0 Hình 15.8: Nối 8031 tới một ROM ch−ơng trình ngoμi vμ 8255. 15.2 Nối ghép với thế giới thực. 15.2.1 Phối ghép 8255 với động cơ b−ớc. Ch−ơng 13 đã nói chi tiết về phối ghép động cơ b−ớc với 8051, ở đây ta trình bμy nối ghép động cơ b−ớc tới 8255 vμ lập trình (xem hình 15.9). Hình 15.9: Nối ghép 8255 với một động cơ b−ớc. Ch−ơng trình cho sơ đồ nối ghép nμy nh− sau: MOV A, #80H ; Chọn từ điều khiển để PA lμ đầu ra ULN2003 Stepper Motor COM COM 16 15 14 134 3 2 1 +5V PA0 PA1 PA2 PA3 0855 D0 D7 A0 A1 from 8051 Decoding Circuyiry A2 A7 D0 D7 A0 A1 RD WR CS ULN2003 Conection for Stepper Motor Pin 8 = GND Pin 9 = +5v MOV R1, #CRPORT ; Địa chỉ cổng thanh ghi điều khiển MOVX @R1, A ; Cấu hình cho PA đầu ra MOV R1, #APORT ; Nạp địa chỉ cổng PA MOV A, #66H ; Gán A = 66H, chuyển xung của động cơ b−ớc AGAIN: MOVX @R1, A ; Xuất chuỗi động cơ đến PA RR A ; Quay chuỗi theo chiều kim đồng hồ ACALL DELAY ; Chờ SJMP AGAIN 15.2.2 Phối ghép 8255 với LCD. Hình 5.10: Nối ghép 8255 với LCD. Ch−ơng 15.1: ; Ghi các lệnh vμ dữ liệu tới LCD không có kiểm tra cờ bận. ; Giả sử PA của 8255 đ−ợc nối tới D0 - D7 của LCD vμ ; IB - RS, PB1 = R/W, PB2 = E để nối các chân điều khiển LCD MOV A, #80H ; Đặt tất cả các cổng 8255 lμ đầu ra MOV R0, #CNTPORT ; Nẹp địa chỉ thanh ghi điều khiển Ch−ơng trình 15.1 trình bμy cách xuất các lệnh vμ dữ liệu tới một LCD đ−ợc nối tới 8255 theo sơ đồ hình 15.10. Trong ch−ơng trình 15.1 ta phải đặt một độ trễ tr−ớc mỗi lần xuất thông tin bất kỳ (lệnh hoặc dữ liệu) tới LCD. Một cách tốt hơn lμ kiểm tra cờ bận tr−ớc khi xuất bất kỳ thứ gì tới LCD nh− đã 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. Để ý rằng lúc nμy không cần thời gian giữ 0855 D0PA0 PA1 PB0 PB1 PB2 A7 VCC VEE VSS RS R/W E LC 10K POT RESET MOVX @R0, A ; Xuất từ điều khiển MOV A, #38H ; Cấu hình LCD có hai dòng vμ ma trận 5ì7 ACALL CMDWRT ; Ghi lệnh ra LCD ACALL DELAY ; Chờ đến lần xuất kế tiếp (2ms) MOV A, # 0EH ; Bật con trỏ cho LCD ACALL CMDWRT ; Ghi lệnh nμy ra LCD ACALL DELAY ; Chờ lần xuất kế tiếp MOV A, # 01H ; Xoá LCD ACALL CMDWRT ; Ghi lệnh nμy ra LCD ACALL DELAY ; Dịch con trỏ sang phải MOV A, # 06 ; Ghi lệnh nμy ra LCD ACALL CMDWRT ; Chờ lần xuất sau ACALL DELAY ; Ghi lệnh nμy ra LCD ... ; v.v... cho tất cả mọi lệnh LCD MOV A, # 'N' ; Hiển thị dữ liệu ra (chữ N) ACALL DATAWRT ; Gửi dữ liệu ra LCD để hiển thị ACALL DELAY ; Chờ lần xuất sau MOV A, # '0' ; Hiển thị chữ "0" ACALL DATAWRT ; Gửi ra LCD để hiển thị ACALL DELAY ; Chờ lần xuất sau ... ; v.v... cho các dữ liệu khác ; Ch−ơng trình con ghi lệnh CMDWRT ra LCD CMDWRT: MOV R0, # APORT ; Nạp địa chỉ cổng A MOVX @R0, A ; Xuất thông tin tới chân dữ liệu của LCD MOV R0, # BPORT ; Nạp địa chỉ cổng B MOV A, # 00000100B ; RS=0, R/W=1, E=1 cho xung cao xuống thấp MOVX @R0, A ; Kích hoạt các chânRS, R/W, E của LCD NOP ; Tạo độ xung cho chân E NOP MOV A, # 00000000B ; RS=0, R/W=1, E=1 cho xung cao xuống thấp MOVX @R0, A ; Chốt thông tin trên chân dữ liệu của LCD RET ; Ch−ơng trình con ghi lệnh DATAWRT ghi dữ liệu ra LCD. CMDWRT: MOV R0, # APORT ; Nạp địa chỉ cổng A MOVX @R0, A ; Xuất thông tin tới chân dữ liệu của 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 các 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 trên chân dữ liệu của LCD RET Ch−ơng trình 15.2: ; Ghi các lệnh vμ dữ liệu tới LCD có sử dụng kiểm tra cờ bận. ; Giả sử PA của 8255 đ−ợc nối tới D0 - D7 của LCD vμ ; PB0 = RS, PB1 = R/W, PB2 = E đối với 8255 tới các chân điều khiển LCD MOV A, #80H ; Đặt tất cả các cổng 8255 lμ đầu ra MOV R0, #CNTPORT ; Nạp địa chỉ thanh ghi điều khiển MOVX @R0, A ; Xuất từ điều khiển MOV A, #38H ; Chọn LCD có hai dòng vμ ma trận 5ì7 ACALL NMDWRT ; Ghi lệnh ra LCD MOV A, # 0EH ; Lệnh của LCD cho con trỏ bật ACALL NMDWRT ; Ghi lệnh ra LCD MOV A, # 01H ; Xoá LCD ACALL NMDWRT ; Ghi lệnh ra LCD MOV A, # 06 ; Lệnh dịch con trỏ sang phải ACALL CMDWRT ; Ghi lệnh ra LCD ... ; v.v... cho tất cả mọi lệnh LCD MOV A, # 'N' ; Hiển thị dữ liệu ra (chữ N) ACALL NCMDWRT ; Gửi dữ liệu ra LCD để hiển thị MOV A, # '0' ; Hiển thị chữ "0" ACALL NDADWRT ; Gửi ra LCD để hiển thị ... ; v.v... cho các dữ liệu khác ; Ch−ơng trình con ghi lệnh NCMDWRT có hiển thị cờ bận NCMDWRT: MOV R2, A ; L−u giá trị thanh ghi A MOV A, #90H ; Đặt PA lμ cổng đầu vμo để đọc trạng thái LCD MOV R0, # CNTPORT ; Nạp địa chỉ thanh ghi điều khiển MOVX @R0, A ; Đặt PA đầu vμo, PB đầu ra MOV A, # 00000110B ; RS=0, R/W=1, E=1 đọc lệnh MOV @R0, BPORT ; Nạp địa chỉ cổng B MOVX R0, A ; RS=0, R/W=1 cho các chân RD vμ RS MOV R0, APORT ; Nạp địa chỉ cổng A READY: MOVX @R0 ; Đọc thanh ghi lệnh RLC A ; Chuyển D7 (cờ bận) vμo bit nhớ carry JC READY ; Chờ cho đến khi LCD sẵn sμng MOV A, #80H ; Đặt lại PA, PB thμnh đầu ra MOV R0, #CNTPORT ; Nạp địa chỉ cổng điều khiển MOVX @R0, A ; Xuất từ điều khiển tới 8255 MOV A, R2 ; Nhận giá trị trả lại tới LCD MOV R0, #APORT ; Nạp địa chỉ cổng A MOVX @R0, A ; Xuất thông tin tới các chân dữ liệu của LCD MOV R0, #BPORT ; Nạp địa chỉ cổng B MOV A, #00000100B ; Đặt RS=0, R/W=0, E=1 cho xung thấp lên cao MOVX @R0, A ; Kích hoạt RS, R/W, E của LCD NOP ; Tạo độ rộng xung của 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 dữ liệu LCD RET ; Ch−ơng trình con ghi dữ liệu mới NDATAWRT sử dụng cờ bận NCMDWRT: MOV R2, A ; L−u giá trị thanh ghi A MOV A, #90H ; Đặt PA lμ cổng đầu vμo để đọc trạng thái LCD MOV R0, # CNTPORT ; Nạp địa chỉ thanh ghi điều khiển MOVX @R0, A ; Đặt PA đầu vμo, PB đầu ra MOV A, # 00000110B ; RS=0, R/W=1, E=1 đọc lệnh MOV @R0, BPORT ; Nạp địa chỉ cổng B MOVX R0, A ; RS=0, R/W=1 cho các chân RD vμ RS MOV R0, APORT ; Nạp địa chỉ cổng A READY: MOVX @R0 ; Đọc thanh ghi lệnh RLC A ; Chuyển D7 (cờ bận) vμo bit nhớ carry JC READY ; Chờ cho đến khi LCD sẵn sμng MOV A, #80H ; Đặt lại PA, PB thμnh đầu ra MOV R0, #CNTPORT ; Nạp địa chỉ cổng điều khiển MOVX @R0, A ; Xuất từ điều khiển tới 8255 MOV A, R2 ; Nhận giá trị trả lại tới LCD MOV R0, #APORT ; Nạp địa chỉ cổng A MOVX @R0, A ; Xuất thông tin tới các chân dữ liệu của LCD MOV R0, #BPORT ; Nạp địa chỉ cổng B MOV A, #00000101B ; Đặt RS=1, R/W=0, E=1 cho xung thấp lên cao MOVX @R0, A ; Kích hoạt RS, R/W, E của LCD NOP ; Tạo độ rộng xung của chân E NOP MOV A, #00000001B ; Đặt RS=1, R/W=0, E=0 cho xung cao xuống thấp MOVX @R0, A ; Chốt thông tin ở chân dữ liệu LCD RET 15.2.3 Nối ghép ADC tới 8255. Các bộ ADC đã đ−ợc trình bμy ở ch−ơng 12. D−ới đây một ch−ơng trình chỉ một bộ ADC đ−ợc nối tới 8255 theo sơ đồ cho trên hình 115.11. MOV A, #80H ; Từ điều khiển với PA = đầu ra vμ PC = đầu vμo MOV R1, #CRPORT ; Nạp địa chỉ cổng điều khiển MOVX @R1, A ; Đặt PA = đầu ra vμ PC = đầu vμo BACK: MOV R1, #CPORT ; Nạp địa chỉ cổng C MOVX A, @R1 ; Đọc địa chỉ cổng C để xem ADC đã sẵn sμng ch−a ANL A,, #00000001B ; Che tất cả các 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 vμ bây giờ nhận dữ liệu của ADC MOV R1, #APORT ; Nạp địa chỉ PA MOVX A, @R1 ; A = đầu vμo dữ liệu t−ơng tự Cho đến đây ta đã đ−ợc trao đổi chế độ vμo/ ra đơn giản của 8255 vμ trình bμy nhiều ví dụ về nó. Ta xét tiếp các chế độ khác. Hình 15.11: Nối ghép ADC 804 với 8255. 15.3 Các chế độ khác của 8255. 15.3.1 Chế độ thiết lập/ xoá bit BSR. D0 D7 Decoding Circuyiry A2 A7 D0 D7 PA0 PA7 PC0 INTR RESET 8255 VCC CLK R CLK IN Vin(+) Vin(-) A GND Vref/2 GND CS 10K POT 10k 150pF 5VADC80 RD WR Một đặc tính duy nhất của cổng C lμ các bit có thể đ−ợc điều khiển riêng rẽ. Chế độ BSR cho phép ta thiết lập các bit PC0 - PC7 lên cao xuống thấp nh− đ−ợc chỉ ra trên hình 15.12. Ví dụ 15.6 vμ 15.7 trình bμy cách sử dụng chế độ nμy nh− thế nμo? Hình 15.12: Từ điều khiển của chế độ BSR. Ví dụ 15.6: Hãy lập trình PCA của 8255 ở chế độ BSR thì bit D7 của từ điều khiển phải ở mức thấp. Để PC4 ở mức cao, ta cần một từ điều khiển lμ "0xxx1001" vμ ở mức thấp ta cần "0xxx1000". Các bít đ−ợc đánh dấu x lμ ta không cần quan tâm vμ th−ờng chúng đ−ợc đặt về 0. MOV A, 00001001B ; Đặt byte điều khiển cho PC4 =1 MOV R1, #CNTPORT ; Nạp cổng thanh ghi điều khiển MOVX @R1, A ; Tạo PC4 = 1 ACALL DELAY ; Thời gian giữ chậm cho xung cao MOV A, #00001000B ; Đặt byte điều khiển cho PC4 = 0 MOVX @R1, A ; Tạo PC4 = 0 ACALL DELAY 0 x x x Bit Select S/R BSR Mode D7 D6 D5 D4 D3 D2 D1 D0 Not Used. Generally = 0. 000=Bit0 100=Bit4 001 = Bit1 101=Bit5 010 = Bit2 110=Bit6 011 = Bit3 111=Bit7 Set=1 Reset=0 D0 D7 WR RD RD WR A0 8255 Hình 15.13: Cấu hình cho ví dụ 15.6 vμ 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 R0, # CNTPORT MOV A, # 0XXX0101 ; Byte điều khiển MOV @R0, A b) AGAIN: MOV A, #00001101B ; Chọn PC6 = 1 MOV R0, #CNTPORT ; Nạp địa chỉ thanh ghi điều khiển MOVX @R0, A ; Tạo PC6 = 1 ACALL DELAY ACALL DELAY MOV A, #00001100B ; PC6 = 0 ACALL DELAY ; Thời gian giữ chậm SJMP AGAIN PC4 PC4 PC7 PC6 INTEA Port A Output OBFA ACKA Po rt A w ith H an sh ak e Si gn al s 1 0 1/0 1 0 X 1 0 D7 D6 D5 D4 D3 D2 D1 D0 Port B O utput Port B M ode1 Port B O utput Port A O utput Port A M ode1 Port A M ode1 I/O M ode PC 4.51=Input,0=O utpput ControlWord-Mode1Output S s Hình 15.14: Biểu đồ đầu ra của 8255 ở chế độ 1. INTEB OBF WR ACK Output Hình 15.15: Biểu đồ định thời của 8255 ở chế độ 1. 15.3.2 8255 ở chế độ 1: Vμo/ ra với khả năng nμy bắt tay. Một trong những đặc điểm mạnh nhất của 8255 lμ khả năng bắt tay với các thiết bị khác. Khả năng bắt tay lμ một quá trình truyền thông qua lại của hai thiết bị thông minh. Ví dụ về một thiết bị có các tín hiệu bắt tay lμ máy in. D−ới đây ta trình bμy các tín hiệu bắt tay của 8255 với máy in. Chế độ 1: Xuất dữ liệu ra với các tín hiệu bắt tay. Nh− trình bμy trên hình 15.14 thì cổng A vμ B có thể đ−ợc sử dụng nh− các cổng đầu ra để gửi dữ liệu tới một thiết bị với các tín hiệu bắt tay. Các tín hiệu bắt tay cho cả hai cổng A vμ B đ−ợc cấp bởi các bit của cổng C. Hình 15.15 biểu đồ định thời của 8255. D−ới đây lμ các phần giải thích về các tín hiệu bắt tay vμ tính hợp lý của chúng đối với cổng A, còn cổng B thì hoμn toμn t−ơng tự. Tín hiệu OBFa : Đây lμ tín hiệu bộ đệm đầu ra đầy của cổng A đ−ợc tích cực mức thấp đi ra từ chân PC7 để báo rằng CPU đã ghi 1 byte dữ liệu tới cổng A. Tín hiệu nμy phải đ−ợc nối tới chân STROBE của thiết bị thu nhận dữ liệu (chẳng hạn nh− máy in) để báo rằng nó bây giờ đã có thể đọc một byte dữ liệu từ chốt cổng. Tín hiệu ACKa : Đây lμ tín hiệu chấp nhận do cổng A có mức tích cực mức thấp đ−ợc nhân tại chân PC6 của 8255. Qua tín hiệu ACKa thì 8255 biết rằng tín hiệu tại cổng A đã đ−ợc thiết bị thu nhận lấy đi. Khi thiết bị nhận lấy dữ liệu đi từ cổng A nó báo 8255 qua tín hiệu ACKa . Lúc nμy 8255 bật OBFa lên cao để báo rằng dữ liệu tại cổng A bây giờ lμ dữ liệu cũ vμ khi CPU đã ghi một byte dữ liệu mới tới cổng A thì OBFa lại xuống thấp v.v... Tín hiệu INTRa: Đây lμ tín hiệu yêu cầu ngắt của cổng A có mức tích cực cao đi ra từ chân PC3 của 8255. Tín hiệu ACK lμ tín hiệu có độ dμi hạn chế. Khi nó xuống thấp (tích cực) thì nó lμm cho OBFa không tích cực, nó ở mức thấp một thời gian ngắn vμ sau đó trở nên cao (không tích cực). S−ờn lên của ACK kích hoạt INTRa lên cao. Tín hiệu cao nμy trên chân INTRa có thể đ−ợc dùng để gây chú ý của CPU. CPU đ−ợc thông báo qua tín hiệu INTRa rằng máy in đã nhận byte cuối cùng vμ nó sẵn sμng để nhận byte dữ liệu khác. INTRa ngắt CPU ngừng mọi thứ đang lμm vμ ép nó gửi byte kế tiếp tới cổng A để in. Điều quan trọng lμ chú ý rằng INTRa đ−ợc bật lên 1 chỉ khi nếu INTRa, OBFa vμ ACKa đều ở mức cao. Nó đ−ợc xoá về không khi CPU ghi một byte tới cổng A. Tín hiệu INTEa: Đây lμ tín hiệu cho phép ngắt cổng A 8255 có thể cấm INTRa để ngăn nó không đ−ợc ngắt CPU. Đây lμ chức năng của tín hiệu INTEa. Nó lμ một mạch lật Flip - Flop bên trong thiết kế để che (cấm) INTRa. Tín hiệu INTRa có thể đ−ợc bật lên hoặc bị xoá qua cổng C trong chế độ BSR vì INTEa lμ Flip - Plop đ−ợc điều khiển bởi PC6. Từ trạng thái: 8255 cho phép hiển thị trạng thái của các tín hiệu INTR, OBF vμ INTE cho cả hai cổng A vμ B. Điều nμy đ−ợc thực hiện bằng cách đọc cổng C vμo thanh ghi tổng vμ kiểm tra các bit. Đặc điểm nμy cho phép thực thi thăm dò thay cho ngắt phần cứng. Hình 15.16: Đầu cắm DB-25. (hình 15.17 mờ quá không vẽ đ−ợc) Hình 15.17: Đầu cáp của máy in Centronics. Bảng 15.2: Các chân tín hiệu của máy in Centronics. Chân số Mô tả Chân số Mô tả 1 2 STROBE Dữ liệu D0 11 12 Bận (busy) Hết giấy (out of paper) 1 13 14 25 3 4 5 6 7 8 9 10 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 ACK (chấp nhận) 13 14 15 16 17 18-25 Chọn (select) Tự nạp ( Autofeed ) Lỗi ( Error ) Khởi tạo máy in Chọn đầu vμo ( inputSelect ) Đất (ground) Các b−ớc truyền thông có bắt tay giữa máy in vμ 8255. Một byte dữ liệu đ−ợc gửi đến bus dữ liệu máy in. Máy in đ−ợc báo có 1 byte dữ liệu cần đ−ợc in bằng cách kích hoạt tín hiệu đầu vμo STROBE của nó. Khi máy nhận đ−ợc dữ liệu nó báo bên gửi bằng cách kích hoạt tín hiệu đầu ra đ−ợc gọi lμ ACK (chấp nhận). Tín hiệu ACK khởi tạo quá trình cấp một byte khác đến máy in. Nh− ta đã thấy từ các b−ớc trên thì chỉ khi một byte dữ liệu tới máy in lμ không đủ. Máy in phải đ−ợc thông báo về sự hiện diện của dữ liệu. Khi dữ liệu đ−ợc gửi thì máy in có thể bận hoặc hết giấy, do vậy máy in phải đ−ợc báo cho bên gửi khi nμo nó nhận vμ lấy đ−ợc dữ liệu của nó. Hình 15.16 vμ 15.17 trình các ổ cắm DB25 vμ đầu cáp của máy in Centronics t−ơng ứng.
File đính kèm:
- giao_trinh_cac_bo_vi_dieu_khien.pdf