Bộ vi xử lý có một bộ chương trình bên trong dung lượng 8Kbyte , 128 byte RAM trong để có thể sắp xếp dữ liệu và thông tin điều khiển . Ngoài ra còn có 2 bộ định thời 16 bit Timer 0, Timer1, chúng cũng có thể được sử dụng như là các bộ đếm sự kiện. Có 4 cổng P0 P3 8 bit độc lập với nhau được sử dụng cho những mục đích điều khiển rất đa dạng . Khi làm việc với bộ nhớ bên ngoài cổng P0 dùng để truyền nửa dưới của các địa chỉ nhớ được sử dụng giống như dùng cho các dữ liệu 8 bit .Sau đó qua cổng P2 sẽ diễn ra quá trình xuất ra nửa trên của các địa chỉ 8 bit . Cổng P1 và P3 có chứa mỗi cổng một cổng vào/ ra 8 bit có thể sử dụng cho những mục đích điều khiển khác nhau . ở cổng P3 còn có thêm các đường dẫn điều khiển dùng để trao đổi với một bộ nhớ bên ngoài , để đấu nối giao diện nối tiếp cũng như các đường dẫn ngắt bên ngoài.
29 trang |
Chia sẻ: Dung Lona | Lượt xem: 1523 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề tài Thiết kế hệ vi xử lý 8 bit, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Đề tàI THIếT Kế Hệ VI Xử Lý 8 BIT
YÊU CầU
Phần cứng :
Bộ vi xử lý
Bộ nhớ chương trình ROM : 8KB từ địa chỉ 0000H
Bộ nhớ dữ liệu RAM 4KB có địa chỉ tuỳ chọn.
Cổng vào tương tự 8 kênh nhận tín hiệu nhiệt độ từ 0 – 10V
tương ứng vói nhiệt độ từ 0 – 200 độ C.
Phần mềm :
Tín hiệu cho phép chạy và dưng chương trình.Tín hiệu dưng khẩn cấp.
Đọc tín hiệu từ 8 kênh đo lư trữ trong vùng nhớ RAM .
Sau mỗi lần đọc tính giá trị trung bình và gửi kết quả ra cổng hiển thị băng LED.
So sánh nhiệt độ trung bình với từng kênh . Nếu cao hơn hoặc thấp hơn gửi tín hiệu báo ra từng kênh tương ứng. Giá trị cho phép này đặt tại một ô nhớ của RAM.
Chương trinh dừng lại báo động bằng còi nếu xảy ra một số đ
- Giá trị trung bình giá trị min hoặc max tương ứng cho trước.Các giá trị max&min này được đặt ở trong 2 ô nhớ RAM.
- Có 4 kênh đo vượt quá hoawc nhỏ hơn giá trị giới hạn cho phép so với giá trị trung bình.
Mục lục
Giới thiệu chung .
Mục lục
Phần 1 : thiết kế Hệ vi xử lý 8 bit
Chương 1 . Tìm hiểu yêu cầu công nghệ
CHương 2 . Lựa chon hệ vi xư lý
CHƯƠNG 3. Lựa chọn thiết bị
1 - Thiết kế bộ nhớ
2 - Thiết kế cổng vào ra số
3 - Thiét kế vào ra tương tự
4 - Ngoại vi logic
CHƯƠNG 4. Thiết kế sơ đồ chi tiết hệ thống
PHầN 2 : XÂY DựNG PHầN MềM
CHƯƠNG 1 : Lưu đồ thuật toán
1 - Tìm hiểu yêu cầu lập trình
2 - Bố trí dữ liệu
3 - Xây dựng lưu đồ thuật toán
CHƯƠNG 2 : Viết chương trình
Giới thiệu chung
Ngày nay với sự phát triển của khoa học công nghệ, việc áp dụng những thành tựu khoa học vào trong đời sống và sản xuất ngày càng nhiều . Hơn nữa trong các nhà máy, xí nghiệp việc tự động hoá các quá trình sản xuất, tự động hoá các thiết bị điều khiển là một vấn đề hết sức quan trọng và cần thiết. Trong các thiết bị tự động muốn điều khiển một quá trình nào đó một cách tối ưu thì nhất thiết phải có các thiết bị đo, chính nhờ các thiết bị đo người ta có thể kiểm soát được các thông số của hệ thống mà từ đó đưa ra các tín hiệu điều khiển nhằm làm cho hệ thống hoạt động ổn định .
Trước đây khi ngành vật liệu chưa tìm ra các vật liệu mới, thì các dụng cụ đo thường được làm bằng cơ khí có độ chính xác không cao, dải đo hẹp, không làm việc được trong các môi trường đòi hỏi độ bền cơ học cao. Khi ngành vật liệu tìm ra được các vật liệu mới, công nghệ chế tạo phát triển đã có thể tạo ra các thiết bị đo thông minh, có độ chính cao, làm việc được trong các môi trường khắc nghiệt như : đo nhiệt độ lò nung, đo nồng độ các chất hoá học … nhờ các thiết bị đo thông minh này người ta có thể kiểm soát các thông số của hệ thống một cách chặt chẽ .
Khi khoa học công nghệ ngày càng phát triển việc đo không chỉ là biết giá trị của đại lượng cần đo mà những giá trị này còn là những thông tin cần được lưu trữ và xử lý . Để cho quá trình thu thập các thông tin đo một cách tự động người ta gắn vào các thiết bị đo các bộ vi điều khiển nhằm điều khiển các quá trình đo, xử lý và có thể là phải truyền đi .
Theo như yêu cầu của bài toán đặt ra là xây dung một hệ đo, thu thập nhiệt độ. Với 8 kênh đo nhiệt độ ở những vị trí khác nhau và những dải nhiệt độ khác nhau thì việc sử dụng một bộ vi điều khiển trong hệ là một điều cần thiết. Hiện nay, trên thị trường có rất nhiều họ vi điều khiển như : 8051, 68HC11, PIC, AVR… vì vậy việc lựa chọn một bộ vi điều khiển cho hệ thống cần phải có giá thành rẻ nhưng vẫn đáp ứng được yêu cầu của bài toán tối ưu. ở đây ta sử dụng bộ vi điều khiển 8051 là đủ để điều khiển hệ thống hoạt động tốt.
PHầN 1 : THIếT Kế Hệ VI Xử Lý 8 BIT
CHƯƠNG 1 : Chọn hệ vi xử lý
1 . Phân tích chung :
Ngày nay với sự phát triển của khoa học công nghệ, việc áp dụng những thành tựu khoa học vào trong đời sống và sản xuất ngày càng nhiều . Hơn nữa trong các nhà máy, xí nghiệp việc tự động hoá các quá trình sản xuất, tự động hoá các thiết bị điều khiển là một vấn đề hết sức quan trọng và cần thiết. Trong các thiết bị tự động muốn điều khiển một quá trình nào đó một cách tối ưu thì nhất thiết phải có các thiết bị đo, chính nhờ các thiết bị đo người ta có thể kiểm soát được các thông số của hệ thống mà từ đó đưa ra các tín hiệu điều khiển nhằm làm cho hệ thống hoạt động ổn định .
Theo như yêu cầu của bài toán đặt ra là xây dung một hệ đo, thu thập nhiệt độ. Với 8 kênh đo nhiệt độ ở những vị trí khác nhau và những dải nhiệt độ khác nhau thì việc sử dụng một bộ vi điều khiển trong hệ là một điều cần thiết. Hiện nay, trên thị trường có rất nhiều họ vi điều khiển như : 8051, 68HC11, PIC, AVR… vì vậy việc lựa chọn một bộ vi điều khiển cho hệ thống cần phải có giá thành rẻ nhưng vẫn đáp ứng được yêu cầu của bài toán tối ưu.
Hệ vi xử lý 80xxx
Hệ vi điều khiển MCS.51
Vi điêu khiển hãng MOTOROLA
Họ vi điều khiển PIC
AVR . . .
Như vậy khi cần truy nhập một thiết bị ngoại vi nào ta chỉ cần truy nhập vào vùng địa chỉ của thiết bị đó, thông qua bộ giải mã địa chỉ 74LS138 ta sẽ nhận được một xung chọn vỏ của thiết bị đó. Việc giao tiếp giữa bộ vi điều khiển với các thiết bị thông qua các Port 0, Port 2, Port 3. Vì hai bộ nhớ ngoài có cùng dung lượng là 8K nên nó có tất cả là 13 đường địa chỉ, nhưng các cổng của bộ vi điều khiển chỉ có 8 chân (ở đây là Port 0) cho nên cần có một mạch chốt địa chỉ ở nửa chu kỳ đầu và nó kết hợp với 5 đường địa chỉ của Port 2 ở nửa chu kỳ sau tạo thành 13 đường địa chỉ. Việc lấy số liệu từ bộ chuẩn hoá vào trong vi điều khiển phải thông qua bộ chuyển đổi ADC. Khi có xung tích cực cùng tác động vào 2 chân ALE và chân START của ADC, nó sẽ yêu cầu ADC chốt số liệu và thực hiên chuyển đổi , khi nó chuyển đổi xong nó sẽ phát ra một tín hiệu ở chân EOC, chân này được nối thẳng với chân ngắt ngoài INT1 của vi điều khiển. Khi có ngắt này MCU(Micro Controller Unit) sẽ thực hiện chương trình phục vụ ngắt, chương trình này sẽ yêu cầu MCU đọc số liệu từ ADC .
Để cho việc giao tiếp giữa người và hệ ở đây ta sử dụng bộ hiện thị LED 7_segment và một bàn phím (key pad) gồm 4phím.
Sơ đồ khối sơ bộ của hệ thống được mô tả như sau:
CHƯƠNG 3 : Lựa chọn thiết bị .
Trong phần tổng quan được giới thiệu chi tiết các thiết bị và linh kiện sử dụng trong hệ thống như: nhiệt điện trở Platin, mạch khuếch đại chuẩn hoá, bộ chuyển đổi tương tự số ADC0809, vi điều khiển 8051,bộ chốt số liệu, các bộ nhớ ngoài
CPU
ROM , RAM
Thiết bị ngoại vi :
+ Thiết bị số (digital)
+ Thiết bị tương tự (analog)
+ Thiết bị logic
ξ1. CPU - Vi điều khiển 8051
Bộ vi điều khiển viết tắt Micro controller, là mạch tích hợp trên một chip có thể lập trình được, dùng để điều khiển hoạt động của một hệ thống. Theo chương trình của người lập trình.
Trong các thiết bị điện và điện tử dân dụng các bộ vi điều khiển đã điều khiển máy giặt, điều khiển máy lạnh, thang máy, … Còn trong hệ thống sản xuất tự động, bộ vi điều khiển sử dụng trong robot, dây chuyền tự động,… Các hệ thống càng thông minh thì vai trò của vi điều khiển càng quan trọng.
Phần chính của vi mạch là đơn vị xử lý trung tâm CPU gồm có :
Thanh ghi tích luỹ (A)
Thanh ghi tích luỹ phụ (B) dùng cho phép nhân và chia
Đơn vị lôgic số học ALU
Từ trạng thái chương trình PSW
4 bank thanh ghi
Con trỏ ngăn xếp SP cũng như con trỏ dữ liệu DTPR định địa chỉ cho bộ nhớ dữ liệu bên ngoài
Ngoài ra còn có bộ đếm chương trình PC , bộ giải mã lệnh , bộ điều khiển thời gian và logic
Đơn vị 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 .
Bộ vi xử lý có một bộ chương trình bên trong dung lượng 8Kbyte , 128 byte RAM trong để có thể sắp xếp dữ liệu và thông tin điều khiển . Ngoài ra còn có 2 bộ định thời 16 bit Timer 0, Timer1, chúng cũng có thể được sử dụng như là các bộ đếm sự kiện. Có 4 cổng P0 áP3 8 bit độc lập với nhau được sử dụng cho những mục đích điều khiển rất đa dạng . Khi làm việc với bộ nhớ bên ngoài cổng P0 dùng để truyền nửa dưới của các địa chỉ nhớ được sử dụng giống như dùng cho các dữ liệu 8 bit .Sau đó qua cổng P2 sẽ diễn ra quá trình xuất ra nửa trên của các địa chỉ 8 bit . Cổng P1 và P3 có chứa mỗi cổng một cổng vào/ ra 8 bit có thể sử dụng cho những mục đích điều khiển khác nhau . ở cổng P3 còn có thêm các đường dẫn điều khiển dùng để trao đổi với một bộ nhớ bên ngoài , để đấu nối giao diện nối tiếp cũng như các đường dẫn ngắt bên ngoài.
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 với các bộ đệm thích hợp , ta có thể hình thành một cổng nối tiếp RS232 đơ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 và được ấn định bằng một bộ định thời .
Sơ đồ khối của chip 8051
ãTổ chức bộ nhớ trong 8051
8051 có 2 khoảng địa chỉ độc lập cho bộ nhớ chương trình và bộ nhớ dữ liệu . Sự độc lập của bộ nhớ chương trình và bộ nhớ dữ liệu cho phép bộ nhớ dữ liệu được xử lí bởi địa chỉ 8 bit . Nó có thể được lưu trữ và thao tác nhanh hơn bởi CPU 8 bit . Tuy nhiên địa chỉ 16 bit cũng có thể được phát ra thông qua thanh ghi DPTR.
Bộ nhớ chương trình (ROM,EPROM) là bộ nhớ chỉ có đọc . Bộ nhớ này có thể lên tới 64Kbyte . Trong 8051 4Kbyte thấp nhất của bộ nhớ chương trình là trên chip. Bộn nhớ ngoài có thể đọc được nhờ tín hiệu chốt của chân PSEN.
Bộ nhớ dữ liệu độc lập với bộ nhớ chương trình . 128 byte thấp nhất của bộ nhớ dữ liệu trên chip và nó có thể truy nhập đến 64Kbyte ngoài CPU sẽ phát ra các tín hiệu RD và WR cần thiết trong suốt quá trình xử lí bộ nhớ dữ liệu .
a/ Bộ nhớ chương trình :
Sau khi reset CPU bắt đầu thực hiện từ địa chỉ 0000H. Bảng vector ngắt bắt đầu từ địa chỉ 0003H đến 002BH. Mỗi một ngắt được xác định tại một vị trí cố định trong bộ nhớ chương trình . Khi một ngắt xảy ra PCU sẽ nhảy tới vị trí nơi mà nó yêu cầu phục vụ . Mỗi một vector ngắt có độ dài 8 Byte .Nếu chương trình này đủ ngắn thì ta chứa trong 8 Byte này , nếu chương trình đủ dài thì nó chứa một lệnh nhảy tới chương trình phục vụ .
4 Kbyte (hoặc 8 Kbyte , 16Kbyte ) phần thấp nhất của bộ nhớ chương trình có thể ở ROM trong hoặc ROM ngoài . Điều này được thực hiện bởi nối chân EA lên mức 1 hoặc mức 0 (nếu bằng 1 thì ROM ngoài , nếu bằng 0 thì ROM trong) . Khi truy nhập bộ nhớ ngoài sử dụng cổng P0 và P2 làm 16 đường vào ra . Trong đó P0 làm chức năng Bus địa chỉ và Bus dữ liệu . Nó sẽ phát ra Byte thấp của bộ nhớ chương trình giồng như địa chỉ phần thấp . P2 sẽ phát ra địa chỉ phần cao.
Địa chỉ của bộ nhớ chương trình luôn có độ rộng là 16 bit.
b/ Bộ nhớ dữ liệu :
Bộ nhớ dữ liệu được chia thành 4 vùng :
Vùng 1 :Địa chỉ từ 00H đến 1FH là phần thấp nhất được chia thành 4 khối của 8 thanh ghi . Các lệnh của chương trình sẽ gọi các thanh ghi này từ R0 đến R7 . Hai bit trong thanh ghi trạng thái (RS0,RS1 ) sẽ lựa chọn khối 4 này .
Vùng 2: Địa chỉ từ 20H đến 2FH bao gồm 16 byte là vùng ô nhớ địa chỉ theo bit .
Vùng 3: Địa chỉ từ 30H đến 7FH làm chức năng thông thường của bộ nhớ RAM
Vùng các thanh ghi chức năng đặc biệt (SFR).Có 21 thanh ghi chức năng đặc biệt chiếm phần trên của RAM nội từ địa chỉ 80H đến FFH.
c/ Cổng vào ra song song:
8051 có 4 cổng vào ra song song , cả 4 cổng đều có thể định
chiềuứng với nó là bộ điều khiển đầu ra và bộ đệm đầu vào .
Điều khiển đầu ra của cổng P0 , cổng P2 và bộ đệm đầu vào của cổng P0 được sử dụng cho việc xử lí bộ nhớ ngoài . Trong ứng dụng này đầu ra của cổng P0 là byte thấp của địa chỉ bộ nhớ ngoài . Đầu ra của cổng P2 là địa chỉ của byte cao.
Cổng 1,2,3 có các điện trở pull_up bên trong . Cổng 0 có đầu ra cực máng để hở . Mỗi đường I/O có thể sử dụng độc lập giống như đầu vào hoặc đầu ra . Khi sử dụng là đầu vào thì bộ chốt bit của cổng phải được lạp ở mức logic 1 , điều này sẽ đóng FET điều khiển đầu ra . Đối với cổng 1,2,3 thì mức logic 1 ở các chân được kéo lên mức logic cao bởi điện trở pullup trong , nhưng nó cũng có thể được kéo xuống mức logic thấp bởi nguồn ngoài .
Cổng 0 không có điện trở pullups ở phía trong . Điện trở FET pullups trong bộ điều khiển đầu ra P0 chỉ được sử dụng khi cổng đang phát ở mức logic cao trong suốt quá trình xử lí bộ nhớ ngoài . Trong các trường hợp khác thì FET pullups sẽ khoá.
Tất cả bộ chốt các cổng đều được viết ở mức logic 1 bởi chức năng reset. Khi mức logic 0 được viết vào bộ chốt nếu cổng muốn làm đầu vào thì mức logic 1 phải được viết vào nó.
Sơ đồ chân của 8051
ξ2. Bộ nhớ ngoài :
Sử dụng bộ vi xử lý 8051 đã có sẵn trong chip 128 byte RAM và 4K ROM, yêu cầu thiết kế hệ thống 8KB ROM (0000h-1FFFh) và 4KB RAM có địa chỉ tuỳ chọn. Ta có thể chọn các vi mạch nhớ như sau:
ROM trong 4KB địa chỉ vật lý từ : 0000H – 0FFFH
ROM ngoài 4KB 2732 địa chỉ vật lý từ : 1000H – 1FFFH
RAM ngoài 4KB 6232 địa chỉ vật lý từ : 3000H – 3FFFH
Địa chỉ của 8255:CWR,PA,PC : 5000H – 5003H
Địa chỉ của ADC 0809 (8 cửa vào) : 6000H – 6007H
. Bộ nhớ ngoài ROM
Trong vi điều khiển bộ nhớ chơng trình của nó có 4K byte ROM trong, với yêu cầu sử dụng thêm EPROM2732 có dung lợng lớn hơn. Đây là bộ nhớ lập trình xoá bằng tia cực tím, nó có tốc độ truy nhập rất nhanh. Với dung lợng 4K byte nh vậy nó có 13 đờng chọn địa chỉ và có 8 đờng ra dữ liệu. EPROM chỉ đợc hoạt động khi chân #OE ở mức tích cực thấp, nó đợc vi điêù khiển chọn làm việc khi chân #CE cũng đợc tích cực thấp. EPROM đợc nuôi với mức điện áp 5V, điện áp này đợc đa vào bộ nhớ thông qua chân Vpp . Địa chỉ của EPROM trong hệ thống là 2000 á2FFF
Sơ đồ chân của EPROM
EPROM 4KB 2732 (AMD)
. Bộ nhớ ngoài RAM
Bên cạnh bộ nhớ chương trình EPROM ta còn sử dụng bộ nhớ ngoài RAM có dung lượng 4K byte, đồng thời cũng có 12 đường địa chỉ 8 đường dữ liệu. Nó có địa chỉ 3000á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 #CS1. Ngoài ra còn có đường chọn vỏ khác là CS2 được nối tích cực và có hai đườngtín hiệu yêu cầu đọc viết là #OE, #WE .
Sơ đồ chân của EPROM Sơ đồ chân của RAMM
EPROM 4KB 2732 (AMD) RAM 2KB 6116 (AMD)
ξ3. Thiết bị ngoại vi :
a . Thiết bị ngoại vi số (digital) :
1 .Ghép nối với 8255
Tổng quan IC 8255 (Intel)
8255A là một vi mạch ghép nối song song 8 bit, được dùng phổ biến trong các hệ vi xử lý để làm vi mạch ghép nố vào /ra song song. Nó có thể ghép nối trực tiếp với 8085, 8051, Z80 hoặc M6800 và cũng có thể ghép nối với các họ vi xử lý 8 bit.
8255 có 40 chân xếp thành 2 hàng đối xứng, nguồn nuôi 5V.Gồm:
Các cổng vào/ra: 3 cổng A, B, C. Trong đó, cổng A(từ PA0 đếnPA7) và cổng B(PB0 đến PB7) là cổng 8 bit, còn cổng Ccó thể chia thành 2 nhóm độc lập bằng chương trình: nửa cao(PC4 áPC7) và nửa thấp(PC0áPC3).
Các tín hiệu điều khiển:
RD : vi xử lý đọc số liệu từ cổng này.
A0, A1: lấy từ 2 bit địa chỉ của vi xử lý và tổ hợp tín hiệu của A0,
A1 sẽ xác định cho ta cổng vào thanh ghi điều khiển.
CS: (chi select) tín hiệu chon vỏ.
WR:viết số liệu vào cổng I/O.
RESET:dùng để đặt lại hệ thống.
GND:chân nối đất.
Vcc: nguồn nuôi +5v.
Các chân số liệu :(D0 áD7): 8 bit số liệu.
Sơ đồ chân 8255 (Intel interface) :
Cổng P3 của 8085 sẽ dùng 2 chân RD và WR để nối trực tiếp với 2 chân RD và WR tương ứng ở 8255A. Các đường A0, A1 được nối trực tiếp từ BUS vào 8255A, và được giải mã bên trong 8255A để chọn ra các cửa vào/ra A,B,C và thanh ghi điều khiển của 8255A.
Như vậy ta thấy rằng khi dùng 8255A, thì việc ghép nối giữa vi xử lý với các thiết bị phần cứng khác sẽ đơn giản hơn, ít phải dùng các mạch phụ hơn. Đây là một ưu điểm lớn của 8255A
Sơ đồ khối 8255 :
Bên trên là sơ đồ cấu trúc của 8255 . Thiết bị ngoại vi này có 3 chế độ hoạt động các chế độ này được lựa chọn bởi các chân chọn A0 , A1 . Ta có bảng chân lý như
A0
A1
Chế độ
0
0
CWR
0
1
PORT A
1
0
PORT B
1
1
PORT C
Dữ liệu vào ra thiết bị qua data bus D0-D7 quan hệ hai chiều. Các cửa ra của thiết bị có trạng thái tuỳ thuộc vào thanh ghi điều khiển CWR (control word registor) cụ thể như sau :
CWR
1
MA1
MA0
A
CH
MB
B
CL
Các bit MA0 , MA1 đặt chế độ cho cửa ra nhóm A bao gồm A,CH
MA0
MA1
Chế độ
0
0
MODE 0
0
1
MODE 1
1
0
MODE 2
1
1
MODE 2
Các bit A,B,CH,CL thiết lập chế độ và ra cho các cổng tương ứng :
A,B,CH,CL = 0 : cổng ra
A,B,CH,CL =1 : cổng vào
Bit MB chế độ cho cưa ra vào nhóm B :
MB = 0 : cổng ra
MB = 1 : cổng vào
Các chế độ vào ra của 8255 được trinh bày cu thể sau đây :
1. Chế độ 0 ( chế độ vào ra cơ sở ) :
Các cổng A , B , C được lập trình như các cổng vào ra thông thường qua thanh ghi CWR . Muốn vậy các bit chế độ phải được clr xuống thấp ( 0 ) và chế độ vào ra được đặt bởi trực tiếp bởi các bit điều khieer tương ứng .
VD : Mong muốn tất cả các cổng đều là cổng ra .
CWR = #10000000 (80H)
1
0
0
0
0
0
0
0
2 . Chế độ 1 ( vào ra có xung cho phép ):
Chế độ này sử dung để vào ra bằng ngắt khi giao tiếp với thiết bị ngoại vi.ở
chế độ này PORT A ,PORT B được sử dụng vào ra cơ sở với các tín hiệu bắt tay
móc nối ( handshaking ) PORT C . Các đặc điểm cơ bản ở chế đọ 1 :
Hai nhóm A , B mỗi nhóm 1 cổng 8 bit dữ liệu và 4 bit điều khiển / dữ liệu
Mỗi cổng 8 bit vào ra đẹm và chốt dữ liệu với các bit đièu khiển sau :
Chế độ vào :
STB ( Strobe input ) : tín hiệu vào ( low ) ngoại vi báo cho
8255 biết đệm dữ liệu đã đầy.
IBF ( input buffer full ) : tín hiệu ra ( high ) bào hiệu dữ
liệu đã được chốt . IBF được đặt khi STB =LOW và xoá
khi có sườn lên đầu vao RD (read).
INTR ( interupt request ) : Là tín hiệu ra yêu cầu ngắt CPU
nó đựơc đặt khi các chân STB,IBF,INTE tích cực và xoá
khi có sườn xuống RD.
Chế độ ra :
ACK (ackowledge input ) : là tín hiệu vào ngoại vi thông
báo đã nhận dược dữ liệu .
OBF ( output buffer full ) : là tín hiệu ra báo hiệu bộ đệm
đã đầy .
INTR ( interupt request ) : Là tín hiệu ra yêu cầu ngắt CPU
nó đựơc đặt khi các chân STB,IBF,INTE tích cực và xoá
khi có sườn xuống RD.
3 . Chế độ 2 ( vào ra BUS hai chiều ):
Chế độ này port A hoạt động như một cổng hai chiều về cơ bản giôngs chế độ 1 chỉ khác : port A hoạt đông hai chiều port B hoạt động ở các chế độ 0 , 1 như bình thường .Các tin hiệu bắt tay như sau :
Chế độ ra :
- ACK (ackowledge input ) : là tín hiệu vào ngoại vi thông
báo đã nhận dược dữ liệu .
- OBF ( output buffer full ) : là tín hiệu ra báo hiệu bộ đệm
đã đầy .
- INTE 1 điều kiển đặt hoặc xoá bit PC 6 (ACK)
Chế độ vào :
- STB ( Strobe input ) : tín hiệu vào ( low ) ngoại vi báo cho
8255 biết đệm dữ liệu đã đầy.
- IBF ( input buffer full ) : tín hiệu ra ( high ) bào hiệu dữ
liệu đã được chốt . IBF được đặt khi STB =LOW và xoá
khi có sườn lên đầu vao RD (read).
- INTE 2 điều kiển đặt hoặc xoá bit PC 4 (STB)
b. Các thiết bị phụ trợ
1. Mạch chốt 74LS373
Đâ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 của bộ chốt
2.6.2. Bộ giải mã 74LS138
Nó bao gồm 14 chân, trong đó:
Y0 á Y7 là các đường ra địa chỉ, tích cực ở mức thấp.
A,B,C là 3 đường địa chỉ vào , tích cực cao.
E1 ,E2 là các đầu vào cho phép làm viêc , tích cực ở mức thấp.
E3 là các đầu vào cho phép làm viêc , tích cực ở mức cao.
6)Ghép nối với LED 7 thanh:
LED(Light Emiting Diode-LED) là một phần tử phối ghép với bộ vi xử lý ở đầu ra rất thông dụng. Trong trường hợp đơn giản, đó có thể chỉ là một vài đèn LED đơn lẻ để báo hiệu một vài trạng thái nào đó. Phức tạp hơn, đó là các đèn LED được tổ hợp thành đèn chỉ thị 7 LED hoặc nhiều hơn để hiển thị các thông tin dươí dạng số hoặc chữ.
Một trong các phối ghép giữa vi xử lý và đèn LED 7 nét thường thấy là dùng mạch SN7447 để giải mã số BCD ra 7 nét và để điều khiển bộ đèn chỉ thị.Đây là kiểu điều khiển đèn LED ở chế độ hiển thị tĩnh, có đặc điểm là khá đơn giản về kết cấu nhưng rất tốn năng lượng vì để thắp sáng các nét của đèn thì cần có dòng điện liên tục chạy qua. Sơ đồ phối ghép theo kiểu này được biểu diễn ở hình vẽ dưới đây.
Thiết kế hiển thị trong đồ án :
Trong thực tế nếu thiết kế như trên có các nhược điểm sau :
Tốn nhiều tài nguyên của hệ thống
Nếu các đèn không hoạt động ở chế độ quét sẽ tiêu thụ rất nhiều điện
năng , cụ thể là :
Theo tiêu chuẩn 20mA cho mỗi thanh .Một đèn 7đoạn tiêu thụ
khoảng 20 x 7 = 140mA .
Nếu sử dụng 8 đèn 7 đoạn sẽ tiêu thụ 8 x140 =1120 mA (>1A)
Quá lớn đối với hệ vi xử lý.
Do vậy để khắc phục các điều kể trên ta đưa ra một phương án sau chỉ sử dụng một cổng PPI 8255 quản lý 8 đèn LED theo chế đọ quét :
*Nguyên tắc hoạt động:
Giá trị số cần hiển thị của mỗi con số được gửi đến cổng PB của 8255A từ 8085 dưới dạng mã BCD. Từ đây số BCD được mạch SN7447 giải mã và tạo ra các tín hiệu điều khiển thích hợp đưa đến các chân katot a,b,c,d,e,f,g của LED. Mỗi giá trị cần hiển thị được đưa đến cổng PB cứ mỗi 2ms một lần cho một đèn.
Giá trị số nói trên được hiện ra trên chữ số thập phân nào lại là do các bit của byte dữ liệu từ 8051 đưa đến cổng PA của 8255A quyết định. Như vậy, cứ mỗi 2ms thì ta phải đưa dữ liệu ra PB, rồi PA và cho hiện ra được một giá trị số trên một đèn. Trong trường hợp cần hiển thị giá trị của nhiệt độ thì ta chỉ cần tới 3 con số,tức là cần 3 đèn LED 7 thanh, do đó ta chỉ phải mất 2.3=6ms để cho hiện số của cả dãy đèn. Sự sáng nhấp nháy của các đèn với chu kỳ 6ms thì mắt người không thể cảm nhận được sự nhấp nháy của nó, và ta sẽ cảm giác là chúng sáng một cách liên tục.
ξ2. Ngoai vi tương tự :
1 . Sensơ nhiệt điện trở :
Platin có thể chịu được nhiệt độ đến 1200°C không bị oxy hoá hoặc nóng
ở nhiệt độ từ 0 đến +660°C
Ro - điện trở ở 0°C.
A, B, C - hằng số.
Đặc tính của nó có dạng phi tuyến,với nhiệt độ ngoài khoảng (-180,+660) quan hệ RT=f(t) được chuẩn hoá và cho dưới dạng bảng.
Nhược điểm của nhiệt điện trở Platin là đặc tính phi tuyến, không dùng được trong môi trường oxy hoá khử, nhưng do độ bền hoá học cao, tính dẻo lớn, người ta có thể chế tạo thành sợi dất mỏng(đến 1,25 àm) nên được sử dụng rộng rãi
3. Bộ chuyển đổi tương tự số ADC 0809.
Bộ ADC 0809 là một thiết bị CMOS tích hợp với một bộ chuyển đổi tương sang số 8 bit, bộ chọn kênh và mật bộ logic điều khiển tương thích. 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ý.
Hoạt động chung:
Khi một kênh được chọn đồng thời yêu cầu START ,ALE được tích cực . 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 . Yêu cầu độ rộng xung START không nhỏ hơn 200ns. 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. Kết thúc quá trình chuyển đổi chân EOC trạng thái tích cực cao báo hiệu kết thúc quá trình chuyển đổi. Sau khi kết thúc quá trình chuyển đổi nếu chân E (enable) ở trạng thái tích cực dữ liệu lúc này mới được chốt và đưa ra data bus ngược laijddaauf ra ở trạng thái cao trở.
ý 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
Độ phân giải 8 bít
Tổng sai số chưa chỉnh ±1LSB
Thời gian chuyển đổi 100 ms
Nguồn cung cấp ± 5 V
Điện áp vào 0-5V
Tần số xung clock 10kHz – 1028 kHz
Nhiệt độ hoạt động –400C – 85OC
Dễ dàng giao tiếp với vi xử lý hoặc dùng riêng
Không cần điều chỉnh zero hoặc thang đo
Bảng chân lý và sơ đồ chân của vi mạch:
Cấu trúc ADC 0809 và giản đồ thời gian quá trìng chuyển đổi như sau
A
B
C
X
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
Các đặc điểm của ADC 0809
Từ những tìm hiểu trên ta có thể thiết kế vào ra tương tự cho đề tài này . Vi mạch ADC 0809 được kết nối với PPI 8255 quá trình vào ra số liệu đòi hỏi thực hiện ngắt .Gọi ngắt có thể do trực tiếp ADC0809 yêu cầu 8051 hoặc do giao tiếp vi mạch nay với PPI 8255 ( chế độ 1 ) và 8255 yêu cầu ngắt 8051 .Để đơn giản trong quá trình lập trình vẫn thoả mãn yêu cầu dự án chỉ cần PPI 8255 hoạt động ở chế độ và ra cơ sở ADC0809 trực tiếp gọi ngắt 8051 . Để thực hiện ý định trên
cấu trúc sau được đề suất :
Hoạt động của sơ đồ như sau :
Khi 8051 yêu cầu đọc số liệu từ một kênh đo nào đó 8051 gọi lệnh kích hoạt ADC 0809 lệnh đó có thể được mô tả như sau :
ORG 0000H
. . .
ORG 0013H ; Đ/C ngắt ngoài1
LJMP ADC0809 ; Gọi chương trình con phục vụ
ngắt ADC0809
ORG 0030H
MAIN : . . .
CLR A
MOVX 5000H,A ; Gọi tới IN0 của ADC0809
. . .
ADC0809: . . .
MOVX R0,PA ; Khi kết thúc quá trình chuyển
đổi ADC sẽ gọi ngắt INTR1 và
lệnh này sẽ đọc d/l vào PORT A
Kết quả lưu vào thanh ghi R0
RETI
Do chân EOC (end of convert ) tích cực cao nên phải qua chân đảo vào INTR1
Phân tích tác động phần cứng vào ADC0809 qua chuỗi lệnh trên như sau :
Lệnh MOVX 5000h,A sẽ có một loạt các tác động sau đây
- Đưa lên BUS địa chỉ giá trị 5000H do kết nối thích hợp với 74138
nên chân Q3 của ‘138 tích cực đồng nghĩa việc chọn vỏ ADC 0809
Đồng thời bộ control & timer on chip 8051 gửi tín hiệu điều khiển viết WR lên control BUS chân ALE,START của ADC được gọi .Bắt đầu quá trình chuyển đổi bằng một loạt các thao tác sau :
Chốt giá trị đo trên của analog tương ứng (IN0)
Tín hiệu START duy trì 200ns sau đó trễ 10μs chân EOC
xuống thấp bắt đầu quá trình chuyển đổi.
Kết thuc quá trình chuyển đổi ACD cho một tín hiệu EOC ở mức tích cực gửu về 8051 yêu cầu một ngắt . Nếu ngắt được chấp nhận sẽ gọi chương trình con phục vụ ngắt ADC0809 thực hiện việc thu thập dữ liệu.
Lệnh MOVX R0,PA có các tác động sau đây:
Gửi địa chỉ cổng PA 8255 lên address BUS . Chân Q2 của 74138 tích cực sẽ chon vỏ 8255.
Tín hiệu đọc ( RD ) được control BUS gửi qua chân RD tới 7402
cho một xung ENABLE lên ADC0809 .Kết quả chuyển đổi được đua ra data BUS và được đọc vào R0 từ cổng PA của 8255.
ξ2. Thiết bị ngoại vi logic .
1. Keypad
Keypad là một thiết bị ngoại vi để giao diện với người, người sử dụng có thể điều khiển hệ thống thông qua đó bằng việc ấn các phím chức năng. Các phím này được nối qua cổng OR vào INT0 của vi điều khiển, khi người điều khiển ấn các phím thì nó sẽ được gán với các chức năng tương ứng.Vi điều khiển hiểu được các chức năng này thông qua việc đọc giá trị đầu vào.Các phím được nối với các chân từ P1.0 đến P1.3 của vi điều khiển.
2. Thiết bị ghép nối với máy tính RS232.
Cổng nối tiếp RS232 là giao diện phổ biển rộng rãi nhất. Việc truyền dữ liệu qua nó được tiến hành theo cách nối tiếp, nghĩa là các bit dữ liệu được gửi đi nối tiếp nhau trên một đường dẫn. Trước hết, loại truyền này có khả năng dùng cho những khoảng cách lớn hơn, bởi vì khả năng gây nhiễu là nhỏ đáng kể hơn khi truyền song song. Việc truyền song song có mọt nhược điểm đáng kể là cap truyền dùng quá nhiều sợi, và vì vậy rất đắt tiền.
Cổng RS232 không phải là một hệ thống bus, nó cho phép dễ dàng tạo ra liên kết dưới hình thức điểm giữa hai máy cần trao đổi thông tin với nhau. Một thành viên thứ ba không thể tham gia vào cuộc trao đổi này.
Thiết bị báo đông ( còi )
Để báo động khi có sự cố mạch còn kết nối với còi . Một mạch còi đơn giản có thể ghép nối với 1 chân port1 8051 như sau
CHƯƠNG 4 : Thiết kế sơ đồ chi tiết hệ thống.
Ta đã nghiên cứu tưng phần của thiết kế ở các chương trên . Trong chương này ta nghiên cứu thiết kế sơ đồ tổng quát hệ thống trên.
ξ1. Các chú ý khi thiết kế với hệ vi điều khiển 8051 .
Mặc dù đã nghiên cứu kĩ lưỡng hệ vi điều khiển MCS 51 nói chung cũng như vi xử lý 8051 nói riêng ta vẫn cần nhắc lại các đặc điểm đáng chú ý khi thết kế hệ thống thực 8051.
Tải và các đặc tính một chiều :
Khi thiết kế hệ thống thực tế ngoài việc chú ý tới kết nối , phần mềm ta nên chú ý tới tải một chiều các chân linh kiện . Các chú ý sau đây là hết sức cần thiết :
Các port0,port1,port2,port3 8 bit xuất nhập hai chiều có các điện trở kéo lên bên trong có khả năng chịu dòng 4 ngõ vào TTL ( 0.4 mA cho mỗi ngõ ) riêng port 0 có khả năng kéo 8 ngõ vào TTL . Khi xuất các ngõ này được kéo lên bởi điện trở treo cao bên trong . Khi nhập các chân đang được kéo xống mức thấp do tác động bên ngoài sẽ cấp dòng .
Ta cũng cần có các điện trở keó lên bên ngoài để phục vụ khi kiểm tra chương trình hay tăng tải (fan in – fan out ) cho mạch.
Các chân ngắt ngoài và các quy tắc sử dụng ngắt :
Ngắt được sử dụng một cách rộng rãi trong các ứng dụng điều khiển . Ngắt giúp giải quyết các sự kiện xuất hiện không đồng bộ với chương trình chính đang được thực thi (hay nói cách khác CPU không biết ngắt xảy ra lúc nào ). Ngắt luôn được quét ở 4 chu kì nhịp cuối cùng trong mọi chu kì máy .
Thông thường các ứng dụng điều khiển chương trình thwc hiện ở hai mức ; mức nề và mức ngắt .
Mức ngắt gọi các chương trình con phục vụ ngắt .
Mức nền có khi chỉ là vong lặp nhảy tại chỗ SJMP $ .
Quy trình thực hiện ngắt đã nói ở trên ta chỉ nhắc lại một số điểm sau:
Ngắt được thực hiện khi không có ngắt nào khác cao hơn hoặc băng đang thực thi.
Chuỗi vòng ngắt như sau INT0 ,TF0,INT1,TF1,SERIAL,
TIMER2
- Địa chỉ các vectơ ngắt như sau :
Nguồn ngắt
Địa chỉ của vector ngắt
IE0
0003H
TF0
000BH
IE1
0013H
TF1
001BH
RI & TI
0023H
TF2 & EXF2
002BH
Khi sử dụng ngắt ngoài chú ý ngắt ngoài xảy ra khi có tác động cạnh hoặc tác động mức .Chúng được quy định bởi các bit IT0 , IT1 của thang ghi TCON . Nếu ngắt thuộc loại tác động mức ( ngắt ADC 0809 ) nguyên nhân ngắt phải được duy trì ở mức cao trong 1 chu kì máy sau đó phải đuy trì múc thấp tối thiểu một chu kì máy tiếp theo . Con nếu ngắt tác động mức phải duy trì mức tích cực cho tới khi ngắt được thực thi
ξ2 Xây dựng sơ đồ hệ thống :
Ta có thể mô tả nguyên lý hoạt động của hệ thống như sau:
Ban đầu nhiệt độ được đo thông qua các cảm biến, tín hiệu đo sau bộ cảm biến là các tín hiệu tương tự vì vậy cần phảicho qua bọ chuyển đổi chuẩn hoá.
Hệ thống được điều khiển bằng chương trình do người thiết kế lập trình sẵn, được nạp vào trong EEPROM. Từ kênh địa chỉ hệ thống chọn ra kênh cần chuyển đổi nhờ việc viết địa chỉ ra. Sau khi kết thúc quá trình chuyển đổi ADC phát ra tín hiệu EOC được nối trực tiếp với ngắt INT0 của bộ vi xử lý. Khi ngắt INT0 ở mức tích cực sẽ thực hiên một chương trình phục vụ ngắt, có nhiệm vụ thu thập số liệu đã được chuyển đổi ở đầu ra của ADC. Trong quá trình hoạt động của hệ thống ta có thể chọn kênh chuyển đổi tai thời điểm tác động. Khi số liệu đã được nhân vào Vi điều khiển bước đầu phải so sánh với các ngưỡng Hi hoặc Low để báo động,khi đẫ thoả mãn những giới hạn đo thì bước tiếp theo là sử lý số liệu đo để thông báo kêt quả đo của kênh vừa đo. Kết quả sử lý phải được lưu vào EEPROM và gửi lên máy tính để truyền tải đi xa.
3.7. Ghép nối với RS232
Để nhận và gửi số liệu lên máy tính ta sử dụng giao thức truyên theo chuẩn RS232 thông qua chân RXD và TXD của vi điều khiển. Theo một chu kỳ nhất định ta gửi kết quả đo lên máy tính để lưu trữ và truyền đi xa. Đồng thời cũng có thể nhận tín hiệu điều khiển hệ thống từ máy tính. Cơ chế truyền số liệu đi có thể được lập trình bằng phần mềm. Khi sử dụng chuẩn này ta chỉ có thể truyền dữ liệu đi trong khoảng cách ngắn(khoảng cách tối đa là 15m), với tốc độ truyền tối đa 19200baud.
3.8. Bộ nhớ chương trình EPROM và bộ nhớ dữ liệu ngoài RAM
Để truy nhập được bộ nhớ chương trình ngoài ta phải nối chân EA của vi điều khiển tích cực thấp. Các dường địa chỉ của hai bộ nhớ này được nối trực tiếp với bus địa chỉ của hệ thống và các đường dữ liệu của chúng cũng đựơc nối với bus dữ liệu của hệ thống .
3.9. Bộ giải mã
Để tại mỗi thời điểm chỉ có một thiết bị ngoại vi được làm việc với vi điều khiển, ta sử dụng bộ giải mã địa chỉ 74LS138 để xác định ra vùng địa chỉ làm việc của mỗi thiết bị ngoại vi. Đầu ra của bộ giải mã địa chỉ 74LS138 được nối với các chân chọn vỏ của thiết bị ngoại vi.
PHầN 2: Xây dựng phần mềm
CHƯƠNG 1 . Lưu đồ thuật toán
1.Lưu đồ của chương trình
a,Chương trình chính
INCLUDE 89c51.mc
;----------------------------------------------------------------
; DINH NGHIA DIA CHI CAC THIET BI & CAC VUNG NHO SU DUNG TRONH CHUONG TRINH
;----------------------------------------------------------------
ADC EQU 6000H ;Dia chi cong ADC
TBC EQU 30H ;Dia chi chua gia tri trung binh cong
;cua 8 kenh ADC
SAI_SO EQU 31H ;Gia tri sai so nhiet do cho phep
MAX EQU 32H ;Gia tri nhiet do lon nhat cho phep
MIN EQU 33H ;Gia tri nhiet do nho nhat cho phep
TRAM EQU 34H ;Dia chi o nho chua hang tram cua so
;TBC
CHUC EQU 35H ;Dia chi o nho chua hang chuc cua so
;TBC
DON_VI EQU 36H ;Dia chi o nho chua hang don vi cua so
;TBC
DATA_IN EQU 37H ;Dia chi dau chua du lieu doc vao tu
;ADC chua trong RAM noi
CWR EQU 4003H ;Dia chi cua tu dieu khien cua 8255A
PPI_A EQU 4000H ;Dia chi cua cong A cua 8255A
PPI_B EQU 4001H ;Dia chi cua cong A cua 8255A
PPI_C EQU 4002H ;Dia chi cua cong A cua 8255A
;----------------------------------------------------------------
; CHUONG TRINH CHINH
;----------------------------------------------------------------
ORG 0000H
LJMP MAIN
ORG 0003H ;Vi tri vecto ngat ngoai 0
LJMP EXI_0
ORG 0013H ;Diem nhap cua ngat ngoai 1
LJMP EXI_1
ORG 0030H ;Bat dau chuong trinh chinh
MAIN: JNB P1.0,MAIN ;An nut start ?
SETB EX0 ;Cho phep ngat ngoai 0
SETB EX1 ;Cho phep ngat ngoai 1
MOV DPTR,#CWR ;Khoi tao che do phu hop cho
;PPI 8255A
MOV A,#80H ;Che do vao ra co so
MOVX @DPTR,A ;Da khoi tao xong
MOV DPTR,#ADC
MOVX @DPTR,A ;Chuyen doi kenh dau tien ADC
MOV R0,#8 ;So kenh
MOV R1,#DATA_IN ;Do lech dia chi kenh
MOV R2,#0 ;R2 chu ket qua phep chia
MOV R3,#0 ;R3 chua phan du phep chia
CONTROL: LCALL CONVERT_DATA ;Chuyen doi so lieu de co the
;hien thi duoc
LCALL DISPLAY_TBC ;Hien thi so lieu la TBC cua
;8 kenh
LCALL CHECK_DATA ;Kiem tra xem co thoa man
;dieu kien dau bai
JNB P1.1,STOP ;Ket thuc qua trinh ?
STOP: LJMP _END
LJMP CONTROL
;----------------------------------------------------------------
;CAC CHUONG TRINH CON & ctc PHUC VU NGAT
;----------------------------------------------------------------
;Ctc dung khan cap
EXI_0: SJMP $
RETI
;Ctc ngat doc ket qua ADC
EXI_1: MOVX A,@DPTR ;Dua gia tri do vao Acc
MOV @R1,A ;Dua ket qua do vao vung nho
;quy dinh
INC R1 ;R1 tro toi o nho tiep theo
;trong vung KQ
MOV B,#8
DIV AB ;Nhiet do tung kenh chi 8
ADD A,R2 ;Cong voi ket qua phep tinh
;truoc
MOV R2,A
MOV A,B ;Phan du phep chia
ADD A,R3 ;Cong voi ket qua phep tinh
;truoc
MOV R3,A
DJNZ R0,GTTB ;Neu doc het 8 kenh goi c/t
;tinh toan
RETI
;Ctc tinh gia tri trung binh
GTTB: CLR EX1 ;Trong qua trinh tinh cam ADC
;chuyen doi
MOV R0,8 ;So kenh duoc khoi tao lai
MOV R1,#DATA_IN ;Do lech dia chi kenh duoc
;khoi tao lai
MOV R2,#0 ;R2 chu ket qua phep chia
;duoc khoi tao lai
MOV R3,#0 ;R3 chua phan du phep chia
;duoc khoi tao lai
;TINH TRUNG BINH CONG
MOV A,R3 ;Phan du chia 8
MOV B,#8
DIV AB
ADD A,R2 ;Ket qua phep tinh cuoi
MOV TBC,A ;Dua ket qua trung binh cong
;vao o nho tuong ung
SETB EX1 ;Cho phep lai ngat ngoai
MOV DPTR,#ADC;
MOVX @DPTR,A ;Khoi dong lai ADC
RET
;----------------------------------------------------------------
;Chuong trinh con su dung de tach 1 so bat ky ra thanh cac hang
;Hang tram ,hang chuc va hang don vi nham muc dich hien thi tung ;kenh
;----------------------------------------------------------------
CONVERT_DATA:MOV A,TBC ;Lay gia tri trung binh cong
;de tach
MOV B,#10 ;HANG DON VI
DIV AB
MOV DON_VI,B
MOV B,#10 ;HANG CHUC
DIV AB
MOV CHUC,B
MOV TRAM,A ;HANG TRAM
RET
;----------------------------------------------------------------
;Chuong trinh con hien thi nhiet do trung binh cua ADC theo ;nguyen ly quet dong .Su dung cong Port A cua 8255 va duoc quy ;uoc nhu sau :
;- Cac bit cao PA.6,5,4 noi voi TRANSISTOR de chon kenh hien thi
;- Cac bit thap PA.3,2,1,0 noi voi IC 7447 de hien thi cac so ;theo yeu cau
;Bit PA.7 su dung lam coi bao dong
;---------------------------------------------------------------
DISPLAY_TBC:
NEXT: MOV A,TRAM ;Hien thi so hang tram
SETB A.6 ;CHON HIEN THI DEN 0
MOV DPTR,#PPI_A ;Chon cong Alam port hien thi
MOVX @DPTR,A ;Hien thi
LCALL DELAY ;Tre mot khoang thoi gian
MOV A,CHUC ;Hien thi hang chuc
SETB A.5 ;CHON HIEN THI DEN 1
MOV DPTR,#PPI_A
MOVX @DPTR,A ;Hien thi
LCALL DELAY ;Tre mot khoang thoi gian
MOV A,DON_VI ;Hien thi hang don vi
SETB A.4 ;CHON HIEN THI DEN 2
MOV DPTR,#PPI_A
MOVX @DPTR,A ;Hien thi
LCALL DELAY ;Tre mot khoang thoi gian
RET
;----------------------------------------------------------------
;Chuong trinh con nham kiem tra dieu kien cac kenhco thoa man voi ;dau bai khong
;- Neu co 4 kenh lon hon hoac nho hon gia tri cho phep thi bao ;dong
;- Neu gia tri trung binh lon hon gia tri MAX hoac nho hon gia ;tri MIN thi bao dong
;Cong PPI_B se bao hieu so kenh vuot qua bang cac den do
;Cong PPI_C se bao hieu so kenh thap bang cac den xanh
;----------------------------------------------------------------
CHECK_DATA: MOV R4,#0 ;Hien thi cac kenh nho hon
;nhiet do cho phep
MOV R5,#0 ;Hien thi cac kenh lon hon
;nhiet do cho phep
MOV B,#0 ;B coi la bien dem kiem tra 4
MOV R7,#0 ;R7 chua THU TU kenh hien tai
;dang kiem tra
CONTINUE: MOV A,R7
ADD A,#DATA_IN
MOV R6 ,A ;R6 chu dia chi g/t nhiet do
;kenh hien tai
MOV A,@R6 ;Doc nhiet do luu trong RAM
;cua kenh hien tai
CLR C
SUBB A,B ;(A) < -(A)-B A chua sai lech
;nhiet do
JNC POS ;Neu Acc duong
CPL A
ADD A,#1 ;Neu am thi lay tri tuyet doi
CLR C
SUBB A,SAI_SO
JNC CHANNEL_NEXT ;Neu kenh thoa man dieu kien
;nhiet do dco kenh tiep
LESS: INC B ;Neu khong thoa man dieu kien
;nhiet do
MOV A,#1 ;(A) = 1 de chuan bi
;thuc hien bao kenh cao thap
SJMP ROTATO
ORL A,R4 ;R4 chua vi tri cac
;kenh nhiet do thap
SJMP CHANNEL_NEXT
POS: SUBB A,SAI_SO
JNC GREATER
GREATER: INC B
MOV A,#1 ;(A) = 1
SJMP ROTATO
ORL A,R5
ROTATO: RL A
DJNZ R7,ROTATO
CHANNEL_NEXT:INC R7
MOV A,R7
SUBB A,#7
JC CONTINUE ;Doc het cac kenh
MOV DPTR,#PPI_C
MOV A,R4
MOVX @DPTR,A ;Hien thi cac den bao muc
;thap
MOV DPTR,#PPI_B
MOV A,R5
MOVX @DPTR,A ;Hien thi cac den bao muc cao
MOV A,B ;A chua so kenh khong thoa
;man dieu kien dau bai
SUBB A,#4
JNC ALARM ;Co it hon 4 kenh vuot qua
;gia tri cho phep
MOV A,TBC
SUBB A,MAX
JNC ALARM ;Gia tri trung binh > MAX
MOV A,TBC
SUBB A,MIN
JC ALARM ;Gia tri trung binh < MIN
SJMP EXIT ;Neu thoa man cac dieu kien
ALARM: SETB P1.4 ;Bao dong neu khong thoa man
;dieu kien
EXIT: RET
DELAY: MOV R7,#10
Loop1: MOV R6,#20
Loop2: DJNZ R6,Loop2
DJNZ R7,Loop1
RET
_END:END