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 }