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
28 trang |
Chia sẻ: Dung Lona | Lượt xem: 1587 | Lượt tải: 0
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:
- TH1534.DOC