Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

MỤC LỤC

1

Contents MỤC LỤC ............................................................................................................. 1 DANH SÁCH HÌNH VẼ ....................................................................................... 3 DANH SÁCH BẢNG BIỂU .................................................................................. 4 LỜI MỞ ĐẦU ....................................................................................................... 5 CHƯƠNG 1. TỔNG QUAN VỀ VI ĐIỀU KHIỂN ............................................... 7 1.1 Khái quát về vi điều khiển ............................................................................ 7 1.1.1 Kiến trúc vi điều khiển ........................................................................... 7 1.1.2 Tập lệnh ................................................................................................. 8 1.1.3 Chức năng .............................................................................................. 8 1. 2 Các bộ vi điều khiển .................................................................................... 9 1.2.1 Các bộ vi điều khiển và các bộ xử lý nhúng............................................ 9 1.2.2 Định nghĩa bộ vi xử lý............................................................................ 9 1.2.3 Các bộ vi điều khiển cho hệ thống nhúng ..............................................10 1.2.4 Các ứng dụng nhúng của PC86..............................................................12 1.2.5 Lựa chọn một bộ vi điều khiển ..............................................................12 1.3 Tìm hiểu chung về họ 8051.........................................................................13 1.3.1 Cấu trúc bus ..........................................................................................13 1.3.2 Bộ nhớ chương trình.............................................................................13 1.3.3 Bộ nhớ dữ liệu......................................................................................14 1.4 Họ vi điều khiển 8051.................................................................................14 1.4.1 Tóm tắt về lịch sử của 8051...................................................................14 1.4.2 Đặc tính vi điều khiển 8051 ..................................................................15 1.4.3 Sơ đồ khối chung của họ vi điều khiển 8051............................................16 1.4.4 Thành viên họ vi điều khiển 8051.........................................................17 1.5 Các họ vi điều khiển khác ...........................................................................22 1.5.1 Họ vi điều khiển AMCC........................................................................22 1.5.2 Họ vi điều khiển Cypress MicroSystems ..............................................22 1.5.3 Họ vi điều khiển Freescale Semiconductor ............................................23 1.5.4 Họ vi điều khiển Fujitsu .......................................................................23 1.5.5 Họ vi điều khiển Intel ...........................................................................23 1.5.6 Họ vi điều khiển Microchip ..................................................................24 1.5.7 Họ vi điều khiển National Semiconductor ............................................31 1.5.8 Họ vi điều khiển STMicroelectronics ...................................................31 1.5.9 Họ vi điều khiển Philips Semiconductors .............................................31 CHƯƠNG 2. TÌM HIỂU VỀ VI ĐIỀU KHIỂN 89S52 .........................................32

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

2

2.1 Sơ đồ khối, sơ đồ chân của vi điều khiển 89S52 .........................................32 2.1.1 Giới thiệu sơ lược .................................................................................32 2.1.2 Cấu hình của 89S52...............................................................................32 2.1.3 Sơ đồ khối 89S52 .................................................................................33 2.1.4 Sơ đồ chân 89S52..................................................................................34 2.1.5 Chức năng các chân của AT89S52 ........................................................34 2.2 Tổ chức bộ nhớ bên trong 89S52 ................................................................39 2.3 Kết nối vi điều khiển với một số thiết bị ngoại vi đơn giản .........................48 2.3.1 VĐK giao tiếp led đơn và phím nhấn...................................................48 2.3.2 Kết nối VĐK với Rơle..........................................................................49 2.3.4 Kết nối VĐK với ma trận led.................................................................54 CHƯƠNG 3. CÁC LINH KIỆN LIÊN QUAN .....................................................55 3.1 Led 7 thanh..................................................................................................55 3.1.1 Các khái niệm cơ bản ...........................................................................55 3.1.2 Kết nối với vi điều khiển ......................................................................56 3 .2 Giới thiệu về IC ADC0804 .........................................................................57 3.2.1 Sơ đồ chân ADC0804............................................................................58 3.2.2 Chức năng các chân ADC0804..............................................................58 3.3 Giới thiệu về cảm biến LM35 .....................................................................61 3.3.1 Sơ đồ chân LM35..................................................................................62 CHƯƠNG 4. THIẾT KẾ MÔ HÌNH.....................................................................64 4.1 Lưu đồ thuật toán.........................................................................................64 4.3 Mạch nguyên lý và mạch in ........................................................................66 4.3.1 Mạch nguyên lý....................................................................................66 4.3.2 Mạch in ................................................................................................68 KẾT LUẬN ...........................................................................................................70 PHỤ LỤC .............................................................................................................75

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

DANH SÁCH HÌNH VẼ Hình 1.1 Bố trí bên trong của sơ đồ khối 8051......................................................16 Hình 1.2 Kiến trúc Havard và kiến trúc Von-Neuman...........................................25 Hình 1.3 Cơ chế pipelining ...................................................................................27 Hình 2.1 Sơ đồ khối của bộ vi điều khiển AT89S52 ...........................................33 Hình 2.2 Sơ đồ chân của AT89S52 ......................................................................34 Hình 2.3 Sơ đồ Port 0...........................................................................................35 Hình 2.4 Sơ đồ Port 1...........................................................................................35 Hình 2.5 Sơ đồ Port 2...........................................................................................36 Hình 2.6 Mạch reset.............................................................................................38 Hình 2.7 Mạch dao động......................................................................................38 Hình 2.8 VĐK giao tiếp led đơn và phím nhấn .....................................................48 Hình 2.9 VĐK giao tiếp rơle-5V ...........................................................................49 Hình 2.10 VĐK giao tiếp phím nhấn và LCD .......................................................53 Hình 2.11 VĐK giao tiếp với ma trận led.............................................................54 Hình 3.1 Sơ đồ chân 7 SEG-COM-ANODE và hình ảnh minh họa.......................56 Hình 3.2 Sơ đồ chân ADC0804............................................................................58 Hình 3.3 Sơ đồ chân LM35 dạng TO-92 .............................................................62 Hình 4.1 Lưu đồ thuật toán ...................................................................................66 Hình 4.2 Sơ đồ mạch nguyên lý ............................................................................66 Hình 4.3 Sơ đồ mạch in ........................................................................................68

3

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

DANH SÁCH BẢNG BIỂU Bảng 1.1 Các đặc tính của 8051 đầu tiên...............................................................15 Bảng 1.2 So sánh các đặc tính của các thành viên họ 8051 ..................................17 Bảng 1.3 Các phiên bản của 8051 từ Atmel (Flash ROM) ....................................19 Bảng 1.4 Các phiên bản 8051 với tốc độ khác nhau của Atmel .............................20 Bảng 1.5 Các phiên bản 8051 từ hãng Dallas Semiconductor ...............................20 Bảng 2.1 Một số thành viên của họ 8051 .............................................................21 Bảng 2.2 Các chức năng của Port 3......................................................................36 Bảng 2.3 Bit chọn Bank thanh ghi........................................................................42 Bảng 2.4 Bảng vector ngắt của 8051 .....................................................................44 Bảng 2.5 Thanh ghi cho phép ngắt IE ...................................................................45 Bảng 2.6 Tóm tắt thanhh ghi chức năng TMOD ...................................................47 Bảng 1.13 Bảng mã của Led Anode chung (các led đơn sáng ở mức 0) ................50 Bảng 1.14 Bảng mã của Led Cathode chung (các led đơn sáng ở mức 1)..............51 Bảng 2.2 Quan hệ điện áp V ref/2 với Vin ............................................................61

4

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

LỜI MỞ ĐẦU

Ngày nay, việc ứng dụng những thành tựu của khoa học kỹ thuật tiên tiến, thế

giới của chúng ta đã và đang ngày một phát triển, văn minh và hiện đại hơn. Sự

phát triển của kỹ thuật điện tử đã tạo ra hàng loạt những thiết bị với các đặc điểm

nổi bật như sự chính xác cao, tốc độ nhanh, gọn nhẹ là những yếu tố rất cần thiết

góp phần cho hoạt động của con người đạt hiệu quả cao.

Các bộ điều khiển sử dụng vi điều khiển tuy đơn giản nhưng để vận hành và

sử dụng được lại là một điều rất phức tạp. Các bộ vi điều khiển theo thời gian cùng

với sự phát triển của công nghệ bán dẫn đã tiến triển rất nhanh, từ các bộ vi điều

khiển 4 bit đơn giản đến các bộ vi điều khiển 32 bit, rồi sau này là 64 bit. Điện tử

đang trở thành một ngành khoa học đa nhiệm vụ. Điện tử đã đáp ứng được những

đòi hỏi không ngừng từ các lĩnh vực công – nông – lâm – ngư nghiệp cho đến các

nhu cầu cần thiết trong hoạt động đời sống hằng ngày.

Sau gần 3 năm học tập và nghiên cứu ở trường, em đã được làm quen

với các môn học chuyên ngành,em đã dùng vi điều khiển để ” Tìm hiểu về vi

điều khiển 89S52. Thiết kế mô hình đo và khống chế nhiệt độ hiển thị trên led 7

thanh.” Mặc dù đã rất cố gắng thiết kế và hoàn thành đồ án đúng thời hạn nhưng do

thời gian ngắn và năng lực còn hạn chế nên vẫn còn những sai sót. Em mong thầy giáo

góp ý để việc học tập của em được tốt hơn.

5

Em xin chân thành cảm ơn!

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Nội dung quyển đồ án bao gồm các chương:

Chương 1. Tổng quan về vi điều khiển

Chương 2. Tìm hiểu về vi điều khiển 89S52

Chương 3. Các linh kiện liên quan

Chương 4. Thiết kế

Sản phẩm là một mạch đo và khống chế nhiệt độ hiển thị trên led 7 thanh sử

dụng vi điều khiển 89S52.

Trong quá trình thực hiện đề tài này do điều kiện còn hạn hẹp nên đề tài này

không tránh khỏi những thiếu sót rất mong nhận được những ý kiến đóng góp của

tất cả các thầy cô và các bạn những ai quan tâm đến lĩnh vực này.

Em xin chân thành cảm ơn toàn thể các thầy cô giáo trong khoa Điện Tử - ĐH

Công Nghiệp Hà Nội đã giảng dạy và truyền đạt những kiến thức, kinh nghiệm quý

báu và tạo điều kiện tốt nhất cho em được học tập và nghiên cứu tại trường.

Cuối cùng em xin chân thành cảm ơn thầy Hoàng Văn Quang giảng viên Khoa

Điện Tử-ĐH Công Nghiệp Hà Nội đã hướng dẫn và giúp đỡ nhiệt tình em trong

quá trình thực hiện đồ án.

Hà Nội tháng 6/2012

Sinh viên thực hiện

6

Tường Thị Thu Hằng

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

CHƯƠNG 1. TỔNG QUAN VỀ VI ĐIỀU KHIỂN

1.1 Khái quát về vi điều khiển

Năm 1976, hãng Intel giới thiệu bộ vi điều khiển 8748-mở đầu cho họ vi

điều khiển MCU-48. 8747 là một vi mạch chứa hơn 17.000 transistor bao gồm

CPU,1kbyte bộ nhớ ROM, 64KB RAM, một bộ đếm/định thời 8 bit và 27 chân

vào/ra.

Vi điều khiển (MCU-viết tắt của cụm từ ‘Micro Control Unit’) có thể được

coi như một máy tính thu nhỏ trên một chíp, nó còn có thể hoạt động với một vài

linh kiện phụ trợ ở bên ngoài, sau 8748, các bộ vi điều khiển mới tiếp tục được

các hãng sản xuất như Intel, Atmel, Simens…giới thiệu cho các ứng dụng nhúng.

1.1.1 Kiến trúc vi điều khiển

Thực ra vi điều khiển cũng là một cấu trúc nhỏ, gồm các linh kiện điện tử ở

kích thước micro hoặc nano, các linh kiện này được kết hợp với nhau và được nối

với các thiết bị bên ngoài qua các chân vi điều khiển.

Kiến trúc máy tính hay kiến trúc vi điều khiển cũng tương tự nhau. Do đó ,

