Hướng Dẫn Lập Trình Vi Điều Khiển 89C51, PIC 16F877A và AVR

Chuyên khảo phân tích Lập trình c cho vi điều khiển, đánh giá các khía cạnh quan trọng, đề xuất hướng nghiên cứu tiếp theo., phục vụ nghiên cứu và ứng dụng thực tiễn

Trường đại học

Trường Đại Học

Chuyên ngành

Kỹ Thuật Lập Trình Vi Điều Khiển

Người đăng

Ẩn danh

Thể loại

Đồ Án Tốt Nghiệp

2009

103
9
0

Phí lưu trữ

35 Point

Mục lục chi tiết

1. PHẦN A: VIẾT NGÔN NGỮ KEIL C CHO 89C51

1.1. I. MỘT VÀI NÉT CHUNG VỀ 89C51

1.2. II. NHỮNG VẤN ĐỀ TRỌNG TÂM CỦA 89C51

1.3. III. NGÔN NGỮ KEIL C CHO 89C51

1.4. IV. HƯỚNG DẪN SỬ DỤNG KEIL C LẬP TRÌNH CHO 89C51

1.5. V. MÔ PHỎNG MODUL ỨNG DỤNG VÀ CHƯƠNG TRÌNH MẪU

2. PHẦN B: VIẾT NGÔN NGỮ CCSC CHO PIC 16F877A

2.1. I. VÀI NÉT KHÁI QUÁT VỀ PIC 16F877A

2.2. II. TRỌNG TÂM CỦA PIC 16F877A

2.3. III. NGÔN NGỮ CCSC CHO PIC 16F877A

2.4. IV. HƯỚNG DẪN SỬ DỤNG PHẦN MỀM CCSC

2.5. V. CHƯƠNG TRÌNH MẪU VÀ MODUL MÔ PHỎNG CHO PIC 16F877A

3. PHẦN C: LẬP TRÌNH CHO AVR BẰNG CODE VISION

3.1. I. TÌM HIỂU VỀ AVR

3.2. II. CẤU TRÚC LỆNH CỦA CODE VISION

3.3. III. HƯỚNG DẪN SỬ DUNG LẬP TRÌNH AVR BẰNG CODE VISION

3.4. IV. MODUL ỨNG DỤNG VÀ CHƯƠNG TRÌNH MÔ PHỎNG

Tóm tắt

I. Hướng Dẫn Lập Trình Vi Điều Khiển 89C51 Bằng Keil C

Vi điều khiển 89C51 là một trong những dòng vi điều khiển phổ biến nhất trong lĩnh vực công nghệ vi điều khiển. Việc lập trình cho 89C51 bằng ngôn ngữ C thông qua phần mềm Keil C giúp đơn giản hóa quá trình phát triển phần mềm. Bài viết này sẽ cung cấp hướng dẫn chi tiết về cách lập trình vi điều khiển 89C51, từ việc cài đặt phần mềm đến viết mã và mô phỏng.

1.1. Tổng Quan Về Vi Điều Khiển 89C51

Vi điều khiển 89C51 có cấu trúc 8 bit với 8 KB EPROM và 128 Byte RAM nội. Nó hỗ trợ nhiều cổng I/O và giao tiếp nối tiếp, giúp dễ dàng kết nối với các thiết bị ngoại vi.

1.2. Cài Đặt Phần Mềm Keil C

Để bắt đầu lập trình, cần cài đặt phần mềm Keil C. Quá trình cài đặt đơn giản và chỉ cần làm theo hướng dẫn trên màn hình. Sau khi cài đặt, người dùng có thể tạo một dự án mới để bắt đầu lập trình.

1.3. Viết Chương Trình Đầu Tiên Cho 89C51

Chương trình đầu tiên có thể là một chương trình đơn giản để nhấp nháy đèn LED. Việc này giúp người lập trình làm quen với cú pháp và cấu trúc của ngôn ngữ C trong Keil.

II. Những Thách Thức Khi Lập Trình Vi Điều Khiển 89C51

Mặc dù lập trình vi điều khiển 89C51 bằng Keil C mang lại nhiều lợi ích, nhưng cũng tồn tại một số thách thức. Việc hiểu rõ cấu trúc phần cứng và cách thức hoạt động của vi điều khiển là rất quan trọng để tránh những lỗi không đáng có.

2.1. Khó Khăn Trong Việc Quản Lý Bộ Nhớ

