1. Trang chủ
  2. » Luận Văn - Báo Cáo

thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20

95 1,1K 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 95
Dung lượng 5,33 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trong xu hướng chung đó, vận dụng những kiến thức mà tôi đã được học trong quá trình học tập ở trường cũng như tìm hiểu thêm tôi xin thực hiện Luận văn về “Kỹ thuật vi điều khiển” với đ

Trang 1

KHOA SƢ PHẠM

BỘ MÔN SƢ PHẠM VẬT LÝ - -

THIẾT KẾ MẠCH ĐO NHIỆT ĐỘ DÙNG VI ĐIỀU KHIỂN AT89C51 VÀ CẢM BIẾN NHIỆT DS18B20

Luận Văn Tốt Nghiệp

Trang 2

LỜI CẢM ƠN

Để đề tài hoàn thành đạt được kết quả như mong trên không chỉ là sự nỗ lực của bản thân mà còn có sự chỉ dạy tận tình của quý thầy cô, cùng với sự giúp đỡ của bạn bè Đặc biệt, tôi xin chân thành cảm ơn sự hướng dẫn của thầy Vương Tấn Sĩ, thầy đã tận tình giúp đỡ tôi hoàn thành đề tài nghiên cứu của mình Thầy giúp tôi định hướng được mục tiêu của đề tài, chỉ dạy cho tôi biết cách nghiên cứu khoa học, và cách trình bày bài luận Ngoài ra, thầy đã dành nhiều thời gian để giúp tôi điều chỉnh những sai sót trong cả lý thuyết cũng như phần thực hành Qua đó, tôi đã đúc kết được nhiều kinh nghiệm và nó sẽ là hành trang quan trọng cho tôi sau này

Một lần nữa, tôi xin chân thành cảm ơn quý thầy cô và bạn bè đã luôn đồng hành cùng tôi trong suốt thời gian qua Tôi xin gửi lời chúc sức khỏe và thành công đến tất cả mọi người

Sinh viên thực hiện

Phạm Thành Tiến

Trang 3

LỜI CAM ĐOAN

Tôi xin cam đoan đây là công trình nghiên cứu do chính tôi thực hiện Các số liệu, kết quả phân tích trong luận văn là hoàn toàn trung thực và chưa từng được công bố trong bất kỳ công trình nghiên cứu nào trước đây

Mọi tham khảo, trích dẫn đều được chỉ rõ nguồn trong danh mục tài liệu tham khảo của luận văn

Cần Thơ, ngày 27 tháng 04 năm 2015

Tác giả

Phạm Thành Tiến

Trang 4

MỤC LỤC

PHẦN MỞ ĐẦU 1

1 LÝ DO CHỌN ĐỀ TÀI 1

2 MỤC ĐÍCH NGHIÊN CỨU 2

3 ĐỐI TƯỢNG NGHIÊN CỨU 2

4 PHƯƠNG PHÁP NGHIÊN CỨU 2

5 GIỚI HẠN ĐỀ TÀI 2

PHẦN NỘI DUNG 3

CHƯƠNG 1: TỔNG QUAN VỀ ĐO NHIỆT ĐỘ 3

1 ĐO LƯỜNG 3

2 ĐO NHIỆT ĐỘ 3

2.1 Khái niệm về nhiệt độ và thang đo nhiệt độ 3

2.2 Các phương pháp đo nhiệt độ 4

CHƯƠNG 2: GIỚI THIỆU VI ĐIỀU KHIỂN VÀ VĐK AT89C51 6

1 GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN 6

1.1 Khái quát chung về vi khiển: 6

1.2 Lịch sử phát triển của vi điều khiển 6

1.3 Sơ đồ khối của một bộ vi điều khiển 7

2 KIẾN TRÚC CỦA VI ĐIỀU KHIỂN AT89C51 7

2.1 Cấu trúc bên trong của AT89C51 8

2.2 Sơ đồ và chức năng các chân AT89C51 9

2.3 Tổ chức bộ nhớ 12

2.4 Phần mềm lập trình vi điều khiển AT89C51 14

CHƯƠNG 3: GIỚI THIỆU NGÔN NGỮ C CHO AT89C51 VÀ KEIL C 16

1 GIỚI THIỆU NGÔN NGỮ C 16

2 NGÔN NGỮ C CHO VI ĐIỀU KHIỂN AT89C51 16

2.1 Kiểu dữ liệu 16

2.2 Phép toán 19

2.3 Cấu trúc chương trình C 21

2.4 Các lệnh cơ bản trong C 24

3 TRÌNH BIÊN DỊCH KEIL C (COMPILER) 26

Trang 5

3.1 Khởi tạo cho Project 26

3.2 Soạn thảo chương trình 31

3.3 Biên dịch một chương trình 31

CHƯƠNG 4: GIỚI THIỆU CÁC LINH KIỆN TRONG MẠCH 36

1 CẢM BIẾN ĐO NHIỆT ĐỘ DS18B20 36

2 IC 7805 40

3 LCD 16x2 41

4 ĐIỆN TRỞ 43

5 THẠCH ANH 44

6 TỤ DIỆN 45

CHƯƠNG 5: THIẾT KẾ MẠCH VÀ THI CÔNG ĐỀ TÀI 47

1 KHỐI NGUỒN ỔN ÁP DÙNG IC 7805 47

1.1 Sơ đồ nguyên lý của mạch 47

1.2 Nguyên lý hoạt động của mạch 47

2 KHỐI ĐIỀU KHIỂN TRUNG TÂM DÙNG IC AT89C51 49

2.1 Mạch RESET 49

2.2 Mạch tạo dao động 50

2.3 IC AT89C51 51

3 KHỐI ĐO NHIỆT ĐỘ DÙNG DS18B20 52

3.1 Sơ đồ khối 52

3.2 Nguyên tắc hoạt động: 52

4 KHỐI HIỂN THỊ LCD 16X2 53

4.1 Sơ đồ nguyên lí 53

4.2 Nguyên tắc hoạt động 54

5 PHẦN MỀM CHƯƠNG TRÌNH 55

6 SƠ ĐỒ MẠCH IN……… 58

7 SƠ ĐỒ MÔ PHỎNG PROTEUS………… ……… 59

8 MỘT SỐ HÌNH ẢNH THỰC TẾ VÀ KẾT QUẢ THỰC TẾ…… ……… 60

PHỤ LỤC 1……… 62

PHỤ LỤC 2……… 74

PHẦN KẾT LUẬN 87

1 VỀ LÝ THUYẾT 86

Trang 6

2 VỀ THỰC NGHIỆM 86

3 HẠN CHẾ 86

4 PHƯƠNG HƯỚNG 86

TÀI LIỆU THAM KHẢO 87

Trang 7

Danh sách hình ảnh

Hình 2.1 IC AT89C51

Hình 2.2 Sơ đồ chân IC AT89C51

Hình 3.1 Khởi tạo cho Project

Hình 3.2 Tạo Project mới

Hình 3.3 Đặt tên cho Project mới

Hình 3.4 Chọn vi điều khiển

Hình 3.5 Tạo File chương trình mới

Hình 3.6 Save As file chương trình mới

Hình 3.7 Đặt tên cho file chương trình