các bạn có thể tìm hiểu về kiến trúc máy tính, để hiểu rõ về kiến trúc vi điều khiển.

Hai kiến trúc vi điều khiển rất phổ biến hiện nay, là kiến trúc Von Neumann và

kiến trúc Harvard. Sự khác biệt chủ yếu giữa hai kiến trúc này, chính là việc tổ

chức bộ nhớ dữ liệu và bộ nhớ chương trình. Kiến trúc Von Neumann tổ chức bộ

nhớ dữ liệu và bộ nhớ chương trình chung với nhau, chính vì vậy, đường truyền

(bus) của kiến trúc Von Neumann là đường truyền chung. Trong khi đó, kiến trúc

Harvard tách rời bộ nhớ dữ liệu và bộ nhớ chương trình.

Mỗi kiến trúc này có một lợi điểm riêng rẽ khác nhau. Kiến trúc Von

7

Neumann tận dụng được tài nguyên bộ nhớ, trong khi đó kiến trúc Harvard sẽ đạt

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử tốc độ xử lý cao hơn, mặt khác đường truyền dữ liệu và đường truyền lệnh điều

khiển (chương trình) có thể có dung lượng khác nhau.

1.1.2 Tập lệnh

Tập lệnh ở đây được coi là tập mã lệnh nhị phân, Bản chất của tập lệnh là một

tập hợp các mã nhị phân, mà từ đó các đơn vị xử lý trung tâm (CPU) nhận biết và

thực hiện. Dữ liệu được CPU xử lý là các số nhị phân. Chính vì vậy, tập lệnh dù

thế nào đi nữa cũng sẽ thực hiện các việc chính sau:

- Tính toán các con số nhị phân.

- Các lệnh để chuyển các giá trị ra thành tín hiệu điện tử ở chân linh kiện

- Các lệnh di chuyển các giá trị giữa các thanh ghi

- Các lệnh điều khiển con trỏ chương trình

1.1.3 Chức năng

Hiện nay rất nhiều loại vi điều khiển ra đời, và rất nhiều tính năng được tích

hợp vào trong vi điều khiển dưới dạng phần cứng. Tuy nhiên, tựu chung lại thì mọi

việc cũng đều nằm ở việc điều khiển động cơ và đọc cảm biến. Một cánh cửa tự

động là một cái cảm biến hồng ngoại và một cái động cơ. Đại đa số những gì tự

động đều có dính đến động cơ trong đó, vì nếu không có động cơ thì làm sao mà

nó biến đổi điện năng thành cơ năng .khi đó ta sẽ phải thiết kế một cảm biển để

quan sát.

Để biết được tính năng của từng loại vi điều khiển ta chọn phần datasheet nói

tóm lại chức năng của vi điều khiển rất phong phú và đa dạng, Nên các bạn hay

8

nghiên cứu thật kĩ trước khi mua về để phục vụ cái nhu cầu của mình đang cần.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử 1. 2 Các bộ vi điều khiển

1.2.1 Các bộ vi điều khiển và các bộ xử lý nhúng

Trong mục này chúng ta bàn về nhu cầu đối với các bộ vi điều khiển (VĐK)

và so sánh chúng với các bộ vi xử lý cùng dạng chung như Pentium và các bộ vi xử

lý 86 khác. Chúng ta sẽ cùng xem xét vai trò của các VĐK trong thị trường các sản

phẩm nhúng. Ngoài ra, chúng ta cung cấp một số tiêu chuẩn và cách lựa chọn một

bộ VĐK như thế nào.

1.2.2 Định nghĩa bộ vi xử lý

Bộ vi xử lý (VXL) ở đây là các bộ VXL công dụng chung như họ Intell