Việc quản lý bộ nhớ trong 89C51 có thể gây khó khăn cho người lập trình, đặc biệt là khi làm việc với các biến và thanh ghi. Cần nắm rõ cách thức hoạt động của các thanh ghi và cách truy xuất bộ nhớ.

2.2. Tối Ưu Hóa Hiệu Suất Chương Trình

Tối ưu hóa hiệu suất chương trình là một thách thức lớn. Cần phải viết mã hiệu quả để đảm bảo chương trình chạy mượt mà và không tiêu tốn quá nhiều tài nguyên.

2.3. Xử Lý Ngắt Trong Lập Trình

Xử lý ngắt là một phần quan trọng trong lập trình vi điều khiển. Việc thiết lập và quản lý các ngắt có thể phức tạp và yêu cầu người lập trình phải có kiến thức vững về cấu trúc của vi điều khiển.

III. Hướng Dẫn Lập Trình PIC 16F877A Bằng CCSC

Vi điều khiển PIC 16F877A là một trong những dòng vi điều khiển phổ biến trong lĩnh vực tự động hóa. Lập trình PIC 16F877A bằng CCSC giúp người dùng dễ dàng phát triển các ứng dụng nhúng.

3.1. Giới Thiệu Về Vi Điều Khiển PIC 16F877A

PIC 16F877A có cấu trúc 8 bit với 14 bit lệnh và 368 Byte RAM. Nó hỗ trợ nhiều chế độ hoạt động và có khả năng giao tiếp với nhiều thiết bị ngoại vi.

3.2. Cài Đặt Phần Mềm CCSC

Cài đặt phần mềm CCSC là bước đầu tiên để lập trình PIC 16F877A. Phần mềm này cung cấp giao diện thân thiện và nhiều công cụ hữu ích cho lập trình viên.

3.3. Viết Chương Trình Đầu Tiên Cho PIC 16F877A

Chương trình đầu tiên có thể là một ứng dụng đơn giản để điều khiển LED. Việc này giúp người lập trình làm quen với cú pháp và cách thức hoạt động của CCSC.

IV. Hướng Dẫn Lập Trình AVR Bằng Code Vision

Vi điều khiển AVR là một trong những dòng vi điều khiển được ưa chuộng trong các dự án DIY. Lập trình AVR bằng Code Vision giúp đơn giản hóa quá trình phát triển phần mềm.

4.1. Tổng Quan Về Vi Điều Khiển AVR

Vi điều khiển AVR có cấu trúc 8 bit và được thiết kế để dễ dàng lập trình. Nó hỗ trợ nhiều chế độ hoạt động và có khả năng giao tiếp với nhiều thiết bị ngoại vi.

4.2. Cài Đặt Code Vision

Cài đặt Code Vision là bước quan trọng để bắt đầu lập trình AVR. Phần mềm này cung cấp nhiều công cụ hữu ích cho lập trình viên.

4.3. Viết Chương Trình Đầu Tiên Cho AVR

Chương trình đầu tiên có thể là một ứng dụng đơn giản để điều khiển LED. Việc này giúp người lập trình làm quen với cú pháp và cách thức hoạt động của Code Vision.

V. Ứng Dụng Thực Tiễn Của Vi Điều Khiển Trong Cuộc Sống

Vi điều khiển được ứng dụng rộng rãi trong nhiều lĩnh vực như tự động hóa, điều khiển thiết bị, và robot. Việc hiểu rõ cách lập trình vi điều khiển giúp người dùng phát triển các sản phẩm sáng tạo.

5.1. Ứng Dụng Trong Tự Động Hóa

Vi điều khiển được sử dụng để tự động hóa các quy trình sản xuất, giúp tiết kiệm thời gian và chi phí.

5.2. Ứng Dụng Trong Thiết Bị Gia Dụng

Nhiều thiết bị gia dụng hiện đại như máy giặt, tủ lạnh, và điều hòa không khí đều sử dụng vi điều khiển để điều khiển hoạt động.

5.3. Ứng Dụng Trong Robot

Vi điều khiển là bộ não của nhiều loại robot, giúp chúng thực hiện các nhiệm vụ phức tạp và tương tác với môi trường.

VI. Kết Luận Về Lập Trình Vi Điều Khiển

Lập trình vi điều khiển là một lĩnh vực thú vị và đầy thách thức. Việc nắm vững kiến thức về lập trình vi điều khiển giúp người dùng phát triển các ứng dụng sáng tạo và giải quyết nhiều vấn đề trong cuộc sống.

6.1. Tương Lai Của Lập Trình Vi Điều Khiển