Hình 3.8 Bổ sung file chương trình vào Project

Hình 3.9 File chương trình đã được bổ sung vào Project

Hình 3.10 Chèn thư viện vào cho chương trình

Hình 3.11 Chương trình nhảy LED đơn

Hình 3.12 Biên dịch chương trình

Hình 3.13 Biên dịch chương trình thành file HEX

Hình 3.14 Chọn các thông số kỹ thuật cho file HEX

Hình 3.15 Chọn các cổng và thanh ghi

Hình 3.16 Chọn các thông số kỹ thuật cho Port 1

Hình 3.17 Chạy file code

Hình 4.1 Dạng đóng vỏ và bề ngoài của cảm biến DS18B20

Hình 4.2 Sơ đồ bộ nhớ DS18B20

Hình 4.3 IC ổn áp 7805

Hình 4.4 LCD 16x2

Hình 4.5 Kết nối Text LCD

Hình 4.6 Điện trở trong các thiết bị điện tử

Hình 4.7 Ký hiệu của điện trở trên các sơ đồ nguyên lý

Trang 9

PHẦN MỞ ĐẦU

1 LÝ DO CHỌN ĐỀ TÀI

Ngày nay, nhân loại đã và đang trải qua những sự phát triển vượt bậc về mọi mặt

Trong đó lĩnh vực điện - điện tử đóng một vai trò không nhỏ Điện tử góp phần rất lớn vào quá trình tự động hoá, thực sự đã giúp con người có những tiến bộ vượt bậc Trên thế giới, việc ứng dụng điện - điện tử vào cuộc sống với xu hướng tối ưu hóa, hiện đại hóa nhằm đem lại tiện ích cho con người đang được phát triển mạnh Tuy vậy ở Việt Nam việc nghiên cứu và ứng dụng các thành tựu của “vi điều

khiển” còn khá mới mẻ trong thời điểm hiện tại Trong xu hướng chung đó, vận

dụng những kiến thức mà tôi đã được học trong quá trình học tập ở trường cũng như tìm hiểu thêm tôi xin thực hiện Luận văn về “Kỹ thuật vi điều khiển” với đề

tài Thiết kế mạch đo nhiệt độ dùng vi điều khiển AT89C51 và cảm biến DS18B20 Đề tài này được áp dụng chủ yếu dựa vào vi điều khiển, mà thực tế là

IC AT89C51, với mục đích giúp tôi hiểu một cách tường tận hơn các kiến thức về

vi điều khiển, cách đọc, viết và nhận biết về các chân IC, xây dựng mạch nguyên

l ý…

Các ứng dụng của vi điều khiển rất đa dạng và phong phú Từ những ứng dụng

đơn giản chỉ có vài thiết bị ngoại vi cho đến những hệ thống điều khiển phức tạp Tuy nhiên do phạm vi trình độ của tôi còn hạn chế, nên việc nghiên cứu và tìm hiểu về vi điều khiển còn nhiều vướng mắc, do đây là lần đầu tiên áp dụng vào thực tế nên việc học hỏi và tìm hiểu còn gặp nhiều khó khăn hơn Trong quá trình

làm đề tài tôi xin chân thành cám ơn thầy Vương Tấn Sĩ đã tận tình chỉ bảo, định hướng cho tôi hoàn thành tốt luận văn này

Xin chân thành cảm ơn!

Cần Thơ, tháng 5 năm 2015

Trang 10

2 MỤC ĐÍCH NGHIÊN CỨU

Nghiên cứu và khảo sát về IC AT89C51 và ứng dụng nó vào thiết kế mạch đo nhiệt

độ để vận dụng vào đời sống

3 ĐỐI TƯỢNG NGHIÊN CỨU

IC AT89C51 và mạch đo nhiệt độ dùng cảm biến nhiệt DS18B20

4 PHƯƠNG PHÁP NGHIÊN CỨU

Kết hợp nghiên cứu lý thuyết, thực hành trên máy vi tính và thực hành lắp ráp mạch điện tử ứng dụng của IC AT89C51 với cảm biến nhiệt DS18B20 trên thực tế

5 GIỚI HẠN ĐỀ TÀI

Trong phạm vi của đề tài là thiết kế và thi công mạch với chức năng đo nhiệt độ môi trường với sự hỗ trợ của IC AT89C51 và cảm biến nhiệt độ DS18B20 Chức năng chính của đề tài này là dùng DS18B20 đo nhiệt độ của môi trường thông qua chức năng xử lý của IC AT89C51, việc hiển thị giá trị nhiệt độ được hiển thị trực tiếp trên màn hình LCD Là một sinh viên sư phạm Vật lý, ít được làm quen với kỹ thuật điện tử vì vậy việc nghiên cứu đề tài về lĩnh vực điện tử đối với tôi gần như bước vào một thế giới kiến thức mới, rất đa dạng và phong phú Tôi hy vọng qua đề tài này có thể giúp các bạn sinh viên không chuyên về điện tử có thể hiểu được phần nào về kỹ thuật điện tử vô cùng hấp dẫn và những ứng dụng rất rộng rãi của

nó, qua đó hình thành lòng say mê và hứng thú tìm hiểu về kỹ thuật điện tử Mặc dù

đã cố gắng rất nhiều trong việc thực hiện đề tài, nhưng do đây là lần đầu nghiên cứu

về kỹ thuật điện tử và thời gian có hạn nên chắc chắn đề tài không thể tránh khỏi thiếu sót Kính mong được sự thông cảm, giúp đỡ của các thầy cô, bạn bè và hội đồng bảo vệ Tôi xin chân thành cảm ơn!

Trang 11

PHẦN NỘI DUNG

CHƯƠNG 1: TỔNG QUAN VỀ ĐO NHIỆT ĐỘ

1 ĐO LƯỜNG

Đo lường là một quá trình đánh giá định hướng đại lượng cần đo để có kết quả bằng

số với đơn vị đo

Kết quả đo lường là giá trị bằng số của đại lượng cần đo Ax, nó bằng tỷ số của đại lượng cần đo X và đơn vị đo X0

Vậy quá trình có thể viết dưới dạng:

0 0

.X

A X X

X

Đây là phương trình cơ bản của phép đo, nó chỉ rõ sự so sánh đại lượng cần đo với mẫu và cho ra kết quả bằng số

Quá trình đo được tiến hành thông qua các thao tác cơ bản về đo lường sau:

- Thao tác xác định mẫu và thành lập mẫu

- Thao tác so sánh

- Thao tác biến đổi

- Thao tác thể hiện kết quả hay chỉ thị

Phân loại các cách thực hiện phương pháp đo

+ Đo trực tiếp: là cách đo mà kết quả nhận được trực tiếp từ một phép đo duy nhất

+ Đo gián tiếp: là cách đo mà kết quả đo được suy ra từ phép đo, từ sự phối hợp của nhiều phép đo trực trực tiếp

+ Đo thống kê: là phép đo nhiều lần một đại lượng nào đó, trong cùng một điều kiện và cùng một giá trị Từ đó dung phép tính xác suất để thể hiện kết quả đo có độ chính xác cần thiết [1]

2 ĐO NHIỆT ĐỘ