86(8086, 80286, 80386, Pentium hoặc họ Motorola 6800(68000, 68010, 68020,

68030…). Những bộ VXL này không có RAM, ROM và không có các cổng vào ra

trên chip. Với lý do đó mà chúng được gọi chung đó là các bộ vi xử lý công dụng

chung.

Một nhà thiết kế hệ thống sử dụng một bộ VXL công dụng chung chẳng hạn

như Pentium hay 68040 phải bổ xung thêm RAM, ROM. Các cổng vào ra và các

bộ định thời ngoài để làm cho chúng hoạt động được. mặc dù bổ xung thêm RAM,

ROM và các cổng vào ra bên ngoài làm cho hệ thống cồng kềnh và đắt hơn, nhưng

chúng có ưu điểm là linh hoạt chẳng hạn như người thiết kế có thể quyết định về số

lượng RAM, Rom cà các cổng ra vào cần thiết phù hợp với bài toán trong tầm tay

của mình.

Điều này không thể có được đối với các bộ VĐK. Một bộ VĐK có một CPU (

một bộ VXL) cùng với một lượng cố định RAM, ROM, các cổng vào ra và một bộ

định thời tất cả trên cùng một chip. Hay nói cách khác là bộ xử lý, RAM, ROM các

cổng vào ra và bộ định thời đều được nhúng với nhau trên một chip; do vậy người

9

thiết kế không thể bổ xung thêm bộ nhớ ngoài, cổng vào ra hoặc bộ định thời cho

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử nó. Số lượng cố định của RAM, ROM trên chip và số các cổng vào – ra trong các

bộ vi điều khiển làm cho chúng trở nên lý tưởng đối với nhiều ứng dụng mà trong

đó giá thành và không gian lại hạn chế. Trong nhiều ứng dụng,ví dụ như bộ điều

khiển TV từ xa thì không cần công suất tính toán của bộ VXL 486 hoặc thậm chí

như 8086. Trong rất nhiều ứng dụng thì không gian nó chiếm, công suất nó tiêu tốn

và giá thành trên một đơn vị là những cân nhắc nghiêm ngặt hơn nhiều so với công

suất tính toán. Những ứng dụng thường yêu cầu một số thao tác vào – ra để đọc các

tín hiệu và tắt – mở những bit nhất định. Vì lý do này mà một số người gọi các bộ

xử lý này là IBP (“Itty - Bitty - Processor”), (tham khảo cuốn “Good things in

small packages are Generating Big product opportunities” do Rick Grehan viết trên

tạp BYTE tháng 9.1994; www.byte.com để biết về những trao đổi tuyệt vời về các

bộ VĐK).

Điều thú vị là một số nhà sản xuất các bộ VĐK đã đi xa hơn là tích hợp cả

một bộ chuyển đổi ADC và các ngoại vi khác vào trong bộ VĐK.

1.2.3 Các bộ vi điều khiển cho hệ thống nhúng

Trong tài liệu về các bộ vi xử lý ta thường thấy khái niệm hệ thống nhúng. Các

bộ vi xử lý và các bộ vi điều khiển được sử dụng rộng rãi trong các sản phẩm hệ

thống nhúng. Một sản phẩm nhúng sử dụng một bộ vi xử lý và chỉ một mà thôi.một

máy in là một ví dụ về một việc nhúng vì bộ xử lý bên trong nó chỉ làm một việc

đó là nhận dữ liệu và in nó ra.

 Định nghĩa về hệ thống nhúng (embedded system)

Hệ thống nhúng là hệ thống xử lý thông tin được nhúng vào trong một sản

10

phẩm lớn hơn và bình thường người dùng không thấy nó một cách trực tiếp [1].

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử Hệ thống tính toán nhúng (embedded computing system) là hệ thống tính

toán được nhúng trong thiết bị điện tử (hầu như là các hệ thống tính toán khác máy

tính) [2].

Thông thường các hệ thống nhúng là những ứng dụng đơn chức năng [3].

Hệ thống nhúng là hệ thống mà chức năng chính của nó không chỉ có tính

toán mà được điều khiển bởi máy tính được nhúng trong nó [4].

Trong các định nghĩa trên, chúng ta thấy định nghĩa thứ nhất có thể mô tả

tổng quát về hệ thống nhúng. Ngày nay các hệ thống nhúng ở khắp nơi, chúng xuất

hiện trong nhà, văn phòng, nhà máy, xe hơi, bệnh viện,…

 Những đặc tính chung của các hệ thống nhúng

Các hệ thống nhúng có các đặc tính chung sau: [1]

Thường thì các hệ thống nhúng được nối với môi trường vật lý qua các cảm

biến để thu thập thông tin từ môi trường đó và qua các bộ điều khiển/tác động để

điều khiển môi trường.

Các hệ thống nhúng phải tin cậy được. “Tin cậy được” bao gồm độ tin cậy,

tính bảo trì, tính khả dụng, an toàn và bảo mật.

Các hệ thống nhúng phải có hiệu suất cao. Để đánh giá hiệu suất, người ta dựa

vào các tiêu chí sau: năng lượng, kích thước mã chương trình/tài nguyên sử dụng,

hiệu suất lúc chạy thật (run-time efficiency), khối lượng và giá.

Dành riêng cho ứng dụng cụ thể. Thí dụ bộ xử lý chạy chương trình điều

khiển trong xe hơi sẽ luôn luôn chạy chương trình mà không chuyển sang chương

trình khác.

Hầu hết các hệ thống nhúng không dùng bàn phím, chuột hay màn mình để

giao tiếp với người dùng. Thay vào đó, chúng có các giao tiếp dành riêng cho

người dùng như các nút nhấn, bàn đạp…

11

Nhiều hệ thống nhúng phải thỏa các ràng buộc thời gian thực.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử Nhiều hệ thống nhúng là những hệ thống hỗn hợp (hybrid systems)theo nghĩa

gồm cả hai phần analog và số.

Các hệ thống nhúng là những hệ thống có phản ứng lại (reactive systems).

Chúng có thể được định nghĩa như sau: hệ thống có phản ứng lại là hệ thống mà có

tương tác liên tục với môi trường của nó và thực thi với tốc độ được xác định bởi

môi trường đó [Bergé et al., 1995].

Thật ra không phải mọi hệ thống nhúng sẽ có tất cả các đặc tính trên. Chúng ta

cũng có thể định nghĩa thuật ngữ “hệ thống nhúng” theo cách sau: Những hệ thống

xử lý thông tin thỏa phần lớn các đặc tính trên được gọi là những hệ thống nhúng.

1.2.4 Các ứng dụng nhúng của PC86

Chúng ta có thể thấy các hệ thống nhúng trong nhiều lãnh vực:

 Điện tử gia dụng: máy giặt, tủ lạnh, máy chụp hình số

 Điện tử ô-tô: hệ điều khiển động cơ, hệ điều khiển thắng, hệ GPS

 Điện tử trong máy bay: hệ thông tin cho phi công, hệ chống va chạm

 Điện tử y sinh: đo nhiệt độ, ECG, chẩn đoán từ xa

 Xe lửa: hệ tự lái, hệ thắng

 Viễn thông: điện thoại di động, hệ thống tổng đài, điều khiển ăng-ten, thiết

bị GPS.

 Các ngôi nhà thông minh: tiết kiệm năng lượng, điều khiển nhiệt độ, chiếu

sáng

Các hệ thống nhúng tạo cơ sở cho kỷ nguyên hậu PC (post-PC era), các hệ thống

xử lý thông tin chuyển dần từ PC sang hệ thống nhúng cho các ứng dụng cụ thể.

1.2.5 Lựa chọn một bộ vi điều khiển

12

Có 4 bộ VĐK 8 bít chính. Đó là 6811 của Motorola, 8051 của Intel và Pic 16 của Microchip. Mỗi một kiểu loại trên đây đều có một tệp lệnh và thanh ghi riêng duy nhất, nếu chúng đều không tương tích lẫn nhau. Cũng có những bộ VĐK 16 bit và

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử 32 bit được sản xuất bởi các hãng sản xuất chíp khác nhau. Với tất cả những bộ vi điều khiển khác nhau như thế này thì lấy gì làm tiêu chuẩn lựa chọn mà các nhà thiết kế phải cân nhắc? có 3 tiêu chuẩn để lựa chọn các bộ vi điều khiển là:

1- Đáp ứng nhu cầu tính toán của bài toán một cách hiệu quả về mặt giá

thành và đầy đủ chức năng có thể nhìn thấy được.

2- Có sẵn các công cụ phát triển phần mềm chẳng hạn như các trình biên dịch, trình hợp ngữ và gỡ rối.

3- Nguồn các bộ vi điều khiển có sẵn nhiều và tin cậy.

1.3 Tìm hiểu chung về họ 8051

1.3.1 Cấu trúc bus

Bus địa chỉ của họ vi điều khiển 8051 gồm 16 đường tín hiệu (thường gọi

là bus địa chỉ 16 bit) với lượng bit địa chỉ như vậy, không gian nhớ của nó có thể

mở rộng tối đa đên 2^16=65536 địa chỉ tương đương 64K.

Bus dữ liệu của họ 8051 gồm 8 đường tín hiệu (thường gọi là dữ liệu 8

bit), đó là lí do vì sao nói 8051 là họ vi điều khiển 8 bit. Với độ rộng của bus dữ

liệu như vậy, các chip họ 8051 có thể xử lí được các toán hạng 8 bit trong 1 chu kì

lệnh.

1.3.2 Bộ nhớ chương trình

Vi điều khiển họ 8051 có không gian nhớ là 64K địa chỉ, đó cũng là bộ nhớ

chương trình lớn nhất mà mỗi chip thuộc họ này có được. Bộ nhớ chương trình của

các chip thuộc họ 8051 có thể thuộc loại ROM, EPROM, Flash, hoặc không có bộ

nhớ chương trình bên trong chip, tên của chip thể hiện bộ nhớ chương trình mà nó

13

chứa bên trong .

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

1.3.3 Bộ nhớ dữ liệu

Bộ nhớ SRAM được tích hợp bên trong mọi chip thuộc họ này, có dung

lượng khác nhau tùy loại chip nhưng thường thì chỉ khoảng vài trăm byte. Đây

chính là nơi chứa các biến trung gian trong quá trình hoạt động của chip. Khi mất

điện do bản chất của SRAM mà các giá trị này cũng mất theo. Bên cạnh bộ nhớ

loại SRAM thì một số chip thuộc họ 8051 còn có thêm bộ nhớ EEPROM với

dung lượng tối đa vài Kbyte tùy từng loại chip cụ thể.

1.4 Họ vi điều khiển 8051

1.4.1 Tóm tắt về lịch sử của 8051

Vào năm 1981, hãng Intel giới thiệu một số bộ vi điều khiển được gọi là

8051. Bộ vi điều khiển này có 128 byte RAM, 4K byte ROM, hai bộ định thời, một

cổng nối tiếp và 4 cổng 8 bit. Tất cả đều được tích hợp trên một chip. Lúc bấy giờ,

bộ vi điều khiển như vậy được coi là một “hệ thống trên chip”. 8051 là một bộ xử

lý 8 bit, tức là CPU chỉ có thể làm việc với 8 bit dữ liệu. Dữ liệu lớn hơn 8 bit được

chia thành các dữ liệu 8 bit để xử lý.8051 có tất cả 4 cổng I/O mỗi cổng rộng 8 bit,

có thể có một ROM trên chip cực đại là 64 Kbyte. Tuy nhiên, lúc đó các nhà sản

xuất đã cho xuất xưởng chỉ với 4 Kbyte ROM trên chip. 8051 đã trở nên phổ biến

sau khi Intel cho phép các nhà sản xuất khác sản xuất và bán bất kỳ dạng biến thể

nào của 8051 mà họ thích với điều kiện họ phải để mã chương trình tương thích

với 8051. Từ đó dẫn đến sự ra đời nhiều phiên bản của 8051 với các tốc độ khác

nhau. Tuy nhiên, điều quan trọng là mặc dù có nhiều biến thể của 8051, như khác

nhau về tốc độ và dung lượng nhớ ROM trên chip, nhưng tất cả các lệnh đều tương

thích với 8051 ban đầu. Điều này có nghĩa là nếu ta viết chương trình của mình cho

một phiên bản nào đó thì nó cũng sẽ chạy với mọi phiên bản bất kỳ khác mà không

14

phân biệt nó từ hãng sản xuất nào.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

1.4.2 Đặc tính vi điều khiển 8051

Bộ vi điều khiển 8051 là thành viên đầu tiên của họ 8051.Hãng Intel ký hiệu

nó như là MCS51.

Bảng 1.1 Các đặc tính của 8051 đầu tiên

Interrupt control: Điều khiển ngắt.

Other registes: Các thanh ghi khác.

128 Byte RAM: RAM 128 Byte.

Timer 0, 1, 2: Bộ định thời 0, 1, 2.

CPU: Đơn vị điều khiển trung tâm.

Oscillator: Mạch dao động.

Bus control: Điều khiển Bus.

15

I/O ports: Các ports vào/ra.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử Serial port: Port nối tiếp.

Address/data: Địa chỉ/dữ liệu.

1.4.3 Sơ đồ khối chung của họ vi điều khiển 8051

16

Hình 1.1 Bố trí bên trong của sơ đồ khối 8051

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

1.4.4 Thành viên họ vi điều khiển 8051

 Bộ vi điều khiển 8052

Bộ vi điều khiển 8052 là một thành viên khác của họ 8051, 8952 có tất cả đặc tính

chuẩn của 8051 ngoài ra nó có thêm 128 byte RAM và một bộ định thời nữa. Hay

nói cách khác là 8052 có 256 byte RAM 3 bộ định thời và có 8 Kbyte ROM trên

chip thay vì 4 Kbyte như 8051.

Bảng 1.2 So sánh các đặc tính của các thành viên họ 8051

Như nhìn thấy từ bảng 1.2 thì 8051 là tập con của 8052, do vậy tất cả mọi

chương trình viết cho 8051 đều chạy trên 8052 nhưng điều ngược lại là không

đúng.

17

 Bộ vi điều khiển 8031

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử Một thành viên khác nữa của 8051 là chip 8031. Chip này thường được coi như là

8051 không có ROM trên chip vì nó có 0 Kbyte ROM trên chip. Để sử dụng chip

này ta phải bổ xung ROM ngoài cho nó.ROM ngoài phải chứa chương trình mà

8031 sẽ nạp và thực hiện.So với 8051 mà chương trình được chứa trong ROM trên

chip bị giới hạn bởi 4 Kbyte, còn ROM ngoài chứa chương trình được gắn vào

8031 thì có thể lớn đến 64 Kbyte. Khi bổ xung cổng, như vậy chỉ còn lại 2 cổng để

thao tác. Để giải quyết vấn đề này ta có thể bổ xung cổng vào – ra cho 8031. Phối

phép 8031 với bộ nhớ và cổng vào – ra chẳng hạn với chip 8255. Ngoài ra còn có

các phiên bản khác nhau về tốc độ của 8031 từ các hãng sản xuất khác nhau.

 Các bộ vi điều khiển 8051 từ các hãng khác nhau

Mặc dù 8051 là thành viên phổ biến nhất của họ 8051 nhưng chúng ta sẽ thấy nó

trong kho linh kiện. Đó là do 8051 có dưới nhiều dạng kiểu bộ nhớ khác nhau như

UV – PROM, Flash và NV– RAM mà chúng đều có số đăng ký linh kiện khác

nhau. Phiên bản Flash ROM được bán bởi nhiều hãng khác nhau chẳng hạn của

Atmel corp với tên gọi là AT89C51 còn phiên bản NV – RAM của 8051 do Dalas

Semi Conductor cung cấp thì được gọi là DS5000. Ngoài ra còn có phiên bản OTP

(khả trình một lần) của 8051 được sản xuất bởi rất nhiều hãng.

 Bộ vi điều khiển 8751

Chip 8751 chỉ có 4 Kbyte bộ nhớ UV – EPROM trên chip. Để sử dụng

chip này để phát triển yêu cầu truy cập đến một bộ đốt PROM cũng như bộ xóa

UV – EPROM để xóa nội dung của bộ nhớ UV – EPROM bên trong 8751 trước

khi ta có thể lập trình lại nó. Do một thực tế là ROM trên chip đối với 8751 là UV

– EPROM nên cần phải mất 20 phút để xóa 8751 trước khi nó có thể lập trình trở

lại. Điều này đã dẫn đến nhiều nhà sản xuất giới thiệu các phiên bản FLASH ROM

18

và UV – RAM của 8751 từ nhiều hãng khác nhau.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

 Bộ vi điều khiển AT8951 từ Atmel Corporation

Chip 8051 phổ biến này có ROM trên chip ở dạng bộ nhớ Flash. Điều này là

lý tưởng đối với những phát triển nhanh vì bộ nhớ Flash có thể được xóa trong vài

giây trong tương quan so với 20 phút hoặc hơn mà 8751 yêu cầu. Vì lý do này mà

AT89C51 để phát triển một hệ thống dựa trên bộ vi điều khiển yêu cầu một bộ đốt

ROM mà có hỗ trợ bộ nhớ Flash. Tuy nhiên lại không yêu cầu bộ xóa ROM. Lưu ý

rằng trong bộ nhớ Flash ta phải xóa toàn bộ nội dung của ROM nhằm để lập trình

lại cho nó. Việc xóa bộ nhớ Flash được thực hiện bởi chính bộ đốt PROM và đây

chính là lý do tại sao lại không cần đến bộ xoá. Để loại trừ nhu cầu đối với một bộ

đốt PROM hãng Atmel đang nghiên cứu một phiên bản của AT89C51 có thể được

lập trình qua cổng truyền thông COM của máy tính IBM PC.

Bảng 1.3 Các phiên bản của 8051 từ Atmel (Flash ROM)

Chữ C trong ký hiệu AT89C51 là CMOS

Cũng có những phiên bản đóng vỏ và tốc độ khác nhau của những sản phẩm trên

đây xem bảng 1.4. Ví dụ để ý rằng chữ “C” đứng trước số 51 trong AT89C51 –

12PC là ký hiệu cho CMOS “12” ký hiệu cho 12 MHz và “P” là kiểu đóng vỏ DIP

19

và chữ “C” cuối cùng là ký hiệu cho thương mại (ngược với chữ “M” là quân sự).

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử Thông thường AT89C51 – 12PC rất lý tưởng cho các dự án của học sinh, sinh

viên.

Bảng 1.4 Các phiên bản 8051 với tốc độ khác nhau của Atmel

 Bộ VI điều khiển DS5000 từ hãng Dallas Semiconductor

Một phiên bản phổ biến khác nữa của 8051 là DS5000 của hãng Dallas

Semiconductor. Bộ nhớ ROM trên chip của DS5000 ở dưới dạng NV – RAM. Khả

năng đọc/ghi của nó cho phép chương trình được nạp vào ROM trên chip trong khi

nó vẫn ở trong hệ thống (không cần phải lấy ra).

Bảng 1.5 Các phiên bản 8051 từ hãng Dallas Semiconductor

Chữ “T” đứng sau 5000 là có đồng hồ thời gian thực

Lưu ý rằng đồng hồ thời gian thực RTC là khác với bộ định thời Timer.

RTC tạo và giữ thời gian 1 phút giờ, ngày, tháng, năm kể cả khi tắt nguồn.

20

Còn có nhiều phiên bản DS5000 với những tốc độ và kiểu đóng gói khác nhau. Ví dụ DS5000-8-8 có 8K NV – RAM và tốc độ 8MHz. Thông thường DS5000-8-12 hoặc DS5000T-8-12 là lý tưởng đối với các dự án của sinh viên.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Bảng 1.6 Một số thành viên của họ 8051

Mã linh kiện NV- RAM Tốc độ

DS5000-8-8 8K 8MHz

DS5000-8-12 8K 12MHz

DS5000-32-8 32K 8MHz

DS5000-32-12 32K 8MHz (with RTC)

DS5000-32-12 32K 12MHz

DS5000-8-12 8K 12MHz (with RTC)

 Phiên bản OTP của 8051

Các phiên bản OTP của 8051 là các chip 8051 có thể lập trình được một lần và

được cung cấp từ nhiều hãng sản xuất khác nhau. Các phiên bản Flash và NV –

RAM thường được dùng để phát triển sản phẩm mẫu. Khi một sản phẩm được thiết

kế và được hoàn thiện tuyết đối thì phiên bản OTP của 8051 được dùng để sản xuất

hang loạt vì giá thành một đơn vị sản phẩm sẽ rẻ hơn.

 Họ 8051 từ hãng Philips

Một nhà sản xuất chính của họ 8051 khác nữa là Philips Corporation. Thật vậy,

hãng này có một dải lựa chọn rộng lớn cho các bộ vi điều khiển họ 8051. Nhiều

sản phẩm của hãng đã có kèm Theo các đặc tính như các bộ chuyển đổi ADC,

21

DAC, cổng I/O mở rộng và cả OTP và Flash.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử 1.5 Các họ vi điều khiển khác

1.5.1 Họ vi điều khiển AMCC

Họ vi điều khiển AMCC do tập đoàn "Applied Micro Circuits Corporation" sản xuất. Từ tháng 5 năm 2004, họ vi điều khiển này được phát triển và tung ra thị trường bởi IBM.

 403 PowerPC CPU

 PPC 403GCX

 405 PowerPC CPU

 PPC 405EP

 PPC 405GP/CR

 PPC 405GPr

 PPC NPe405H/L

 440 PowerPC Book-E CPU

 PPC 440GP

 PPC 440GX

 PPC 440EP/EPx/GRx

 PPC 440SP/SPe

1.5.2 Họ vi điều khiển Cypress MicroSystems

Crypress nổi tiếng với dòng sản phẩm PsoC, đây là những vi mạch có tích

hợp vi điều khiển, các linh kiện tương tự (các bộ khuếch đại, các bộ biến đổi A/D,

D/A, các bộ lọc, các bộ so sánh…) và các linh kiện số (bộ định thời, bộ đếm, bộ

tạo xung PWM, SPI, UART, I2C…) trên một chip duy nhất. Việc tích hợp hàng

trăm khối chức năng cùng với một bộ điều khiển trên một chip cho phép giảm thời

gian thiết kế, thu gọn kích thước sản phẩm, giảm công suất tiêu thụ và giảm giá

22

thành sản phẩm.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

 CY8C2xxxx (PSoC)

1.5.3 Họ vi điều khiển Freescale Semiconductor

Từ năm 2004, những vi điều khiển này được phát triển và tung ra thị trường

bởi Motorola.

 Dòng 8-bit

 68HC05 (CPU05)

 68HC08 (CPU08)

 68HC11 (CPU11)

 Dòng 16-bit

 68HC12 (CPU12)

 68HC16 (CPU16)

 Freescale DSP56800 (DSPcontroller)

 Dòng 32-bit

 Freescale 683XX (CPU32)

 MPC500

 MPC 860 (PowerQUICC)

 MPC 8240/8250 (PowerQUICC II)

 MPC 8540/8555/8560 (PowerQUICC III)

1.5.4 Họ vi điều khiển Fujitsu

 F²MC Family (8/16 bit)

 FR Family (32 bit)

 FR-V Family (32 bit RISC)

1.5.5 Họ vi điều khiển Intel

 Dòng 8-bit

 8XC42

23

 MCS48

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

 MCS51

 8061

 8xC251

 Dòng 16-bit

 80186/88

 MCS96

 MXS296

 Dòng 32-bit

 386EX

 i960

1.5.6 Họ vi điều khiển Microchip

 12-bit instruction PIC

 14-bit instruction PIC

 PIC16F84

 16-bit instruction PIC

PIC là viết tắt của “Programable Intelligent Computer”, có thể tạm dịch là “máy

tính thông minh khả trình” do hãng Genenral Instrument đặt tên cho vi điều khiển

đầu tiên của họ: PIC1650 được thiết kế để dùng làm các thiết bị ngoại vi cho vi

điều khiển CP1600. Vi điều khiển này sau đó được nghiên cứu phát triển thêm và

từ đó hình thành nên dòng vi điều khiển PIC ngày nay.

 Kiến trúc PIC

Cấu trúc phần cứng của một vi điều khiển được thiết kế theo hai dạng kiến trúc:

24

kiến trúc Von Neuman và kiến trúc Havard.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Hình 1.2 Kiến trúc Havard và kiến trúc Von-Neuman

Tổ chức phần cứng của PIC được thiết kế theo kiến trúc Havard. Điểm khác biệt

giữa kiến trúc Havard và kiến trúc Von-Neuman là cấu trúc bộ nhớ dữ liệu và bộ

nhớ chương trình.

Đối với kiến trúc Von-Neuman, bộ nhớ dữ liệu và bộ nhớ chương trình nằm

chung trong một bộ nhớ, do đó ta có thể tổ chức, cân đối một cách linh hoạt bộ nhớ

chương trình và bộ nhớ dữ liệu. Tuy nhiên điều này chỉ có ý nghĩa khi tốc độ xử lí

của CPU phải rất cao, vì với cấu trúc đó, trong cùng một thời điểm CPU chỉ có thể

tương tác với bộ nhớ dữ liệu hoặc bộ nhớ chương trình. Như vậy có thể nói kiến

trúc Von-Neuman không thích hợp với cấu trúc của một vi điều khiển.

Đối với kiến trúc Havard, bộ nhớ dữ liệu và bộ nhớ chương trình tách ra thành

hai bộ nhớ riêng biệt. Do đó trong cùng một thời điểm CPU có thể tương tác với cả

hai bộ nhớ, như vậy tốc độ xử lí của vi điều khiển được cải thiện đáng kể.

Một điểm cần chú ý nữa là tập lệnh trong kiến trúc Havard có thể được tối ưu

tùy theo yêu cầu kiến trúc của vi điều khiển mà không phụ thuộc vào cấu trúc dữ

liệu. Ví dụ, đối với vi điều khiển dòng 16F, độ dài lệnh luôn là 14 bit (trong khi dữ

25

liệu được tổ chức thành từng byte), còn đối với kiến trúc Von-Neuman, độ dài lệnh

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử luôn là bội số của 1 byte (do dữ liệu được tổ chức thành từng byte). Đặc điểm này

được minh họa cụ thể trong hình 1.1.

 RISC và CISC

Như đã trình bày ở trên, kiến trúc Havard là khái niệm mới hơn so với kiến trúc

Von-Neuman. Khái niệm này được hình thành nhằm cải tiến tốc độ thực thi của

một vi điều khiển.

Qua việc tách rời bộ nhớ chương trình và bộ nhớ dữ liệu, bus chương trình và

bus dữ liệu, CPU có thể cùng một lúc truy xuất cả bộ nhớ chương trình và bộ nhớ

dữ liệu, giúp tăng tốc độ xử lí của vi điều khiển lên gấp đôi. Đồng thời cấu trúc

lệnh không còn phụ thuộc vào cấu trúc dữ liệu nữa mà có thể linh động điều chỉnh

tùy theo khả năng và tốc độ của từng vi điều khiển. Và để tiếp tục cải tiến tốc độ

thực thi lệnh, tập lệnh của họ vi điều khiển PIC được thiết kế sao cho chiều dài mã

lệnh luôn cố định (ví dụ đối với họ 16Fxxxx chiều dài mã lệnh luôn là 14 bit) và

cho phép thực thi lệnh trong một chu kì của xung clock ( ngoại trừ một số trường

hợp đặc biệt như lệnh nhảy, lệnh gọi chương trình con … cần hai chu kì xung đồng

hồ). Điều này có nghĩa tập lệnh của vi điều khiển thuộc cấu trúc Havard sẽ ít lệnh

hơn, ngắn hơn, đơn giản hơn để đáp ứng yêu cầu mã hóa lệnh bằng một số lượng

bit nhất định.

Vi điều khiển được tổ chức theo kiến trúc Havard còn được gọi là vi điều

khiển RISC (Reduced Instruction Set Computer) hay vi điều khiển có tập lệnh rút

gọn. Vi điều khiển được thiết kế theo kiến trúc Von-Neuman còn được gọi là vi

điều khiển CISC (Complex Instruction Set Computer) hay vi điều khiển có tập lệnh

phức tạp vì mã lệnh của nó không phải là một số cố định mà luôn là bội số của 8

bit (1 byte).

26

 PIPELINING

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử Đây chính là cơ chế xử lí lệnh của các vi điều khiển PIC. Một chu kì lệnh của vi

điều khiển sẽ bao gồm 4 xung clock. Ví dụ ta sử dụng oscillator có tần số 4 MHZ,

thì xung lệnh sẽ có tần số 1 MHz (chu kì lệnh sẽ là 1 us). Giả sử ta có một đoạn

chương trình như sau:

1. MOVLW 55h

2. MOVWF PORTB

3. CALL SUB_1

4. BSF PORTA,BIT3

5. instruction @ address SUB_1

Ở đây ta chỉ bàn đến qui trình vi điều khiển xử lí đoạn chương trình trên thông

qua

từng chu kì lệnh. Quá trình trên sẽ được thực thi như sau:

27

Hình 1.3 Cơ chế pipelining

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

- TCY0: đọc lệnh 1

- TCY1: thực thi lệnh 1, đọc lệnh 2

- TCY2: thực thi lệnh 2, đọc lệnh 3

- TCY3: thực thi lệnh 3, đọc lệnh 4.

- TCY4: vì lệnh 4 không phải là lệnh sẽ được thực thi theo qui trình thực thi

của chương trình (lệnh tiếp theo được thực thi phải là lệnh đầu tiên tại label

SUB_1) nên chu kì thực thi lệnh này chỉ được dùng để đọc lệnh đầu tiên tại

label SUB_1. Như vậy có thể xem lênh 3 cần 2 chu kì xung clock để thực

thi.

- TCY5: thực thi lệnh đầu tiên của SUB_1 và đọc lệnh tiếp theo của SUB_1.

Quá trình này được thực hiện tương tự cho các lệnh tiếp theo của chương trình.

Thông thường, để thực thi một lệnh, ta cần một chu kì lệnh để gọi lệnh đó, và một

chu kì xung clock nữa để giải mã và thực thi lệnh. Với cơ chế pipelining được trình

bày ở trên, mỗi lệnh xem như chỉ được thực thi trong một chu kì lệnh. Đối với các

lệnh mà quá trình thực thi nó làm thay đổi giá trị thanh ghi PC (Program Counter)

cần hai chu kì lệnh để thực thi vì phải thực hiện việc gọi lệnh ở địa chỉ thanh ghi

PC chỉ tới. Sau khi đã xác định đúng vị trí lệnh trong thanh ghi PC, mỗi lệnh chỉ

cần một chu kì lệnh để thực thi xong.

 Các dòng PIC và cách lựa chọn vi điều khiển PIC

Các kí hiệu của vi điều khiển PIC:

- PIC12xxxx: độ dài lệnh 12 bit

- PIC16xxxx: độ dài lệnh 14 bit

- PIC18xxxx: độ dài lệnh 16 bit

28

C: PIC có bộ nhớ EPROM (chỉ có 16C84 là EEPROM)

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử F: PIC có bộ nhớ flash

LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp

LV: tương tự như LF, đây là kí hiệu cũ

Bên cạnh đó một số vi điệu khiển có kí hiệu xxFxxx là EEPROM, nếu có thêm

chữ A ở cuối là flash (ví dụ PIC16F877 là EEPROM, còn PIC16F877A là flash).

Ngoài ra còn có thêm một dòng vi điều khiển PIC mới là dsPIC.

Ở Việt Nam phổ biến nhất là các họ vi điều khiển PIC do hãng Microchip sản

xuất.

Cách lựa chọn một vi điều khiển PIC phù hợp:

- Trước hết cần chú ý đến số chân của vi điều khiển cần thiết cho ứng dụng.

Có nhiều vi điều khiển PIC với số lượng chân khác nhau, thậm chí có vi

điều khiển chỉ có 8 chân, ngoài ra còn có các vi điều khiển 28, 40, 44, …

chân.

- Cần chọn vi điều khiển PIC có bộ nhớ flash để có thể nạp xóa chương trình

được nhiều lần hơn. Tiếp theo cần chú ý đến các khối chức năng được tích

hợp sẵn trong vi điều khiển, các chuẩn giao tiếp bên trong.

- Sau cùng cần chú ý đến bộ nhớ chương trình mà vi điều khiển cho phép.

- Ngoài ra mọi thông tin về cách lựa chọn vi điều khiển PIC có thể được tìm

thấy trong cuốn sách “Select PIC guide” do nhà sản xuất Microchip cung

cấp.

 Ngôn ngữ lập trình cho PIC

Ngôn ngữ lập trình cho PIC rất đa dạng. Ngôn ngữ lập trình cấp thấp có

29

MPLAB (được cung cấp miễn phí bởi nhà sản xuất Microchip), các ngôn ngữ lập

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử trình cấp cao hơn bao gồm C, Basic, Pascal, … Ngoài ra còn có một số ngôn ngữ

lập trình được phát triển dành riêng cho PIC như PICBasic, MikroBasic,…

 Mạch nạp PIC

Đây cũng là một dòng sản phẩm rất đa dạng dành cho vi điều khiển PIC. Có thể

sử dụng các mạch nạp được cung cấp bởi nhà sản xuất là hãng Microchip như:

PICSTART plus, MPLAB ICD 2, MPLAB PM 3, PRO MATE II. Có thể dùng các

sản phẩm này để nạp cho vi điều khiển khác thông qua chương trình MPLAB.

Dòng sản phẩm chính thống này có ưu thế là nạp được cho tất cả các vi điều khiển

PIC, tuy nhiên giá thành rất cao và thường gặp rất nhiều khó khăn trong quá trình

mua sản phẩm.

Ngoài ra do tính năng cho phép nhiều chế độ nạp khác nhau, còn có rất nhiều

mạch nạp được thiết kế dành cho vi điều khiển PIC. Có thể sơ lược một số mạch

nạp cho PIC như sau:

- JDM programmer: mạch nạp này dùng chương trình nạp Icprog cho phép nạp

các vi điều khiển PIC có hỗ trợ tính năng nạp chương trình điện áp thấp ICSP

(In Circuit Serial Programming). Hầu hết các mạch nạp đều hỗ trợ tính năng

nạp chương trình này.

- WARP-13A và MCP-USB: hai mạch nạp này giống với mạch nạp PICSTART

PLUS do nhà sản xuất Microchip cung cấp, tương thích với trình biên dịch

MPLAB, nghĩa là ta có thể trực tiếp dùng chương trình MPLAB để nạp cho vi

điều khiển PIC mà không cần sử dụng một chương trình nạp khác, chẳng hạn

như ICprog.

- P16PRO40: mạch nạp này do Nigel thiết kế và cũng khá nổi tiếng. Ông còn

thiết kế cả chương trình nạp, tuy nhiên ta cũng có thể sử dụng chương trình nạp

30

Icprog.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử - Mạch nạp Universal của Williem: đây không phải là mạch nạp chuyên dụng

dành cho PIC như P16PRO40.

Các mạch nạp kể trên có ưu điểm rất lớn là đơn giản, rẻ tiền, hoàn toàn có thể

tự lắp ráp một cách dễ dàng, và mọi thông tin về sơ đồ mạch nạp, cách thiết kế, thi

công, kiểm tra và chương trình nạp đều dễ dàng tìm được và download miễn phí

thông qua mạng Internet. Tuy nhiên các mạch nạp trên có nhược điểm là hạn chế

về số vi điều khiển được hỗ trợ, bên cạnh đó mỗi mạch nạp cần được sử dụng với

một chương trình nạp thích hợp.

1.5.7 Họ vi điều khiển National Semiconductor

 COP8

 CR16

1.5.8 Họ vi điều khiển STMicroelectronics

 ST 62

 ST 7

1.5.9 Họ vi điều khiển Philips Semiconductors

 LPC2000

31

 LPC900

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

CHƯƠNG 2. TÌM HIỂU VỀ VI ĐIỀU KHIỂN 89S52

2.1 Sơ đồ khối, sơ đồ chân của vi điều khiển 89S52

2.1.1 Giới thiệu sơ lược

Vi điều khiển 8051 được Intel cho ra đời vào năm 1980 thuộc vi điều

khiển đầu tiên của họ MCS-51. Hiện tại rất nhiều nhà sản xuất như Siemens,

Advanced Micro Devices, Fusisu tập trung phát triển các sản phẩm trên cơ sở

8051.

Atmel là hang đã cho ra đời các chip 89C51, 52, 55 và sau đó cải tiến

thêm , hãng cho ra đời 89S51, 52, 89S8252…

2.1.2 Cấu hình của 89S52

AT89S52 cung cấp những đặc tính chuẩn như: 8 KByte bộ nhớ chỉ đọc có thể

xóa và lập trình nhanh (EPROM), 128 Byte RAM, 32 đường I/O, 3

TIMER/COUNTER 16 Bit, 6 vectơ ngắt có cấu trúc 2 mức ngắt, một Port nối tiếp

bán song công, 1 mạch dao động tạo xung Clock và bộ dao động ON-CHIP.

Các đặc điểm của chip AT89S52 được tóm tắt như sau:

-8 KByte bộ nhớ có thể lập trình nhanh, có khả năng tới 1000 chu kỳ ghi/xoá

-Tần số hoạt động từ: 0Hz đến 24 MHz

-3 mức khóa bộ nhớ lập trình

-3 bộ Timer/counter 16 Bit

-128 Byte RAM nội.

-4 Port xuất /nhập I/O 8 bit.

-Giao tiếp nối tiếp.

32

-64 KB vùng nhớ mã ngoài

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

2.1.3 Sơ đồ khối 89S52

33

Hình 2.1 Sơ đồ khối của bộ vi điều khiển AT89S52

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

2.1.4 Sơ đồ chân 89S52

Hình 2.2 Sơ đồ chân của AT89S52

Mặc dù các thành viên của họ 8051(8751, 89S52, 89C51, DS5000) đều có các

kiểu đóng vỏ khác nhau, chẳng hạn như hai hàng chân DIP,dạng vỏ dẹt vuông QPF

và dạng chip không có chân đỡ LLC thì chúng đều có 40 chân cho các chức năng

khác nhau như vào ra I/O, đọc RD , ghi WR , địa chỉ, dữ liệu và ngắt.

2.1.5 Chức năng các chân của AT89S52

- Port 0: từ chân 32 đến chân 39 (P0.0 _P0.7). Port 0 có 2 chức năng: trong

các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các đường

IO, đối với thiết kế lớn có bộ nhớ mở rộng nó được kết hợp giữa bus địa chỉ và bus

34

dữ liệu.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Hình 2.3 Sơ đồ Port 0

- Port 1: từ chân 1 đến chân 9 (P1.0 _ P1.7). Port 1 là port IO dùng cho giao

tiếp với thiết bị bên ngoài nếu cần.

Hình 2.4 Sơ đồ Port 1

- Port 2: từ chân 21 đến chân 28 (P2.0 _P2.7). Port 2 là một port có tác dụng

kép dùng như các đường xuất/nhập hoặc là byte cao của bus địa chỉ đối với các

35

thiết bị dùng bộ nhớ mở rộng.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Hình 2.5 Sơ đồ Port 2

- Port 3: từ chân 10 đến chân 17 (P3.0 _ P3.7). Port 3 là port có tác dụng kép.

Các chân của port này có nhiều chức năng, có công dụng chuyển đổi có liên hệ đến

các đặc tính đặc biệt của 89S52 như ở bảng sau:

Bảng 2.1 Các chức năng của Port 3

Tên

Chức năng chuyển đổi

Bit

RXD

Ngõ vào dữ liệu nối tiếp.

P3.0

TXD

Ngõ xuất dữ liệu nối tiếp.

P3.1

INT0

Ngõ vào ngắt cứng thứ 0.

P3.2

INT1

Ngõ vào ngắt cứng thứ 1.

P3.3

T0

Ngõ vào TIMER/ COUNTER thứ 0.

P3.4

T1

Ngõ vào của TIMER/ COUNTER thứ 1.

P3.5

WR

Tín hiệu ghi dữ liệu lên bộ nhớ ngoài.

P3.6

RD

Tín hiệu đọc bộ nhớ dữ liệu ngoài.

P3.7

36

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

- PSEN (Program store enable): chân cho phép bộ nhớ chương trình

PSEN là tín hiệu ngõ ra có tác dụng cho phép đọc bộ nhớ chương trình mở

rộng và thường được nối đến chân OE của Eprom cho phép đọc các byte mã lệnh.

PSEN ở mức thấp trong thời gian 89S52 lấy lệnh. Các mã lệnh của chương

trình được đọc từ Eprom qua bus dữ liệu, được chốt vào thanh ghi lệnh bên trong

89S52 để giải mã lệnh. Khi 89S52 thi hành chương trình trong ROM nội, PSEN ở

mức cao.

- ALE (Address Latch Enable): chân cho phép chốt địa chỉ

Khi 89S52 truy xuất bộ nhớ bên ngoài, Port 0 có chức năng là bus địa chỉ

và dữ liệu do đó phải tách các đường dữ liệu và địa chỉ. Tín hiệu ra ALE ở chân

thứ 30 dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi

kết nối chúng với IC chốt.

Tín hiệu ở chân ALE là một xung trong khoảng thời gian port 0 đóng vai trò

là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động.

- EA (External Access): chân truy xuất ngoài

Tín hiệu vào EA (chân 31) thường được mắc lên mức 1 hoặc mức 0. Nếu ở

mức 1, 89S52 thi hành chương trình từ bộ nhớ ROM nội. Nếu ở mức 0, 89S52 thi

hành chương trình từ bộ nhớ ROM ngoại. Chân EA được lấy làm chân cấp nguồn

37

21V khi lập trình cho Eprom trong 89S52.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

RST (Reset): Khi ngõ vào tín hiệu này

đưa lên mức cao ít nhất 2 chu kỳ máy, các thanh ghi

bên trong được nạp những giá trị thích hợp để

khởi động hệ thống. Khi cấp điện mạch phải tự

động reset. Các giá trị tụ và điện trở được chọn là:

R1=10, R2=220, C=10 F.

Hình 2.6 Mạch reset

Các ngõ vào bộ dao động X1, X2

Hình 2.7 Mạch dao động

Bộ tạo dao động được tích hợp bên trong 89S52. Khi sử dụng 89S52, người ta

chỉ cần nối thêm thạch anh và các tụ. Tần số thạch anh tùy thuộc vào mục đích của

38

người sử dụng, giá trị tụ thường được chọn là 33p.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử 2.2 Tổ chức bộ nhớ bên trong 89S52

Bộ nhớ trong 89S52 bao gồm ROM và RAM. RAM trong 89S52 bao

gồm nhiều thành phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các

bank thanh ghi và các thanh ghi chức năng đặc biệt.

39

AT89S52 có bộ nhớ được tổ chức theo cấu trúc Harvard: có những vùng bộ nhớ riêng biệt cho chương trình và dữ liệu. Chương trình và dữ liệu có thể chứa bên trong 89S52 nhưng 89S52 vẫn có thể kết nối với 64K byte bộ nhớ chương trình và 64K byte dữ liệu bên ngoài

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử Bảng 2.2 Bản đồ bộ nhớ Data bên trong Chip 89S52 được tổ chức như sau:

Địa chỉ

Địa chỉ bit

Địa chỉ bit

Địa chỉ

byte

RAM bên trong AT89S52 được phân chia như sau:

- Các bank thanh ghi có địa chỉ từ 00H đến 1FH.

- RAM địa chỉ hóa từng bit có địa chỉ từ 20H đến 2FH.

- RAM đa dụng từ 30H đến 7FH.

- Các thanh ghi chức năng đặc biệt từ 80H đến FFH.

- RAM đa dụng

RAM đa dụng có địa chỉ từ 30h – 7Fh có thể truy xuất mỗi lần 8 bit bằng

cách dùng chế độ định địa chỉ trực tiếp hay gián tiếp.

40

Các vùng địa chỉ thấp từ 00h – 2Fh cũng có thể sử dụng cho mục đích

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử - RAM có thể định địa chỉ bit

Vùng địa chỉ từ 20h -2Fh gồm 16 byte có thể thực hiện như vùng RAM đa

dụng (truy xuât mỗi lần 8 bit) hay thực hiện truy xuất mỗi lần 1 bit bằng các lệnh

xử lý bit.

Các bank thanh ghi

Vùng địa chỉ 00h – 1Fh được chia thành 4 bank thanh ghi: bank 0 từ 00h –

07h, bank 1 từ 08h – 0Fh, bank 2 từ 10h – 17h và bank 3 từ 18 – 1Fh. Các bank

thanh ghi này được đại diện bằng các thanh ghi từ R0 đến R7. Sau khi khởi động

thì hệ thống bank 0 được chọn sử dụng.

Do có 4 bank thanh ghi nên tại một thời điểm chỉ có một bank thanh ghi

được truy xuất bởi các thanh ghi R0 đến R7. Việc thay đổi bank thanh ghi được

thực hiện thông qua thanh ghi từ trạng thái chương trình (PSW).

Các thanh ghi có chức năng đặc biệt

Các thanh ghi trong 89S52 được định dạng như một phần của RAM trên chip vì vậy mỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi bộ đếm chương trình và thanh ghi lệnh vì các thanh ghi này hiếm khi bị tác động trực tiếp). Cũng như R0 đến R7, 89S52 có 21 thanh ghi có chức năng đặc biệt (SFR: Special Function Register) ở vùng trên của RAM nội từ địa chỉ 80H đến 0FFH.