Với sự phát triển của công nghệ, lập trình vi điều khiển sẽ ngày càng trở nên quan trọng trong các ứng dụng thông minh và tự động hóa.

6.2. Khuyến Khích Học Tập Và Nghiên Cứu

Khuyến khích người học tìm hiểu sâu hơn về lập trình vi điều khiển để có thể phát triển các sản phẩm sáng tạo và ứng dụng thực tiễn.

10/07/2025

Trích đoạn nội dung tài liệu

GVHD: NGUYỄN VĂN NGA 20/11/2009 [Year] MỤC LỤC PHẦN A: VIẾT NGÔN NGỮ KEIL C CHO 89C51 I. MỘT VÀI NÉT CHUNG VỀ 89C51 II. NHỮNG VẤN ĐỀ TRỌNG TÂM CỦA 89C51 III. NGÔN NGỮ KEIL C CHO 89C51 IV.

HƯỚNG DẪN SỬ DỤNG KEIL C LẬP TRÌNH CHO 89C51 V. MÔ PHỎNG MODUL ỨNG DỤNG VÀ CHƯƠNG TRÌNH MẪU PHẦN B: VIẾT NGÔN NGỮ CCSC CHO PIC 16F877A I. VÀI NÉT KHÁI QUÁT VỀ PIC 16F877A II. TRỌNG TÂM CỦA PIC 16F877A III.

NGÔN NGỮ CCSC CHO PIC 16F877A IV. HƯỚNG DẪN SỬ DỤNG PHẦN MỀM CCSC V. CHƯƠNG TRÌNH MẪU VÀ MODUL MÔ PHỎNG CHO PIC 16F877A PHẦN C: LẬP TRÌNH CHO AVR BẰNG CODE VISION I. TÌM HIỂU VỀ AVR II.

CẤU TRÚC LỆNH CỦA CODE VISION III. HƯỚNG DẪN SỬ DUNG LẬP TRÌNH AVR BẰNG CODE VISION IV. MODUL ỨNG DỤNG VÀ CHƯƠNG TRÌNH MÔ PHỎNG SVTH:NGUYỄN VĂN BIÊN Page 1 GVHD: NGUYỄN VĂN NGA 20/11/2009 [Year] PHẦN A: VIẾT NGÔN NGỮ KEIL C CHO 89C51 I. MỘT VÀI NÉT CHUNG VỀ 89C51 Đặc điểm và chức năng hoạt động của các IC họ MSC-51 hoàn toàn tương tự như nhau.

Ở đây giới thiệu IC8951 là một họ IC vi điều khiển do hãng Intel của Mỹ sản xuất. Chúng có các đặc điểm chung như sau: Các đặc điểm của 8951 được tóm tắt như sau : Ø 8 KB EPROM bên trong. Ø 128 Byte RAM nội. Ø 4 Port xuất /nhập I/O 8 bit.

Ø Giao tiếp nối tiếp. Ø 64 KB vùng nhớ mã ngoài Ø 64 KB vùng nhớ dữ liệu ngoại. Ø 210 vị trí nhớ có thể định vị bit. Ø 4 μs cho hoạt động nhân hoặc chia.

SVTH:NGUYỄN VĂN BIÊN Page 2 GVHD: NGUYỄN VĂN NGA 20/11/2009 [Year] v Sơ đồ khối ic 89c51 SVTH:NGUYỄN VĂN BIÊN Page 3 GVHD: NGUYỄN VĂN NGA 20/11/2009 [Year] v Sơ đồ chân ic 89c51 SVTH:NGUYỄN VĂN BIÊN Page 4 GVHD: NGUYỄN VĂN NGA 20/11/2009 [Year] Chức năng các chân của 8951: 8951 có tất cả 40 chân có chức năng như các đường xuất nhập. Trong đó có 24 chân có tác dụng kép (có nghĩa 1 chân có 2 chức năng), mỗi đường có thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ. Port 0 : Port 0 là port có 2 chức năng ở các chân 32 – 39 của 8951. 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 các thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu. Port 1 : Port 1 là port IO trên các chân 1-8. Các chân được ký hiệu P1.2, … có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần. Port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngoài.