2.1 Khái niệm về nhiệt độ và thang đo nhiệt độ

Nhiệt độ là đại lượng vật lí đặc trưng cho mức chuyển động hỗn loạn của các phần tử trong các vật thể

Để đo được nhiệt độ thì phải có dụng cụ đo, thông thường trong công nghiệp nhiệt độ được đo bằng cảm biến và phương pháp này tiện lợi là có thể truyền tín hiệu nhiệt độ đi

xa, không ảnh hưởng tới sự làm việc của hệ thống khi cần xác định nhiệt độ

Để đo chính xác nhiệt độ thì cần có hiệu số Tx – T là cực tiểu với Tx là nhiệt độ cần

đo, T là nhiệt độ của cảm biến đặt trong môi trong môi trường cần đo

Trang 12

Khi cảm biến được đặt trong môi trường cần đo nhiệt độ, thì nhiệt lượng cảm biến hấp thụ từ môi trường tỷ lệ với độ chênh lệch nhiệt giữa cảm biến và môi trường theo biểu thức:

dQ = a A(Tx- T)dt với a là độ dẫn nhiệt, A là diện tích bề mặt truyền nhiệt [1]

2.2 Các phương pháp đo nhiệt độ

Cùng với sự ra đời và phát triển mạnh mẽ của các hệ vi xử lý, việc đo nhiệt độ áp dụng vi xử lý, vi điều khiển đã mở ra nhiều hướng, đưa đến nhiều phương pháp khác nhau, linh hoạt và chính xác hơn Có nhiều cách để đo nhiệt độ, trong đó có thể liệt kê

một số phương pháp sau đây:

- Phương pháp quang dựa trên sự phân bố bức xạ nhiệt do dao động nhiệt (do hiệu ứng Doppler)

- Phương pháp cơ dựa trên sự dãn nở của vật rắn, của chất lỏng hoặc khí (với áp suất không đổi), hoặc dựa trên tốc độ âm

- Phương pháp dựa trên sự phụ thuộc của điện trở vào nhiệt độ, hiệu ứng Seebeck, hoặc dựa trên sự thay đổi tần số dao động của thạch anh [1]

Trước tiên nói về các cảm biến nhiệt độ, đó là các cảm biến được sử dụng vào các quá trình nhiệt như: đốt nóng, làm lạnh, trao đổi nhiệt.v.v .Đại lượng vào của cảm biến nhiệt độ là nhiệt độ và đại lượng ra là tín hiệu điện (dòng, áp) Một số cảm biến thường

sử dụng:

+ Nhiệt điện trở: nguyên lý làm việc là có điện trở thay đổi theo sự thay đổi nhiệt độ của nó Tuỳ theo tác dụng nhiệt của dòng điện cung cấp chạy qua chuyển đổi người ta phân ra: nhiệt điện trở đốt nóng và nhiệt điện trở không đốt nóng

 Nhiệt điện trở đốt nóng, dòng điện chạy qua rất lớn làm nhiệt độ của nó tăng lên cao hơn nhiệt độ môi trường (1000C – 8000C), nên có sự toả nhiệt ra môi trường xung quanh, như nhiệt dẫn, đối lưu, bức xạ

 Nhiệt điện trở không đốt nóng, dòng điện chạy qua rất nhỏ không làm tăng nhiệt độ của điện trở và nhệt độ của nó bằng nhiệt độ môi trường Nhiệt điện trở loại này dùng để đo nhiệt độ và các đại lượng cơ học như đo di chuyển

 Nhiệt điện trở phân làm hai loại: nhiệt điện trở dây (nhiệt điện trở đồng, nhiệt điện trở Platin, nhiệt điện trở Niken) và nhiệt điện trở bán dẫn

+ Cặp nhiệt điện: nguyên lý làm việc dựa trên 2 hiệu ứng: Thomson và Seebeck ứng dụng của cặp nhiệt điện chủ yếu để đo nhiệt độ, ngoài ra nó còn dược dùng để đo các đại lượng không điện và điện khác như: đo dòng điện ở tần số cao, đo hướng chuyển động và lưu lượng của các dòng chảy, đo di chuyển, đo áp suất nhỏ

+ Cảm biến nhiệt độ dùng đặc tính diode và tranzitor [1]

Trang 13

Đo nhiệt độ là nhiệm vụ thường gặp trong các ngành nhiệt học, hoá học, luyện kim Tuỳ theo nhiệt độ đo mà có thể dùng các phương pháp đo khác nhau Thông thường nhiệt độ đo được chia thành 3 dải: nhiệt độ thấp, nhiệt độ trung bình và nhiệt độ cao Ở nhiệt độ trung bình và thấp, phương pháp đo thường là tiếp xúc nghĩa là các chuyển đổi được đặt trực tiếp ở ngay môi trường cần đo Đối với nhiệt độ cao, đo bằng phương pháp không tiếp xúc, nghĩa là dụng cụ đo đặt ngoài môi trường đo Một trong số những cách

đó là đo nhiệt độ không tiếp xúc sử dụng cảm biến DS18B20

Trang 14

CHƯƠNG 2: GIỚI THIỆU VI ĐIỀU KHIỂN VÀ VĐK AT89C51

1 GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN

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

Bộ vi điều khiển viết tắt là Micro-controller, là mạch tích hợp trên một chip có thể lập trình được, dùng để điều khiển hoạt động của một hệ thống Theo chương trình điều khiển đã nạp sẵn bên trong chip, bộ vi điều khiển tiến hành đọc, lưu trữ thông tin, xử lý thông tin, sau đó dựa vào kết quả của quá trình xử lý để đưa ra các thông báo, tín hiệu điều khiển tiến hành điều khiển quá trình hoạt động của các thiết bị bên ngoài Vi điều khiển được ứng dụng trong rất nhiều sản phẩm công nghiệp và tiêu dùng Trong các thiết

bị điện và điện tử dân dụng, các bộ vi điều khiển điều khiển hoạt động của TV, máy giặt, đầu đọc laser, điện thoại, lò vi-ba Trong hệ thống sản xuất tự động, bộ vi điều khiển được sử dụng trong Robot, dây chuyền tự động Các hệ thống càng thông minh thì vai trò của hệ vi điều khiển càng quan trọng [2]

1.2 Lịch sử phát triển của vi điều khiển

Bộ vi điều khiển thực ra là một loại vi xử lí trong tập hợp các bộ vi xử lý nói chung Bộ vi điều khiển được phát triển từ bộ vi xử lí, từ những năm 1970 do sự phát triển và hoàn thiện về công nghệ vi điện tử dựa trên kỹ thuật MOS (Metal-Oxide-Semiconductor), mức độ tích hợp của các linh kiện bán dẫn trong một chip ngày càng

cao

Năm 1971 xuất hiện bộ vi xử lí 4 bit loại TMS1000 do công ty Texas Instruments vừa là nơi phát minh vừa là nhà sản xuất Nhìn tổng thể thì bộ vi xử lý chỉ có chứa trên một chip những chức năng cần thiết để xử lý chương trình theo một trình tự, còn tất cả bộ phận phụ trợ khác cần thiết như: bộ nhớ dữ liệu, bộ nhớ chương trình, bộ chuyển đổi AD, khối điều khiển, khối hiển thị, điều khiển máy in, nối đồng hồ và lịch là những linh kiện nằm ở bên ngoài được nối vào bộ vi xử lý