Chức năng từng bit trạng thái chương trình

- Cờ Carry CY (Carry Flag):

Cờ nhớ thường nó được dùng cho các lệnh toán học: C =1 nếu phép toán cộng

có sự tràn hoặc phép trừ có mượn và ngược lại C = 0 nếu phép toán cộng không

tràn và phép trừ không có mượn.

41

- Cờ Carry phụ AC (Auxiliary Carry Flag):

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Khi cộng những giá trị BCD (Binary Code Decimal), cờ nhớ phụ AC được set

nếu kết quả 4 bit thấp nằm trong phạm vi điều khiển 0AH - 0FH. Ngược lại AC = 0

- Cờ 0 (Flag 0):

Cờ 0 (F0) là 1 bit cờ đa dụng dùng cho các ứng dụng của người dùng.

- Những bit chọn bank thanh ghi truy xuất:

RS1 và RS0 quyết định dãy thanh ghi tích cực. Chúng được xóa sau khi reset

hệ thống và được thay đổi bởi phần mềm khi cần thiết.

Tùy theo RS1, RS0 = 00, 01, 10, 11 sẽ được chọn Bank tích cực tương ứng

là Bank 0, Bank1, Bank2 và Bank3.

Bảng 2.3 Bit chọn Bank thanh ghi