Port 2 : Port 2 là 1 port có tác dụng kép trên các chân 21 - 28 được 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 thiết bị dùng bộ nhớ mở rộng. Port 2 : Port 3 là port có tác dụng kép trên các chân 10 - 17. Các chân của port này có nhiều chức năng, các công dụng chuyển đổi có liên hệ với các đặc tính đặc biệt của 8951 như ở bảng sau: Các ngõ tín hiệu điều khiển : Ngõ tín hiệu PSEN (Program store enable): - PSEN là tín hiệu ngõ ra ở chân 29 có tác dụng cho phép đọc bộ nhớ chương trình mở rộng thường được nói đến chân 0E\ (output enable) của Eprom cho phép đọc các byte mã lệnh. SVTH:NGUYỄN VĂN BIÊN Page 5 GVHD: NGUYỄN VĂN NGA 20/11/2009 [Year] - PSEN ở mức thấp trong thời gian Microcontroller 8951 lấy lệnh.

Các mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu và được chốt vào thanh ghi lệnh bên trong 8951 để giải mã lệnh. Khi 8951 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic 1. Ngõ tín hiệu điều khiển ALE (Address Latch Enable ) : - Khi 8951 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus địa chỉ và bus 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 ra ở 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. 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àm tín hiệu clock cho các phần khác của hệ thống. Chân ALE được dùng làm ngõ vào xung lập trình cho Eprom trong 8951. Ngõ tín hiệu EA\(External Access): - 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, 8951 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp 8 Kbyte. Nếu ở mức 0, 8951 sẽ thi hành chương trình từ bộ nhớ mở rộng. Chân EA\ được lấy làm chân cấp nguồn 21V khi lập trình cho Eprom trong 8951. Ngõ tín hiệu RST (Reset) : Ngõ vào RST ở chân 9 là ngõ vào Reset của 8951.

Khi ngõ vào tín hiệu này đưa lên cao ít nhất là 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 tự động Reset. Các ngõ vào bộ dao động X1, X2: Bộ dao động được tích hợp bên trong 8951, khi sử dụng 8951 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ. Tần số thạch anh thường sử dụng cho 8951 là 12Mhz Chân 40 (Vcc) được nối lên nguồn 5V.

SVTH:NGUYỄN VĂN BIÊN Page 6 GVHD: NGUYỄN VĂN NGA 20/11/2009 [Year] II. NHỮNG VẤN ĐỀ TRỌNG TÂM CỦA 89C51 1. Sơ đồ vùng nhớ SVTH:NGUYỄN VĂN BIÊN Page 7 GVHD: NGUYỄN VĂN NGA 20/11/2009 [Year] 2. Thanh ghi quan trong: Thanh ghi B: Thanh ghi B ở địa chỉ F0H được dùng cùng với thanh ghi A cho các phép toán nhân chia.

Lệnh MUL AB ⇐ sẽ nhận những giá trị không dấu 8 bit trong hai thanh ghi A và B, rồi trả về kết quả 16 bit trong A (byte cao) và B(byte thấp). Lệnh DIV AB ⇐ lấy A chia B, kết quả nguyên đặt vào A, số dư đặt vào B. - Thanh ghi B có thể được dùng như một thanh ghi đệm trung gian đa mục đích. Nó là những bit định vị thông qua những địa chỉ từ F0H÷F7H.

Con trỏ Ngăn xếp SP (Stack Pointer) : - Con trỏ ngăn xếp là một thanh ghi 8 bit ở địa chỉ 81H. Nó chứa địa chỉ của byte dữ liệu hiện hành trên đỉnh ngăn xếp. Các lệnh trên ngăn xếp bao gồm các lệnh cất dữ liệu vào ngăn xếp (PUSH) và lấy dữ liệu ra khỏi Ngăn xếp (POP). Lệnh cất dữ liệu vào ngăn xếp sẽ làm tăng SP trước khi ghi dữ liệu và lệnh lấy ra khỏi ngăn xếp sẽ làm giảm SP.

Ngăn xếp của 8031/8051 được giữ trong RAM nội và giới hạn các địa chỉ có thể truy xuất bằng địa chỉ gián tiếp, chúng là 128 byte đầu của 8951. - Để khởi động SP với ngăn xếp bắt đầu tại địa chỉ 60H, các lệnh sau đây được dùng: MOV SP , #5F - Với lệnh trên thì ngăn xếp của 8951 chỉ có 32 byte vì địa chỉ cao nhất của RAM trên chip là 7FH. Sở dĩ giá trị 5FH được nạp vào SP vì SP tăng lên 60H trước khi cất byte dữ liệu. - Khi Reset 8951, SP sẽ mang giá trị mặc định là 07H và dữ liệu đầu tiên sẽ được cất vào ô nhớ ngăn xếp có địa chỉ 08H.