Mãi đến năm 1976 công ty INTEL (Intelligent-Elictronics) mới cho ra đời bộ vi điều khiển đơn chip đầu tiên trên thế giới với tên gọi 8048 Bên cạnh bộ xử lý trung tâm,

8048 còn chứa bộ nhớ dữ liệu, bộ nhớ chương trình, bộ đếm và phát thời gian, các cổng

Trang 15

vào ra digital trên một chip Các công ty khác cũng lần lược cho ra đời các bộ vi điều khiển 8 bit tương tự như 8048 và hình thành họ vi điều khiển MCS-48

Đến năm 1980 công ty INTEL cho ra đời thế hệ thứ hai của bộ vi điều khiển đơn chip với tên gọi 8051 Và sau đó hàng loạt các vi điều khiển cùng loại với 8051 ra đời và hình thành họ vi điều khiển MCS-51

Đến nay họ vi điều khiển 8 bit MCS-51 đã có đến 250 thành viên và hầu hết các công ty hàng đầu thế giới chế tạo Đứng đầu là công ty INTEL và rất nhiều công ty khác như: AMD, SIEMENS, PHILIPS, DALLAS, OKI …[2]

1.3 Sơ đồ khối của một bộ vi điều khiển

Sơ đồ khối chung của hầu hết các bộ vi điều khiển bao gồm CPU, bộ nhớ ROM hay EPROM và RAM, mạch giao tiếp, mạch giao tiếp song song, bộ định thời gian, hệ thống ngắt và các BUS được tích hợp trên cùng một chip

2 KIẾN TRÚC CỦA VI ĐIỀU KHIỂN AT89C51

IC vi điều khiển AT89C51 thuộc họ MCS-51 có các đặc điểm sau :

+ 4 kbyte ROM

+ 128 byte RAM

+ 4 port I/0 8 bit

+ Hai bộ định thời 16 bits

+ Giao tiếp nối tiếp

+ Quản lý được 64K bộ nhớ chương trình bên ngoài

+ Quản lý được 64K bộ nhớ dữ liệu bên ngoài

+ 210 vị trí nhớ được định địa chỉ bit

+ Thực hiện phép nhân/chia trong 4s

Hình 2.1 IC AT89C51

Trang 16

2.1 Cấu trúc bên trong của AT89C51

Sơ Đồ Khối AT89C51

Phần chính của vi điều khiển AT89C51 là bộ xử lí trung tâm (CPU: central processing unit) bao gồm:

+ Thanh ghi tích lũy A

+ Thanh ghi tích lũy phụ B, dùng cho phép nhân và phép chia

+ Đơn vị logic học (ALU: Arithmetic Logical Unit)

+ Từ trạng thái chương trình (PSW: Prorgam Status Word)

+ Bốn băng thanh ghi

Hai bộ định thời 16 bit hoạt động như một bộ đếm

BUS CONTROL

SERIAL PORT

EXTERNAL

INTERRUPTS

CPU

ON - CHIP RAM

ETC TIMER 0 TIMER 1

ADDRESS/DATA

TXD RXD P0 P1 P2 P3

Trang 17

Các cổng (port 0, 1, 2, 3), sử dụng vào mục đích điều khiển Ở cổng 3 có thêm các đường dẫn điều khiển dùng để trao đổi với một bộ nhớ bên ngoài, hoặc để đầu nối giao diện nối tiếp, cũng như các đường ngắt dẫn bên ngoài Giao diện nối tiếp có chứa một bộ truyền và một bộ nhận không đồng bộ, làm việc độc lập với nhau Tốc độ truyền qua cổng nối tiếp có thể đặt trong dải rộng và được ấn định bằng một bộ định thời

Trong vi điều khiển AT89C51 có hai thành phần quan trọng khác đó là bộ nhớ và các thanh ghi:

+ Bộ nhớ gồm có bộ nhớ RAM và bộ nhớ ROM dùng để lưu trữ dữ liệu và mã lệnh + Các thanh ghi sử dụng để lưu trữ thông tin trong quá trình xử lí Khi CPU làm việc nó làm thay đổi nội dung của các thanh ghi [3]

2.2 Sơ đồ và chức năng các chân AT89C51

Sơ đồ các chân ra trên vỏ của các vi mạch MCS-51 như hình dưới đây

Vi điều khiển AT89C51 có 32 trong 40 chân có chức năng như là các cổng I/O, trong đó 24 chân được sử dụng với hai mục đích Nghĩa là ngoài chức năng cổng I/O, mỗi chân có công dụng kép này có thể là một đường điều khiển của Bus địa chỉ hay Bus

dữ liệu hoặc là mỗi chân hoạt động mọt cách độc lập để giao tiếp với các thiết đơn bit như là công tắc, LED, transistor…

18

9

12 13 14 15 1 2 3 4 5 6 7 8

39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 17 16 29 30 11 10

EA/VP X1

X2

RESET

INT0 INT1 T0 T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RD WR PSEN ALE/P TXD RXD

RST 12MHz

Hình 2.2 Sơ đồ chần IC AT89C51

Trang 18

a.Port0: là port có 2 chức năng, ở trên chân từ 32 đến 39 của AT89C51 Trong các

thiết kế cỡ nhỏ không dùng bộ nhớ ngoài, P0 được sử dụng như là những cổng I/O Còn trong các thiết kế lớn có yêu cầu một số lượng đáng kể bộ nhớ ngoài thì P0 trở thành các đường truyền dữ liệu và 8 bit thấp của bus địa chỉ

b Port1: là một port I/O chuyên dụng, trên các chân 1-8 của AT89C51 Chúng

được sử dụng với một múc đích duy nhất là giao tiếp với các thiết bị ngoài khi cần thiết

c Port2: là một cổng có công dụng kép trên các chân 21 – 28 của AT89C51 Ngoài

chức năng I/O, các chân này dùng làm 8 bit cao của bus địa chỉ cho những mô hình thiết

kế có bộ nhớ chương trình ROM ngoài hoặc bộ nhớ dữ liệu RAM có dung lượng lớn hơn

256 byte

d Port3: là một cổng có công dụng kép trên các chân 10 – 17 của AT89C51 Ngoài

chức năng là cổng I/O, những chân này kiêm luôn nhiều chức năng khác nữa liên quan đến nhiều tính năng đặc biệt của AT89C51, được mô tả trong bảng sau:

Bit Tên Chức năng chuyển đổi

P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

RxD TxD

0INT1INT

T0 T1

ÖWR

RD

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

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

Ngắt ngoài 0

Ngắt ngoài 1

Ngõ vào TIMER 0

Ngõ vào của TIMER 1

Điều khiển ghi dữ liệu lên bộ nhớ ngoài

Điều khiển đọc bộ nhớ dữ liệu ngoài

Chức năng của các chân trên port3

e PSEN (Program Store Enable): AT89C51 có 4 tín hiệu điều khiển, PSEN là tín

hiệu ra trên chân 29 Nó là tín hiệu điều khiển để cho phép truy xuất bộ nhớ chương trình

