Đề tài Bộ tạo xung với tần số nhập từ bàn phím để có thể ứng dụng những kiến thức đã học để tìm hiểu và áp dụng thực tế qua đó nắm bắt được các công nghệ kỹ thuật hiện đại

2.Bàn phím : Bàn phím gồm có một phím số từ 0 -> 9 và hai phím chức năng Clear và Start làm nhiệm vụ nhận dữ liệu nhập vào từ bàn phím hoặc nhận chỉ thị xử lý từ bàn phím ( khi ấn phím chức năng ) 3. Khối xử lý ngắt : Khối xử lý ngắt nhằm mục đích phát hiện trên bàn phím có phím số được ấn , từ đó đưa ra một yêu cầu ngắt đối với 89c51 . Nếu yêu cầu ngắt này được 89c51 chấp nhận nó sẽ gọi một chương trình phục vụ ngắt thực hiện việc kiểm tra tính đúng dắn của việc ấn số và nhập dữ liệu vào . 4. Khối hiển thị : Khối hiển thị gồm 4 LED 7 đoạn được tổ chức theo kiểu sáng luân phiên 2.5 ms một lần . LED sáng được chọn bởi 89c51 qua đường điều khiển từ cổng P0.0 -> P0.3 . Dữ liệu được hiển thị dưới dạng mã 7 thanh cũng dược 89c51v gửi tới LED qua đường data . 5.Khối vi điều khiển 89c51 : 89c51 đóng vai trò trung tâm trong hệ thống . Nó có nhiệm vụ tương tác với các khối , nhận , xử lý và chuyển dữ liệu tới các khối . 89c51 đảm nhận tất cả các nhiệm vụ từ việc nhận dữ liệu vào dưới dạng tín hiệu nhị phân ở 10 cổng vào ,xử lý dữ liêụ , chuyển dữ liệu thành mã Hexa và mã 7 đoạn , lưu giữ dữ liệu và điều khiển hoạt động của khối hiển thị và tạo một dãy xung vuông ở đầu ra khi có lệnh tạo xung . 2. Nguyên tắc hoạt động : Mạch tạo xung sử dụng 89C51 có đặc điểm : nó sử dụng một chương trình phần mềm để thực hiện tất cả mọi tác vụ của mạch từ việc tính toán số liệu tới việc giao tiếp với phần cứng. Do đó, khi xem xét hoạt động luôn phải xem xét sự tác động qua lại giữa các khối thông qua sự điều khiển của một chương trình phần mềm. 1. Trạng thái chờ dữ liệu: Ban đầu, khi mới bật nguồn và Reset hệ thống bộ đếm chương trình sẽ trỏ vào địa chỉ 0000h. lệnh đầu tiên mà chương trình thực hiện sẽ là lệnh nhảy tới chương trình chính LJMP MAIN. Lúc này các đầu ra của hệ thống đều không có dữ liệu, khối hiển thị không hiển thị, đầu ra không có xung ra , trên RAM của 89C51 không chứa dữ liệu. Khi đó chương trình sẽ thực hiện việc thiết lập trạng thái của các cổng, xoá vùng RAM dữ liệu cần dùng. Sau đó, nó thiết lập bộ định thời 0 phục vụ việc hiển thị cho phép ngắt ngoài 0 và 1 phục vụ cho việc