RS1

RS0

BANK

0

0

0

0

1

1

1

2

0

1

3

1

- Cờ tràn OV (Over Flag):

Cờ tràn được set sau một hoạt động cộng hoặc trừ nếu có sự tràn toán

học.

- Bit Parity (P):

Bit tự động được set hay Clear ở mỗi chu kỳ máy để lập Parity chẵn với thanh

42

ghi A. Sự đếm các bit 1 trong thanh ghi A cộng với bit Parity luôn luôn chẵn. Ví dụ

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử A chứa 10101101B thì bit P set lên một để tổng số bit 1 trong A và P tạo thành số

chẵn.

Bit Parity thường được dùng trong sự kết hợp với những thủ tục của Port nối

tiếp để tạo ra bit Parity trước khi phát đi hoặc kiểm tra bit Parity sau khi thu.

- Các thanh ghi định thời (Timer)

AT89S52 chứa 2 bộ định thời 2 bộ định thời/đếm 16 bit được dùng cho việc

định thời hoặc đếm sự kiện. Timer 0 ở địa chỉ 8AH (TL0: Byte thấp) và 8DH

(TH1: Byte cao). Việc khởi động Timer được SET bởi TIMER Mode (TMOD) ở

địa chỉ 89H và thanh ghi điều khiển.