mở rộng và thường được nối đến chân OE (Output Enable) của một EPROM để cho phép đọc các byte mã lệnh của chương trình Tín hiệu PSEN ở mức thấp trong suốt phạm vi quá trình của một lệnh Các mã nhị phân của chương trình được đọc từ EPROM qua bus

Trang 19

và được chốt vào thanh ghi lệnh của AT89C51 để giải mã lệnh Khi thi hành chương trình trong ROM nội PSEN sẽ ở mức cao

f ALE (Address Latch Enable ): Tín hiệu ra ALE trên chân 30 tương hợp với các

thiết bị làm việc với các xử lý 8585, 8088 AT89C51 dùng ALE để giải đa hợp bus địa chỉ và dữ liệu, khi port 0 được dùng làm bus địa chỉ/dữ liệu đa hợp: vừa là bus dữ liệu vừa là byte thấp của địa chỉ 16 bit ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nữa đầu của chu kỳ bộ nhớ Sau đó, các đường Port 0 dùng để xuất hoặc nhập

dữ liệu trong nữa sau chu kỳ của chu kỳ bộ nhớ

Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và có thể được dùng là nguồn xung nhịp cho các hệ thống Nếu xung trên 8951 là 12MHz thì ALE

có tần số 2MHz Chân này cũng được làm ngõ vào cho xung lập trình cho EPROM trong AT89C51

g EA (External Access): Tín hiệu vào EA trên chân 31 thường được nối lên mức

cao (+5V) hoặc mức thấp (GND) Nếu ở mức cao, AT89C51 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp (4K) Nếu ở mức thấp, chương trình chỉ được thi hành từ bộ nhớ mở rộng Người ta còn dùng chân EA làm chân cấp điện áp 21V khi lập trình cho EPROM trong AT89C51

h RST (Reset): Ngõ vào RST trên chân 9 là ngõ reset của AT89C51 Khi tín hiệu

này được đưa lên mức cao (trong ít nhất 2 chu kỳ máy), các thanh ghi trong AT89C51 được đưa vào những giá trị thích hợp để khởi động hệ thống

i.OSC: AT89C51 có một bộ dao động trên chip, nó thường được nối với thạch anh

giữa hai chân 18 và 19 Tần số thạch anh thông thường là 12MHz

j.POWER: AT89C51 vận hành với nguồn đơn +5V Vcc được nối vào chân 40 và

Vss (GND) được nối vào chân 20 [4]

Trang 20

mã chương trình từ bộ nhớ chương trình ngoài bằng tín hiệu /PSEN, còn bộ nhớ số liệu ngoài được truy nhập bằng các tín hiệu /WR và /RD, do có bộ nhớ chương trình và bộ nhớ số liệu ngoài có thể dùng chung bus địa chỉ A0 A15 Bộ nhớ số liệu trong của AT89C51 có địa chỉ từ 00h đến FFh, trong đó nhóm 8052 có đủ 256 byte RAM, nhóm

8051 chỉ có 128 byte RAM ở các địa chỉ thấp từ 00h đến 7fh, vùng địa chỉ cao từ 80h đến FFh được dành cho các thanh ghi chức năng đặc biệt SFR Tổ chức vùng 128 byte thấp

bộ nhớ số liệu RAM trong của AT89C51 như trên hình 3, nó được chia thành ba miền

- Miền các băng thanh ghi chiếm địa chỉ từ 00h đến 1fh có 32 byte chia thành băng, mỗi băng có 8 thanh ghi được đánh số từ R0 đến R7

- Tại mỗi thời điểm chỉ có một băng thanh ghi có thể truy nhập và được gọi là băng tích cực Để chọn băng tích cực cần nạp giá trị thích hợp cho các bít RS0 và RS1 của thanh ghi từ trạng thái PSW, mặc định bằng 0 là tích cực Miền RAM được định địa chỉ bít có 16 byte 8 bít = 128 bít, chiếm địa chỉ từ 20h đến 1fh Mỗi bít ở miền này được

Trang 21

định địa chỉ riêng từ 00h đến 7fh nên có thể truy nhập đến từng bít riêng rẽ bằng các lệnh

xử lý bít Vùng RAM được định địa chỉ bít và các lệnh xử lý bít là một trong những đặc tính nổi bật đem lại sức mạnh cho vi điều khiển AT89C51

- Miền RAM thông thường có 80 byte chiếm địa chỉ từ 30h đến 7fh Các thanh ghi chức năng đặc biệt (viết tắt theo tiếng Anh là SFR) là tập các thanh ghi bên trong của bộ

vi điều khiển AT89C51 định địa chỉ cho tất cả các SFR ở vùng 128 byte cao của bộ nhớ

số liệu trong, mỗi SFR có tên gọi và địa chỉ riêng, một số SFR có định địa chỉ cho từng bít Khi bật nguồn hoặc RESET, tất cả các SFR đều được nạp giá trị đầu, sau đó chương trình cần nạp lại giá trị cho các SFR cần dùng theo yêu cầu sử dụng

- Việc truy nhập đến các SFR chỉ có thể thực hiện bằng phương pháp địa chỉ trực tiếp với tên gọi hoặc địa chỉ của SFR là toán hạng của lệnh Với các SFR có định địa chỉ bít, có thể truy nhập và thay đổi trực tiếp từng bít của nó bằng các lệnh xừ lý bít Bảng 2 cho biết thông tin chủ yếu về các SFR

- Ở nhóm 8051 vùng 128 byte cao của bộ nhớ số liệu trong chỉ có các SFR, không tồn tại các ô nhớ khác ở vùng nhớ này Ở nhóm 8052 bộ nhớ số liệu trong có 256 byte RAM, các ô nhớ của vùng RAM 128 byte cao chỉ có thể truy nhập được bằng phương pháp địa chỉ gián tiếp, còn các SFR cũng có địa chỉ nằm trong vùng đó nhưng chỉ truy nhập được bằng phương pháp địa chỉ trực tiếp, vì thế việc truy nhập chúng không bị xung đột và nhầm lẫn [4]

Trang 22

RAM

2.4 Phần mềm lập trình vi điều khiển AT89C51

- Có thể viết trên ngôn ngữ Assembler hoặc các ngôn ngữ bậc cao khác như C, Basic,

Forth Tập lệnh Assembler của họ AT89C51 có 83 lệnh, được chia thành 5 nhóm là các lệnh số học, các lệnh logic, các lệnh chuyển số liệu, các lệnh xử lý bít và các lệnh rẽ nhánh Các lệnh xứ lý bít là điểm mạnh cơ bản của AT89C51, vì chúng làm cho chương trình ngắn gọn hơn và chạy nhanh hơn Chương trình Assembler được viết trên máy tính, sau đó phải dịch ra mã máy của AT89C51 bằng trình biên dịch ASM51, rồi mới nạp

7F

30 2F 2E 2D 2C 2B 2A

18

17

10 0F

67 66 65 64 63 62 61 60 5F 5E 5D 5C 5B 5A 59 58

57 56 55 54 53 52 51 50 4F 4E 4D 4C 4B 4A 49 48