Nếu phần mềm ứng dụng không khởi động SP một giá trị mới thì bank thanh ghi1 có thể cả 2 và 3 sẽ không dùng được vì vùng RAM này đã được dùng làm ngăn xếp. Ngăn xếp được truy xuất trực tiếp bằng các lệnh PUSH và POP để lưu trữ tạm thời và lấy lại dữ liệu, hoặc truy xuất ngầm bằng lệnh gọi chương trình con ( ACALL, LCALL) và các lệnh trở về (RET, RETI) để lưu trữ giá trị của bộ đếm chương trình khi bắt đầu thực hiện chương trình con và lấy lại khi kết thúc chương trình con … Con trỏ dữ liệu DPTR (Data Pointer): -Con trỏ dữ liệu (DPTR) được dùng để truy xuất bộ nhớ ngoài là một thanh ghi 16 bit ở địa chỉ 82H (DPL: byte thấp) và 83H (DPH: byte cao). Ba lệnh sau sẽ ghi 55H vào RAM ngoài ở địa chỉ 1000H: MOV A , #55H MOV DPTR, #1000H MOV @DPTR, A SVTH:NGUYỄN VĂN BIÊN Page 8 GVHD: NGUYỄN VĂN NGA 20/11/2009 [Year] - Lệnh đầu tiên dùng để nạp 55H vào thanh ghi A. Lệnh thứ hai dùng để nạp địa chỉ của ô nhớ cần lưu giá trị 55H vào con trỏ dữ liệu DPTR.

Lệnh thứ ba sẽ di chuyển nội dung thanh ghi A (là 55H) vào ô nhớ RAM bên ngoài có địa chỉ chứa trong DPTR (là 1000H). Các thanh ghi Port (Port Register): - Các Port của 8951 bao gồm Port0 ở địa chỉ 80H, Port1 ở địa chỉ 90H, Port2 ở địa chỉ A0H, và Port3 ở địa chỉ B0H. Tất cả các Port này đều có thể truy xuất từng bit nên rất thuận tiện trong khả năng giao tiếp. Các thanh ghi Timer (Timer Register): - 8951 có chứa hai bộ định thời/ bộ đếm 16 bit được dùng cho việc định thời được đếm sự kiện.

Timer0 ở địa chỉ 8AH (TLO: byte thấp ) và 8CH (THO: byte cao). Timer1 ở địa chỉ 8BH (TL1: 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 Port nối tiếp (Serial Port Register) : - 8951 chứa một Port nối tiếp 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 đệ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ập. Khi truyền dữ liệu ghi lên SBUF, khi nhận dữ liệu thì đọc SBUF. Các mode vận khác nhau được lập trình qua thanh ghi điều khiển Port nối tiếp (SCON) được địa chỉ hóa từng bit ở địa chỉ 98H.

Các thanh ghi ngắt (Interrupt Register): - 8951 có cấu trúc 5 nguồn ngắt, 2 mức ưu tiên. Các ngắt bị cấm sau khi bị reset hệ thống và sẽ được cho phép bằng việc ghi thanh ghi cho phép ngắt (IE) ở địa chỉ A8H. Cả hai được địa chỉ hóa từng bit. Thanh ghi điều khiển nguồn PCON (Power Control Register): - Thanh ghi PCON không có bit định vị.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ

Tài liệu Hướng Dẫn Lập Trình Vi Điều Khiển 89C51, PIC 16F877A và AVR Bằng Keil C và CCSC cung cấp một cái nhìn tổng quan và chi tiết về lập trình vi điều khiển, giúp người đọc nắm vững các khái niệm cơ bản cũng như các kỹ thuật lập trình nâng cao. Tài liệu này không chỉ hướng dẫn cách sử dụng các công cụ lập trình như Keil C và CCSC mà còn giải thích rõ ràng về các vi điều khiển phổ biến như 89C51, PIC 16F877A và AVR.

Một trong những lợi ích lớn nhất của tài liệu này là nó giúp người đọc phát triển kỹ năng lập trình thực tiễn, từ đó có thể áp dụng vào các dự án thực tế. Đặc biệt, tài liệu còn cung cấp các ví dụ minh họa cụ thể, giúp người học dễ dàng tiếp cận và thực hành.

Nếu bạn muốn mở rộng kiến thức của mình về lập trình vi điều khiển, hãy tham khảo tài liệu Giáo trình lập trình vi điều khiển. Tài liệu này sẽ cung cấp thêm nhiều thông tin bổ ích và cái nhìn sâu sắc hơn về lĩnh vực này, giúp bạn nâng cao kỹ năng và hiểu biết của mình.