Timer (TCON) ở địa chỉ 88H, chỉ có TCON được địa chỉ hóa từng bit.

- Các thanh ghi nối tiếp

AT89S52 chứa một Port nối tiếp dành cho việc trao đổi thông tin với các

thiết bị nối tiếp như máy tính, Modem hoặc giao tiếp nối tiếp với các IC khác. Một

thanh ghi gọi là bộ đệm dữ liệu nối tiếp (SBUF) ở địa chỉ 99H sẽ giữ cả hai dữ liệu

truyền và dữ liệu nhận. Khi truyền dữ liệu thì ghi lên SBUF, khi nhận dữ liệu thì

đọc SBUF. Các mode vận hành khác nhau được lập trình ghi điều khiển port nối

tiếp SCON ở địa chỉ 98H.

-Các thanh ghi ngắt

Thực tế ở 89S52 chỉ có 5 ngắt dành cho người dùng, song nhiều tài liệu kỹ

thuật của các nhà sản xuất vẫn nói rằng có 6 ngắt vì họ tính cả lệnh reset bố trí sáu

ngắt của 8051 như sau:

- Reset: khi chân reset được kích hoạt thì 8051 nhảy về địa chỉ 0000.

- Hai ngắt dành cho bộ định thời timer 0 và timer 1, địa chỉ ở bảng vector ngắt

43

của hai ngắt này tương ứng với timer 0 và timer 1 là 000B4 và 001B4. Hai ngắt

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử phần cứng dành cho các thiết bị bên ngoài nối tới chân 12 (P3.2) và 13 (P3.3) của

cổng P3 là INT0 và INT1 tương ứng. Các ngắt ngoài cũng được gọi là EX1 và

EX2. Vị trí nhớ trong bảng vector ngắt của hai ngắt INT0 và INT1 này là 0003H

và 0013H .

Truyền thông nối tiếp có một ngắt cho cả thu lẫn phát, địa chỉ của ngắt này

trong bảng vector ngắt 0023H

Bảng vector ngắt của 8051:

Bảng 2.4 Bảng vector ngắt của 8051

- Cho phép ngắt và cấm ngắt:

Khi reset thì tất cả mọi ngắt bị cấm, có nghĩa là không có ngắt nào được bộ

vi điều khiển đáp ứng nếu chúng được kích hoạt, các ngắt phải được cho phepw

44

bằng phần mềm để bộ vi điều khiển có thể đáp ứng được. Có một thanh ghi được

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử gọi là cho phép ngắt IE(Interrup Enable), chịu trách nhiệm về việc cho phép ngắt

và cấm các ngắt IE là thanh ghi có thể định địa chỉ bit.

-Thanh ghi cho phép ngắt IE:

Bảng 2.5 Thanh ghi cho phép ngắt IE

- Các bước thực hiện khi cho phép một ngắt

 Để cho phép 1 ngắt, trình tự thực hiện các bước như sau:

+ Bit D7 của thanh ghi IE là EA phải được bật lên cao cho phép các bit còn lại

của thanh ghi có hiệu lực.

+ Nếu EA=1 thì tất cả mọi ngắt đều được phép và sẽ được đáp ứng nếu các bit

tương ứng của các ngắt này trong IE có mức cao.

+ Nếu EA=0 thì không có ngắt nào được đáp ứng cho dù bít tương ứng trong

45

IE có giá trị cao.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử - Thanh ghi TIMER.

Vi Điều Khiển 89S52 có 3 timer 16 bit, mỗi timer có bốn cách làm việc.

Người ta sử dụng các timer để:

o Định khoảng thời gian.

o Đếm sự kiện.

o Tạo tốc độ baud cho port nối tiếp trong 89S52.

Trong các ứng dụng định khoảng thời gian, người ta lập trình timer ở những

khoảng đều đặn và đặt cờ tràn timer. Cờ được dùng để đồng bộ hóa chương trình

để thực hiện một tác động như kiểm tra trạng thái của các ngõ vào hoặc gửi sự kiện

ra các ngõ ra. Các ứng dụng khác có thể sử dụng việc tạo xung nhịp đều đặn của

timer để đo thời gian trôi qua giữa hai sự kiện (ví dụ đo độ rộng xung).

- Thanh ghi chế độ Timer Mode (TMOD):

Cả hai bộ định thời timer 0 và timer 1 đều dùng chung một thanh ghi được

gọi là TMOD để thiết lập các chế độ làm việc khác nhau của bộ định thời. Thanh

ghi TMOD là thanh ghi 8 bit gồm có 4 bit dành cho bộ timer 0 và 4 bit dành cho

timer 1. Trong đó hai bit thấp của chúng dùng để thiết lập chế độ của bộ định thời,

46

còn 2 bit cao dùng để xác định phép toán.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Dưới đây chúng ta sẽ tìm hiểu về các phép toán:

47

Bảng 2.6 Tóm tắt thanhh ghi chức năng TMOD

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

2.3 Kết nối vi điều khiển với một số thiết bị ngoại vi đơn giản

2.3.1 VĐK giao tiếp led đơn và phím nhấn

48

Hình 2.8 VĐK giao tiếp led đơn và phím nhấn

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

2.3.2 Kết nối VĐK với Rơle

49

Hình 2.9 VĐK giao tiếp rơle-5V

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Bảng 2.7 Bảng mã của Led Anode chung (các led đơn sáng ở mức 0)

- Bảng mã cho Led Anode chung (a là LSB, dp là MSB):

Số

Dp

Mã Hex

g

f

e

c

b

a

d

0

1

1

0

0

0

0

0

C0h

0

1

1

1

1

1

0

0

1

F9h

1

2

1

0

1

0

1

0

0

A4h

0

3

1

0

1

1

0

0

0

B0h

0

4

1

0

0

1

0

0

1

99h

1

5

1

0

0

1

0

1

0

92h

0

6

1

0

0

0

0

1

0

82h

0

7

1

1

1

1

0

0

0

F8h

1

8

1

0

0

0

0

0

0

80h

0

9

1

0

0

1

0

0

0

90h

0

50

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Bảng 2.8 Bảng mã của Led Cathode chung (các led đơn sáng ở mức 1)

Số

Dp

Mã Hex

g

f

e

d

c

b

a

0

1

1

1

1

1

1

3Fh

0

0

0

0

0

0

1

1

0

06h

1

0

1

0

1

1

0

1

1

5Bh

2

0

1

0

0

1

1

1

1

4Fh

3

0

1

1

0

0

1

1

0

66h

4

0

1

1

0

1

1

0

1

6Dh

5

0

1

1

1

1

1

0

1

7Dh

6

0

0

0

0

0

1

1

1

07h

7

0

1

1

1

1

1

1

1

7Fh

8

0

1

1

0

1

1

1

1

6Fh

9

0

51

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Bảng 2.9 Bảng mã cho Led Anode chung (a là LSB, dp là MSB)

Số

Dp

a Mã Hex

g

f

e

d

c

b

1

0

0

0

0

0

0

1

0

C0h

1

1

1

1

0

0

1

1

1

F9h

0

1

0

0

1

0

2

1

0

A4h

0

1

1

0

0

0

3

1

0

B0h

0

0

1

1

0

0

4

1

1

99h

0

0

1

0

0

1

5

1

0

92h

0

0

0

0

0

1

6

1

0

82h

1

1

1

1

0

0

7

1

0

F8h

0

0

0

0

0

0

8

1

0

80h

52

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử 2.3.3 Kết nối VĐK với LCD

53

Hình 2.10 VĐK giao tiếp phím nhấn và LCD

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

2.3.4 Kết nối VĐK với ma trận led

54

Hình 2.11 VĐK giao tiếp với ma trận led

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

CHƯƠNG 3. CÁC LINH KIỆN LIÊN QUAN

3.1 Led 7 thanh

3.1.1 Các khái niệm cơ bản

Trong các thiết bị, để báo trạng thái hoạt động của thiết bị đó

cho người sử dụng với thông số chỉ là các dãy số đơn thuần, thường

người ta sử dụng "led 7 đoạn". Led 7 đoạn được sử dụng khi các

dãy số không đòi hỏi quá phức tạp, chỉ cần hiển thị số là đủ, chẳng