47 46 45 44 43 42 41 40 3F 3E 3D 3C 3B 3A 39 38

37 36 35 34 33 32 31 30 2F 2E 2D 2C 2B 2A 29 28

27 26 25 24 23 22 21 20 1F 1E 1D 1C 1B 1A 19 18

17 16 15 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08

07 06 05 04 03 02 01 00 BANK 3

BANK 2 BANK 1 Default register Bank for ROR7

Trang 23

Chương trình mã máy vào bộ nhớ cho trình EEPROM (hoặc EPROM) ở bên trong hoặc bên ngoài AT89C51 Khi lập trình bằng ngôn ngữ bậc cao như C, Basic, Forth cũng phải dịch chúng ra mã máy của họ AT89C51 bằng các trình biên dịch tương ứng, sau đó nạp chương trình mã máy vào bộ nhớ chương trình Nói chung, chương trình viết trên ngôn ngữ Assembler khó hơn viết trên ngôn ngữ bậc cao, nhưng khi dịch ra mã máy sẽ ngắn gọn hơn và chạy nhanh hơn các chương trình viết trên ngôn ngữ bậc cao Để viết và nạp phần mềm cho AT89C51, bạn phải có các công cụ là máy vi tính, trình biên dịch

ngôn ngữ sử dụng ra mã máy của AT89C51 và bộ nạp chương trình mã máy từ máy tính

vào bộ nhớ chương trình EEPROM trong AT89C51 hoặc bộ nhớ EPROM ngoài

Trang 24

CHƯƠNG 3: GIỚI THIỆU NGÔN NGỮ C CHO AT89C51 VÀ

TRÌNH BIÊN DỊCH KEIL C

1 GIỚI THIỆU NGÔN NGỮ C

Trong kỹ thuật lập trình vi điều khiển nói chung, ngôn ngữ lập trình được sử dụng thường chia làm 2 loại: Ngôn ngữ bậc thấp và Ngôn ngữ bậc cao

Ngôn ngữ bậc cao là các ngôn ngữ gần với ngôn ngữ con người hơn, do đó việc lập trình bằng các ngôn ngữ này trở nên dễ dàng và đơn giản hơn Có thể kể đến một số ngôn ngữ lập trình bậc cao như C, Basic, Pascal… trong dó C là ngôn ngữ thông dụng hơn cả trong kỹ thuật vi điều khiển Về bản chất, sử dụng các ngôn ngữ này thay cho ngôn ngữ bậc thấp là giảm tải cho lập trình viên trong việc nghiên cứu các tập lệnh và xây dựng các cấu trúc giải thuật Chương trình viết bằng ngôn ngữ bậc cao cũng sẽ được một phần mềm trên máy tính gọi là trình biên dịch (Compiler) chuyển sang dạng hợp ngữ trước khi chuyển sang mã máy

Khi sử dụng ngôn ngữ C người lập trình không cần hiểu sâu sắc về cấu trúc của bộ

vi điều khiển Có nghĩa là với một người chưa quen với một vi điểu khiển cho trước sẽ xây dựng được chương trình một cách nhanh chóng hơn, do không phải mất thời gian tìm hiểu kiến trúc của vi điều khiển đó Và việc sử dụng lại các chương trình đã xây dựng trước đó cũng dễ dàng hơn, có thể sử dụng toàn bộ hoặc sửa chữa một phần

2 NGÔN NGỮ C CHO VI ĐIỀU KHIỂN

Miền giá trị (Range)

1 unsigned char 1 byte 0 đến 255

2 char 1 byte -128 đến 127

3 enum 2 bytes -32,768 đến 32,767

4 unsigned int 2 bytes 0 đến 65,535

5 short int 2 bytes -32,768 đến 32,767

Trang 25

* Khai báo biến:

- Cú pháp: Kiểu_dữ_liệu Vùng_nhớ Tên_biến _at_ Đia_chỉ;

Ví dụ: Unsigned char data x;

- Khi khai báo biến có thể gán luôn cho biến giá trị ban đầu

Ví dụ: Thay vì: unsigned char x; x = 0;

Ta chỉ cần: unsigned char x = 0;

- Có thể khai báo nhiều biến cùng một kiểu một lúc Ví dụ: unsigned int x,y,z,t;

- Chỉ định vùng nhớ: từ khoá “Vùng_nhớ” cho phép người dùng có thể chỉ ra vùng nhớ sử dụng để lưu trữ các biến sử dụng trong chương trình Các vùng nhớ có thể sử dụng là: CODE, DATA, DATAB, IDATA, PDATA, XDTA Khi không khai báo vùng nhớ trình dịch Keil C sẽ mặc định đó là vùng nhớ DATA [4]

CODE Bộ nhớ mã nguồn chương trình

DATA Bộ nhớ dữ liệu gồm 128 Byte thấp của Ram trong vi điều khiển

BDATA Bộ nhớ dữ liệu có thể định địa chỉ bit, nằm trong vùng nhớ DATA IDATA Bộ nhớ dữ liệu gồm 128 Byte cao của RAM trong vi điều khiển chỉ

có ở một số dòng vi điều khiển sau này PDATA Bộ nhớ dữ liệu ngoài gồm 256 Byte, được truy cập bởi địa chỉ đặt

trên P0 XDATA Bộ nhớ dữ liệu ngoài có dung lượng có thể lên đến 64 KB, được truy

cập bởi địa chỉ trên P0 và P2

* Định nghĩa lại kiểu

- Cú pháp: typedef Kiễu_dữ_liệu Tên_biến;

- Ten_biến sau này sẽ được sử dụng như một kiểu dữ liệu mới và có thể dùng để khai báo các biến khác

Trang 26

- bit: dùng để khai báo các biến có giá trị 0 hoặc một hay các biến logic trên vùng RAM của vi điều khiển Khi khai báo biến kiểu bit trình dịch Keil C sẽ mặc định vùng nhớ sử dụng là BDATA

- sbit, sfr, sfr16: dùng để định nghĩa các cho các thanh ghi chức năng hoặc các cổng trên vi điều khiển dùng để truy nhập các đoạn dữ liệu 1 bit, 8 bit, 16 bit [4]

2.1.3 Mảng

Mảng là một tập hợp nhiều phần tử cùng một kiểu giá trị và chung một tên Các phần tử của mảng phân biệt với nhau bởi chỉ số hay số thứ tự của phần tử trong dãy phẩn tử Mỗi phần tử có vai trò như một biến và lưu trữ được một giá trị độc lập với các phần tử khác của mảng

Mảng có thể là mảng một chiều hoặc mảng nhiều chiều Khai báo:

- Cú pháp: Tên_kiểu Vùng_nhớ Tên_mảng[số_phần_tử_mảng];

Khi bỏ trống số phần tử mảng ta sẽ có mảng có số phần tử bất kì

Ví dụ: Unsigned int data a[5],b[2] [3];

Với khai báo trên ta sẽ có: mảng a là mảng một chiều 5 phần tử Mảng b là mảng hai chiều, tổng số phần tử là 6

Chỉ số của mảng bắt đầu từ số 0 Mảng có bao nhiêu chiều phải cung cấp đầy đủ bấy nhiêu chỉ số