doc28 trang | Chia sẻ: Dung Lona | Lượt xem: 1597 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đề tài Bộ tạo xung với tần số nhập từ bàn phím để có thể ứng dụng những kiến thức đã học để tìm hiểu và áp dụng thực tế qua đó nắm bắt được các công nghệ kỹ thuật hiện đại, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lời nói đầu Trong những năm gần đây trên thế giới cùng với sự phát triển mạnh mẽ của công nghệ chế tạo linh kiện bán dẫn và vi mạch tổ hợp, một hướng phát triển mới của các vi xử lí đã hình thành đó là các vi điều khiển. Ngoài khối xử lý trung tâm thực hiện chức năng nhiệm vụ của một vi xử lý, vi điều khiển được tích hợp thêm các khối chức năng hỗ trợ, để tạo thành một khối điều khiển hoàn chỉnh. Bên cạnh đó, vi điều khiển còn cho phép người sử dụng lập trình tuỳ theo yêu cầu dựa trên tập lệnh riêng khá phong phú. Cùng với đặc điểm nổi bật là công suất tiêu thụ thấp, vi điều khiển đã được ứng dụng trong hầu hết các lĩnh vực liên quan tới điều khiển tự động. Để khai thác hết được các ưu điểm của vi điều khiển, việc đi sâu nghiên cứu về vi điều khiển là rất cần thiết. Để tìm hiểu được phần nào các đặc tính ưu việt của họ vi điều khiển, với các kiến thức đã học về Kỹ thuật số, Kỹ thuật vi xử lý, Kỹ thuật mạch điện tử, và Điều khiển tự động. Chúng tôi hi vọng qua đề tài bộ tạo xung với tần số nhập từ bàn phím để có thể ứng dụng những kiến thức đã học để tìm hiểu và áp dụng thực tế qua đó nắm bắt được các công nghệ kỹ thuật hiện đại. Trong nội dung của đề tài này, chúng tôi đã nghiên cứu tìm hiểu về họ vi điều khiển 8051, đây là một trong những họ vi điều khiển thông dụng và được sử dụng rộng rãi nhất hiện nay trên thế giới. Đồng thời, chúng tôi tiến hành tìm hiểu, khảo sát thực tế về các bộ tạo xung đã được bán trên thị trường để xây dựng nên một mô hình bộ tạo xung đơn giản. Rất mong sự góp ý và giúp đỡ của các thầy cô và các bạn để chúng tôi hoàn thiện đề tài này. Chương 1 : Giới Thiệu Chung về Vi Điều Khiển Lịch sử phát triển của bộ vi điều khiển: Trong những năm gần đây, vi xử lí được ứng dụng rộng rãi trong đo lường và điều khiển nhờ những ưu điểm và tính tiện dụng của chúng. Tốc độ phát triển của công nghệ vi xử lí rất nhanh nhờ sự phát triển trong công nghệ sản suất các vi mạch tích hợp cao. Trước đây, một bộ vi xử lý có chứa trên một chip riêng lẻ chế tạo bằng Silic tất cả các chức năng để xử lý chương trình theo một trình tự. Còn các bộ phận bổ xung khác như: bộ nhớ dữ liệu, bộ nhớ chương trình, bộ biến đổi A/D, các khối thừa hành khác... là các linh kiện bên ngoài và được đấu nối vào bộ vi xử lý. Theo yêu cầu thực tiễn ngày càng cao, các bộ vi xử lý được phát triển để phục vụ cho việc đo lường và điều khiển tự động. Do vậy người ta đã tích hợp nhiều chức năng vào bộ vi xử lý, trong một chip vi xử lý còn có nhiều chức năng như: các bộ nhớ, bộ đếm, bộ tạo xung, các bộ biến đổi A/D hay D/A, các cổng vào ra, ... Bộ vi xử lý lúc này đã có đủ những chức năng của một bộ điều khiển. Vì vậy các vi mạch này được gọi là bộ vi điều khiển. Một cách tổng quát, ta có thể định nghĩa: Bộ vi điều khiển Bộ vi xử lý + Các khối chức năng Trong những năm qua, cùng với sự phát triển của cách mạng công nghệ, các bộ vi điều khiển phát triển mạnh theo các hướng sau : + Giảm nhỏ dòng tiêu thụ. +Tăng tốc độ làm việc hay tần số xung nhịp của bộ xử lý . +Giảm điện áp nguồn nuôi. +Mở rộng các chức năng trên chip. Với xu hướng trên, công nghệ chế tạo vi điều khiển phát triển mạnh mẽ không ngừng và vi điều khiển đã xâm nhập vào rất nhiều lĩnh vực của đời sống. Để tìm hiểu về các bộ vi điều khiển chung ta chọn họ MCS-51 để nghiên cứu như một đại diện điển hình do tính mềm dẻo trong sử dụng, với số lượng lớn và trong những năm gần đây đã được sử dụng như một bộ vi điều khiển tiêu chuẩn trong công nghiệp. Họ vi điều khiển MCS-51: Những tính chất đặc trưng của họ vi điều khiển MCS-51: * Đơn vị xử lý trung tâm (CPU) 8 bit đã được tối ưu hoá để đáp ứng các chức năng điều khiển . * Khối lôgic (ALU) xử lý theo bit nên thuận tiện cho các phép toán logic Boolean. * Bộ tạo dao động giữ nhịp được tích hợp bên trong. * Giao diện nối tiếp có khả năng hoạt động song song, đồng bộ. * Các cổng vào/ra hai hướng và từng đường dẫn có thể được định địa chỉ một cách tách biệt. * Có năm hay sáu nguồn ngắt với hai mức ưu tiên . * Hai hoặc ba bộ đếm định thời 16 bit. * Bus và khối định thời tương thích với các khối ngoại vi của bộ vi xử lý 8085/8088. * Dung lượng của bộ nhớ chương trình (ROM) bên ngoài có thể lên tới 64 kbyte. * Dung lượng của bộ nhớ dữ liệu (RAM) bên ngoài có thể lên tới 64 kbyte. * Dung lượng của bộ nhớ ROM bên trong có thể lên đến 8 kbyte. * Dung lượng bộ nhớ RAM bên trong có thể đạt đến 256 byte. * Tập lệnh phong phú. ở trên là những đặc điểm điển hình của họ vi điều khiển MCS-51. So sánh với các họ vi xử lý trước thì họ vi điều khiển MCS-51 có những ưu điểm: &Tốc độ xử lý tăng gấp hai đến năm lần. &Có thể trao đổi với bộ nhớ ngoài đến dung lượng tối đa là 64 kbyte. &Có thể trao đổi với thiết bị ngoại vi bên ngoài phong phú hơn. &Có bộ xử lý Boolean được tích hợp cùng với bộ vi xử lý cho phép xử lý tới từng bit. Chương 2 Bộ Vi Điều Khiển 8051 2.1. Cấu trúc chung : 2.1.1. Sơ đồ khối : Sơ đồ khối tổng quát của một vi điều khiển 8051 có thể được mô tả như sau: Hình 2.1: Cấu trúc của vi điều khiển 8051. Bộ tạo dao động CPU Điều khiển ngắt. Nguồn ngắt trong. 4Kbyte Bộ nhớ chương trình trong. 128byte Bộ nhớ RAM trong 2bộ đếm / định thời Khối đ.khiển quản lý Bus. Port 0 Port 1 Port 2 Port 3 Giao diện nối tiép. XTAL 1.2 |PSEN/ALE Cổng I/O 8 bit Cổng I/O Đchỉ cao Dữ liệu 8 bit Cổng I/O Đchỉ thấp Dữ liệu 8 bit Cổng I/O Các chức năng đắc biệt Dữ liệu 8 bit Nguồn ngắt ngoài Đếm sự kiện. Chức năng của từng khối : * Khối xử lý trung tâm CPU: Phần chính của bộ vi xử lý là khối xử lý trung tâm (CPU=Central Processing Unit ), khối này có chứa các thành phần chính : +Thanh ghi tích luỹ (ký hiệu là A ); +Thanh ghi tích luỹ phụ (ký hiệu là B ) thường được dùng cho phép nhân và phép chia ; +Khối logic số học (ALU=Arithmetic Logical Unit) ; +Từ trạng thái chương trình (PSW= Program Status Word ); +Bốn băng thanh ghi . +Con trỏ ngăn xếp (SP=Stack Point) cũng như con trỏ dữ liệu để định địa chỉ cho bộ nhớ dữ liệu ở bên ngoài; Ngoài ra, khối xử lý trung tâm còn chứa: -Thanh ghi đếm chương trình (PC= Progam Counter ); -Bộ giải mã lệnh; -Bộ điều khiển thời gian và logic; Sau khi được Reset, CPU bắt đầu làm việc tại địa chỉ 0000h, là địa chỉ đầu được ghi trong thanh ghi chứa chương trình (PC) và sau đó, thanh ghi này sẽ tăng lên 1 đơn vị và chỉ đến các lệnh tiếp theo của chương trình. *Bộ tạo dao động: Khối xử lý trung tâm nhận trực tiếp xung nhịp từ bộ tạo dao động được lắp thêm vào, linh kiện phụ trợ có thể là một khung dao động làm bằng tụ gốm hoặc thạch anh. Ngoài ra, còn có thể đưa một tín hiệu giữ nhịp từ bên ngoài vào. *Khối điều khiển ngắt: Chương trình đang chạy có thể cho dừng lại nhờ một khối logic ngắt ở bên trong. Các nguồn ngắt có thể là: các biến cố ở bên ngoài, sự tràn bộ đếm/bộ định thời hay có thể là giao diện nối tiếp. Tất cả các ngắt đều có thể được thiết lập chế độ làm việc thông qua hai thanh ghi IE (Interrupt Enable) và IP (Interrupt Priority). *Khối điều khiển và quản lý Bus : Các khối trong vi điều khiển liên lạc với nhau thông qua hệ thống Bus nội bộ được điều khiển bởi khối điều khiển quản lý Bus. *Các bộ đếm/định thời: Vi điều khiển 8051 có chứa hai bộ đếm tiến 16 bit có thể hoạt động như là bộ định thời hay bộ đếm sự kiện bên ngoài hoặc như bộ phát tốc độ Baud dùng cho giao diện nối tiếp. Trạng thái tràn bộ đếm có thể được kiểm tra trực tiếp hoặc được xoá đi bằng một ngắt. *Các cổng vào/ra: Vi điều khiển 8051 có bốn cổng vào/ra (P0 .. P3), mỗi cổng chứa 8 bit, độc lập với nhau. Các cổng này có thể được sử dụng cho những mục đích điều khiển rất đa dạng. Ngoài chức năng chung, một số cổng còn đảm nhận thêm một số chức năng đặc biệt khác. *Giao diện nối tiếp: Giao diện nối tiếp có chứa một bộ truyền và một bộ nhận không đồng bộ làm việc độc lập với nhau. Bằng cách đấu nối các bộ đệm thích hợp, ta có thể hình thành một cổng nối tiếp RS-232 đơn giản. Tốc độ truyền qua cổng nối tiếp có thể đặt được trong một vùng rộng phụ thuộc vào một bộ định thời và tần số dao động riêng của thạch anh. *Bộ nhớ chương trình: Bộ nhớ chương trình thường là bộ nhớ ROM (Read Only Memory), bộ nhớ chương trình được sử dụng để cất giữ chương trình điều khiển hoạt động của vi điều khiển. *Bộ nhớ số liệu: Bộ nhớ số liệu thường là bộ nhớ RAM (Ramdom Acces Memory), bộ nhớ số liệu dùng để cất giữ các thông tin tạm thời trong quá trình vi điều khiển làm việc. 2.1.2. Sự sắp xếp chân ra của vi điều khiển 8051: Phần lớn các bộ vi điều khiển 8051 được đóng vào vỏ theo kiểu hai hàng DIL(Dual In Line) với tổng số là 40 chân ra, một số ít còn lại được đóng vỏ theo kiểu hình vuông PLCC (Plastic Leaded Chip Carrier) với 44 chân và loại này thường được dùng cho những hệ thống cần thiết phải tiết kiệm diện tích. 8051 P1.0 P1.1 P1.2 P1.4 P1.5 P1.3 P1.6 P1.7 RST (TxD) P3.1 ( |INT0) P3.2 (RxD) P3.0 ( |INT1) P3.3 (T0) P3.4 (T1) P3.5 ( |RD) P3.7 XTAL2 ( |WR) P3.6 XTAL2 GND VCC + 5V P0.0 (A/D 0) P0.1 (A/D 1) P0.3 (A/D 3) P0.4 (/D 4) P0.2 (A/D 2) P0.5 (A/D 5) P0.6 (A/D 6) P0.7 (A/D 7) ALE |PSEN |EA P2.7 (A15) P2.6 (A14) P2.5 (A13) P2.3 (A11) P2.2 (A10) P2.4 (A12) P2.1 (A9) P2.0 (A8) Hình 2.2: Sơ đồ chân của vi mạch 8051 DIL. Bảng 2.1: Chức năng các chân của vi điều khiển 8051. Chân Ký hiệu Chức năng 1-->8 P1.0-->P1.7 Cổng giả hai hướng P1, có thể tự do sử dụng 9 Reset Lối vào Reset, khi hoạt động ở mức High(1) 10-->17 P3.0-->P3.7 Cổng giả hai hướng P3, sắp xếp tất cả các đường dẫn với chức năng đặc biệt 18 XTAL2 Lối ra của bộ dao động thạch anh bên trong 19 XTAL1 Lối vào của bộ dao động thạch anh bên trong 20 Vss Nối mát ( 0V ) 21-->28 P2.0-->P2.7 Cổng giả hai hướng P2, chức năng đặc biệt là các đường dẫn địa chỉ A8..A15 29 |PSEN Progam Strobe Enable, xuất ra các xung đọc dùng cho bộ nhớ chương trình bên ngoài 30 ALE Address Latch Enable, xuất ra các xung điều khiển để lưu trữ trung gian các địa chỉ 31 |EA External Access, khi được nối với mát là để làm việc với ROM ngoại vi 32-->39 P1.0-->P1.7 Cổng hai hướng cực máng hở P0 hay Bus dữ liệu hai hướng dùng cho ROM, RAM và thiết bị ngoại vi đồng thời cũng chuyển giao 8 bit địa chỉ thấp 40 Vdd Nguồn nuôi dương ( +5V ) Các chân ra của bộ vi điều khiển 8051 gồm có: *EA: Đóng vai trò quyết định xem vi điều khiển làm việc với chương trình bên trong hay bên ngoài. Với loại 8051 không có ROM trong thì chân này phải được nối với mát. Loại thông thường có thể làm việc tuỳ theo cách lựa chọn giữa ROM trong hay ROM ngoài, khi đang ở chế độ làm việc với bộ nhớ ROM trong, loại có chứa bộ nhớ ROM có thể truy nhập tự động lên bộ nhớ chương trình bên ngoài. *Reset: Trạng thái Reset được thiết lập bằng cách giữ tín hiệu Reset ở mức cao trong thời gian ít nhất là 2 chu kỳ máy. *ALE: Tín hiệu chốt 8 bit địa chỉ thấp trong suốt quá trìng truy nhập bộ nhớ mở rộng. Thông thường tín hiệu ALE được phát ra với tần số bằng 1/6 tần số dao động thạch anh và có thể sử dụng với mục đích định thời gian hoặc xung nhịp đồng hồ ngoài. Tuy nhiên, tín hiệu ALE sẽ bị bỏ qua trong mỗi quá trình truy nhập bộ nhớ dữ liệu ngoài. *PSEN: Tín hiệu đọc bộ nhớ chương trình ngoài, khi vi điều khiển truy nhập bộ nhớ chương trình nội thì PSEN được đặt ở mức cao. *XTAL1, XTAL2: Một bộ tạo tín hiệu giữ nhịp với tần số được xác định bởi bộ cộng hưởng thạch anh được lắp thêm vào, tần số này xác định tốc độ làm của bộ vi điều khiển. Thông thường các lệnh được thực hiện bằng 1/12 tần số dao động của thạch anh. Các bộ đếm cố thể làm việc trong nhiều chế độ khác nhau. Khi hoạt động như là bộ định thời, các bộ đếm nhận được các xung từ một bộ chia trước ở bên trong, bộ này chia tần số riêng của bộ cộng hưởng thạch anh cho 12 . Thay cho một bộ định thời 16 bit, một bộ đinh thời 8 bit có thể được tạo ra bằng việc nạp tự động sau khi cấp nguồn, các xung dẫn từ bên ngoài vào qua T0 và T1 cũng có thể được đếm, các xung này có tần số cực đại bằng 1/24 giá trị tần số của bộ cộng hưởng thạch anh. *P0..P3: Các công vào/ra. Cổng P3 cũng đảm nhận một số chức năng đặc biệt của bộ vi điều khiển : Chân Ký hiệu Chức năng P3.0 RxD Nhận dữ liệu vào bộ nhớ qua cổng nối tiếp P3.1 TxD Truyền dữ liệu vào bộ nhớ qua cổng nối tiếp P3.2 /INT0 Ngắt ngoài 0 P3.3 /INT1 Ngắt ngoài 1 P3.4 T0 Lối vào của Timer 0 P3.5 T1 Lối vào của Timer 1 P3.6 /WR Viết vào bộ nhớ P3.7 /RD Đọc bộ nhớ 2.2 Tổ chức bộ nhớ: Cấu trúc chung của bộ nhớ: Tất cả các vi điều khiển thuộc họ MCS-51 đều phân chia bộ nhớ thành hai vùng địa chỉ cho bộ nhớ dữ liệu và bộ nhớ chương trình. Sự phân chia logic giữa bộ nhớ dữ liệu và bộ nhớ chương trình cho phép truy nhập bộ nhớ dữ liệu bằng 8 bit địa chỉ giúp cho việc lưu trữ và thao tác dữ liệu nhanh hơn.Tuy nhiên, chúng ta có thể sử dụng địa chỉ bộ nhớ dữ liệu 16 bit thông qua thanh ghi DPTR. Bộ nhớ chương trình là loại bộ nhớ chỉ cho phép đọc, không cho phép ghi. Một số vi điều khiển được tích hợp sẵn bộ nhớ chương trình bên trong với dung lượng khoảng 4kbyte hay 8 kbyte, số còn lại phải sử dụng bộ chương trình mở rộng mà quá trình truy nhập được thực hiện thông qua sự điều khiển bằng tín hiệu PSEN (Progam Strobe Enable). Tuy nhiên, vi điều khiển 8051 cho phép ta sử dụng đến 64kbyte bộ nhớ chương trình bằng cách sử dụng cả bộ nhớ chương trình bên trong và bên ngoài. Bộ nhớ số liệu chiếm giữ vùng địa chỉ phân chia của bộ nhớ chương trình. Dung lượng của bộ nhớ dữ liệu có thể mở rộng lên tới 64 kbyte. Trong quá trình truy nhập bộ nhớ số liệu, CPU phát ra các tín hiệu đọc và tín hiệu viết số liệu thông qua các chân RD và WR. 00H 0000H Bộ nhớ Chương trình Bộ nhớ Số liệu Bộ nhớ mở rộng Bộ nhớ mở rộng |PSEN |WR |RD FFH |EA=1 Bộ nhớ trong |EA=0 Bộ nhớ ngoài FFFFH Hình 2.3: Cấu trúc bộ nhớ của họ MCS-51. Chúng ta có thể kết hợp bộ nhớ chương trình mở rộng với bộ nhớ số liệu mở rộng bằng cách cho hai tín hiệu RD và PSEN qua một cổng logic AND, lối ra của cổng AND này sẽ tạo tín hiệu đọc cho bộ nhớ mở rộng. Bộ nhớ chương trình: Sau khi Reset, CPU bắt đầu thực hiện chương trình từ địa chỉ 0000H. Vùng đầu của bộ nhớ chương trình là vùng chứa các vector ngắt, mỗi ngắt được phân chia một vùng địa chỉ cố định trong trong bộ nhớ chương trình. Khi xuất hiện ngắt, CPU sẽ nhảy tới địa chỉ này, đây cũng là địa chỉ đầu của chương trình con phục vụ ngắt. Các vector ngắt cách nhau 8 byte, vì vậy nếu chương trình con phục vụ ngắt quá dài (>8 byte) thì tại vector ngắt ta phải đặt một lệnh nhảy không điều kiện tới vùng địa chỉ khác chứa chương trình con phục vụ ngắt. Bộ nhớ số liệu: Phía bên phải của Hình 2.3 biểu diễn không gian bộ nhớ dữ liệu của MCS-51. Chúng ta có thể sử dụng tới 64 Kbyte bộ nhớ số liệu ngoại vi. Độ rộng bus địa chỉ của bộ nhớ số liệu ngoài có thể là 8 bit hoặc 16 bit. Bus địa chỉ rộng 8 bit thường được sử dụng để liên kết với một hoặc nhiều đường vào ra khác để định địa chỉ cho RAM theo trang. Trong trường hợp bus địa chỉ rộng 16 bit, cổng P2 sẽ phát ra 8 bit địa chỉ cao còn cổng P1 sẽ phát ra 8 bit địa chỉ thấp. Bằng cách này, ta có thể truy nhập trực tiếp lên bộ nhớ dữ liệu ngoài với độ lớn tối đa là 64 Kbyte. Bộ nhớ số liệu trong được chia ra làm 3 vùng: +128 byte cao. +128 byte thấp. +Vùng dành cho các thanh ghi chức năng đặc biệt (SFR). Địa chỉ của bộ nhớ số liệu trong luôn là 8 bit, và có thể quản lý được 256 byte bộ nhớ. Tuy nhiên, trên thực tế cách định địa chỉ của bộ nhớ RAM trong có thể quản lý tới 384 byte. Bản đồ bộ nhớ trên chíp: 7F FF F0 F7 F6 F5 F4 F3 F2 F1 F0 B RAM đa dụng E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW 30 B8 - - - BC BB BA B9 B8 IP 2F 7F 7E 7D 7C 7B 7A 79 78 2E 77 76 75 74 73 72 71 70 B0 B7 B6 B5 B4 B3 B2 B1 B0 P.3 2D 6F 6E 6D 6C 6B 6A 69 68 2C 67 66 65 64 63 62 61 60 A8 AF AC AB AA A9 A8 IE 2B 5F 5E 5D 5C 5B 5A 59 58 2A 57 56 55 54 53 52 51 50 A0 A7 A6 A5 A4 A3 A2 A1 A0 P2 29 4F 4E 4D 4C 4B 4A 49 48 28 47 46 45 44 43 42 41 40 99 Không được địa chỉ hoá bit SBUF 27 3F 3E 3D 3C 3B 3A 39 38 98 9F 9E 9D 9C 9B 9A 99 98 SCON 26 37 36 35 34 33 32 31 30 25 2F 2E 2D 2C 2B 2A 29 28 90 97 96 95 94 93 92 91 90 P1 24 27 26 25 24 23 22 21 20 23 1F 1E 1D 1C 1B 1A 19 18 8D Không được địa chỉ hoá bit TH1 22 17 16 15 14 13 12 11 10 8C Không được địa chỉ hoá bit TH0 21 0F 0E 0D 0C 0B 0A 09 08 8B Không được địa chỉ hoá bit TL1 20 07 06 05 04 03 02 01 00 8A Không được địa chỉ hoá bit TL0 1F Bank 3 89 Không được địa chỉ hoá bit TMOD 18 88 8F 8E 8D 8C 8B 8A 89 88 TCON 17 Bank 2 87 Không được địa chỉ hoá bit PCON 10 0F Bank 1 83 Không được địa chỉ hoá bit DPH 08 82 Không được địa chỉ hoá bit DPL 07 Bank thanh ghi 0 81 Không được địa chỉ hoá bit SP 00 (Mặc định cho R0 -R7) 88 87 86 85 84 83 82 81 80 P0 Thanh ghi ghi chức năng đặc biệt (SFR= Special Function Registers): Vi điều khiển 8051 là một bộ vi điều khiển đa năng với nhiều chế độ hoạt động khác nhau được thiết lập thông qua các thanh ghi chức năng đặc biệt SFRs. Các thanh ghi chức năng đặc biệt của vi điều khiển 8051 gồm có: +P0, P1, P2, P3: Các cổng vào ra, mỗi bít ứng với 1 chân của vi điều khiển. Các chân này hoạt động ở mức logic âm. +SP (Stack Pointer): Đây là con trỏ ngăn xếp của vi điều khiển. Thanh ghi này cho biết địa chỉ truy nhập tiếp theo trong bộ nhớ RAM. +DPH, DPL (Data Pointer High, Data Pointer Low): Tạo thành 1 cặp thanh ghi con trỏ dữ liệu DPTR 16 bit. +PCON (Power Control): Thanh ghi này được sử dụng để điều khiển công suất của vi điều khiển. Ngoài ra bit PCON.7 con cho phép sủ dụng để tăng gấp đôi tốc độ baud khi truyền qua cổng nối tiếp. +TCON (Timer Control): Thiết lập cấu hình làm việc cho bộ Timer/Counter. +TMOD (Timer Mode): Xác định chế độ làm việc cho từng bộ Timer/Counter. +TL0/TH0 (Timer 0 Low/High): Cặp thanh ghi tương ứng với Timer0. +TL1/TH1 (Timer 1 Low/High): Cặp thanh ghi tương ứng với Timer1. +SCON (Serial Control): Thiết lập cấu hình cho cổng nối tiếp. +SBUF (Serial Buffer): Bộ đệm khi truyền hoặc nhận dữ liệu qua cổng nối tiếp. +IE (Interrupt Enable): Cho phép ngắt hoặc cấm ngắt. +IP (Interrupt Priority): Thiết lập mức ưu tiên cho các ngắt. +PSW (Program Status Word ): Thanh ghi từ trạng thái chương trình lưu trữ một số bit quan trọng được đặt hoặc xoá bởi các lệnh của 8051: cờ nhớ, cờ nhớ phụ, cờ tràn và cờ chẵn lẻ. Ngoài ra, 2 bit RS0 và RS1 trong PSW còn cho phép chọn băng thanh ghi để làm việc trong bộ nhớ RAM trong. +ACC (Accumulator): Thanh ghi tích luỹ, đây là một trong những thanh ghi được sử dụng nhiều nhất trong vi điều khiển 8051. Thanh ghi này có ký hiệu là A. +B (B Register): Thanh ghi B được sử dụng khi thực hiện các phép toán nhân, chia và cũng có thể được dùng như thanh ghi phụ hay thanh ghi lưu trữ số liệu tạm thời. Các thanh ghi chức năng đặc biệt sẽ có thể được nhận một trạng thái nào đó cố định mỗi khi vi điều khiển Reset (tuỳ thuộc vào mỗi thanh ghi). Sau đây là bảng trạng thái của các thanh ghi ngay sau khi Reset: Bảng 2.2: Trạng thái khi reset của các thanh ghi. Register Reset to Register Reset to Register Reset to A 00H P2 FFH SCON 00H B 00H P3 FFH TCON 00H DPTR 00H PCON 0.......B TMOD 00H IE 0..00000B 0...0000B TH0 00H IP ...00000B PSW 00H TH1 00H P0 FFH SP 07H TL0 00H P1 FFH SBUF ..H TH1 00H Chương iii : Nội dung thiết kế I.Sơ đồ khối và nguyên tắc hoạt động : 1.Sơ đồ khối : Mạch tạo dao động sử dụng 89c51 có sơ đồ khối như hình vẽ : 1.Khối nguồn : Khối nguồn gồm có một IC 7805 , một tụ C1 = 3,3 F mắc ở ngõ vào và một tụ C2 = 1 F mắc ở ngõ ra nhằm mục đích ổn định , chuyển nguồn 7,5 V chưa phẳng ở ngõ vào thành nguồn 5V ổn định , bằng phẳng ( loại bỏ hết các đột biến dương ) ở ngõ ra để cung cấp cho mạch . 2.Bàn phím : Bàn phím gồm có một phím số từ 0 -> 9 và hai phím chức năng Clear và Start làm nhiệm vụ nhận dữ liệu nhập vào từ bàn phím hoặc nhận chỉ thị xử lý từ bàn phím ( khi ấn phím chức năng ) 3. Khối xử lý ngắt : Khối xử lý ngắt nhằm mục đích phát hiện trên bàn phím có phím số được ấn , từ đó đưa ra một yêu cầu ngắt đối với 89c51 . Nếu yêu cầu ngắt này được 89c51 chấp nhận nó sẽ gọi một chương trình phục vụ ngắt thực hiện việc kiểm tra tính đúng dắn của việc ấn số và nhập dữ liệu vào . 4. Khối hiển thị : Khối hiển thị gồm 4 LED 7 đoạn được tổ chức theo kiểu sáng luân phiên 2.5 ms một lần . LED sáng được chọn bởi 89c51 qua đường điều khiển từ cổng P0.0 -> P0.3 . Dữ liệu được hiển thị dưới dạng mã 7 thanh cũng dược 89c51v gửi tới LED qua đường data . 5.Khối vi điều khiển 89c51 : 89c51 đóng vai trò trung tâm trong hệ thống . Nó có nhiệm vụ tương tác với các khối , nhận , xử lý và chuyển dữ liệu tới các khối . 89c51 đảm nhận tất cả các nhiệm vụ từ việc nhận dữ liệu vào dưới dạng tín hiệu nhị phân ở 10 cổng vào ,xử lý dữ liêụ , chuyển dữ liệu thành mã Hexa và mã 7 đoạn , lưu giữ dữ liệu và điều khiển hoạt động của khối hiển thị và tạo một dãy xung vuông ở đầu ra khi có lệnh tạo xung . 2. Nguyên tắc hoạt động : Mạch tạo xung sử dụng 89C51 có đặc điểm : nó sử dụng một chương trình phần mềm để thực hiện tất cả mọi tác vụ của mạch từ việc tính toán số liệu tới việc giao tiếp với phần cứng. Do đó, khi xem xét hoạt động luôn phải xem xét sự tác động qua lại giữa các khối thông qua sự điều khiển của một chương trình phần mềm. Trạng thái chờ dữ liệu: Ban đầu, khi mới bật nguồn và Reset hệ thống bộ đếm chương trình sẽ trỏ vào địa chỉ 0000h. lệnh đầu tiên mà chương trình thực hiện sẽ là lệnh nhảy tới chương trình chính LJMP MAIN. Lúc này các đầu ra của hệ thống đều không có dữ liệu, khối hiển thị không hiển thị, đầu ra không có xung ra , trên RAM của 89C51 không chứa dữ liệu. Khi đó chương trình sẽ thực hiện việc thiết lập trạng thái của các cổng, xoá vùng RAM dữ liệu cần dùng. Sau đó, nó thiết lập bộ định thời 0 phục vụ việc hiển thị cho phép ngắt ngoài 0 và 1 phục vụ cho việc nhập số liệu và tạo xung. Sau khi thiết lập trạng thái chờ cho hệ thống 89C51 đi vào một vòng lặp chờ SJMP$. Lúc này, 89C51 ở trạng thái chờ ngắt. Khi có ngắt của bộ định thời 0 thì 89C51 nhảy đến chương trình phục vụ hiển thị DISPLAY. O đây, nó thực hiện tác vụ điều khiển sự hiển thị số liệu đã nhập trên bộ LED. Chương trình ngắt DISPLAY sẽ làm nhiệm vụ hiện thị lần lượt từng LED một trong bộ 4 LED ở một khoảng thời gian ngắn nào đó. Quá trình đó diễn ra rất nhanh để cho mắt thường không thể phân biệt được. Việc hiện thị được thực hiện như sau: + Hiển thị một trong 4 LED. + Trỏ điều khiển tới LED kế cho lần hiển thị tiếp theo. + Phục hồi bộ đếm và trở về MAIN. Khoảng thời gian hiển thị từng LED được tạo ra bởi bộ định thời 0. Khi có ngắt ngoài 0 (ngắt nhập). Ngắt ngoài 0 được tạo ra khi có một trong các nút bấm từ 0 đến 9 được ấn 89C51 sẽ gọi đến chương trình phục vụ nhập dữ liệu Input. Chương trình Input sẽ thực hiện việc kiểm tra tính xác thực của ngắt. Nó xác nhận chắc chắn rằng vừa có một ngắt số liệu được ấn hay không bằng cách kiểm tra lặp đi lặp lại chân P3.2 50 lần. Input: JB P3.2,EXIT DJNZ R0,INPUT ;Ro=50 Sau khi xác nhận chắc chắn có dữ liệu được nhập,nó xác định số vừa được bấm từ đó nó chuyển đổi dữ liệu vào sang dạng mã hex và mã 7 đoạn để lưu trữ.Dữ liệu dưới dạng mã 7 đoạn được sử dụng để lưu trữ. Dữ liệu dưới dạng mã 7 đoạn được sử dụng để hiển thị trên LED còn dữ liệu dạng Hex được lưu trữ để phục vụ quá trình kế tiếp. Kết thúc chương trình phục vụ nhập 89C51 lại trở về trạng thái chờ. Ngắt ngoài 1: ngắt yêu cầu bắt đầu tạo xung. Cũng như ngắt nhập dữ liệu chương trình phục vụ ngắt yêu cầu tạo xung cũng đòi hỏi kiểm tra tính xác thực của ngắt. Sau khi xác nhận chắc chắn rằng vừa có yêu cầu tạo xung chương trình sẽ thực hiện việc tính toán để chuyển dữ liệu lưu trữ dạng BCD sang dạng dữ liệu Hex 16 bit. Dữ liệu Hex 16 bit được lưu trữ ở 2 vị trí 29h và 2Ah trong Ram nội để phục vụ việc tạo xung. Lúc này chương trình chuẩn bị tạo xung bằng việc cho phép ngắt định thời 1 nạp các số liệu vào byte TH1 và TL 2 của bộ định thời 1. Đồng thời chương trình cũng cấm các ngắt ngoài 1 và 0 để tránh ảnh hưởng đến việc tạo xung. Cho phép bộ định thời 1 hoạt động và chương trình bước vào trạng thái chờ ngắt hiển thị và ngắt tạo xung. Trạng thái tạo xung ra: Lúc này 89C51 lại tiếp tục thực hiện vòng lặp chờ vô hạn SJMP$ trong chương trình chính MAIN. Tuy nhiên trong trạng thái tạo xung ra thì chỉ có ngắt do bộ định thời 0 và 1 hoạt động. Ngắt định thời 0: Khi có ngắt định thời 0 thì 89C51 lại nhảy đến chương trình hiển thị DISPLAY như trên, nó vẫn thực hiện tác vụ hiển thị các LED. Ngắt định thời 1: Khi có ngắt do tràn bộ định thời 1 thì chương trình sẽ nhảy đến trình phục vụ việc tạo xung PULSE. ở đây chương trình thực hiện việc giảm R2. Ban đầu R2 được gán bằng 50. Mỗi lần gọi đến chương trình phục vụ PULSE thì R2 được giảm một lần. PULSE sẽ kiểm tra R2: nếu R2 =0 thì nó nó sẽ có nhiệm vụ đảm bảo ở chân ra bộ tạo xung : từ 1 xuống 0 hoặc ngược lại , đồng thời nó phục hồi R2 và khôi phục lại trạng thái hoạt động của bộ định thời . Nếu R2 khác không thì PULSE sẽ bỏ qua việc tạo xung và phục hồi R2 . Nó chỉ thực hiện việc khôi phục lại trạng thái của bộ định thời . Tiếp đó PULSE lại trả điều khiển về chương trình chính MAIN Quá trình chỉ kết thúc khi ta RESET lại hệ thống . Từ đó ta có thể mô tả quá trình hoạt động của chương trình điều khiển bằng lưu đồ thuật toán sau: II.Sơ đồ nguyên lý mạch tạo xung : III.Giới thiệu linh kiện : 3.1 mạch NOT-IC7400 + sơ đồ chân IC 7400: Hình 1 Sơ đồ IC-7400 + IC-7400 bao gồm 14 chân,trong đó: .chân 14 (vcc) là chân nối với nguồn cung cấp một chiều với giá trị điện áp: 5(v). . chân 7 (GND) là chân nối đất : 0(v) . còn lại 12 chân tổ hợp thành 3 mạch NAND 2 đầu vào trong đó đầu vào là A,B ; đầu ra là: Y +Sơ đồ mạch NAND 2 đầu vào: +Hàm logíc: Y=A.B dghfdfdhhfdfhdfh + Bảng sự thật của NAND 2 đầu vào: A B Y 0 0 1 0 1 1 1 0 1 1 1 0 + Hàm logíc NOT : Y = X Vậy để thu được mạch NOT thì nối hai đầu vào của mạch Do đó để thu dược các mạch NOT thì trong sơ đồ IC-7400 Người ta nối các đầu A ,B lại với nhau .Kết quả trong IC-7400 thu được ba mạch NOT: +Mạch 1: đầu vào 1A,1B ; đầu ra 1Y + mạch 2: đầu vào 2A ,2 ; đầu ra 2Y +mạch 3: đầu vào 3A,3 ; đầu ra 3Y Trong đó các đầu vào A, được nối với nhau: Mạch AND 4 đầu vào IC-74LS21 + Sơ đồ chân IC: Hình 2 +Cấu trúc chân IC: IC-74LS21 gồm 14 chân ,trong đó: chân VCC : chân nối nguồn 5(v) chân GND : nối đất o(v) Các chân 1A,1B,1C,1D là các chân đầu vào của mạch AND thứ nhất Các chân 2A,2B,2C,2D là các chân đầu vào của mạch AND thứ hai Chân 1Y là đầu ra của mạch AND thứ 1 Chân 2Y là đầu ra của mạch AND thứ 2 +Hàm logic 4 đầu vào: Y=A.B.C.D +Sơ đồ: +Bảng sự thật: A B C D Y 1 1 1 1 1 0 x x X 0 X 0 x X 0 X x 0 X 0 X x x 0 0 +Bảng sự thật cho thấy giá trị của hàm chỉ bàng không khi tất cả các đầu vào đều bằng 1 và ngược lại bằng 0 khi một trong 4 giá trị đầu vào bằng không +trong sơ đồ IC-74LS21 trong hình 2 có 2 hai hàm AND 4 đầu vào có thể viết hàm logíc như sau: 1Y=1A.1B.1C.1D và 2Y=2A.2B.2C.2D Trong sơ đồ nguyên lý của để thực hiện việc nhân 10 đầu vào đã dùng 2 con IC-74LS21 ( xem sơ đồ mạch) 3.3 Chíp Vi điều khiển 89C51 Về linh kiện vi đIũu khiển 89C51 Xem phần Giới thiệu chung về 89C51 đã nói ở trên. 3.4 Đèn LED 7 thanh +Sơ đồ đèn LED 7 thanh : +Trong đó: .chân vcc nối với nguồn 5(v) .chân GND nối với đát 0(v) .các chân a,b,c,d,e,f,g ,o nhận các tín hiệu ĐK để đk các đèn LED tương ứng + cấu trúc bên trong của đèn LED 7 thanh bao gồm 7 diode phát quang và dược bố trí như sau: (hình vẽ 3 trang bên) + mỗi một thanh a,b ..,f,g tương ứng với một diode phát quang ví dụ như diode ứng với thanh a dược vẽ như hình 4 Hình 3 Hình 4 +Diode fát quang: Đây là linh kiện được chế tạo bằng vật liệu bán dẫn thường dùng là As.Ga. Để phát ra được những màu khác nhau thì người ta phải pha thêm một số chất phụ gia như p,pGa.do đó mà diode có thể có các màu hồng hoặc màu đỏ.. Đặc điểm của loại vật liệu này là:khi có một dòng điện chạy qua diode thì các điên tích sẽ táI hợp tại mặt ghép khi đó chúng sẽ phát ra năng lượng dưới dạng ánh sáng. +Với cấu trúc các thanh LED như hình 3 thì ta có bảng logic sau: A b c d e f g Số hiển thị 1 1 1 1 1 1 0 0 0 1 1 0 0 0 0 1 1 1 0 1 1 0 1 2 1 1 1 1 0 0 1 3 0 1 1 0 0 1 1 4 1 0 1 1 0 1 1 5 1 0 1 1 1 1 1 6 1 1 1 0 0 0 0 7 1 1 1 1 1 1 1 8 1 1 1 1 0 1 1 9 IV.Linh kiện sử dụng trong khối nguồn : Khối nguồn gồm có một IC 7805 , một tụ C1 = 3,3 F mắc ở ngõ vào và một tụ C2 = 1 F mắc ở ngõ ra nhằm mục đích ổn định , chuyển nguồn 7,5 V chưa phẳng ở ngõ vào thành nguồn 5V ổn định , bằng phẳng ( loại bỏ hết các đột biến dương ) ở ngõ ra để cung cấp cho mạch . V.Chương trình nguồn : ORG 0000H LJMP MAIN ORG 0003H LJMP INPUT ORG 000BH LJMP DISPLAY ORG 0013H LJMP START ORG 001BH LJMP PULSE ORG 0030H MAIN: ANL P0,#0E0H ;Xoá các port nhập ANL P1,#0H MOV 2BH,#88H ;thứ tự hiển thị từng LED MOV 20H,#0H ;Xoá bộ nhớ dữ liệu RAM MOV 21H,#0H MOV 22H,#0H MOV 23H,#0H MOV 24H,#0H MOV 25H,#1H MOV 26H,#0H MOV 27H,#0H MOV 28H,#0H MOV 29H,#0H MOV 2AH,#0H MOV TMOD, #00010001B ;Thiết lập chế độ hoạt động của bộ định ; thời 0 và 1 ở chế độ 2 (đếm 16 bít ). MOV R0, #50 MOV R2, #50 SETB IT1 ;Tác động cạnh âm ngắt ngoài 1 SETB IT0 ;Tác động cạnh âm ngắt ngoài 0 SETB TR0 ;Cho phép bộ định thời 0 hoạt động SETB TF0 ;Buộc ngắt do định thời 0 MOV IE, #10000111B ;Cho phép ngắt ngắt ngoài 0,1 và ngắt do ;bộ định thời 0 JUMP: SJMP JUMP ;Không làm gì DISPLAY: ;Trình phục vụ hiển thị LED CLR TR0 ;Dừng bộ định thời 0 MOV R5,23H ; có số nhập vào địa chỉ 23H hay không CJNE R5, #0H, DIS ;Nếu 23H khác 0 thì nhảy đến nhãn DIS MOV 28H,#0FFH ;nếu bằng 0 thì không hiển thị MOV R5,22H ; có số nhập vàođịa chỉ 22H hay không CJNE R5, #0H, DIS ;Nếu 22H khác 0 thì nhảy đến nhãn DIS MOV 27H,#0FFH ;nếu bằng 0 thì không hiển thị MOV R5,21H ;có số nhập vàođịa chỉ 21H hay không CJNE R5H, #0H, DIS ;Nếu 21H khác 0 thì nhảy đến nhãn DIS DIS: ;kiểm tra thực hiện hiển thị từng LED một MOV 26H,#0FFH ;nếu bằng 0 thì không hiển thị JB 5BH, NUM1 ;nếu hiển thị LED1 nhẩy đến NUM1 JB 5AH, NUM2 ;nếu hiển thị LED2 nhẩy đến NUM2 JB 59H, NUM3 ;nếu hiển thị LED3 nhẩy đến NUM3 JB 58H, NUM4 ;nếu hiển thị LED4 nhẩy đến NUM4 NUM1: CLR P0.0 ;dừng hiển thị LED4 SETB P0.3 ;bắt đầu hiển thị LED1 MOV P1, 28H ;đưa mã 7 đoạn của số hàng nghìn ra LED1 SJMP END NUM2: CLR P0.3 ;dừng hiển thị LED1 SETB P0.2 ;bắt đầu hiển thị LED2 MOV P1, 27H ;đưa mã 7 đoạn của số hàng trăm ra LED2 SJMP END NUM3: CLR P0.2 ;dừng hiển thị LED2 SETB P0.1 ;bắt đầu hiển thị LED3 MOV P1, 26H ;đưa mã 7 đoạn của số hàng chục ra LED3 SJMP END NUM4: CLR P0.1 ;dừng hiển thị LED3 SETB P0.0 ;bắt đầu hiển thị LED4 MOV P1, 25H ;đưa mã 7 đoạn của số hàng đơn vị ra LED4 END: MOV A,2BH ;hiển thị từng LED một RR A MOV 02BH,A MOV TH0, #0EBH ;thời gian hiển thị mức cao từng LED MOV TL0, #0H ;thời gian hiểh thị mức thấp từng LED SETB TR0 ;bộ định thời 0 hoạt động RETI INPUT: ;nhập 1 số JB P3.2,ERROR ;kiểm tra nút được bấm DJNZ R0, INPUT ;có,lặp lại 50 lần SJMP OVER ERROR: LJMP THOAT ;không,kết thúc OVER: ;lưu mã BCD và mã 7 đoạn của các ;số đã nhập vào MOV 23H, 22H ;số hàng nghìn lưu ở dịa chỉ 23H MOV 22H, 21H ;số hàng trăm lưu ở dịa chỉ 22H MOV 21H, 20H ;số hàng chục lưu ở dịa chỉ 21H MOV 28H, 27H ;mã 7 đoạn của số hàng nghìn lưu ở địa chỉ 28H MOV 27H, 26H ;mã 7 đoạn của số hàng trăm lưu ở địa chỉ 27H MOV 26H, 25H ;mã 7 đoạn của số hàng chục lưu ở địa chỉ 26H MOV C,P2.0 ;có ấn số 0 không JC EQU1 ;không,nhẩy đến EQU1 MOV 25H, #7EH ;có,đưa mã 7 đoạn của số 0 vào địa chỉ 25H MOV 20H, #0H ;đưa mã BCD vào địa chỉ 20H SJMP THOAT EQU1: MOV C,P2.1 ;có ấn số 1 không JC EQU2 ;không,nhẩy đến EQU2 MOV 25H, #30H ;có,đưa mã 7 đoạn của số 1 vào địa chỉ 25H MOV 20H, #1H ;đưa mã BCD vào địa chỉ 20H SJMP THOAT EQU2: MOV C,P2.2 ;có ấn số 2 không JC EQU3 ;không,nhẩy đến EQU3 MOV 25H, #6DH ;có,đưa mã 7 đoạn của số 2 vào địa chỉ 25H MOV 20H, #2H ;đưa mã BCD vào địa chỉ 20H SJMP THOAT EQU3: MOV C,P2.3 ;có ấn số 3 không JC EQU4 ;không,nhẩy đến EQU4 MOV 25H, #79H ;có,đưa mã 7 đoạn của số 3 vào địa chỉ 25H MOV 20H, #3H ;đưa mã BCD vào địa chỉ 20H SJMP THOAT EQU4: MOV C,P2.4 ;có ấn số 4 không JC EQU5 ;không,nhẩy đến EQU5 MOV 25H, #33H ;có,đưa mã 7 đoạn của số 4 vào địa chỉ 25H MOV 20H, #4H ;đưa mã BCD vào địa chỉ 20H SJMP THOAT EQU5: MOV C,P2.5 ;có ấn số 5 không JC EQU6 ;không,nhẩy đến EQU6 MOV 25H, #5BH ;có,đưa mã 7 đoạn của số 5 vào địa chỉ 25H MOV 20H, #5H ;đưa mã BCD vào địa chỉ 20H SJMP THOAT EQU6: MOV C,P2.6 ;có ấn số 6 không JC EQU7 ;không,nhẩy đến EQU7 MOV 25H, #5FH ;có,đưa mã 7 đoạn của số 6 vào địa chỉ 25H MOV 20H, #6H ;đưa mã BCD vào địa chỉ 20H SJMP THOAT EQU7: MOV C,P2.7 ;có ấn số 7 không JC EQU8 ;không,nhẩy đến EQU8 MOV 25H, #70H ;có,đưa mã 7 đoạn của số 7 vào địa chỉ 25H MOV 20H, #7H ;đưa mã BCD vào địa chỉ 20H SJMP THOAT EQU8: MOV C,P0.5 ;có ấn số 8 không JC EQU9 ;không,nhẩy đến EQU9 MOV 25H, #7FH ;có,đưa mã 7 đoạn của số 8 vào địa chỉ 25H MOV 20H, #8H ;đưa mã BCD vào địa chỉ 20H SJMP THOAT EQU9: MOV C,P0.6 ;có ấn số 9 không JC THOAT ;không,thoát MOV 25H, #7BH ;có,đưa mã 7 đoạn của số 9 vào địa chỉ 25H MOV 20H, #9H ;đưa mã BCD vào địa chỉ 20H THOAT: MOV R0,#50 RETI START: ;thiết lập chế độ tạo xung với tần số nhập vào JB P3.3,EXIT ;có tạo xung hay không DJNZ R0, START ;có,kiểm tra 50 lần MOV IP, #00001000B ;ưu tiên ngắt tạo xung ;chuyển tần số xung cần tạo từ mã BCD sang số ;lưu dưới dạng mã nhị phân đưa vào các thanh ghi ;định thời để tạo xung MOV A, 21H MOV B,#1010B MUL AB ADD A, 20H MOV R1, A MOV A, 23H MOV B,#1010B MUL AB ADD A, 22H MOV B, #100 MUL AB CLR C ADD A, R1 XCH A,B ADDC A,#0H XCH A,B CLR C CPL B CPL A ADD A, #1H XCH A,B ADDC A, #0H MOV 29H, B ;byte thấp của tần số xung để ở địa chỉ 29H MOV 2AH, A ;byte cao của tần số xung để ở địa chỉ 2AH MOV R2,#50 SETB TR1 ;cho phép bộ định thời 1 hoạt động SETB TF1 ;buộc ngắt do bộ định thời 1 MOV IE, #10001010B ;cho phép ngắt bộ định thời 1 để tạo xung EXIT: MOV R0,#50 RETI PULSE: ;tạo xung CLR TR1 ;dừng bộ địng thời 1 DJNZ R2, OUT ;nếu chưa đủ 50 lần ,thoát CPL P0.4 ;đảo chiều xung MOV R2,#50 OUT: MOV TH1, 2AH ;thời gian mức cao MOV TL1, 29H ;thời gian mức thấp SETB TR1 ;bộ định thời 1 hoạt động để tạo xung RETI Lời kết Qua đề tài này, chúng tôi đã thu lượm được những kiến thức hết sức quý báu về các hệ vi điều khiển cũng như những kinh nghiệm trong ứng dụng thực tế đối với lập trình điều khiển một hệ thống điều khiển tự động. Và đặc biệt với việc sử dụng mô hình thực, chúng tôi đã có điều kiện để kiểm nghiệm và ứng dụng các kiến thức đã học trong thời gian qua, từ đó rút ra các bài học và củng cố kiến thức của bản thân. Trong khuôn khổ của đề tài, chúng tôi mới chỉ đưa ra một thí dụ đơn giản của việc áp dụng vi điều khiển. Trong thực tế chúng ta có thể triển khai rất nhiều các ứng dụng của vi điều khiển. Với đề tài này, chúng ta có thể tiến hành triển khai áp dụng vào trong thực tế đối với các hệ thống sử dụng nguồn xung có độ linh hoạt cao. Ngoài ra, vi điều khiển 8051 còn cho phép mở rộng các ứng dụng trong rất nhiều các lĩnh vực khác nhau tuỳ theo nhu cầu ứng dụng của người thiết kế như : Điều khiển băng chuyền công nghiệp. Điều khiển, giám sát hoạt động của thiết bị. Phát âm thanh tự động: Cảnh báo bằng âm thanh, Báo chuông tự động, Máy phát nhạc tự động, Chỉ thị tiếng nói,.... .... Các thiết bị có sử dụng vi điều khiển sẽ đơn giản, nhỏ gọn, nhẹ, độ chính xác cao, độ tin cậy lớn, luôn mềm dẻo trong vận hành và bảo dưỡng, ... và đặc biệt là có hàm lượng chất xám cao do nó hoạt động dựa trên phần mềm điều khiển, vì vậy có thể hạ giá thành sản phẩm và có tính cạnh tranh cao. Dựa trên nguyên tắc lập trình chung của họ 8051, chúng ta có thể phát triển cho các ứng dụng của vi điều khiển trong lĩnh vực điều khiển tự động nói riêng cũng như trong thực tiễn nói chung. Với các bộ vi điều khiển, chúng ta có thể xây dựng được các thiết bị điều khiển gọn nhẹ, có độ chính xác cao, mềm dẻo trong ứng dụng... đáp ứng cho các nhu cầu thực tiễn trong các ngành công nghiệp, năng lượng, giao thông và y tế... qua đó dần từng bước tự động hoá các hoạt động sản xuất và xã hội nhằm nâng cao năng suất lao động, cải thiện chất lượng sản phẩm, hiện đại hoá nền kinh tế. Phụ lục 2.3 Tập lệnh của 8051. * Lệnh nạp trực tiếp: Mã lệnh Mã gợi nhớ Nhịp Chức năng E4 CLR A 1 A:=0 74 MOV A,#data 2 A:=data 78..7F MOV R,#data 2 R0..R7:=data 76,77 MOV @R,data 2 (R0,R1):=data(RAM TRONG) 75 MOV adr,#data 2 adr:=data(RAM TRONG) 90 MOV DPTR,adr16 2 DPTR:=adr16 * Lệnh di chuyển dữ liệu: Mã lệnh Mã gợi nhớ Nhịp Chức năng E8 FF MOV A,R 1 A:=R0..R7 F8 FF MOV R,A 1 R0..R7:=A E6 E7 MOV A,@R 1 A:=(R0,R1)(RAM trong) D6 F7 MOV @R,A 1 (R0..R7):=A(RAM trong) F5 MOV adr,A 1 adr:=A(RAM trong) E5 MOV A,adr 1 A:=adr(RAM trong) A8 AF MOV R,adr 2 R0..R7:=adr(RAM trong) 88 8F MOV adr,R 2 adr:=R0..R7(RAM trong) 86 87 MOV adr,@R 2 adr:=(R0,R1)(RAM trong) A6 A7 MOV @R,adr 2 (R0,R1):=adr(RAM trong) 85 MOV adr1,adr2 2 adr1:=adr2 (RAM trong) C0 PUSH adr 2 stack:=adr (RAM trong) D0 POP adr 2 adr:=Stack(RAM trong) E2 E3 MOVX A,@R 2 A:=(R0,R1)(RAM ngoài) F2 F3 MOVX @R,A 2 (R0,R1):=A(RAM ngoài) E0 MOVX A,@DPTR 2 A:{DPTR} (RAM ngoài) 93 MOVC A,@A+DPTR 2 A:=[A+DPTR} (ROM) E3 MOVP A,@A+PC 2 A:=[A+PC](ROM) * Điều khiển vi xử lý: Mã lệnh Mã gợi nhớ Nhịp Chức năng 00 NOP 1 Chờ 1 nhịp * Quản lý bít: Mã lệnh Mã gợi nhớ Nhịp Chức năng 58..5F ANL A,R 1 A:=A and R0..R7 48..4F ORL A,R 1 A:=A or R0..R7 68..6F XRL A,R 1 A:=A exor R0..R7 56, 57 ANL A,@R 1 A:=A and(R0,R1) RAM trong 46, 47 ORL A,@R 1 A:=A or (R0.R1) RAM trong 66, 67 XRL A,@R 1 A:=A exor(R0.R1)RAM trong 54 ANL A,#data 2 A:= A and data 44 ORL A,#data 2 A:=A or data 64 XRL A,#data 2 A:= A exor data 55 ANL A,adr 2 A:=A and (adr) 45 ORL A,adr 2 A:=A or (adr) 65 XRL A,adr 2 A:=A exor (adr) 52 ANL adr,A 2 A:=(adr) or A 42 ORL adr,A 2 A:=(adr) eor A 53 ANL adr,#data 2 A:=(adr) and data 43 ORL adr,#data 2 A:=(adr) or data 63 XRL adr,#data 2 A:=(adr) exor data F4 CPL A 1 A:=NOT A *Các lệnh phép cộng: Mã lệnh Mã gợi nhớ Nhịp Chức năng 28..2F ADD A,R 1 A:=A+R0..R7 38..3F ADDC A,R 1 A:=A+R0..R7+C 26 27 ADD A,@R 1 A:=A+(R0,R1) (RAM trong) 36 37 ADDC A,@R 1 A:=A+(R0,R1)+C(RAM trong) 24 ADD A,#data 1 A:=A+data 34 ADDC A,#data 1 A:=A+data+C 25 ADD A,adr 1 A:=A+adr(RAM trong) 35 ADDC A,adr 1 A:=A+adr+C(RAM trong) 57 DA A 1 Hiệu chỉnh thập phân * Các lệnh phép trừ: Mã lệnh Mã gợi nhớ Nhịp Chức năng 98..9F SUBB A,R 1 A:=A-R0..R7 96 97 SUBB A,@R 1 A:=A-(R0,R7)-C (RAM trong) 94 SUBB A,#data 1 A:=A-data-C 95 SUBB A,adr 1 A:=A-(adr)-C (RAM trong) * Các lệnh phép nhân và phép chia: Mã lệnh Mã gợi nhớ Nhịp Chức năng A4 MUL AB 4 A:=A*B;B:=Hight Byte 84 DIV AB 4 A:=A div B ;B:=Rest 08..0F INC R 1 R0..R7:=R0..R7+1 18..1F DEC R 1 R0..R7:=R0..R7-1 04 INC A 1 A:=A+1 14 INC A 1 A:=A-1 06 07 INC @R 1 (R0,R1):=(R0,R1)+1 16, 17 DEC @R 1 (R0,R1):=(R0,R1)-1 05 INC adr 1 adr:=adr+1 15 DEC adr 1 adr:=adr-1 03 RR A 1 Dịch Acc sang phảI 33 RLC A 1 Dịch Acc sang tráI qua C 13 RRC A 1 Dịch Acc sang phảI qua C * Xử lý bít: Mã lệnh Mã gợi nhớ Nhịp Chức năng C3 CLR C 1 C:=0 B3 CPL C 1 C:=NOT C D3 SETB C 1 C:=1 C2 CLR bit 1 (bit):=0 B2 CPL bit 1 (bit):=NOT (bit) D2 SETB bit 1 (bit):=1 A2 MOV C, bit 1 C:= (bit) 92 MOV bit,C 1 (bit):=C 82 ANL C, bit 1 C:=C and (bit) B0 ANL C,/ bit 1 C:=C and NOT (bit) 72 ORL C, bit 1 C:=C or (bit) A0 ORL C,/ bit 1 C:=C or NOT(bit) * Lệnh Nhảy: Mã lệnh Mã gợi nhớ Nhịp Chức năng 02 JMP adr 2 Nhảy tới adr(16 bit) 01..E1 JMP adr 2 Nhảy tới adr(11 bit) 80 SJMP rel 2 Nhảy tương đối ( 127Byte) 73 JMP @A+DPTR 2 Nhảy sau khi (A+DPTR) 60 JZ rel 2 Nhảy tương đối khi A=0 70 JNZ rel 2 Nhảy tương đối khi A>0 B4 CJNE A,#data ,rel 2 Nhảy tương đối khi ADATA B5 CJNE A,adr,rel 2 Nhảy tương đối khi A(adr) B8..BF CJNE R,#data,rel 2 Nhảy tương đối khi R0..R7data B6 B7 DJNE @R,#data,rel 2 Nhảy tương đối khi (R0,R1)data D8..DF DJNZ R,rel 2 R0..R1-1,nhảy khi=0 D5 DJNZ adr,rel 2 (adr)-1,nhảy khi = 0 12 LCALL adr 2 Gọi CTC adr (16 bit) 11..F1 ACALL adr 2 Gọi CTC adr (11bit) 22 RET 2 Nhảy trở lại từ CTC * Lệnh trao đổi dữ liệu: Mã lệnh Mã gợi nhớ Nhịp Chức năng C8.. CF XCH A,R 1 A(R0..R7) C6 C7 XCH A,@R 1 A (R0,R1)(RAM trong) D6 D7 XCHD A,@R 1 A(1..3)(R0..3)(RAM trong) C4 SWAP A 1 A(1..3)A(4..7)

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

  • docTH1534.DOC