hạn led 7 đoạn được dùng để hiển thị nhiệt độ phòng, trong các

đồng hồ treo tường bằng điện tử, hiển thị số lượng sản phẩm được

kiểm tra sau một công đoạn nào đó...

Led 7 đoạn có cấu tạo bao gồm 7 led đơn có dạng thanh xếp theo hình và có

thêm một led đơn hình tròn nhỏ thể hiện dấu chấm tròn ở góc dưới, bên phải của

led 7 đoạn.

7 led đơn trên led 7 đoạn có Anode (cực +) hoặc Cathode (cực -) được nối

chung với nhau vào một điểm, được đưa chân ra ngoài để kết nối với mạch điện. 8

cực còn lại trên mỗi led đơn được đưa thành 8 chân riêng, cũng được đưa ra ngoài

để kết nối với mạch điện. Nếu led 7 đoạn có Anode (cực +) chung, đầu chung này

được nối với +Vcc, các chân còn lại dùng để điều khiển trạng thái sáng tắt của các

led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 0. Nếu led 7 đoạn có

Cathode (cực -) chung, đầu chung này được nối xuống Ground (hay Mass), các

chân còn lại dùng để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng khi

tín hiệu đặt vào các chân này ở mức 1.

Vì led 7 đoạn chứa bên trong nó các led đơn, do đó khi kết nối cần đảm bảo

55

dòng qua mỗi led đơn trong khoảng 10mA-20mA để bảo vệ led. Nếu kết nối với

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử nguồn 5V có thể hạn dòng bằng điện trở 330Ω trước các chân nhận tín hiệu điều

khiển.

Hình 3.1 Sơ đồ chân 7 SEG-COM-ANODE và hình ảnh minh họa

3.1.2 Kết nối với vi điều khiển

Ngõ nhận tín hiệu điều khiển của led 7 đoạn có 8 đường, vì vậy có thể dùng 1

Port nào đó của Vi điều khiển để điều khiển led 7 đoạn. Như vậy led 7 đoạn nhận

một dữ liệu 8 bit từ Vi điều khiển để điều khiển hoạt động sáng tắt của từng led

đơn trong nó, dữ liệu được xuất ra điều khiển led 7 đoạn thường được gọi là "mã

hiển thị led 7 đoạn". Có hai kiểu mã hiển thị led 7 đoạn: mã dành cho led 7 đoạn có

Anode (cực +) chung và mã dành cho led 7 đoạn có Cathode (cực -) chung. Chẳng

hạn, để hiển thị số 1 cần làm cho các led ở vị trí b và c sáng, nếu sử dụng led 7

đoạn có Anode chung thì phải đặt vào hai chân b và c điện áp là 0V (mức 0) các

chân còn lại được đặt điện áp là 5V (mức 1), nếu sử dụng led 7 đoạn có Cathode

chung thì điện áp (hay mức logic) hoàn toàn ngược lại, tức là phải đặt vào chân b

56

và c điện áp là 5V (mức 1).

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Phần cứng được kết nối với 1 Port bất kì của Vi điều khiển, để thuận tiện cho

việc xử lí về sau phần cứng nên được kết nối như sau: Px.0 nối với chân a, Px.1nối

với chân b, lần lượt theo thứ tự cho đến Px.7 nối với chân h.

3 .2 Giới thiệu về IC ADC0804

Các bộ chuyển đổi ADC thuộc những thiết bị được sử dụng rộng rãi nhất để

thu dữ liệu. Các máy tính số sử dụng các giá trị nhị phân, nhưng trong thế giới vật

lý thì mọi đại lượng ở dạng tương tự (liên tục). Nhiệt độ, áp suất (khí hoặc chất

lỏng), độ ẩm và vận tốc và một số ít những đại lượng vật lý của thế giới thực mà ta

gặp hằng ngày. Một đại lượng vật lý được chuyển về dòng điện hoặc điện áp qua

một thiết bị được gọi là các bộ biến đổi. Các bộ biến đổi cũng có thể coi như các

bộ cảm biến. Mặc dù chỉ có các bộ cảm biến nhiệt, tốc độ, áp suất, ánh sáng và

nhiều đại lượng tự nhiên khác nhưng chúng đều cho ra các tín hiệu dạng dòng điện

hoặc điên áp ở dạng liên tục. Do vậy, ta cần một bộ chuyển đổi tương tự số sao cho

bộ vi điều khiển có thể đọc được chúng. Một chip ADC được sử dụng rộng rãi phổ

57

biến là ADC0804.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

3.2.1 Sơ đồ chân ADC0804

Hình 3.2 Sơ đồ chân ADC0804

3.2.2 Chức năng các chân ADC0804

Chip ADC0804 là bộ chuyển đổi tương tự số thuộc họ ADC800 của hãng

National Semiconductor. Chip này cũng được nhiều hãng khác sản xuất. Chip có

điện áp nuôi +5V v à độ phân giải 8 bit. Ngoài độ phân giải thì thời gian

chuyển đổ i cũng là một tham số quan trọng khi đánh giá bộ ADC. Thời gian

chuyển đổi được định nghĩa là thời gian mà bộ ADC cần để chuyển một đầu

vào tương tự thành một số nhị phân. Đối với ADC0804 thì thời gian chuyển đổi

phụ thuộc vào tần số đồng hồ đ ược cấp tới chân CLK và CLK IN và không bé

hơn 110µs. Các chân khác của ADC0804 có chức năng như sau:

+ CS (Chip select): Chân số 1, là chân chọn Chip, đầu vào tích cực mức

thấp được sử dụng để kích hoạt Chip ADC0804. Để truy cập ADC0804 th ì chân

này phải ở mức thấp.

58

+ RD (Read): Chân số 2, là một tín hiệu vào, tích cực ở mức thấp. Các bộ

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử chuyển đổi đầu vào tương tự thành số nhị phân và giữ nó ở một thanh ghi trong.

RD được sử dụng để có dữ liệu đã được chyển đổi tới đầu ra của ADC0804. Khi

CS = 0 nếu có một xung cao xuống thấp áp đến chân RD thì dữ liệu ra dạng số 8

bit được đưa tới các chân dữ liệu (DB0 – DB7).

+ WR (Write): Chân số 3, đây là chân vào tích cực mức thấp được dùng để

báo cho ADC biết bắt đầu quá trình chuyển đổi. Nếu CS = 0 khi WR tạo ra xung

cao xuống thấp thì bộ ADC0804 bắt đầu quá trình chuyển đổi giá trị đầu vào

tương tự Vin về số nhị phân 8 bit. Khi việc chuyển đổi hoàn tất thì chân INTR

được ADC hạ xuống thấp.

+ CLK IN và CLK R: CLK IN (chân số 4), là chân vào nối tới đồng hồ

ngoài được sử dụng để tạo thời gian. Tuy nhiên ADC0804 c ũng có một bộ tạo

xung đồng hồ riêng. Để dùng đồng hồ riêng thì các chân CLK IN và CLK R

(chân số 19) được nối với một tụ điện v à một điện trở (như hình vẽ). Khi đó tần

số được xác định bằng biểu thức:

F = 1/ 1.1RC

Với R = 10 kΩ, C = 150 pF và tần số f = 606 kHz và thời gian chuyển

59

đổi l à 110 µs.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Hình 3.3 Kết nối ADC0804 với các thiết bị

+ Ngắt INTR (Interupt): Chân số 5, là chân ra tích cực mức thấp. Bình

thường chân này ở trạng thái cao và khi việc chuyển đổi hoàn tất thì nó xuống

thấp để báo cho CPU biết là dữ liệu chuyển đổi sẵn sàng để lấy đi. Sau khi

INTR xuống thấp, cần đặt CS = 0 và gửi một xung cao xuống thấp tới chân RD

để đưa dữ liệu ra.

+ Vin (+) và Vin (-): Chân số 6 và chân số 7, đây là 2 đầu vào tương tự vi

sai, trong đó V in = Vin(+) – Vin(-). Thông thường Vin(-) được nối tới đất và

Vin(+) được dùng làm đầu vào tương tự và sẽ được chuyển đổi về dạng số.

+ Vcc: Chân số 20, là chân nguồn nuôi +5V. Chân này còn được dùng làm

điện áp tham chiếu khi đầu vào Vref/2 để hở.

+ Vref/2: Chân số 9, là chân điện áp đầu vào được dùng làm điện áp tham

60

chiếu. Nếu chân này hở thì điện áp đầu vào tương tự cho ADC0804 nằm trong dải

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử 0 đến +5V. Tuy nhiên, có nhiều ứng dụng mà đầu vào tương tự áp đến Vin khác

với dải 0 đến +5V. Chân Vref/2 được dùng để thực hiện các điện áp đầu ra khác

0 đến +5V.

Bảng 3.1 Quan hệ điện áp V ref/2 với Vin

Kích thước Vref/2 (V) Vin (V)

0 – 5 5/256 = 19.53 Hở

0 – 4 4/256 = 15.62 2.0

0 – 3 3/256 = 11.71 1.5

0 – 2.56 2.56/256 = 10 1.28

0 – 2 2/256 = 7.81 1.0

0 – 1 1/256 = 3.90 0.5

+ D0 - D7: D0 - D7, chân số 18 – 11, là các chân ra d ữ liệu số (D7 là bit

cao nhất MSB và D0 là bit thấp nhất LSB). Các chân này được đệm ba trạng

thái và dữ liệu đã được chuyển đổi chỉ được truy cập khi chân CS = 0 và chân

RD đưa xu ống mức thấp. Để tính điện áp đầu ra ta tính theo công thức sau:

Dout = Vin / Kích thước bước

Víi Dout lµ ®Çu ra d÷ liÖu sè (d¹ng thËp ph©n). Vin lµ ®iÖn ¸p ®Çu vµo

tư¬ng tù vµ kích thước bước lµ sù thay ®æi nhá nhÊt ®ược tÝnh như lµ (2

Vref/2) chia cho 256 ®èi víi ADC 8 bÝt.

3.3 Giới thiệu về cảm biến LM35

Đây là cảm biến nhiệt được tích hợp chính xác cao của hãng National

Semiconductor. Điện áp đầu ra của nó tỉ lệ tuyến tính với nhiệt độ theo thang độ

61

Celsius. Điện áp ngõ ra thay đổi 10mv (điện áp bước) cho mỗi sự thay đổi 1C.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử Chúng không yêu cầu cân chỉnh ngoài.

3.3.1 Sơ đồ chân LM35

LM35 có 4 dạng: TO-46, SO-8, TO-92, TO-220. Nhưng thường dùng nhất là

dạng TO-92 như hình dưới.

62

Hình 3.4 Sơ đồ chân LM35 dạng TO-92

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

- Đặc điểm cơ bản của LM35:

+ Điện áp nguồn từ -0.2V đến +35V

+ Điện áp ra từ -1V đến +6V

+ Dải nhiệt độ đo được từ -55°C đến +150°C

+ Điện áp đầu ra thay đổi 10mV mỗi khi có sự thay đổi 1°C.

- Các đặc điểm khác của LM35:

* LM35 có độ biến thiên theo nhiệt độ : 10mV/1(0C)

* Độ chính xác cao, tính năng cảm biến nhiệt độ rất nhạy, ở nhiệt độ 25(0C)

nó có sai số không quá1%.

Với tầm đo từ 0(0C) đến 128(0C) , tín hiệu ngõ ra tuyến tính liên tục với

những thay đổi của tínhiệu nhõ vào.

63

* Thông số kỹ thuật:

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

- Tiêu tán công suất thấp .

- Dòng làm việc từ 400µA đến 5mA.

- Dòng ngược 15mA.

- Dòng thuận 10mA.

- Độ chính xác: khi làm việc ở nhiệt độ 25(0C) với dòng làm việc 1mA thì

điện áp ngõ ra từ 2,94V đến3,04V.

* Đặc tính điện:

- Theo thông số của nhà sản xuất LM35, quan hệ giữa điện áp và ngõ ra như

sau:

Vout =0.01*T(0K)=2,73+0,01*T(0C).