Ví dụ: phần tử mảng b[0] [1] là đúng Khi viết b[0] là sai [4]

2.1.4 Con trỏ

Khi ta khai báo một biến, biến đó sẽ được cấp phát một khoảng nhớ bao gồm một

số byte nhất định dùng để lưu trữ giá trị Địa chỉ đầu tiên của khoảng nhớ đó chính là địa chỉ của biến được khai báo

Con trỏ là một biến dùng để chứa địa chỉ mà không chứa giá trị, hay giá trị của con trỏ chính là địa chỉ khoảng nhớ mà nó trỏ tới

Với các vùng nhớ cụ thể con trỏ tới vùng nhớ đó chiếm dung lượng phụ thuộc vào

độ lớn của vùng nhớ đó Con trỏ tổng quát khi không xác định trước vùng nhớ sẽ có dung lượng lớn nhất vì vậy tốt nhất nên sử dụng con trỏ cụ thể

Trang 27

* Khai báo biến con trỏ:

- Cú pháp: Kiểu_Dữ_liệu Vùng_nhớ *Tên_biến;

Ví dụ:

int *int_ptr;

long data *long_ptr;

- Khi không chỉ rõ vùng nhớ con trỏ sẽ được coi là con trỏ tổng quát [4]

2.1.5 Kiểu dữ liệu cấu trúc

Kiểu dữ liệu cấu trúc là một tập hợp các biến, các mảng và cả các kiểu cấu trúc khác được biểu thị bởi một tên duy nhất Kiểu dữ liệu cấu trúc dùng để lưu trữ các giá trị, thông tin có liên quan đến nhau

Định nghĩa và khai báo biến cấu trúc:

