o Bộ nhớ ngoài: ta thiết kế bộ nhớ Ram ngoài 8K dùng chip 6264.
o Cổng vào ra: Do số lượng chân của chip hạn chế nên ta dùng thêm chip 8255 để mở động các kênh vào ra số.
o Chuyển đổi ADC: chọn bộ ADC có 8 kênh vào tương tự , độ phân rải 8 bit. Do đầu ra của cảm biến đo có nhiệt độ nằm trong khoảng 0-10V nên để tương thích với mức tín hiệu của ADC ta cần có các mạch chuyển đổi thích hợp.
o Màn hiển thị: làm nhiệm vụ hiển thị giá trị nhiệt độ trung bình hoặc nhiệt độ từng kênh. Ta sử dụng màn LCD 2x16.
o Đèn báo hiệu trạng thái làm việc của hệ: dùng loại đèn led bình thường.
o Bàn phím: ta thiết kế bàn phím có 13 phím trong đó 1 phím làm nhiệm vụ Reset hệ thống, các phím còn lại dùng để đặt các tham số cho hệ.
Kêt nối giữa VXL và ngoại vi được tổ chức dưới dạng bus:
38 trang |
Chia sẻ: Dung Lona | Lượt xem: 3654 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Bài tập dài vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BàI tập dàI vi xử lý
Nội dung thiết kế
Phần cứng :
Bộ vi xử lý
1. Bộ nhớ chương trình ROM : 8KB từ địa chỉ 0000H.
2. Bộ nhớ dữ liệu RAM : 8KB (địa chỉ tuỳ chọn ).
3.Cổng vào ra tương tự có 8 kênh nhận tín hiệu đo nhiệt độ từ 0-10V tương ứng với 00C đến 1000C, các cổng vào ra số và các mạch điều khiển
Phần mềm :
1. Chế độ chạy, dừng chương trình và dừng khẩn cấp.
2. Đọc tín hiệu nhiệt độ từ cổng vào ra tương tự và lưu trữ vào 2 vùng nhớ tương ứng của RAM .
3. Sau mỗi lần đọc ,tính giá trị trung bình nhiệt độ và gửi ra cổng hiển thị bằng LED
4. So sánh nhiệt độ của từng kênh với giá trị nhiệt độ trung bình .Nếu kết quả lớn hơn hoặc nhỏ hơn giá trị cho phép cho trước thì gửi tín hiệu báo động cao hoặc thấp tương ứng với kênh đó .Giá trị cho phép này đặt trong một ô nhớ của RAM.
5. Chương trình dừng lại và báo động bằng còi khi xảy ra một trong các trường hợp sau:
+ Có ít nhất 4 kênh đo vượt quá hoặc nhỏ hơn giới hạn cho phép so với giá trị trung bình
+ Giá trị nhiệt độ trung bình lớn hơn hoặc nhỏ hơn giá trị MAX và MIN tương ứng.Các giá trị tới hạn MAX và MIN được đặt trong 2 ô nhớ của RAM.
II-Các bước tiến hành :
1 . Chọn bộ VXL (8085 hoặc 8051..). Thiết kế sơ bộ dạng sơ đồ khối .
2 . Thiết kế bộ nhớ , cổng vào ra, mach giải mã , mạch chốt , ADC ... Xác định địa chỉ cho các tín hiệu ra .Lập bản đồ bộ nhớ .
3 . Chọn linh kiện . Nghiên cứu và chọn chế độ làm việc của linh kiện phù hợp với yêu cầu (logic và vật lý ) cho thiết kế ở bước 2 .
4 . Thiết kế sơ đồ chi tiết hệ .
5 . Xây dựng phần mềm trên cơ sở sơ đồ đã thiết kế ở bước 4 .
+ Xây dựng lưu đồ chương trình .
+ Xây dựng cấu trúc chương trình .
+ Soạn thảo chương trình bằng mã ngữ của bộ VXL đã chọn .
phần I. Thiết kế mạch phần cứng
Chương I .định hướng thiết kế
Thiết kế một hệ vi xử lý bao gồm cả việc thiết kế tổ chức phần cứng và viết phần mềm cho nền phần cứng mà ta thiết kế. Việc xem xét giữa tổ chức phần cứng và chương trình phần mềm cho một thiết kế là một vấn đề cần phải cân nhắc. Vì khi tổ chức phần cứng càng phức tạp, càng có nhiều chức năng hỗ trợ cho yêu cầu thiết kế thì phần mềm càng được giảm bớt và dễ dàng thực hiện nhưng lại đẩy cao giá thành chi phí cho phần cứng, cũng như chi phí bảo trì. Ngược lại với một phần cứng tối thiểu lại yêu cầu một chương trình phần mềm phức tạp hơn, hoàn thiện hơn; nhưng lại cho phép bảo trì hệ thống dễ dàng hơn cũng như việc phát triển tính năng của hệ thống từ đó có thể đưa ra giá cạnh tranh được.
Từ yêu cầu đặt ra đối với hệ VXL, ta có thể phân chia hệ thành các khối chức năng như sau:
Bộ VXL:
Chức năng của bộ VXL là giám sát và điều khiển hoạt động của toần hệ thống. Hệ đo nhiệt độ của ta có 8 kênh, không cần yêu cầu cao về cấu hình phần cứng, hơn nữa chức năng của hệ cũng tương đối đơn giản nên ta chọn dùng VXL 8 bit AT89C52 của hẵng Atmel vì giá thành của loại chip này tương đối thấp, phù hợp với mục đích nghiên cứu học tập.
AT89C52 có những đặc điểm sau:
Là bộ vi điều khiển 8 bit thuộc họ MCS-51. Đặc điểm của các chip vi điều khiển nói chung là nó được tích hợp với đầy đủ chức năng của một hệ VXL nhỏ, rất thích hợp với những thiết kế hướng điều khiển. 1 bộ VĐK thường bao gồm: mạch VXL, bộ nhớ chương trình và dữ liệu, bộ đếm và định thời, bộ tạo xung, các cổng vào/ra nối tiếp và song song, bộ điều khiển ngắtẳ
Vi điều khiển AT89C52 cùng với các họ vi điều khiển khác nói chung trong những năm gần đây được phát triển 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 CPU .
Giảm điện áp nguồn nuôi.
Có thể mở rộng nhiều chức năng trên chip, mở rộng cho các thiết kế lớn.
Những đặc điểm đó dẫn đến đạt được hai tính năng quan trọng là: giảm công suất tiêu thụ và cho phép điều khiển thời gian thực nên về mặt ứng dụng nó rất thích hợp với các thiết kế hướng điều khiển.
Vi điều khiển thuộc họ MCS-51 được hỗ trợ một tập lệnh phong phú nên cho phép nhiều khả năng mềm dẻo trong vấn đề viết chương trình phần mềm điều khiển.
Các chip thuộc họ MCS-51 hiện được sử dụng phổ biến và được coi là chuẩn công nghiệp cho các thiết kế khả dụng.
Vì những lý do trên mà việc lựa chọn vi điều khiển 8051 là một giải pháp hoàn toàn phù hợp cho thiết kế.
Ngoại vi:
Bộ nhớ ngoài: ta thiết kế bộ nhớ Ram ngoài 8K dùng chip 6264.
Cổng vào ra: Do số lượng chân của chip hạn chế nên ta dùng thêm chip 8255 để mở động các kênh vào ra số.
Chuyển đổi ADC: chọn bộ ADC có 8 kênh vào tương tự , độ phân rải 8 bit. Do đầu ra của cảm biến đo có nhiệt độ nằm trong khoảng 0-10V nên để tương thích với mức tín hiệu của ADC ta cần có các mạch chuyển đổi thích hợp.
Màn hiển thị: làm nhiệm vụ hiển thị giá trị nhiệt độ trung bình hoặc nhiệt độ từng kênh. Ta sử dụng màn LCD 2x16.
Đèn báo hiệu trạng thái làm việc của hệ: dùng loại đèn led bình thường.
Bàn phím: ta thiết kế bàn phím có 13 phím trong đó 1 phím làm nhiệm vụ Reset hệ thống, các phím còn lại dùng để đặt các tham số cho hệ.
Kêt nối giữa VXL và ngoại vi được tổ chức dưới dạng bus:
AT89C51
Khối vào tương tự 8 kênh
Khối hiển thị
Control Bus
Address Bus
Mạch giao tiếp
8255
Data Bus
ROM
RAM
Chương 2. GiớI THIệU Bộ Vi Điều Khiển AT89C52
AT89C51 là VXL thuộc họ MCS-8051 nên ta nghiên cứu cấu trúc chung của họ 8051, từ đó chỉ ra những tính năng riêng của version này .
Bên trong bộ VXL 8051
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 các khối :
Khối xử lý trung tâm CPU:
Bộ não của chip 8051 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 chứa ACC (A ): có độ dài 8 byte, là thanh ghi quan trọng nhất và được sử dụng trong phần lớn các lệnh của 8051.
Thanh ghi chứa phụ B cũng có độ dài 8 bit, thường được dùng cho phép nhân và phép chia hoặc lưu trữ các kết quả trung gian của quá trình tính toán.
Khối số học và logic (ALU=Arithmetic Logical Unit) : đảm nhiệm vai trò xử lý các phép toán logic và số học bẳng mạch cứng.
Từ trạng thái chương trình (PSW= Program Status Word ).
Các băng thanh ghi (Bank): gồm có 4 bank, mỗi bank gồm 8 thanh ghi 8 bit. Thực chất các thanh ghi này là các ô nhớ có độ dài 8 bit nên có thể được truy xuất qua địa chỉ trong bộ nhớ hoặc qua tên .
Con trỏ ngăn xếp (SP) có độ dài 8 byte để lưu giữ địa chỉ đỉnh ngăn xếp. Thanh ghi này mặc định có giá trị 07H, tuy nhiên giá trị này có thể được thay đổi bởi người dùng.
Ngoài ra, khối xử lý trung tâm còn chứa:
Thanh ghi đếm chương trình (PC= Progam Counter ) dài 2 byte để chứa địa chỉ của lệnh tiếp theo của chương trình. 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ộ giải mã lệnh
Bộ điều khiển thời gian và logic
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 và 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 điều khiển việc truy nhập của các thành phần.
Các bộ đếm và đị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.
89C51 và 1 số chíp khác cung cấp thêm 1 bộ đếm và định thời thứ 3 nữa .
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. Nhằm mục đích phục vụ cho quá trình điều khiển, các cổng vào ra được thiết kế quy chiếu bộ nhớ và cho phép truy xuất theo từng bit. Người dùng có thể truy xuất cổng dựa thông qua tên hoặc địa chỉ của chúng trong bộ nhớ. Ngoài ra, các cổng vào ra này còn có thêm 1 số chức năng khác nữa như dùng để truy xuất bộ nhớ ngoàI( port 0 và port 2) hoặc làm nhiệm vụ vào ra cho các chức năng đặc biệt (port 3).
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 có dung lượng 4K, là bộ nhớ ROM chỉ cho phép ghi 1 lần. Chip AT89C52 có bộ nhớ chương trình là Flash Rom có dung lượng 8K byte, cho phép ghi xoá nhiều lần bằng tín hiệu điện.
Bộ nhớ dữ liệu RAM (Ramdom Acces Memory) có dung lượng 128 byte, riêng chip AT89C52 có 256 byte nhớ dữ liệu.
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 (Tích cực thấp)
P3.3 |INT1 Ngắt ngoài 1 (Tích cực thấp)
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ớ (Tích cực thấp)
P3.7 RD Đọc bộ nhớ (Tích cực thấp)
Tổ chức bộ nhớ:
Cấu trúc chung của bộ nhớ:
Một đặc trưng trong thiết kế bộ nhớ của họ MCS-51 so với các hệ VXL thông thường là chia bộ nhớ thành 2 vùng không gian nhớ riêng biệt: vùng nhớ dữ liệu(data memory) và vùng nhớ chương trình(program memory). Họ 51 cho phép mở rộng bộ nhớ tối đa tới 64K byte cho cả 2 loại bộ nhớ
Sơ đồ bộ nhớ của 8051:
00H
0000H
Bộ nhớ Chương trình
Bộ nhớ dữ 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.
8051 phân biệt bộ nhớ ngoài và bộ nhớ trong cho cả 2 loại bộ nhớ dữ liệu và chương trình. 1 chip 8051 chuẩn có 4K rom và 128 byte ram được tích hợp sẵn bên trong chip. Một số version sau này có 1 vài thay đổi về dung lượng bộ nhớ cũng như loại bộ nhớ sử dụng. Chip AT89C52 có 8K Flash Rom và 256 byte ram trong. Đối với những ứng dụng yêu cầu dung lượng nhớ lớn hơn thì người dùng có thể dùng các chip nhớ ngoài. 8051 cho phép truy suất tới bộ nhớ ngoài nhờ các chân PSEN đối với program memory và RD,WR đối với data memory. Tuy nhiên giới hạn tối đa của bộ nhớ ngoài là 64K đối với cả 2 loại bộ nhớ vì bus địa chỉ chỉ có 16 bit.
Cấu trúc vùng ram trong: chip 8051 chuẩn có 128 byte ram trong (00H-7FH)và vùng nhớ các thanh ghi đặc biệt cũng có dung lượng 128 byte(80H-FFH). Các chip 52 có thêm vùng 128 byte ram trong mang địa chỉ cao (80H-FFH). Tuy nhiên vùng ram cao này được phân biệt với vùng nhớ của các thanh ghi có chức năng đặc biệt qua phương pháp truy nhập.
Hình 2.4 Sơ đồ vùng nhớ ram thấp của 8051
Vùng nhớ trong của 8051 được chia thành 3 vùng:
Vùng các băng thanh ghi( 00h đến 1Fh) gồm 32 ô nhớ chia thành 4 bank, mỗi bank có 8 thanh ghi từ R0 đến R7. Người dùng có thể chọn băng thanh ghi nhờ 2 bit RS1, RS0 trong thanh ghi PWS. Các ô nhớ này được truy cập theo tưng byte có thể theo địa chỉ trong bộ nhớ hoặc qua tên.
Vùng nhớ định địa chỉ bit(20h đến 2Fh) gồm 16 byte nhớ. Đặc điểm của vùng nhớ này là cho phép truy cập đến từng bit nhớ độc lập. Các bit được đánh địa chỉ từ 00h(bit 0 của ô nhớ 20h) đến 7Fh(bit 7 của ô nhớ 2Fh)
Vùng nhớ công dụng chung gồm 80 byte từ địa chỉ 30h đến 7Fh. Các ô nhớ này có thể được truy suất từng byte 1 cách trực tiếp hay gián tiếp.
Ngăn xếp của 8051 nằm ngay trong vùng nhớ ram và được đánh dấu bởi thanh ghi SP(stack pointer) chứa địa chỉ của đỉnh ngăn xếp( mặc định có giá trị là 07h). Khi sử dụng ngăn xếp, ta cần chú ý đặt lại giá trị cho thanh ghi SP nếu cần thiết để không bị xung đột với vùng nhớ dữ liệu chứa toán hạng được chương trình truy nhập.
Thanh ghi ghi chức năng đặc biệt SFR(Special Function Registers):
Các thanh ghi này cũng là 1 phần của vùng ram trong được đánh địa chỉ 80h đến FFh. Tuy nhiên, thực tế thiết kế của chip 8051 chuẩn chỉ sử dụng 21 ô nhớ trong vùng này cho những mục đích khác nhau, các ô nhớ còn lại có thể được sử dụng như 1 vùng nhớ tự do của chương trình. Riêng các chip 52 thì sử dụng thêm 1 vài ô nhớ nữa cho những mở rộng về phần cứng.
H 2.5 Địa chỉ các thanh ghi đặc biệt
Chức năng:
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. Cho phép truy nhập theo từng bit.
SP (Stack Pointer): Đây là con trỏ ngăn xếp của vi điều khiển.
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 trỏ đến ô nhớ dữ liệu ngoài.
PCON (Power Control): thanh ghi chọn mode làm việc cho chip. 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 có địa chỉ tận cùng 0 hoặc 8 cho phép truy nhập theo bit. Các bit đó cũng được địa chỉ hoá như vùng ram thấp với chỉ số từ 80H đến FFh.
Chương III. Thiết kế PHầN CứNG
Tổ chức bộ nhớ (Memory Map).
Từ cấu trúc của vi điều khiển 8051 giới thiệu ở chương II và yêu cầu thiết kế ta tiến hành phân chia các vùng nhớ như sau:
Bộ nhớ chương trình sử dụng Flash rom của chip 89C52 có dung lượng 8K byte có địa chỉ vật lý: 0000H á 1FFFH.
Bộ nhớ dữ liệu: được mở rộng thêm 8K RAM ngoài, với địa chỉ vật lý 0000h đến 1FFFh. ở đây ta dùng chip 6264 có dung lượng nhớ 64K.
Mạch ghép nối vào/ ra sử dụng IC8255 với địa chỉ của từng cấu hình như sau:
Địa chỉ cổng PA : 2000H
Địa chỉ cổng PB : 2001H
Địa chỉ cổng PC : 2002H
Địa chỉ PSW : 2003H
Ghép nối các linh kiện
Nguyên tắc ghép nối
Hệ VXL của ta được tổ chức theo cấu trúc dạng Bus, vì vậy việc tổ chức truy nhập các thiết bị ngoại vi là 1 yêu cầu bắt buộc. Dữ liệu được trao đổi giữa bộ VXL với bộ nhớ ngoài và các cổng vào ra được thực hiện qua cổng P0 và P2 như sau:
Các bit P0.0 đến P0.7 và P2.0 đến P2.4 là các đầu vào địa chỉ
Các bit P2.5 đến P2.7 dùng để giải mã chọn chip. Vì vậy, các chân này là đầu vào nhị phân cho chip giải mã IC74138
Chân dữ liệu của chip P0(dùng chung với địa chỉ) được chốt bằng mạch chốt 74373.
RD,RW: tín hiệu điều khiển việc đọc hoặc ghi bộ nhớ ngoài.
IC 8255
Vi mạch 8255 là một vi mạch được sử dụng phổ biến để giao tiếp trong các hệ VXL 8 – 16 bit. Sử dụng 8255A làm cho việc thiết kế để ghép nối bộ VXL với các thiết bị ngoại vi đơn giản đi nhiều, độ mềm dẻo của thiết kế sẽ tăng lên và linh kiện phụ trợ đi kèm cũng giảm đi nhiều. Do có khả năng lập trình được nên nó có thể vừa dùng như cổng nhận số liệu cũng như xuất số liệu tuỳ nội dung của từ điều khiển mà người lập trình đưa vào.
Sơ đồ chân và sơ đồ chức năng của 8255A.
Sơ đồ chức năng và sơ đồ chân của 8255A được thể hiện dưới hình vẽ sau:
PA3
PA2
PA1
PA0
RD\
CS\
GND
A1
A0
PC7
PC6
PC5
PC4
PC0
PC1
PC2
PC3
PB0
PB1
PB2
PA4
PA5
PA6
PA7
WR\
RESET
D0
D1
D2
D3
D4
D5
D6
D7
Vcc
PB7
PB6
PB5
PB4
PB3
1
20
21
40
D0 – D7
PA0 – PA7
PB0 – PB7
PC0 – PC7
RD\
WR\
RESET
A0
A1
CS\
8255A
8255A
H 3.1 Sơ đồ chân và sơ đồ chức năng của 8255
Trong đó:
Chân 1 á 4, 37 á 40 (PA0 – PA7): là các đường xuất nhập có tên là cổng A.
Chân 18 á 25 (PB0 – PB7): là các đường nhập xuất có tên cổng B.
Chân 10 á 13, 14 á 17 (PB0 – PB7): là các đường nhập xuất có tên cổng C.
Chân 27 á 34 (D0 – D7): là các đường dữ liệu (data) hoạt động hai chiều, dẫn tín hiệu điều khiển từ vi xử lý ra các thiết bị bên ngoài đồng thời nhận các dữ liệu từ các thiết bị điều khiển bên ngoài vào vi xử lý.
Chân 35 (Reset input): ngõ vào xóa, chân reset phải được nối với tín hiệu reset out của vi xử lý để không làm ảnh hướng đến mạch điều khiển. Khi reset, các cổng của 8255A là các ngõ vào, đồng thời tất cả các dữ liệu trên thanh ghi bên trong 8255A đều bị xóa, 8255A trở về trạng thái ban đầu săn sàng làm việc.
Chân 6 (CS\): tín hiệu ngõ vào chip select (CS\) được điều khiển bởi vi xử lý, dùng để lựa chọn 8255A làm việc khi vi xử lý giao tiếp với nhiều thiết bị.
Chân 5 (RD\): ngõ vào đọc dữ liệu (Read Input).
Chân 36 (WR\) : ngõ vào ghi dữ liệu (Write Input).
Chân 8,9 (A1, A0): ngõ vào địa chỉ (Address Input), dùng nhận địa chỉ vào để lựa chọn thanh ghi và các cổng.
Bảng địa chỉ lựa chọn thanh ghi và các cổng:
A1
A0
Cổng và thanh ghi
0
0
Cổng A
0
1
Cổng B
1
0
Cổng C
1
1
Thanh ghi điều khiển
Chân 26 (Vcc) : nguồn 5 VDC.
Chân 7 (GND) : GND 0 VDC.
Cấu trúc bên trong và hoạt động của 8255A.
Sơ đồ khối cấu trúc bên trong của vi mạch 8255A.
PA7 – PA0
Port A
Điều khiển nhóm A
PC7 – PC4
Port C
(4 bit cao)
Đệm s dữ liệu
D7 – D0
Nhóm A
PC3 – PC0
Port C
(4 bit thấp)
Điều khiển nhóm B
PB7 – PC0
RD\
Logic điều khiển ghi/đọc
Port B
CS\
WR\
A0
A1
Nhóm B
H 3.2 Sơ đồ khối chức năng của vi mạch 8255
Hoạt động của vi mạch 8255A:
Từ sơ đồ khối cấu trúc bên trong của vi mạch 8255A ta thấy các cổng của 8255A được chia thành 2 nhóm:
Nhóm A gồm cổng A và 4 bit cao của cổng C.
Nhóm B gồm cổng B và 4 bit thấp của cổng C.
Cấu hình làm việc của 2 nhóm sẽ do nội dung của thanh ghi điều khiển quyết định.
Giao tiếp với 8255:
Đường dữ liệu: gồm 8 đường dữ liệu (D0 - D7).
Đường địa chỉ: gồm 2 đường (A0 – A1) dùng để lựa chọn cổng hoặc thanh ghi điều khiển như đã trình bày ở trên.
Đường điều khiển: gồm các đường /RD, /WR, /CS, Reset dùng để điều khiển việc hoạt động của 8255A.
Để sử dụng các cổng làm công cụ giao tiếp, người sử dụng phải gửi từ điều khiển ra thanh ghi điều khiển để 8255A định cấu hình làm việc cho các cổng đúng như yêu cầu của người lập trình.
Từ điều khiển CWR(control word register)
Từ điều khiển của 8255 là 1 thanh ghi 8 bit. Giá trị của từ điều khiển xác định mode hoạt động và chế độ làm việc(vào/ra) cho các cổng.
Định nghĩa chế độ các cổng
Khi D7 =1, 8255A sẽ sử dụng thông tin trong CWR để định nghĩa chế độ các cửa. Nội dung của CWR xác định chức năng của 24 đường ghép nối với thiết bị ngoại vi. Phần mềm của hệ thống sẽ định nghĩa chế độ của PA, PB một cách độc lập; còn PC có thể được định nghĩa độc lập hay chia làm hai phụ thuộc vào chế độ của PA và PB.
1
D6
D5
D4
D3
D2
D1
D0
Nhóm B
PCL (4 bit thấp)
1 = Input
0 = Output
PB
1 = Input
0 = Output
Mode select
1 = mode 0
0 = mode 1
Nhóm A
Mode select
00 = mode 0
01 = mode 1
1x = mode 2
Cổng A
1 = Input
0 = Output
PCH (4 bit cao)
1=Input
0=Output
H3.3 ý nghĩa của các bit trong thanh ghi điều khiển
8255 cho phép thiết lập 3 chế độ hoạt động cho cổng:
Mode 0 (Vào ra cơ sở): chế độ này cho phép mỗi cổng là cổng vào hay ra, thực hiện sự trao đổi dữ liệu 1 cách đơn giản không có “hand shaking”.
Mode 1: vào ra dữ liệu theo cơ chế “hand shaking”. Chế độ này dùng cho 2 cổng A,B, các bit của cổng C sẽ được sử dụng để làm tín hiệu giao tiếp khi trao đổi dữ liệu.
Cổng vào:
H 3.4 mode 1, cổng vào
STB: chốt dữ liệu vào bộ chốt( mức tích cực thấp)
IBF: chuyển lên mức cao khi dữ liệu đã được chốt.
INTR: tạo ngắt tới CPU để yêu cầu quá trình nhận dữ liệu vào.
Cổng ra:
H 3.5 Mode 1, cổng ra
OBF: chuyển về mức 0 khi có dữ liệu được gửi tới 1 cổng ra nào đó.
ACK: có mức tích cực thấp, dùng để báo dữ liệu gửi ra đã được 8255 chấp nhận.
INTR: báo ngắt về CPU sau khi dữ liệu đã được chấp nhận.
Mode 2 là chế độ làm việc vào ra 2 hướng theo cơ chế hand shaking. Mode hoạt động này có 1 số đặc điểm sau:
Chỉ dùng đối với cổng A
Chế độ vào ra 2 hướng được điều khiển bởi 5 bit của cổng C
Dữ liệu vào ra đều được chốt
Lập/xoá bit:
Nếu D7=0 thì CWR là lệnh để lập/xoá bit của Port C. Lệnh này cho phép lập/xoá bất kỳ bit nào của C một cách độc lập.
0
D6
D5
D4
D3
D2
D1
D0
1: Lập
0: Xoá
Cửa C
D3 D2 D1
bit 0
bit 1
bit 2
bit 3
bit 4
bit 5
bit 6
bit 7
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Không dùng=000
Ghép nối 8255 với vi điều khiển
H 3.6 Ghép nối 8255 với VĐK
Đường dữ liệu tương ứng được nối với bus dữ liệu đia chỉ dùng chung AD0..AD7.
Tín hiệu chọn cổng hoặc thanh ghi được nối với 2 bit thấp nhất của bus địa chỉ A0, A1.
Chọn cổng
A1
A0
Địa chỉ
Port A
0
0
2000h
Port B
0
1
2001h
Port C
1
0
2002h
CWR
1
1
2003h
H 3.7 Bảng chọn ô nhớ của 8255
Các chân điều khiển vào ra WR,RD tương ứng được nối với tín hiệu điều khiển WR, RD của hệ thống
Đầu vào chọn chip CS được nối với tín hiệu chọn chip IC4 từ IC 74138.
Cổng PA,PB,PC đều làm việc ở mode 0, cổng ra
Cổng
Mode
Trạng thái
Ghép nối
Điều khiển
A
0
Out
PA0..PA7
8xLED
B
0
Out
PB0..PB7
8xLED
C
0
Out
PC0..PC7
ADC 0809
H 3.8 Bảng ghép nối cổng ra của 8255
Bộ nhớ RAM ngoài( 6264)
Đối với RAM ngoài ta sử dụng loại SRAM vi mạch dùng trong thiết kế là 6264 (8Kx8). Có 13 đường địa chỉ 8 đường dữ liệu. Nó có địa chỉ 2000á3FFF, địa chỉ này được chọn ra trong vùng địa chỉ của vi điều khiển bởi chân /CE của giải mã địa chỉ và có hai đường tín hiệu yêu cầu đọc viết là /OE, /WE .
Ghép nối 6264 với VXL:
H 3.9 Ghép nối 6264
Tín hiệu giải mã chọn chip IC2 tương ứng với tổ hợp đầu vào A13A14A15=000, địa chỉ bộ nhớ ram ngoài nằm trong khoảng 0000h đến 1FFFh.
Vi mạch ADC0809.
Bộ ADC 0809 là bộ chuyển đổi tương tự số 8 bit với 8 kênh vào tương tự thuộc họ CMOS . Bộ chuyển đổi tương tự số này sử dụng phương pháp chuyển đổi xấp xỉ. Bộ chọn kênh có thể chọn ra kênh cần chuyển đổi bằng 3 chân chọn địa chỉ. Thiết bị này loại trừ khả năng cần thiết điều chỉnh điểm zero bên ngoài và khả năng điều chỉnh tỉ số làm cho ADC đễ dàng giao tiếp với các bộ vi xử lý.
Các đặc điểm cơ bản của ADC 0809
Nguồn nuôi đơn Vcc=4,5V đến 6,0V
Dải tín hiệu lối vào tương tự 5V khi nguồn nuôi là +5V. Có thể mở rộng thang đo bằng các giải pháp kỹ thuật cho từng mạch cụ thể.
Dễ dàng giao tiếp với vi xử lý vì đầu ra có bộ đệm 3 trạng thái nên có thể ghép trực tiếp vào kênh dữ liệu của hệ VXL.
Tổng sai số chưa chỉnh ±1/2LSB.
Thời gian chuyển đổi 100 ms .
Tần số xung clock 10kHz – 1028 kHz.
Đảm bảo sai số tuyến tính trong dải nhiệt độ từ –400C á 85OC.
IN3
IN4
IN5
IN6
IN7
START
EOC
2-6
2-6
2-8
2-3
2-2
2-1
Ref(-)
Output enable
clock
Vcc
Ref(+)
GND
2-7
IN2
IN1
IN0
A
B
C
ALE
2-4
ADC-0809
Bảng chân lý và sơ đồ chân của vi mạch ADC0809.
A
B
C
Cổng
0
0
0
0
0
0
1
1
0
1
0
2
0
1
1
3
1
0
0
4
1
0
1
5
1
1
0
6
1
1
1
7
ý nghĩa các chân:
IN0 – IN7 : 8 đầu vào tương tự.
A,B,C : các tín hiệu chọn kênh.
Các chân 2.1-2.7: là các đầu ra số.
ALE cho phép chốt số liệu đầu vào.
Start: xung cho phép bắt đầu chuyển đổi.
Clk:đầu vào xung clock
Ref(+): điện áp vào chuẩn +5v
Ref(-): điện áp vào chuẩn 0
Vcc: nguồn cung cấp
Cấu trúc bên trong của ADC 0809
Cấu trúc bên trong của ADC0809 được thể hiện ở hình vẽ dưới:
Hoạt động chuyển đổi:
Các bit địa chỉ ở lối vào A,B,C từ bộ giải mã địa chỉ sẽ chốt và xác định kênh đầu vào nào được chọn. Khi một kênh được chọn đồng thời yêu cầu START ,ALE được tích cực, yêu cầu độ rộng xung START không nhỏ hơn 200ns . Giá trị điện áp cần được chuyển đổi sẽ được chốt lại ở cổng vào tương ứng xung Start bắt đầu chuyển đổi . Sau xung START khoảng 10μs đầu ra EOC (end of convert) lúc này xuống thấp thực sự bắt đầu quá trình chuyển đổi. Trong suốt quá trình chuyển đổi EOC luôn ở mức tích cực thấp, đồng thời đầu ra 3 trạng thái của ADC0809 bị thả nổi. Sau khoảng 100 ms, ADC0809 thực hiện việc chuyển đổi xong, dữ liệu đầu vào được đưa đến bộ đệm đầu ra ba trạng thái đồng thời chân tín hiệu EOC chuyển lên mức cao báo cho VXL biết để đọc kết quả vào.
Giản đồ thời gian của quá trình chuyển đổi ADC
Ghép nối ADC0809 với VXL8051.
Các kênh vào Analog được nối vào các đầu vào tương ứng của ADC. Mỗi kênh đó có địa chỉ riêng do tổ hợp 3 bit địa chỉ A,B,C quy định.
Chân
Ghép nối
Chức năng
A
PC0(8255)
Chọn kênh
B
PC1(8255)
Chọn kênh
C
PC2(8255)
Chọn kênh
ALE
PC3(8255)
Chốt địa chỉ kênh
OE
PC4(8255)
Đọc đầu ra
START
PC5(8255)
Bắt đầu chuyển đổi
2-8..2-1
Port 2(8952)
Dữ liệu đầu ra
EOC
INT2(8952)
Tạo ngắt
Khi chuyển đổi xong, ADC0809 dùng tín hiệu ra chân EOC để báo cho VXL biết quá trình chuyển đổi đã kết thúc. Vì vậy ta kết nối EOC với đầu vào ngắt ngoài /INT2 của 8051. Tín hiệu ra của ADC được nối với cổng P2 của 8952.
Vì vậy, để đọc kết quả chuyển đổi từ ADC, xung lên được áp vào chân OE của ADC(chân này có mức tích cực cao), sau đó ta đọc kết quả vào VXL qua cổng P2. Khi chưa có tín hiệu OE, đầu ra ở trạng thái thả nổi.
Mạch tạo dao động cho ADC0809:
Tần số dao động của mạch f=
Tần số dao động chuẩn của ADC là 600Hz=> 640 =
Với R từ 100 đến vài kΩ, chọn R=1K=>C=560pF
Đèn báo hiệu kênh vượt quá giới hạn cho phép
Dàn đèn này gồm 16 đèn : 8 xanh (báo thấp) và 8 đỏ (báo cao). Dữ liệu sẽ được đưa vào 8225A và được chốt ở đó.Cổng PA điều khiển dàn đèn đỏ và cổng PB điều khiển dàn đèn xanh. Các đèn được nối chung catot xuống GND.
Các vi mạch phụ trợ khác.
Mạch giải mã 74HC138:
74HC373 là vi mạch giải mã “vào 3 ra 8”, là loại IC tốc độ cao nên có thể đáp ứng được với tốc độ của chip: thời gian trễ truyền đạt tpd khoảng 20ns ở nhiệt độ 25oC.
Sơ đồ chân:
Chức năng của các chân tín hiệu:
Chân
Chức năng
Tích cực
Y0..Y7
Đầu ra
Thấp
A,B,C
Đầu vào
Cao
G2A,G2B
Tín hiệu cho phép
Thấp
G1
Tín hiệu cho phép
Cao
Ta có bảng chân lý của 74HC138 như sau:
Bảng chân lý mạch giải mã địa chỉ 74HC138
Vi mạch chốt 74HC373:
Đây là mạch có tác dụng chốt lại số liệu ở đầu vào khi có tín hiệu tích cực, đầu ra sẽ không bị biến đổi khi tín hiệu đầu vào đã mất. Nó chỉ thay đổi khi tín hiệu chốt tích cực trở lại. Bên ngoài vỏ cũng có tín hiệu /OE cho phép hoạt động. Khi có yêu cầu chốt chân LE sẽ được tích cực.
Sơ đồ chân:
Ghép nối với 89C52:
Chân /OE (số 1) của 74LS373 được nối đất.
Chân LE(số 11) của 74LS373 được nối với chân ALE (số 30) của 8051.
PHầN 2: XÂY DựNG CHƯƠNG TRìNH ĐIềU KHIểN
Lưu đồ thuật toán
Mã nguồn
; 10H-17H: CONTAIN TEMPERATURE VALUE FOR 8 CHANNEL
TEMP_1 EQU 10H
TEMP_2 EQU 11H
TEMP_3 EQU 12H
TEMP_4 EQU 13H
TEMP_5 EQU 14H
TEMP_6 EQU 15H
TEMP_7 EQU 16H
TEMP_8 EQU 17H
TEMP_AVR EQU 18H
TEMP_MIN EQU 19H
TEMP_MAX EQU 1AH
TEMP_OFFSET EQU 1BH
; LED BIT FOR 8 LOW LEDS
LO_LED EQU 20H
; LED BIT FOR 8 HIGH LEDS
HI_LED EQU 21H
PORTC EQU 22H ;vung nho' bit tuong ung voi PORTC cua 8255
PA_ADDR EQU 2000H ;dia chi cua portA cua 8255
PB_ADDR EQU 2001H ;dia chi cua portB cua 8255
PC_ADDR EQU 2002H ;dia chi cua portC cua 8255
CW_ADDR EQU 2003H ;dia chi cua control word cua 8255
;SPEAKER LED
SPEAKER EQU 16H ;portc.6
MESSAGE_1: DB "AVERAGE TEMP:",0
MESSAGE_4: DB "MIN:",0
MESSAGE_5: DB "MAX:",0
;==============================================================
ORG 0000H
JMP RESET ;reset
ORG 03H ;external interrupt 0
JMP TIMER_INTR0
;==============================================================
SET_MODE_8255:
MOV DPTR,#2003H
MOV A,#80H ;A,B,C deu la cong ra,mode 0
MOVX @DPTR,A
;KHOI TAO GIA TRI BAN DAU CHO 8255
RESET_PORT:
MOV DPTR,#PA_ADDR
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#PB_ADDR
MOVX @DPTR,A
MOV DPTR,#PC_ADDR
MOVX @DPTR,A
;========================SET MODE TIMER========================
SET_MODE_TIMER:
MOV TMOD,#011H ;00010001, MODE 0
;=====================LCD INITIALIZATION=======================
INIT_LCD:
call delay30_ms
;function set
clr p3.4 ;E=0
clr p3.0 ;RS=0
clr p3.1 ;R/W=0
mov p2,#38h
setb p3.4
clr p3.4
call delay39_us
;display off control
clr p1.7
clr p3.4
mov p2,#08h
setb p3.5
clr p3.5
call delay39_us
;display clear
clr p3.4
clr p3.0
clr p3.1
mov p2,#01h
setb p3.4
clr p3.4
call delay2_m
;entry mode set
clr p3.4
clr p3.0
clr p3.1
mov p2,#07h
setb p3.4
clr p3.4
;LCD_START:
MOV A,#38H ;5X8
CALL LCD_CON
;=================DELAY PROCEDURE FOR TIME=====================
delay30_ms:
mov r6,#0ffh
here15_2: mov r7,#80h
here15_1: djnz r7,here15_1 ;f(ocs)=4Mhz=>1 cycle=3us
djnz r6,here15_2
ret
delay39_us: mov r6,#20h
here39: djnz r6,here39
ret
delay2_m: mov r6,#0ffh
here2_1 : djnz r6,here2_1
ret
DELAY_200_uS:
mov r7,#70
here200 : djnz r7,here200
ret
;===============KHOI TAO CAC THAM SO MAC DINH==================
INIT_VALUE:
MOV SP,#50H
MOV TEMP_MAX,#20H ;Tmax
MOV TEMP_MIN,#11H ;Tmin
MOV TEMP_OFFSET,#05H ;Toffset
SET_INTERRUPT:
MOV IE,#0AFH ;10101111
AJMP MAIN_LOOP
;==================TIMER0 INTERRUPT ROUNTINE===================
TIMER_INTR0:
DEC R6
JNZ INTR0_RET
CLR C
INTR0_RET: RETI
;==================WRITE MESSAGE TO LCD========================
JMP LCD_CLEAR
CALL DISP_MES_1
CALL DISP_MES_4
CALL DISP_MES_5
CALL DISP_MIN_TEMP
CALL DISP_MAX_TEMP
;====================START MEASURING TEMP======================
MAIN_LOOP:
MOV R5,#08H
NEXT_MUX: CALL START_ADC
CALL DELAY_200_uS
CALL END_CONVERSION
DJNZ R5,NEXT_MUX
CALL TEMP_CALCULATE ;COUNT FOR AVERAGE TEMP
CALL DISP_AVR_TEMP ;DISPLAY
CALL ALARM_1
CALL ALARM_2
JMP DELAY_1_SEC
;=========================DELAY_1_SEC=========================
;USE TIMER0-MODE 1
DELAY_1_SEC:
MOV TH0,#00H
MOV TL0,#00H
MOV R6,#05
SETB C
SETB TCON.4
WAIT: JC WAIT
JMP MAIN_LOOP
;======================ANALOG TO DIGITAL=======================
START_ADC: ;bat dau chuyen doi ADC
MOV A,PORTC ;vung bit tuong ung voi portc
ANL A,#0D0H ;11010000
ORL A,R5
DEC A
MOV DPTR,#PC_ADDR ;PORT C
MOVX @DPTR,A ;SET ADDR
ORL A,#08H ;SET BIT4- 00001000
MOVX @DPTR,A ;ALE STROBE
ANL A,#0F7H ;CLR BIT4- 11110111
ORL A,#20H ;SET BIT 6-00100000
MOVX @DPTR,A ;SET START BIT
ANL A,#0DFH ;CLR START BIT-11011111
MOVX @DPTR,A
RET
;=====================CONVERSION COMPLETE======================
END_CONVERSION:
MOV A,PORTC
ORL A,#010H ;OUTPUT ENABLE-00010000
MOV DPTR,#2002H ;OE=1
MOVX @DPTR,A
MOV A,P0 ;READ ADC
ACALL ADC_TO_TEMP
MOV R0,#010H
MOV R1,A
MOV A,R5
ADD A,R0
MOV R0,A
DEC R0 ;MEMORY ADDRESS
MOV A,R1
MOV @R0,A ;WRITE TEMP TO MEMORY
ANL A,#0EFH ;11101111
MOVX @DPTR,A ;OE=0
RET
;=================CONVERT ADC INPUT TO TEMP====================
ADC_TO_TEMP:
MOV B,#64H
MUL AB
MOV ACC,B
RET
;==================COUNT FOR AVERAGE TEMP======================
TEMP_CALCULATE:
MOV R0,#TEMP_1
MOV A,@R0
MOV R1,#07H
MOV R2,#00H
TEMP_LOOP1:
INC R0 ;DIA CHI O NHO LUU GIA TRI NHIET DO
CLR C
ADD A,@R0
MOV B,A
MOV A,R2
ADDC A,#00H
MOV R2,A
MOV A,B
DJNZ R1,TEMP_LOOP1
;DEVIDE BY 8
MOV R1,#03H
TEMP_LOOP2:
MOV B,A
MOV A,R2
RRC A
MOV R2,A
MOV A,B
RRC A
DJNZ R1,TEMP_LOOP2
MOV TEMP_AVR,A ;LUU GIA TRI NHIET DO TRUNG BINH
RET
;==========================ALARM 1============================
ALARM_1:
MOV A,TEMP_MAX
MOV R0,TEMP_AVR
CLR C
SUBB A,R0
JC ON_ALARM_1 ;TEMP_AVR > TEMP_MAX=>DUNG CHUONG TRINH
CLR C
MOV A,TEMP_AVR
MOV R0,TEMP_MIN
SUBB A,R0
JC ON_ALARM_1 ;TEMP_AVR DUNG CHUONG TRINH
JMP NO_ALARM_1
ON_ALARM_1: JMP STOP
NO_ALARM_1: RET
;========================ALARM 2==============================
ALARM_2:
MOV R0,#TEMP_1 ;KENH SO 1
MOV R2,#08H ;LAP 8 LAN
MOV R3,#00 ;SO KENH CO NHIET DO NGOAI KHOANG CHO FEP
ALARM2_LOOP1:
MOV A,TEMP_AVR
ADD A,TEMP_OFFSET ;Ttb+Dt
SUBB A,@R0 ;Ttb+Dt-Ti
JC ALARM2_LABEL1 ;Ti-Ttb>Dt
MOV A,@R0
ADD A,TEMP_OFFSET ;Ti+Dt
SUBB A,TEMP_AVR ;Ti+Dt-Ttb
JC ALARM2_LABEL1 ;Ttb-Ti>Dt
JMP ALARM2_LABEL2
ALARM2_LABEL1:
INC R3
ALARM2_LABEL2:
MOV A,@R0 ;Ti
SUBB A,TEMP_MIN ;Ti-Tmin
JC ON_LOW_LED ;Ti<Tmin
MOV A,@R0
SUBB A,TEMP_MAX
JC ALARM2_LABEL3 ;Ti<Tmax
JZ ALARM2_LABEL3 ;Ti=Tmax
ON_HI_LED:
MOV A,R2
MOV R4,A
MOV A,#00H
SETB C
HI_SHIFT_LOOP: RRC A
DJNZ R4,HI_SHIFT_LOOP
ORL HI_LED,A
JMP ALARM2_LABEL3
ON_LOW_LED:
MOV A,R2
MOV R4,A
MOV A,#00H
SETB C
LOW_SHIFT_LOOP: RRC A
DJNZ R4,LOW_SHIFT_LOOP
ORL LO_LED,A
ALARM2_LABEL3:
DJNZ R2,ALARM2_LOOP1 ;CHUYEN KENH
MOV R3,A
SUBB A,#04
JC ALARM2_RET
JMP STOP
ALARM2_RET:
MOV DPTR,#2000H
MOV A,LO_LED
MOVX @DPTR,A
MOV DPTR,#2001H
MOV A,HI_LED
MOVX @DPTR,A
RET
;===========================STOP===============================
STOP:
;SECURITY
SETB SPEAKER ;COI BAO DONG
MOV DPTR,#2002H
MOV A,PORTC
MOVX @DPTR,A
ORL PCON,#02 ;ENTER POWER-DOWN MODE
;======================DISPLAY MESSAGE ========================
DISP_MES_1:
MOV A,#80H ; ROW 1- COL 1
CALL LCD_CON
MOV DPTR,#MESSAGE_1 ; "AVERAGE TEMP:"
CALL LCD_DISP
RET
DISP_MES_4: MOV A,#0C0H ;ROW 2, COL 1
CALL LCD_CON
MOV DPTR,#MESSAGE_4 ; " MIN: "
CALL LCD_DISP
RET
DISP_MES_5:
MOV A,#0C8H ;ROW 2, COL 9
CALL LCD_CON
MOV DPTR,#MESSAGE_5 ; " MAX:"
CALL LCD_DISP
RET
;=======================LCD DISPLAY============================
LCD_DISP:
MOV A,#0
MOV R0,A
LCD_LOOP1: MOV A,R0
MOVC A,@A+DPTR
JZ END_DISP
CALL LCD_DATA
MOV A,#06H
CALL LCD_CON ;SHIFT RIGHT
INC R0
SJMP LCD_LOOP1
END_DISP: RET
DISP_AVR_TEMP: MOV A,#08EH ;ROW 1-COL 14
CALL LCD_CON
MOV A,TEMP_AVR
MOV B,#10
DIV AB
ADD A,#48 ;HANG CHUC
CALL LCD_DATA
MOV A,#08FH ;ROW 1-COL 15
CALL LCD_CON
MOV A,B
ADD A,#48 ;HANG DON VI
CALL LCD_DATA
RET
DISP_MIN_TEMP:
MOV A,#0C4H ;ROW 2-COL 4
CALL LCD_CON
MOV A,TEMP_MIN
MOV B,#10
DIV AB
ADD A,#48 ;HANG CHUC
CALL LCD_DATA
MOV A,#0C5H ;ROW 2-COL 5
CALL LCD_CON
MOV A,B
ADD A,#48 ;HANG DON VI
CALL LCD_DATA
RET
DISP_MAX_TEMP: MOV A,#0CDH ;ROW 2-COL 13
CALL LCD_CON
MOV A,TEMP_MAX
MOV B,#10
DIV AB
ADD A,#48 ;HANG CHUC
CALL LCD_DATA
MOV A,#0CEH ;ROW 2-COL 14
CALL LCD_CON
MOV A,B
ADD A,#48 ;HANG DON VI
CALL LCD_DATA
RET
;========================LCD CONTROL===========================
LCD_CLEAR: MOV A,#01H ; CLEAR LCD
CALL LCD_CON
LCD_CON:
CALL LCD_READY
MOV P0,A ; DATA
CLR P3.0 ; RS=0
CLR P3.1 ; R/W=0
SETB P3.4 ; E=1
CLR P3.4 ; E=0
RET
LCD_DATA:
CALL LCD_READY
MOV P0,A ; DATA
SETB P3.0 ; RS=1
CLR P3.1 ; R/W=0
SETB P3.4 ; E=1
CLR P3.4 ; E=0
RET
LCD_READY:
SETB P0.7
CLR P3.0 ;RS=0
SETB P3.1 ;R/W=1
LCD_BUSY:
SETB P3.5 ;E=1
CLR P3.5 ;E=0
JB P0.7,LCD_BUSY
RET
END_PROG:
END
Các file đính kèm theo tài liệu này:
- DO149.DOC