-Vậy ứng với tầm hoạt động từ 0(0C) đến 100(0C) ta có sự biến thiên điện áp

ngõ ra làỞ 0(0C) thì điện áp ngõ ra Vout = 2,73V.

-Ở 5(0C) thì điện áp ngõ ra Vout = 2,78VỞ 100(0C) thì điện áp ngõ ra Vout

= 3,71V

-Tầm biến thiên điện áp tương ứng với nhiệt độ từ 0(0C) đến 100(0C) là 1V

CHƯƠNG 4. THIẾT KẾ MÔ HÌNH

64

4.1 Lưu đồ thuật toán

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Bắt đầu

Nhiệt độ vào t°

LM35 chuyển t° → Điện áp u

ADC chuyển u → 8 bit nhị phân

Khống chế = 20 a = 3

a= 3

Ngắt INT0

a= 2

a= 1

Ngắt INT1 Ngắt INT1

có không không có

Khống chế – – Khống chế + +

Hiển thị nhiệt độ khống chế t1

t1> t° t1< t° t1?

t1 = t°

Led đỏ Led vàng Led xanh Hiển thị t°

65

Kết thúc

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Hình 4.1 Lưu đồ thuật toán

4.3 Mạch nguyên lý và mạch in

VCC

Q4

Q1

Q2

Q3

C1815

C1815

C1815

C1815

VCC

100

100

100

100

J1

1 2

U1

U2

U3

U4

VCC

3

6

8

3

6

8

3

6

8

3

6

8

CON2

led7t

led7t

led7t

led7t

U7

0 4

R12

45

7

0 91

45

7

0 91

45

7

0 91

45

7

0 91

10712

10712

10712

10712

VCC

C C V

VCC

U6

39 38 37 36 35 34 33 32

21 22 23 24 25 26 27 28

D1 LED

P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7

P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15

1

2

VS+

VOUT

6 7

RESISTOR

D N G

+IN -IN

9

VREF/2

10K

3

LM35

151

10K

10K

4 19

CLKIN CLKR

18 17 16 15 14 13 12 11

1 2 3 4 5 6 7 8

10 11 12 13 14 15 16 17

DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

P1.0/T2 P1.1/T2-EX P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD

VCC

5

2 3 1

19 18

30 29

RD WR CS

XTAL1 XTAL2

ALE/PROG PSEN

SW2

SW3

50K

20

VCC

VCC

INTR D N G A

D N G

VCC/VREF

31 9

D N G

EA/VPP RST

Y1

0 1

8

ADC0804

0 2

AT89C52

CRYSTAL

33

33

10K

VCC

4.3.1 Mạch nguyên lý

66

Hình 4.2 Sơ đồ mạch nguyên lý

67

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

4.3.2 Mạch in

68

Hình 4.3 Sơ đồ mạch in

69

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

KẾT LUẬN

– Ưu điểm

- Mạch có dải đo nhiệt độ lớn, từ 0°C đến 99°C.

- Khả năng đáp ứng nhanh với sự thay đổi của nhiệt độ môi trường.

- Mạch đặt được nhiệt độ khống chế để so sánh với nhiệt độ môi trường bên

ngoài.

- Mạch có đèn báo tương ứng khi nhiệt độ môi trường thay đổi so với nhiệt độ

khống chế, có đèn báo để xác định đang tăng nhiệt độ khống chế hay giảm nhiệt độ

khống chế.

- Mạch hiển thị LED 7 đoạn nên dễ dàng cho người sử dụng theo dõi nhiệt

độ hiển thị dù trong điều kiện thiếu ánh sáng.

- Mạch được thiết kế nhỏ gọn, dễ sử dụng, tiện lợi .

– Nhược điểm

- Tính ổn định không cao khi mang đi xa hay sử dụng trong khi đang di

chuyển.

- Còn có sai số nhiệt độ đo được do sai số linh kiện và những sai số trong

khi tính toán thiêt kế mạch nhưng chấp nhận được.

– Tính thực tế của sản phẩm đã thiết kế

70

Mạch có thể sử dụng để đo nhiệt độ trong khoảng từ +0°C đến +99°C.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

Mạch có thể đặt nhiệt độ khống chế để so sánh với nhiệt độ môi trường bên

ngoài, có đèn báo tương ứng nên có thể ứng dụng ở những nơi cần theo dõi nhiệt

độ như nhà máy, xưởng làm việc, trang trại…

- Mạch hiển thị LED 7 đoạn nên dễ dàng theo dõi nhiệt độ dù trong điều

kiện thiếu ánh sáng.

Mặc dù chúng em đã cố gắng để hoàn thành đề tài đúng thời hạn, nên

không tránh khỏi những thiếu sót, chúng em mong quý thầy cô thông cảm.

Em mong được đón nhận ý kiến đóng góp quý báu của thầy cô để đề tài

71

nghiên cứu hoàn thiện hơn.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI

Có thể mở rộng thang đo để ứng dụng rộng rãi hơn trong công nghiệp . Trên

cơ sở lí thuyết về kỹ thuật điện, kỹ thuật vi điều khiển, vi xử lý, đề tài “ nghiên

cứu thiết kế mạch đo và khống chế nhiệt độ ứng dụng vi điều khiển 8951 “ đã đưa

ra sơ đồ nguyên lý mạch đo và điều khiển nhiệt độ ứng dụng vi xử lý 8951.

Đề tài đã nêu lên ứng dụng cơ bản của vi xử lý trong lĩnh vực điều khiển . Bên

cạnh đó đề tài đã mở ra một hướng phát triển là tiếp tục nghiên cứu phần giao tiếp

hệ thống và máy tính, hệ thống và con người trên màn hình LCD.

Ngày nay , điều khiển tự động đã trở thành một nhu cầu không thể thiếu được

trong hệ thống các nhà máy công nghiệp. Một trong các yếu tố được điều khiển

nhiều trong các hệ thống công nghiệp đó là nhiệt độ. Nhiệt độ được đo, điều khiển

theo nhu cầu sử dụng , ví dụ như: trong các hệ thống nhiệt của nồi hơi, các lò ấp,

các lò sấy vv…

Các hệ thống đo và điều khiển nhiệt độ hiện nay xuất hiện rất nhiều trên thị

trường nhưng với những xuất xứ không rõ nguồn gốc, giá thành cao không có

hướng dẫn sử dụng rất khó khăn trong việc sửa chữa và nâng cấp. Để giải quyết

các vấn đề đó, với những kiến thức đã học về kỹ thuật điện, kỹ thuật vi xử lý, vi

điều khiển, nhóm tác giả đã tính toán và đưa ra giải pháp điều khiển nhiệt độ ứng

72

dụng vi xử lý 8951 với mạch thiết kế đơn giản dễ dàng sửa chữa và nâng cấp.

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

ỨNG DỤNG

Trong thực tế có rất nhiều ứng dụng của mạch đo và khống chế nhiệt độ, sau đây là

một vài ứng dụng quan trọng và được sử dụng nhiều nhất : nó ảnh hưởng trực tiếp

đến năng xuất sản xuất sản phẩm cũng như giá thành sản phẩm, tránh được lãng

phí nguyên liệu và đạt được những sản phẩm tốt nhất.

- ứng dụng trong lò nung thép

Để đạt được sản phẩm có chất lượng tốt nhất thì yêu cầu lò nung phải giữ

được nhiệt độ ổn định, nhiệt độ không được thấp hơn một mức nhất định nào đó,

tránh trường hợp thép bị non, dễ gẫy…không đạt tiêu chuẩn.

+ Mô hình thực tế lò nung:

Để giải quyết vấn đề nhiên liệu chất lượng sản phẩm trước yêu cầu đặt ra như

vậy thì mạch khống chế nhiệt độ là một lựa chọn hoàn hảo. Mạch sẽ báo hiệu cho

73

người điều khiển biết lò nung đang ở trạng thái nào, nhiệt độ là bao nhiêu, sản

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử phẩm sinh ra sẽ thế nào, khi nhiêt độ quá cao để tránh tốn nhiên liệu mạch sẽ báo

hiệu để người điều khiển giảm nhiệt độ xuống . Khi nhiêt độ quá thấp để tránh sản

phẩm không đủ nhiệt cần thiết, mạch sẽ báo hiệu để người điều khiển tăng nhiệt

độ lên sao cho phù hợp.

- Ứng dụng trong lò ấp trứng

- Một ứng dụng quan trọng nữa của mạch khống chế nhiệt độ trong

sản xuất đó l à ứng dụng vào đo và khống chế nhiệt độ trong lò ấp

trứng

Ngoài ra còn rất nhiều ứng dụng trong thực tế của mạch khống chế nhiệt

độ nữa để phục vụ đời sống cũng như sản xuất như ứng dụng trong việc

báo cứu hỏa khi có nhiệt độ cao,….

Nhờ có sự giúp đỡ và hướng dẫn của thầy giáo Hoàng Văn Quang em đã

hoàn thành đề tài của mình. Nhưng do kiến thức và khả năng có hạn nên trong đề

tài còn nhiều sai sót, em mong thầy cô cho em những ý kiến đóng góp thêm.

74

Em xin chân thành cảm ơn!

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

PHỤ LỤC

Phần lập trình

#include

#include

sbit led0=P2^0;

sbit led1=P2^1;

sbit led2=P2^2;

sbit led3=P2^3;

sbit led_do=P2^4; //nhiet do moi truong < nhiet do khong che

sbit led_vang=P2^5; //nhiet do moi truong = nhiet do khong che

sbit led_xanh=P2^6; //nhiet do moi truong > nhiet do khong che

sbit led_trang=P2^7;

sbit adc_intr=P3^5;

sbit adc_wr=P3^6;

sbit adc_rd=P3^7;

int ngat0,tong,i;

unsigned char chuc,donvi,nhiet_do,dien_ap,khong_che;

unsigned char

M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void delay(unsigned int n) //ham tre

{ unsigned int j;

75

for(j=0;j

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

}

void bien_doi_adc(void) //bien doi adc

{ adc_rd=0;

adc_wr=0;

delay(2);

adc_wr=1;

while(!adc_intr);

dien_ap=P1;

nhiet_do=dien_ap/2;

}

void hien_thi(unsigned char nhiet_do) // hien thi nhiet do moi truong

{ if(nhiet_do>=0 && nhiet_do<100)

{ chuc=nhiet_do/10;

donvi=nhiet_do%10;

led0=1;

led1=led2=led3=0;

P0=M[chuc];

delay(100);

led1=1;

led0=led2=led3=0;

76

P0=M[donvi];

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

delay(100);

led2=1;

led0=led1=led3=0;

P0=0x9c;

delay(100);

led3=1;

led0=led1=led2=0;

P0=0xc6;

delay(100);

}

else

{ led0=led1=led2=led3=0;

P0=0xff;

delay(100);

}

}

void main(void)

{ IE=0x85;

IT0=IT1=1;

khong_che=25;

77

while(1)

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

{ tong=0;

for(i=0;i<20;i++)

{bien_doi_adc();

tong=tong+nhiet_do;}

nhiet_do=tong/20;

if(ngat0==0)

{ led_xanh=led_do=led_vang=1;

hien_thi(nhiet_do);

}

if(ngat0==1||ngat0==2)

{ bien_doi_adc();

hien_thi(khong_che);

if(khong_che < nhiet_do)

{led_do=led_vang=1;

led_xanh=0;

}

if(khong_che > nhiet_do)

{led_vang=led_xanh=1;

led_do=0;

}

78

if(khong_che == nhiet_do)

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

{led_do=led_xanh=1;

led_vang=0;

}

}

}

}

void

khongche(void) interrupt 0 //khong che nhiet do o 25 do C

{ led_trang=1;

ngat0++;

if(ngat0==1)

led_trang=0;

else

led_trang=1;

if(ngat0==3)

ngat0=0;

}

void tang_giam(void) interrupt 2 //tang, giam nhiet do khong che

{ if(ngat0==1)

{ khong_che++;

}

79

if(ngat0==2)

Trường ĐH Công Nghiệp Hà Nội Khoa Điện Tử

{ khong_che--;

}

80

}