- Định nghĩa: typedef struct {

Khai báo các biến thành phần;

Trang 28

=== Đồng nhất Hai số hạng bằng nhau và cùng kiểu $a===5

>= Lớn hơn hoặc bằng Vế trái lớn hơn hoặc bằng vế phải $a>=5

<= Nhỏ hơn hoặc bằng Vế trái nhỏ hơn hoặc bằng vế phải $a<=5

2.2.4 Phép toán thao tác Bit

^ Phép hoặc loại trừ (XOR) Bit_1 ^ Bit_2

Trang 29

2.3 Cấu trúc chương trình C

2.3.1 Cấu trúc chương trình

* Cấu trúc

1 Khai báo chỉ thị tiền xử lý

2 Khai báo các biến toàn cục

3 Khai báo nguyên mẫu các hàm

Khai báo biến toàn cục

Unsigned char code Led_arr[3];

Unsigned char data dem;

Unsigned int xdata X;

Khai báo nguyên mẫu hàm

Void delay(unsigned int n);

bit kiemtra(unsigned int a);

void delay(unsigned int n)

Bit kiemtra(unsigned int a)

{ Khai báo biến cục bộ;

Mã chương trình kiểm tra biến a;

}

Trang 30

Chú ý: Hàm không khai báo nguyên mẫu phải được xây dựng trước hàm có lời gọi hàm đó Ở ví dụ trên do hàm “bit kiemtra(unsigned int a)” đã được khai báo nguyên mẫu hàm ở trên nên có thể xây dựng hàm ở bất kì vị trí nào trong chương trình

2.3.2 Chỉ thị tiền xử lý

Các chỉ thị tiền xử lý không phải là các lệnh của ngôn ngữ C mà là các lệnh giúp cho việc soạn thảo chương trình nguồn C trước khi biên dịch Khi dịch một chương trình C thì không phải chính bản chương trình nguồn mà ta soạn thảo được dịch Trước khi dịch, các lệnh tiền xử lý sẽ chỉnh lý bản gốc, sau đó bản chỉnh lý này sẽ được dịch Có ba cách chỉnh lý được dùng là:

+ Phép thay thế #define

+ Phép chèn tệp #include

+ Phép lựa chọn biên dịch #ifdef

Các chỉ thị tiền xử lý giúp ta viết chương trình ngắn gọn hơn và tổ chức biên dịch, gỡ rối chương trình linh hoạt, hiệu quả hơn [4]

* Chỉ thị #define

Chỉ thị #define cho phép tạo các macro thay thế đơn giản

- Cú pháp: #define Tên_thay_thế dãy_kí_tự

Một Tên_thay_thế có thể được định nghĩa lại nhiều lần, nhưng trước khi định nghĩa lại phải giải phóng định nghĩa bằng chỉ thị:

Trang 31

Đoạn chương trình 1

#else Đoạn chương trình 2

Cách 2: #ifndef ten_macro

Đoạn chương trình 1 #else

Đoạn chương trình 2 #endif

Ở cách 1 nếu tên_macro chưa được định nghĩa “Đoạn chương trình” sẽ được dịch ngược lại “Đoạn chương trình” sẽ bị bỏ qua [4]

2.3.3 Chú thích trong chương trình

Việc viết chú thích trong trình nhằm mục đích giải thích ý nghĩa của câu lệnh, đoạn chương trình hoặc hàm hoạt động như thế nào và làm gì Viết chú thích sẽ giúp cho người đọc có thể hiểu được chương trình dễ dàng và nhanh chóng hơn, sửa lỗi đơn giản hơn hoặc giúp cho ta xem lại chương trình cũ mà ta đã làm trở nên nhanh hơn

Chú thích trong chương trình sẽ không ảnh hưởng đến chương trình mà ta soạn thảo vì trình dịch sẽ bỏ qua tất cả lời chú thích khi biên dịch chương trình sang mã máy Lời giải thích được đặt sau dấu “//” nếu chú thích chỉ viết trên một dòng hoặc trong cặp dấu “\*” và “*\”

Trang 32

2.4 Các lệnh cơ bản trong C

+ Câu lệnh rẽ nhánh if:

- Cấu trúc: if(dieu_kien)

{ // Đoạn chương trình }

Giải thích: nếu dieu_kien đúng thì xử lí các câu lệnh bên trong còn sai thì nhảy qua

- Cấu trúc: if(dieu_kien)

{ // Đoạn chương trình 1 }

else

// Đoạn chương trình 2 }

Giải thích: nếu dieu_kien đúng thì xử lí “Đoạn chương trình 1” bên trong còn sai thì xử lý “Đoạn chương trình 2”

+ Câu lệnh lựa chọn:

Cấu trúc: switch(bien)

{

case gia_tri_1: {//các câu lệnh break;}

case gia_tri_2: {//các câu lệnh break;}

case gia_tri_3: {//các câu lệnh break;}

………

case gia_tri_n: {//các câu lệnh break;}

}

Giải thích: tuỳ vào biến có gia_tri_1 thì thực hiện các câu lệnh tương ứng rồi sau

đó thoát khỏi cấu trúc nhờ câu lệnh break

Biến có gia_tri_2 thì thực hiện câu lệnh tương ứng rồi thoát

Trang 33

Giải thích: m, l là giá trị(m>l), còn n là biến Thực hiện lặp các câu lệnh (l-m) lần

+ Vòng lặp không xác định while:

- Cấu trúc: while(dieu_kien)

{

// các câu lệnh }

Giải thích: thực hiện lặp các câu lệnh khi điều kiện đúng nếu điều kiện sai thì thoát khỏi vòng lặp

+ Vòng lặp không xác định do while:

Cấu trúc: do

{ // các câu lệnh } while(dieu_kien);

Giải thích: thực hiện lặp các câu lệnh sau đó kiểm tra điều kiện nếu đúng, nếu sai thì thoát khỏi vòng lặp [4]

Trang 34

3 TRÌNH BIÊN DỊCH KEIL C (COMPILER)

3.1 Khởi tạo cho Project

Để tạo 1 project mới chọn Project → New project nhƣ sau:

Hình 3.1 Khởi tạo cho Project

Hình 3.2 Tạo Project mới

Trang 35

Hộp thoại Create New Project hiện ra như sau:

Đánh tên và chuyển đến thư mục nơi lưu project Ta nên tạo mỗi một thư mục cho 1

project Rồi chọn Save Hộp thoại sau hiện ra:

Hình 3.3 Đặt tên cho Project mới

Hình 3.4 Chọn vi điều khiển

Trang 36

Trong này có một loạt các hãng điện tử sản xuất AT89C51 Để lập trình cho IC nào thì chọn IC đấy, kích chuột vào dấu + để mở rộng các con IC của các hãng Ở đây ta lập trình cho AT89C51 của hãng ATMEL nên ta chọn như trên

Khi chọn chip thì ngay lập tức 1 bảng hiện ra 1 số tính năng của chip mà ta có thể nhìn thấy: 8051 based fully static 24Mhz … nhập OK, chọn câu trả lời NO khi được hỏi

“copy standard 8051 startup code to project and addfile to project” vì nếu chọn YES chỉ làm cho file lập trình sẽ thêm nặng

Để tạo một file code ta chọn File→New hoặc ấn Ctrl+N như sau:

Cửa sổ text1 hiện ra Tiếp theo ta chọn File → Save As hoặc Ctrl+S, để lưu File mặc

dù chưa có gì như sau:

Hình 3.5 Tạo File chương trình mới

Hình 3.6 Save As file chương trình mới

Trang 37

Đƣợc cửa sổ sau:

Ta nhập tên vào text box File name Chú ý tên gì cũng đƣợc nhƣng không đƣợc thiếu đuôi mở rộng C, và nhấn SAVE

Trong ô bên trái màn hình, cửa sổ PROJECT WORKSPACE, các bạn mở rộng

cái target 1 ra nhƣ sau:

Hình 3.7 Đặt tên cho file code

Hình 3.8 Bổ sung file code vào Project

Trang 38

Nhấp chuột phải lên SOURCE GROUP, chọn Add file to Group “Source Group 1” hộp thoại hiện ra chọn file C mà ta vừa SAVE rồi nhấn Add một lần rồi nhấn Close Nếu ta nhấn Add hai lần nó sẽ thông báo là file đã add, lúc này ta chỉ việc OK rồi

nhấn Close Đƣợc nhƣ sau:

Bây giờ trong hình nhìn thấy trong Source Group 1 có file Machdonhietdo.C Ta nhấp chuột phải vào vùng soạn thảo file Machdonhietdo.C để

thêm file thƣ viện Chon Insert “#include<REGX51.H>”

Hình 3.9 File code đã đƣợc bổ sung vào

Project

Hình 3.10 Chèn thƣ viện vào cho file code

Trang 39

Phần cuối cùng của công việc khởi tạo là ta có thể viết lời giải thích cho dự án của mình Phần này rất cần thiết vì nó để người khác hiểu mình làm gì trong project này và khi mình cần sử dụng lại code đọc lại còn biết nó là cái gì

3.2 Soạn thảo chương trình

Các bạn viết thử một chương trình làm ví dụ Khi viết xong mỗi dòng lệnh nên giải thích dòng lệnh đó làm gì Ví dụ:

Trang 40

Để biên dịch chương trình thành file HEX các bạn chọn: Project→Option for

„target 1‟ như hình vẽ:

Hình 3.12 Biên dịch chương trình

Hình 3.13 Biên dịch chương trình thành file HEX

Ngày đăng: 22/12/2015, 12:31

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[2] Giáo trình “Vi điều khiển và Họ vi điều khiển 8051” ĐH Công Nghiệp TPHCM . [3] Vi điều khiển 8051, Tống Văn On – 2008 Sách, tạp chí
Tiêu đề: Vi điều khiển và Họ vi điều khiển 8051
[7] Giáo trình Kỹ thuật điện tử số, Nhà xuất bản GD – 2007 [8] http://codientu.org/threads/5207/ Link
[4] Cấu trúc và lập trình họ vi điều khiển 8051- Nguyễn Tăng Cường &amp; Phan Quốc Thắng - Nxb Khoa học và Kỹ thuật – 2004 Khác
[5] Đỗ Xuân Thụ, Giáo trình Kỹ thuật điện tử - năm 2010 Khác
[6] Vương Tấn Sĩ, Giáo trình Kỹ thuật điện tử 1, 2 - ĐH Cần Thơ Khác

HÌNH ẢNH LIÊN QUAN

Sơ Đồ Khối AT89C51 - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
h ối AT89C51 (Trang 16)
Hình 3.3. Đặt tên cho Project mới - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 3.3. Đặt tên cho Project mới (Trang 35)
Hình 3.11. Chương trình nhảy LED đơn - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 3.11. Chương trình nhảy LED đơn (Trang 39)
Hình 3.14. Chọn các thông số kỹ thuật cho file HEX - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 3.14. Chọn các thông số kỹ thuật cho file HEX (Trang 41)
Hình 3.16. Chọn các thông số kỹ thuật cho Port 1 - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 3.16. Chọn các thông số kỹ thuật cho Port 1 (Trang 42)
Hình 4.2. Sơ đồ bộ nhớ DS18B20 - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 4.2. Sơ đồ bộ nhớ DS18B20 (Trang 46)
Hình 4.5. Kết nối Text LCD. - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 4.5. Kết nối Text LCD (Trang 50)
Hình 1.2: Giao diện realPCB sau khi khởi động - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 1.2 Giao diện realPCB sau khi khởi động (Trang 72)
Hình 1.4: Lớp Working Grid và Lớp Screen Grid - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 1.4 Lớp Working Grid và Lớp Screen Grid (Trang 73)
Hình 1.6: Cửa sổ Print Setup - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 1.6 Cửa sổ Print Setup (Trang 74)
Hình 1.11: Chọn chân mạch in linh kiện - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 1.11 Chọn chân mạch in linh kiện (Trang 77)
Hình 1.14: Mạch còi cảnh sát - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 1.14 Mạch còi cảnh sát (Trang 78)
Hình 1.18: Thẻ Component và thẻ Component Value - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 1.18 Thẻ Component và thẻ Component Value (Trang 80)
Hình 1.21: Cửa sổ Save As lưu bản vẽ mạch in - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 1.21 Cửa sổ Save As lưu bản vẽ mạch in (Trang 82)
Hình 2.7: Không gian thiết kế mạch  nguyên lý - thiết kế mạch đo nhiệt độ dùng vi điều khiển at89c51 và cảm biến nhiệt ds18b20
Hình 2.7 Không gian thiết kế mạch nguyên lý (Trang 89)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w