98
Nhóm biên son BigLab – Chbiên: ThS. Võ Xuân Quc – [email protected] 1 1 Nhóm đào to kthut BigLab - Giáo trình PIC - CCSC laLI NÓI ĐẦU Tài liu này cùng vi đề cương chương trình là tài liu hướng dn chính thc cho hc viên tham gia khóa hc PIC – CCSC ti Nhóm đào to đin t– lp trình BigLab. Tài liu có giá trlưu hành ni b, được cung cp min phí cho hc viên tham gia khóa hc. Mi thc mc vtài liu xin liên htrc tiếp vi ging viên đứng lp. Tài liu được biên son ln đầu chc chn còn nhiu thiếu sót, rt mong sgóp ý ca quý hc viên, độc gi. Mi ý kiến đóng góp xin liên hemail: [email protected] Nhóm biên son BigLab

Pic Ccs Full

Embed Size (px)

DESCRIPTION

very good , using now.

Citation preview

Page 1: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 1

1 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

laLỜI NÓI ĐẦU

Tài liệu này cùng với đề cương chương trình là tài liệu hướng dẫn chính thức cho học viên tham

gia khóa học PIC – CCSC tại Nhóm đào tạo điện tử – lập trình BigLab.

Tài liệu có giá trị lưu hành nội bộ, được cung cấp miễn phí cho học viên tham gia khóa học.

Mọi thắc mắc về tài liệu xin liên hệ trực tiếp với giảng viên đứng lớp.

Tài liệu được biên soạn lần đầu chắc chắn còn nhiều thiếu sót, rất mong sự góp ý của quý học

viên, độc giả. Mọi ý kiến đóng góp xin liên hệ email: [email protected]

Nhóm biên soạn

BigLab

Page 2: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 2

2 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

MỤC LỤC

BỘ CHƯƠNG TRÌNH T ẠI BIGLAB ........................................................................... 7

ĐỀ CƯƠNG CHƯƠNG TRÌNH PIC - CCSC ............................................................. 10

Bài 1 : NHỮNG KHÁI NI ỆM BAN ĐẦU .................................................................... 16

1.1 VI ĐIỀU KHIỂN LÀ GÌ ...................................................................................... 16

1.2 TỔNG THỂ KIẾN TRÚC PHẦN CỨNG VI ĐIỀU KHIỂN ................................ 18

1.3 LỰA CHỌN DÒNG VI ĐIỀU KHIỂN ................................................................ 21

1.4 CÁC NGÔN NGỮ LẬP TRÌNH CHO VI ĐIỀU KHIỂN ..................................... 21

Bài 2 : KỸ THUẬT LẬP TRÌNH C ............................................................................. 23

2.1 KHÁI QUÁT NGÔN NGỮ C .............................................................................. 23

2.2 NHỮNG VẤN ĐỀ LIÊN QUAN KHI SỬ DỤNG C CHO LẬP TRÌNH PIC ....... 34

Bài 3 : PRE-PROCESSOR DIRECTIVE .................................................................... 36

3.1 TỔNG THỂ KIẾN TRÚC PHẦN CỨNG VI ĐIỀU KHIỂN ................................ 36

3.2 BỘ NHỚ ............................................................................................................. 38

3.3 BỘ DAO ĐỘNG .................................................................................................. 42

3.4 CÁC CHỈ THỊ TIỀN XỬ LÝ TRONG CCSC ...................................................... 46

3.5 BÀI TẬP .............................................................................................................. 49

Bài 4 : IO PORT – OUTPUT ....................................................................................... 50

4.1 GIỚI THIỆU PHẦN CỨNG ................................................................................ 50

4.2 TẬP LỆNH TƯƠNG TÁC PORT TRONG CCSC ............................................... 51

4.3 BÀI TẬP - CÁC ỨNG DỤNG CỦA IO PORT-PHẦN OUTPUT ........................ 52

4.4 BÀI TẬP VỀ NHÀ: ............................................................................................. 54

4.5 PHỤ LỤC – CHUẨN LOGIC NGÕ RA CỦA IO PORT ..................................... 55

Bài 5 : NGẮT (INTERRUPTS) .................................................................................... 56

5.1 ĐỊNH NGHĨA NGẮT .......................................................................................... 56

5.2 PHÂN LOẠI NGẮT ............................................................................................ 56

Page 3: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 3

3 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

5.3 HOẠT ĐỘNG CỦA NGẮT ................................................................................. 57

5.4 TƯƠNG TÁC VỚI NGẮT ................................................................................... 57

5.5 BÀI TẬP .............................................................................................................. 60

Bài 6 : IO PORT - INPUT ............................................................................................ 61

6.1 MÔ TẢ PHẦN CỨNG ......................................................................................... 61

6.2 BÀI TẬP – ỨNG DỤNG IO PORT - INPUT ....................................................... 61

6.3 PHỤ LỤC ............................................................................................................ 64

Bài 7 : TIMER .............................................................................................................. 66

7.1 TIMER ................................................................................................................. 66

7.2 TƯƠNG TÁC VỚI TIMER.................................................................................. 68

7.3 BÀI TẬP .............................................................................................................. 69

7.4 MỞ RỘNG – WATCH DOG TIMER (WDT) ...................................................... 70

Bài 8 : BÀI TẬP GIỮA KHÓA .................................................................................... 71

8.1 YÊU CẦU ............................................................................................................ 71

8.2 MÔ TẢ PHẦN CỨNG ......................................................................................... 71

8.3 GIẢI THUẬT ...................................................................................................... 72

8.4 CHƯƠNG TRÌNH ............................................................................................... 72

Bài 9 : NGÔN NGỮ LẬP TRÌNH C NÂNG CAO ...................................................... 73

9.1 CÁC KIỂU DỮ LIỆU NÂNG CAO TRONG C ................................................... 73

9.2 CÁC HÀM THÔNG DỤNG TRONG THƯ VIỆN C CHUẨN: ............................ 73

Bài 10 : LCD ................................................................................................................. 76

10.1 TỔNG QUAN VỀ LCD ....................................................................................... 76

10.2 GIAO DIỆN LCD - HD 44780 ............................................................................. 77

10.3 CÁC HÀM TƯƠNG TÁC VỚI LCD TRONG CCSC .......................................... 77

10.4 BÀI TẬP .............................................................................................................. 78

Bài 11 : ADC (ANALOG – DIGITAL CONVERT) ........... ......................................... 79

Page 4: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 4

4 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

11.1 TỔNG QUAN VỀ ADC ....................................................................................... 79

11.2 CÁC HÀM TƯƠNG TÁC ADC TRONG CCSC .................................................. 80

11.3 QUY TRÌNH TƯƠNG TÁC ADC TRONG CCSC ............................................... 81

11.4 BÀI TẬP .............................................................................................................. 82

Bài 12 : USART ............................................................................................................ 83

12.1 KHÁI QUÁT VỀ CÁC CHUẨN GIAO TIẾP ...................................................... 83

12.2 CÁC HÀM TƯƠNG TÁC VỚI USART TRONG CCSC ...................................... 84

12.3 BÀI TẬP .............................................................................................................. 86

Bài 13 : PWM / CAPTURE / COMPARE ................................................................... 87

13.1 TỔNG QUAN VỀ PWM/CAPTURE/COMPARE ............................................... 87

13.2 QUY TRÌNH SỬ DỤNG MODULE PWM TRONG PIC ..................................... 88

13.3 BÀI TẬP .............................................................................................................. 89

13.4 PHẦN MỞ RỘNG - ENCODER .......................................................................... 89

Bài 14 : SPI – I2C ......................................................................................................... 92

14.1 TỔNG QUAN VỀ SPI ......................................................................................... 92

14.2 HOẠT ĐỘNG CỦA SPI ...................................................................................... 92

14.3 SPI TRONG PIC .................................................................................................. 92

14.4 MỞ RỘNG – I2C ................................................................................................. 93

14.5 CÁC PHƯƠNG PHÁP LƯU TRỮ DỮ LIỆU ...................................................... 95

Bài 15 : BÀI TẬP TỔNG KẾT .................................................................................... 97

15.1 YÊU CẦU ............................................................................................................ 97

15.2 MÔ TẢ PHẦN CỨNG ......................................................................................... 98

15.3 GIẢI THUẬT ...................................................................................................... 98

15.4 CHƯƠNG TRÌNH ............................................................................................... 98

Page 5: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 5

5 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

DANH SÁCH HÌNH V Ẽ

Hình 1.1 - Sơ đồ khối kiến trúc tổng thể một hệ máy tính ................................................... 18

Hình 1.2 - CPU .................................................................................................................. 19

Hình 1.3 - Các dòng vi điều khiển PIC hiện nay ................................................................. 21

Hình 3.4 - Stack memory ................................................................................................... 40

Hình 3.5 - Giản đồ xung clock cấp cho CPU ...................................................................... 40

Hình 3.6 - Sơ đồ khối bộ dao động ..................................................................................... 42

Hình 3.7 - Sơ đồ kết nối nguồn xung bằng thạch anh .......................................................... 43

Hình 3.8 - Sơ đồ kết nối bộ tạo xung bằng mạch RC .......................................................... 44

Hình 3.9 - Nguồn xung bên ngoài....................................................................................... 44

Hình 4.1 - Cấu tạo LED 7 đoạn .......................................................................................... 52

Hình 4.2 - Nguyên lý hiển thị nhiều LED 7 đoạn ................................................................ 54

Hình 5.1 - Sơ đồ logic của ngắt trong PIC 18F4550............................................................ 56

Hình 6.1 - Sơ đồ mạch lập trình quét phím đơn .................................................................. 61

Hình 7.1 - Nguyên lý timer ................................................................................................ 66

Hình 7.2 - Điều chỉnh thời gian timer bằng thanh ghi giá trị ............................................... 67

Hình 8.1 - Sơ đồ phần cứng mạch thí nghiệm ..................................................................... 71

Hình 10.2 - Graphic LCD ................................................................................................... 76

Hình 10.3 - Giao diện LCD HD44780 ................................................................................ 77

Hình 11.1 - Analog - Digital ............................................................................................... 79

Hình 11.2 - Độ phân giải bộ chuyển đổi ADC 3 bit ............................................................ 79

Hình 13.1 - Nguyên lý phương pháp điều rộng xung .......................................................... 87

Hình 15.1 - Sơ đồ phần cứng của mạch thí nghiệm ............................................................. 97

Page 6: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 6

6 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

DANH SÁCH BẢNG BIỂU

Bảng 1.1 Một vài ứng dụng của vi điều khiển trong thực tế ............................................ 17

Bảng 2.1 Các kiểu dữ liệu trong C ................................................................................. 24

Bảng 2.2 Các cấu trúc lệnh trong C ................................................................................ 26

Bảng 2.3 Lưu đồ giải thuật của các cấu trúc lệnh trong C ............................................... 27

Bảng 2.4 Toán tử trong C ............................................................................................... 30

Bảng 2.5 Bảng so sánh mức độ ưu tiên của các toán tử: ................................................. 31

Bảng 3.1 Các thanh ghi hệ thống của PIC18F4620 (datasheet PIC18F4620 trg 251) ...... 46

Bảng 3.2 Các option về chip trong CCS ......................................................................... 47

Bảng 3.3 Các lựa chọn của tiền xử lý #FUSES ............................................................... 48

Bảng 3.4 Các lựa chọn của tiền xử lý #USE ................................................................... 49

Bảng 4.1 Bảng mã dành cho LED 7 đoạn Anode chung ................................................. 53

Bảng 4.2 Bảng mã dành cho LED 7 đoạn Cathode chung ............................................... 54

Bảng 5.1 Các cấp ngắt (level) ........................................................................................ 58

Bảng 6.1 Mức điện áp ở chế độ input ............................................................................. 65

Bảng 7.1 Các chế độ (mode) .......................................................................................... 69

Bảng 9.1 Các kiểu dữ liệu nâng cao trong C ................................................................... 73

Bảng 10.1 Bảng các định dạng cstring trong LCD ........................................................... 77

Bảng 11.1 Các trạng thái sử dụng của bộ chuyển đổi ADC trong CCSC .......................... 80

Bảng 11.2 Các trạng thái sử dụng của kênh ADC trong CCSC (PIC18F4620) .................. 81

Bảng 12.1 Các lựa chọn cài đặt cho USART trong CCSC ................................................ 84

Bảng 13.1 Một số chế độ hoạt động của CCP .................................................................. 88

Page 7: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 7

7 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

BỘ CHƯƠNG TRÌNH T ẠI BIGLAB

Bộ chương trình tại Nhóm Đào Tạo Kỹ Thuật BigLab được thiết kế nhằm cung cấp những kiến

thức bổ trợ cần thiết nhất cho các bạn học viên quan tâm tới lĩnh vực liên ngành Cơ khí – Điện tử -

Lập trình, hay còn gọi là Cơ điện tử.

BỘ CHƯƠNG TRÌNH ĐÀO TẠO TẠI BIGLAB

Cơ khí Điện tử Lập trình vi điều khiển

AutoCAD căn bản

SolidWorks căn bản

Thiết kế với AutoCAD

Thiết kế với SolidWorks

OrCAD căn bản

Điện tử thực hành

Điện tử ứng dụng

PIC Cơ bản

PIC Ứng dụng

PIC Full

PIC Full CCSC

PIC Full C18

ARM Total

PIC - Điều khiển động

PIC – Giao tiếp không

dâyPIC – C#

MỤC TIÊU: THIẾT KẾ HỆ THỐNG TỰ ĐỘNG

Điện tử KTS

Với mục tiêu trên, toàn bộ chương trình được chia làm 3 mảng lớn: Cơ khí, Điện tử, Lập trình.

� Cơ khí:

Ở mảng cơ khí, chương trình sử dụng 2 phần mềm thiết kế: SolidWorks và AutoCAD. Đây là

các phần mềm thông dụng với ưu điểm trực quan, tầm ứng dụng lớn, dễ sử dụng, rất thích hợp cho

các yêu cầu thiết kế cơ khí.

Các lớp về SolidWorks và AutoCAD được chia làm 2 cấp độ: Cơ bản và ứng dụng vào thiết kế

cơ khí.

Page 8: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 8

8 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

- Lớp cơ bản sẽ cung cấp những kiến thức cơ bản về các phần mềm, các phương pháp dựng

hình cơ bản. Đối tượng của lớp cơ bản là các bạn sinh viên năm 2, 3 lần đầu tiên tiếp xúc

với phần mềm

- Lớp thiết kế: Các bạn sẽ được học về phương pháp thiết kế, trình tự thiết kế trong cơ khí,

thiết kế theo trình tự gia công... Sau đó sẽ ứng dụng các kiến thức về phần mềm vào việc

thiết kế cơ khí. Đối tượng chính của lớp thiết kế là những ai đã biết về AutoCAD và

SolidWorks cơ bản, mong muốn sử dụng nó để thiết kế các chi tiết cơ khí.

� Điện tử:

- Lớp điện tử thực hành: Ở lớp này các bạn sẽ được học về các linh kiện điện tử cơ bản dựa

trên sự phân tích vai trò của chúng trong các mạch điện tử như mạch nguồn tuyến tính,

mạch khuếch đại, mạch nguồn xung... Trong chương trình còn tích hợp việc sử dụng các

phần mềm thông dụng trong điện tử như: phần mềm thiết kế mạch OrCAD, phần mềm mô

phỏng mạch Tina,...

- Lớp điện tử kỹ thuật số – vi điều khiển: là phần sau của lớp điện tử thực hành. Trong lớp

này các bạn sẽ được học từ các nguyên lý cơ bản của hệ thống xung, số đến việc thiết kế

hoàn chỉnh một mạch kỹ thuật số. Đặc biệt lớp cung cấp cho các bạn những kiến thức thiết

kế mạch giao liên quan tới vi điều khiển (PIC, ARM...) như mạch hiển thị LED, mạch giao

tiếp máy tính, mạch phím nhấn.... Chương trình có sử dụng các phần mềm điện tử như:

OrCAD, Circuit Maker, Proteus,...

- Lớp điện tử ứng dụng: Đây là lớp nâng cao trong mảng điện tử, cung cấp cho các bạn những

kiến thức phối hợp để có thể thiết kế một mạch điện tử.

� Lập trình nhúng:

Các lớp lập trình nhúng là một mảng lớn được quan tâm nhất của bộ chương trình tại BigLab.

Hiện tại BigLab có các chương trình lập trình cho vi điều khiển: PIC, ARM trong đó bộ chương

trình cho vi điều khiển PIC được thiết kế công phu và đã được thử nghiệm qua nhiều khóa học.

Chương trình PIC được thiết kế theo 2 hướng chính:

- Hướng đầy đủ trong 1 khóa:

Đó là các lớp PIC – Full. Đây là các lớp dạy đầy đủ về vi điều khiển PIC. Các bạn sẽ được học

từ hệ thống tới các module ngoại vi và sử dụng thành thạo ngôn ngữ C để lập trình cho các module

này. Trong hướng này chương trình được chia ra làm 2 hướng nhỏ dựa trên việc sử dụng 2 trình

biên dịch khác nhau: CCSC và C18.

Page 9: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 9

9 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

+ CCSC: Đây là trình biên dịch dễ sử dụng, không cần kiến thức chuyên sâu về hệ thống. Lớp

này thích hợp cho những bạn đã đi làm và mong muốn có kiến thức về lập trình vi điều khiển để sử

dụng trong công việc cụ thể.

+ C18: là trình biên dịch chuyên sâu của Microchip viết riêng cho dòng PIC18. Để sử dụng

trình biên dịch này đòi hỏi các bạn phải có kiến thức sâu về phần cứng vi điều khiển. Chính vì thế

sử thông qua việc lập trình các bạn sẽ hiểu rõ về hoạt động của vi điều khiển hơn, từ đó dễ dàng

tìm hiểu những dòng vi điều khiển khác (như ARM,...).

- Hướng PIC Cơ bản � Ứng dụng:

Đây là bộ chương trình lập trình vi điều khiển PIC được thiết kế đặc biệt dành cho các bạn sinh

viên, những người có đủ thời gian, lòng đam mê cũng như sự kiên nhẫn để theo đuổi và nắm vững

dòng vi điều khiển PIC. Lớp đầu tiên trong bộ này là lớp PIC – Cơ bản: lớp này sẽ cung cấp những

kiến thức cơ bản về lập trình C, vi điều khiển PIC, các nguyên lý hoạt động của vi điều khiển, và

các module hệ thống. Các lớp tiếp theo của chương trình là các lớp ứng dụng vi điều khiển vào

việc giải quyết các bài toán thực tế như điều khiển động cơ, giao tiếp máy tính, giao tiếp không

dây... ở các lớp này các bạn sẽ được học các module ngoại vi tương ứng, sau đó sẽ ứng dụng các

module này vào thực tế công việc.

Toàn bộ chương trình này được thiết kế sử dụng trình biên dịch C18, là một trình biên dịch

chuyên sâu do Microchip phát triển chuyên dụng cho dòng vi điều khiển PIC18F.

� Lớp học ĐỒNG HÀNH, buồi nói chuyện chuyên đề:

Ngoài những chương trình cố định trên Nhóm còn thuờng xuyên mở các lớp học ĐỒNG HÀNH

(miễn phí) và chủ nhật hằng tuần. Đây là nơi các bạn có có hội học tập miễn phí, gặp gỡ giao lưu

và có cơ hội tìm hiểu thêm về lĩnh vực mình đang theo đuổi.

Bên cạnh các buổi học ĐỒNG HÀNH là các buổi nói chuyện chuyên đề chia sẻ kinh nghiệm

học tập, cập nhật kiến thức công nghệ... cũng được tổ chức thường xuyên.

Đây là các chương trình được các Giảng viên trường Đại Học Bách Khoa TPHCM thực hiện

nhằm tạo một không khí gặp gỡ giao lưu, kết nối với toàn thể các bạn sinh viên kỹ thuật để cùng

tạo dựng một cồng đồng vững mạnh hơn trong lĩnh vực kỹ thuật điều khiển tự động.

Mọi thắc mắc xin liên hệ website chính thức của nhóm: www.biglab.edu.vn hoặc thông qua

diễn đàn: www.dieukhienvietnam.com

Page 10: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 10

10 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

ĐỀ CƯƠNG CHƯƠNG TRÌNH PIC - CCSC

I. MỤC TIÊU VÀ ĐỐI TƯỢNG 1. Đối tượng khóa học

Đối tượng chính của khóa học dành cho những ai muốn làm quen và đi đến nắm vững vi

điều khiển PIC, ứng dụng PIC cho các công việc điều khiển, giao tiếp.

2. Mục tiêu khóa học:

Hoàn thành khóa học học viên sẽ:

- Nắm được tổng quan các chức năng trong các dòng vi điều khiển của hãng Microchip và cách lựa chọn dòng vi điều khiển phù hợp.

- Hiểu rõ vi điều khiển PIC - Nắm được cách sử dụng các modul của dòng vi điều khiển PIC18F, đọc và hiểu datasheet để sau này có thể dễ dàng tiếp cận những dòng vi điều khiển khác.

- Lập trình sử dụng tất cả các module của vi điều khiển bằng ngôn ngữ C. - Mô phỏng chương trình và hiện thực trên kit thí nghiệm. - Được sự tư vấn, hỗ trợ trực tiếp từ các thạc sĩ, kỹ sư có kinh nghiệm trong và sau khóa học. II. NỘI DUNG CHƯƠNG TRÌNH

Chương trình xây dựng dựa trên dòng vi điều khiển PIC18 của hãng Microchip. Ngôn ngữ lập

trình sử dụng: CCSC. Dòng vi điều khiển sử dụng thí nghiệm là PIC18F4620 và PIC18F4550.

Chương trình sẽ cung cấp cho học viên những kiến thức về vi điều khiển PIC từ cơ bản tới nâng

cao. Giúp học viên thực hành thành thạo việc sử dụng các module chức năng trong vi điều khiển,

tiến tới ứng dụng vi điều khiển PIC để giải quyết các vấn đề thực tế. Chương trình cũng có nhiều

bài tập thực hành thực tế liên quan.

- Buổi 1: Những khái niệm cơ bản về vi điều khiển o Vi điều khiển là gì? Những dòng vi điều khiển có trên thị trường o Cấu trúc phần cứng vi các dòng vi điều khiển cơ bản o Giới thiệu phần mềm sử dụng, kit thí nghiệm, bộ thí nghiệm PIC o Bổ túc kỹ thuật lập trình C cho vi điều khiển

� Các hệ số đếm � Biến và hằng

- Buổi 2: Bổ túc kỹ thuật lập trình C cho vi điều khiển (tt) o Con trỏ, mảng o Cấu trúc lệnh

� Cấu trúc điều kiện � Cấu trúc lặp � Cấu trúc lựa chọn

o Hàm

Page 11: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 11

11 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

o Toán tử o Cấu trúc và cách thực thi chương trình C o Những kiến thức căn bản về tổ chứ bộ nhớ PIC

- Buổi 3: Tổ chức phần cứng của PIC o Thanh ghi hệ thống o Các vấn đề liên quan tới bộ dao động, tiền xử lý o Giới thiệu các module của vi điều khiển o Bài tập: Các chỉ thị tiền xử lý o Giới thiệu các phần mềm và ngôn ngữ sử dụng

� Trình biên dịch C complier � C complier và MPLAB � Proteus và mô phỏng bằng Proteus

- Buổi 4: Các module căn bản của vi điều khiển PIC o Lý thuyết:

� Tổ chức phần cứng � Các thanh ghi điều khiển PORT

o Bài tập: � Lập trình xuất led đơn

- Buổi 5: Các module căn bản của vi điều khiển PIC (tt) o Bài cũ:

� Lập trình hiển thị led 7 đoạn o Lý thuyết:

� Tổ chức phần cứng của interrupt � Các thanh ghi điều khiển interrupt trong PIC

o Bài tập về nhà: � Lập trình sử dụng đọc phím đơn bằng ngắt ngoài

- Buổi 6: Các module căn bản của vi điều khiển PIC (tt) o Bài cũ:

� Lập trình đọc số lần nhấn phím hiển thị ra led 7 đoạn o Lý thuyết:

� Các thanh ghi điều khiển input o Bài tập:

� Lập trình đọc 4 phím đơn (sử dụng phương pháp quét) o Bài tập về nhà:

� Lập trình đọc 4 phím đơn bằng phương pháp ngắt RB - Buổi 7: Các module căn bản của vi điều khiển PIC (tt)

o Bài cũ: � Lập trình quét phím ma trận

o Lý thuyết: � Tổ chức phần cứng timer � Các thanh ghi điều khiển timer trong PIC � Watch Dog Timer (WDT)

o Bài tập: � Lập trình sử dụng timer để tạo hàm delay

Page 12: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 12

12 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

- Buổi 8: Các module căn bản của vi điều khiển PIC (tt) o Bài cũ:

� Lập trình dùng hàm delay để điều khiển I/O Port o Bài tập giữa khoá: Học viên chọn 1 trong 2 bài tập sau để làm tại lớp, các bài còn

lại làm ở nhà � Bài tập 1: Lập trình hiện thực đồng hồ số � Bài tập 2: Lập trình hiện thực máy tính bỏ túi đơn giản

- Buổi 9: LCD – Các hàm thao tác trên chuỗi và hàm chuyển đổi dữ liệu trong C o Các kiểu dữ liệu mở rộng o Tương tác với các hàm trong thư viện C o Hàm chuyển đổi kiểu dữ liệu o Hàm xử lý chuỗi o LCD

� Kiến trúc phần cứng LCD � Các thanh ghi, các chế độ làm việc của LCD � Tập lệnh LCD

o Bài tập: � Hiển thị dữ liệu vừa nhập ra LCD

o Bài tập về nhà: � Nhập dữ liệu số từ nút nhấn, hiển thị dữ liệu vừa nhập ra LCD

- Buổi 10: Timer ngoại vi – Counter – Realtime timer o Giới thiệu các timer ngoại vi: timer 1, 2, 3 o Counter o Realtime timer

� Tổ chức phần cứng của mạch thời gian thực dùng thạch anh 32k o Bài tập:

� Lập trình đếm xung encoder dùng counter o Bài tập về nhà:

� Thiết kế đồng hồ thời gian thực dùng thạch anh thời gian thực và timer 1/3 - Buổi 11: ADC

o Cơ bản về nguyên lý bộ chuyển đổi Analog – Digital o Những thông số đặc trưng của bộ chuyển đổi o Cấu trúc bộ ADC trong PIC o Bài tập:

� Đọc giá trị biến trở VR � Hiển thị giá trị điện trở hiện thời của VR ra LCD

o Bài tập về nhà: Thiết kế hệ thống giám sát nhiệt độ phòng � Đọc ADC từ cảm biến nhiệt độ � Dùng Timer để cài đặt thời gian lấy mẫu � Hiển thị giá trị nhiệt độ ra LCD

- Buổi 12: UART – giao tiếp nối tiếp bất đồng bộ o Chuẩn giao tiếp nối tiếp

� Chuẩn giao tiếp nối tiếp là gì, các ứng dụng � Các thông số đặc trưng của chuẩn giao tiếp nối tiếp RS232

Page 13: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 13

13 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

o UART trong PIC � Chương trình truyền nhận trên PIC � Giới thiệu về giao tiếp máy tính qua RS232

o Bài tập: � Giao tiếp PIC – Máy tính: giám sát nhiệt độ phòng bằng đồ thị trên máy tính

- Buổi 13: PWM/Capture/Compare o PWM/Capture/Compare

� Nguyên lý, ứng dụng? � Các thông số đặc trưng

o PWM/Capture/Compare trong PIC � Thực hành điều chế xung PWM, các chức năng Capture, Compare trên kit

thí nghiệm o Bài tập:

� Điều khiển vận tốc động cơ DC dùng PWM có giám sát vận tốc bằng máy tính

o Bài tập về nhà: � Điều khiển vận tốc động cơ có hồi tiếp dùng encoder

- Buổi 14: Bài tập tổng kết: o Thiết kế hệ thống giám sát tốc độ quạt làm mát, tự động điều chỉnh tốc độ theo

nhiệt độ. � Điều khiển động cơ bằng PWM có hồi tiếp encoder � Đọc ADC từ cảm biến nhiệt độ để cập nhật giá trị vận tốc � Hiển thị nhiệt độ, tốc độ ra LCD ở dòng trên, dòng dưới là thời gian động cơ

hoạt động (tính bằng giờ, phút, giây) � Mỗi 1 phút lưu giá trị vào EEPROM (optional)

- - Buổi 15: SPI – giao tiếp nối tiếp đồng bộ; Các phương pháp lưu trữ dữ liệu

o Chuẩn giao tiếp SPI � Chuẩn giao tiếp SPI là gì, các ứng dụng? � Các thông số đặc trưng của chuẩn giao tiếp SPI

o SPI trong PIC � Tổ chức phần cứng � Tập lệnh tương tác với EEPROM � Khái niệm về chuẩn giao tiếp I2C và các phương pháp lưu trữ dữ liệu.

o Bài tập: � Lưu và đọc dữ liệu từ EEPROM ngoài qua SPI

o Bài tập mở rộng: � Lập trình mô phỏng giao tiếp giữa 2 VĐK PIC dùng SPI

o Tổng kết khóa học III. CÁC CHUYÊN ĐỀ ỨNG DỤNG KÈM THEO SAU KHÓA H ỌC 1. Chuyên đề 1: Điều khiển động cơ bước – cơ cấu visme-đai ốc bi 2. Chuyên đề 2: Điều khiển vận tốc động cơ DC có hồi ti ếp 3. Chuyên đề 3: Các chuẩn giao tiếp không dây (phần 1) 4. Chuyên đề 4: Các chuẩn giao tiếp không dây (phần 2)

Page 14: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 14

14 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

5. Chuyên đề 5: Điều khiển 2 động cơ DC phối hợp (bàn máy 2D) 6. Chuyên đề 6: chuyên đề phối hợp: Robot 2 bánh, Robot dò line. 7. Chuyên đề 7: chuyên đề phối hợp: Con lắc ngược 8. Chuyên đề 8: chuyên đề phối hợp: Xe 2 bánh tự cân bằng 9. Chuyên đề 9: Điều khiển động cơ không chổi than – điều khiển lực nâng quạt 10. Chuyên đề 10: Điều khiển 2 động cơ không chổi than – cân bằng 2 cánh quạt 11. Chuyên đề 11: chuyên đề phối hợp: Quad – Rotor IV. TÀI LI ỆU VÀ THI ẾT BỊ HỌC TẬP 1. Tài li ệu học tập - Tài liệu học tập chính do trung tâm cung cấp - Các tài liệu tham khảo sẽ được giới thiệu trong từng buổi học 2. Thiết bị học tập - Máy tính Laptop – do học viên tự trang bị - Kit thí nghiệm – do trung tâm cung cấp - Mạch nạp, nguồn và những linh kiện khác – do trung tâm cung cấp

Page 15: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 15

15 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

PHẦN BÀI GI ẢNG

PIC - EXPRESS

Page 16: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 16

16 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 1 : NHỮNG KHÁI NI ỆM BAN ĐẦU

Bài 1 giới thiệu tổng quan về khái niệm và lịch sử ra đời, phát triển vi điều khiển. Sự khác nhau

và giống nhau giữa vi điều khiển và vi xử lý, kiến trúc điển hình của một vi điều khiển. Bài 1 cũng

giới thiệu về lịch sử, kiến trúc của dòng vi điều khiển PIC. Tác giả cũng đi sâu phân tích các tiêu

chí lựa chọn dòng vi điều khiển cho các ứng dụng cụ thể. Từ đó đưa ra lý do vì sao vi điều khiển

PIC là một sự lựa chọn hợp lý trong hoàn cảnh hiện nay.

1.1 VI ĐIỀU KHI ỂN LÀ GÌ

1.1.1 Vài nét về lịch sử

Những thập kỷ cuối của thế kỷ XX, với sự phát triển của công nghệ bán dẫn, kỹ thuật điện tử có

những bước phát triển vượt bậc. Ngày càng có nhiều linh kiện được tích hợp trong một thể tích

nhỏ hơn. Những thiết bị này gọi là các vi mạch tích hợp.

Năm 1971 Intel cho ra đời bộ vi xử lý đầu tiên, chip 4004, chứa 2300 transistor. Sự kiện này

được xem như là một bước đột phá về công nghệ. Với sự phát triển không ngừng, ngày nay số

transitor tích hợp trong vi xử lý đã lên con số hàng chục triệu (bộ vi xử lý Penltum 4 chứa 55 triệu

transistor).

Như vậy vi xử lý mà một mạch tích hợp chứa hàng ngàn thậm chí hàng triệu transitor kết nối

với nhau. Các transistor đó cùng nhau làm việc để tính toán, xử lý, lưu trữ… Chức năng cụ thể của

vi xử lý được xác định bằng phần mềm.

1.1.2 Từ vi xử lý tới vi điều khiển

Vi xử lý chỉ có tác dụng tính toán, để thực hiện một chức năng nào đó cụ thể (ví dụ điều khiển

động cơ…) vi xử lý phải được kết nối với các thiết bị, cụ thể là các mạch điện bên ngoài. Hệ thống

dù lớn hay nhỏ, nếu dùng vi xử lý thì cũng đòi hỏi các khối mạch điện giao tiếp phức tạp như

nhau. Các khối này bao gồm bộ nhớ để chứa dữ liệu và chương trình thực hiện, các mạch điện giao

tiếp ngoại vi để xuất nhập và điều khiển trở lại, các khối này cùng liên kết với vi xử lý thì mới thực

hiện được công việc. Để kết nối các khối này đòi hỏi người thiết kế phải hiểu biết tinh tường về

các thành phần vi xử lý, bộ nhớ, các thiết bị ngoại vi. Hệ thống được tạo ra khá phức tạp, chiếm

nhiều không gian, mạch in phức tạp. Và để thực hiện việc nay yêu cầu trình độ người thiết kế phải

cao. Kết quả là giá thành sản phẩm cuối cùng rất cao, không phù hợp để áp dụng cho các hệ thống

nhỏ.

Chính vì yêu cầu đó vi điều khiển ra đời. Vi điều khiển là sự tích hợp một ít bộ nhớ và một số

mạch giao tiếp ngoại vi cùng với vi xử lý vào một IC duy nhất. Vi điều khiển có khả năng tương tự

Page 17: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 17

17 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

như khả năng của vi xử lý, nhưng cấu trúc phần cứng dành cho người dùng đơn giản hơn nhiều. Vi

điều khiển ra đời mang lại sự tiện lợi đối với người dùng, họ không cần nắm vững một khối lượng

kiến thức quá lớn như người dùng vi xử lý. Thêm vào đó, kết cấu mạch điện dành cho người dùng

cũng trở nên đơn giản hơn nhiều, và có khả năng giao tiếp trực tiếp với các thiết bị bên ngoài. Và

dĩ nhiên vì thế giá thành của vi điều khiển cũng rẻ hơn nhiều so với vi xử lý. Nhưng thay cho

những lợi điểm này là khả năng xử lý bị giới hạn (tốc độ xử lý chậm hơn và khả năng tính toán ít

hơn, dung lượng chương trình bị nhỏ hơn).

Với những ưu điểm đó, ngày nay, vi điều khiển riêng lẻ được sử dụng rộng rãi vào nhiều ứng

dụng có chức năng đơn giản, không đòi hỏi tính toán phức tạp. Với sự tích hợp nhiều chuẩn giao

tiếp khác nhau, các vi điều khiển có khả năng kết nối với nhau để tạo thành một hệ thống lớn khi

yêu cầu độ phức tạp về hệ thống tăng lên. Do đó vi điều khiển là thành phần không thể thiếu trong

các hệ thống số dù lớn hay nhỏ mà có khả năng lập trình.

1.1.3 Ứng dụng của vi điều khiển

Như đã nói ở trên, vi điều khiển được ứng dụng nhiều trong các hệ thống vừa phải. Những hệ

thống này có thể kể đến như: các thiết bị gia đình, các thiết bị văn phòng, các ứng dụng công

nghiệp nhỏ, đồ chơi…Một vài ứng dụng vi điều khiển được cho ở bảng sau:

Bảng 1.1 Một vài ứng dụng của vi điều khiển trong thực tế

Thiết bị gia đình Đồ điện trong nhà

Lò vi sóng

Cửa tự động

Dụng cụ thể thao

Tivi

VCR

Camera

Điều khiển từ xa

Trò chơi điện tử

Nhạc cụ điện tử

Điều hòa nhiệt độ

Đồ chơi trẻ em

Thiết bị văn phòng Điện thoại

Máy Fax

Máy photocopy

Máy tính cá nhân

Hệ thống an ninh

Máy in …

Thiết bị công nghiệp Điều khiển động cơ

Thiết bị ABS

Hệ thống đo lường

Điều khiển chiếu sang

Page 18: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 18

18 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

1.2 TỔNG THỂ KIẾN TRÚC PHẦN CỨNG VI ĐIỀU KHI ỂN

1.2.1 Ki ến trúc tổng thể của một vi điều khiển

Hình 1.1 - Sơ đồ khối kiến trúc tổng thể một hệ máy tính

Một hệ máy tính cơ bản bao gồm: bộ xử lý trung tâm (CPU), thiết bị tao dao động (bộ dao

động), bộ nhớ, các điều khiển, cổng xuất nhập và các thiết bị ngoại vi (Hình 1.1). Toàn bộ các

thành phần này được kết nối với nhau thông qua các BUS. Trong một hệ máy tính, tùy theo chức

năng sử dụng mà BUS được chia làm 3 loại: BUS địa chỉ (Address BUS), BUS dữ liệu (Data

BUS) và BUS điều khiển (Control BUS). Chi tiết hơn về các thành phần được trình bày sau đây.

1.2.2 Ki ến trúc các thành phần

1.2.2.1 Bộ xử lý trung tâm (CPU)

CPU là đầu não tính toán của toàn bộ hệ thống, quản lý tất cả các hoạt động của hệ và thực hiện

tất cả các thao tác trên dữ liệu. Hầu hết các CPU chỉ bao gồm một tập các mạch logic thực hiện

liên tục 2 thao tác: tìm nạp lệnh và thực thi lệnh. Thực tế việc tính toán trong CPU đơn thuần chỉ là

các phép toán số học trên hệ cơ số 2 được thực hiện trong bộ tính toán số học ALU. Control Unit

trong CPU có nhiệm vụ tìm lệnh từ các thanh ghi và nạp lệnh cho bộ tính toán ALU xử lý (Hình

1.2)

Page 19: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 19

19 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Hình 1.2 - CPU

1.2.2.2 Bộ nhớ

Đây là một tập hợp các ô nhớ, mỗi ô có một số bit nhất định và chứa một thông tin được mã hóa

thành số nhị phân mà không quan tâm tới kiểu của thông tin. Các thông tin này có thể là lệnh hay

dữ liệu. Mỗi ô nhớ đều có một địa chỉ. Thời gian truy cập vào mỗi ô nhớ là như nhau, vì vậy bộ

nhớ này còn có tên là bộ nhớ truy cập ngẫu nhiên (RAM). Mỗi ô nhớ thường là 8bit, bất kể độ dài

của từ nhớ trong thiết bị là bao nhiêu.

Tuy nhiên bộ nhớ RAM chỉ được sử dụng khi chương trình thực thi. Trong trường hợp chương

trình dừng thực thi vì một lý do gì đó (hệ thống shutdown, mất điện…) thì bộ nhớ này sẽ tự động

giải phóng. Chính vì thế, để lưu trữ các thông tin cần thiết như chương trình, dữ liệu quan trọng

cần thêm một bộ nhớ chỉ đọc ROM.

Trong vi điều khiển có 2 loại bộ nhớ: Bộ nhớ dữ liệu và bộ nhớ chương trình tương ứng với bộ

nhớ RAM, ROM trong cấu trúc trên.

Bộ nhớ dữ liệu(RAM, hay data memory): Là không gian nhớ dùng lưu trữ dữ liệu của chương

trình khi chương trình thực thi.

Bộ nhớ chương trình (program memory): đây là một dạng ROM, tuy nhiên trong vi điều khiển

ROM là bộ nhớ có cho phép truy xuất, thay đổi vì vậy được gọi là EEPROM (Electrically Erasable

Programmable Read-Only Memory).

1.2.2.3 Bộ tạo dao động

Bộ tạo dao động là phần không thể thiếu của một hệ thống số. Đây là nguồn cấp xung nhịp

đồng bộ cho toàn bộ hoạt động của hệ thống. Hầu hết các vi điều khiển hiện nay đều được trang bị

bộ dao động nội, nghĩa là bộ tạo dao động được đóng gói bên trong chip. Tuy nhiên bộ dạo động

bên trong vi điều khiển thường có xung nhịp thấp. Vì thế xu hướng hiện nay trong thiết kế mạch

Page 20: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 20

20 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

cho vi điều khiển người ta thường dùng bộ dao động từ bên ngoài. Vấn đề này sẽ được nói rõ ở bài

3.

1.2.2.4 Bộ định thời (timer)

Các ứng dụng điều khiển thông thường đều liên quan tới thời gian. Chính vì thế bộ định thời là

một phần không thể thiếu trong các vi điều khiển. Bộ định thời thông thường dùng để: định thời

một khoảng thời gian, đếm sự kiên, tạo xung…

1.2.2.5 Bộ điều khiển ngắt (Interrupt Control)

Ngắt là hành động dừng một chương trình đang thực thi để thực hiện chương trình chỉ định ngắt

khi có một tín hiệu báo ngắt. Bộ ngắt là một mạch logic mục đích là tạo ra một xung kích hoạt ngắt

(tín hiệu báo ngắt) cho CPU. Ngắt là một phần vô cùng quan trọng trong vi điều khiển. Nó giúp

cho người lập trình có nhiều sức mạnh hơn trong việc thiết kế một ứng dụng. Một chương trình

được điều khiển bởi ngắt làm cho ta có cảm giác có nhiều ứng dụng đang chạy song song, trên

thực tế là chúng chạy nối tiếp nhau.

1.2.2.6 Các thiết bị ngoại vi

Thiết bị ngoại vi ở đây được hiểu là những module chức năng tích hợp sẵn trong vi điều khiển.

Các module này ở từng dòng vi điều khiển là khác nhau tùy theo dòng vi điều khiển đó được thiết

kế dành cho các ứng dụng phổ thông hay một vài ứng dụng đặc biệt nào đó. Các module đó bao

gồm: ADC, UART, SPI, I2C, PWM, Capture, Compare…

1.2.2.7 Các chân xuất nhập

Các chân xuất nhập là các chân chức năng chính của vi điều khiển. Đây được xem là ngõ ra

chức năng của vi điều khiển được dùng trực tiếp để thiết kế các ứng dụng điều khiển. Hãy tưởng

tượng các chân xuất nhập như tay, chân của một con người nếu thiếu tay chân thì con người đó sẽ

không thể có được một thao tác nào cả.

1.2.2.8 BUS

BUS là một tập hợp các dây mang thông tin có cùng một mục đích. CPU sử dụng 3 BUS để

truy xuất tới các thành phần xung quanh: BUS dữ liệu, BUS điều khiển và BUS địa chỉ.

Đặc trưng quan trọng nhất của BUS đó là số bit. Số bit là số dây mang thông tin đồng thời của

một BUS. Số bit của BUS địa chỉ quy định độ lớn của bộ nhớ mà CPU có thể truy xuất được. Số

bit của BUS dữ liệu quy định độ lớn của một ô dữ liệu trong bộ nhớ. Số bit của BUS điều khiển

phụ thuộc vào thiết bị cần điều khiển. Vì máy tính thường dùng tới khoảng 2/3 thời gian cho việc

Page 21: Pic Ccs Full

21 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

di chuyển các dữ liệu trên các BUS nên độ rộng của BUS (hay số bit) là rất quan trọng đối với hiệu

suất cũng như tốc độ của máy. Tốc độ của máy tính sẽ tăng khi số bit của BUS tăng lên.

1.3 LỰA CHỌN DÒNG VI ĐIỀU KHI ỂN

Kể từ khi ra đời đến nay có rất nhiều dòng vi điều khiển của nhiều hãng khác nhau ra đời. Sau

đây là một vài dòng cơ bản, xếp theo trình tự thời gian: 8611 của Motorola, 8051 của Intel, Z8 của

Zilog, AVR của Atmel, PIC của Microchip. Đây là các dòng vi điều khiển 8bit cơ bản. Ngoài ra

còn có các dòng vi điều khiển 16 bit, 32 bit (PIC30F, 33F (dòng 16 bit), PIC32(dòng 32

bit)…(hình 1.3)

Chính vì có rất nhiều dòng vi điều khiển khác nhau như vậy nên việc lựa chọn vi điều khiển sử

dụng cần phải được xem xét. Về cơ bản có 3 tiêu chuẩn chính để lựa chọn sử dụng dòng vi điều

khiển nào:

� Đáp ứng yêu cầu công việc một cách hiệu quả và kinh tế

� Có sẵn các công cụ phát triển phần mềm, nhà cung cấp linh kiện phần cứng…

� Có nguồn cung cấp tài liệu để học và phát triển tin cậy.

Hình 1.3 - Các dòng vi điều khiển PIC hiện nay

1.4 CÁC NGÔN NGỮ LẬP TRÌNH CHO VI ĐIỀU KHI ỂN

Để lập trình cho vi điều khiển có các ngôn ngữ cơ bản sau:

Page 22: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 22

22 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

� Ngôn ngữ máy: là dạng ngôn ngữ nhị phân (thường được biết đến với tên gọi là bìa

đục lỗ). đây là dạng ngôn ngữ mà máy tính sử dụng trong hệ thống cho nên không cần

có trình biên dịch. Tuy nhiên lập trình với ngôn ngữ này là hết sức khó khăn và với

những chương trình lớn ngày nay thì điều này là hầu như không thể.

� Hợp ngữ (Assembly): Đây là một tập hợp các mã gợi nhớ để thực hiện một chức năng

nào đó. Hợp ngữ là ngôn ngữ lập trình gần với ngôn ngữ máy nhất và mỗi dòng vi điều

khiển đều luôn có một tập lệnh hợp ngữ nhất định. Nhà sản xuất cũng bắt buộc phải

có một trình biên dịch hợp ngữ dành riêng cho dòng vi điều khiển đó.

� Ngôn ngữ cấp cao: Hầu hết các ngôn ngữ cấp cao dành cho các vi điều khiển đều dừng

lại ở ngôn ngữ C. Tuy nhiên ở mỗi cấp độ khác nhau ngôn ngữ C cũng chia ra nhiều

dạng khác nhau. Với PIC chúng ta có thể có những trình biên dịch ngôn ngữ C dành

riêng như sau:

• CCSC

• Mikro C

• Hi-Tech C

• C18, C30, C32

Bộ trình biên dịch C18, C30, C32, … là bộ trình biên dịch được hãng Microchip thiết kế chuyên

dụng để lập trình cho vi điều khiển PIC và nó được đưa ra khi một dòng vi điều khiển PIC nào đó

ra đời. Chính vì đặc điểm này các trình biên dịch này rất phù hợp với việc lập trình cho dòng vi

điều khiển mà nó hỗ trợ. Đây là một dạng ngôn ngữ thao tác trên phần cứng, có thể can thiệp vào

cấp thanh ghi của vi điều khiển để quy định chức năng của từng module căn bản trong vi điều

khiển. Đồng thời ngôn ngữ cũng hỗ trợ các hàm tính toán, cách khai báo, các cấu trúc lệnh của

ngôn ngữ C căn bản. Điều này giúp người lập trình dễ dàng hơn rất nhiều so với việc sử dụng hợp

ngữ mà vẫn đảm bảo hiểu rõ được cách thức làm việc của vi điều khiển ở mức thanh ghi.

Page 23: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 23

23 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 2 : KỸ THUẬT LẬP TRÌNH C

Bài 2 bàn về các vấn đề cơ bản của lập trình C dựa trên ANSI C và ứng dụng của nó trong bộ

trình dịch MPLAB - CCSC.

2.1 KHÁI QUÁT NGÔN NG Ữ C

2.1.1 Các hệ số đếm

� Hệ nhị phân: Hệ số dùng các ký số “0” và “1” để biểu diễn số. VD: 1101, 1001 …

� Hệ thập phân:Hệ số dùng các ký số từ “0” đến “9” để biểu diễn số. Các con số này

được dùng cùng với dấu “.” để phân cách phần thập phân và phần nguyên. Ngoài ra,

để phân biệt số âm và số dương người ta còn thêm dấu “-“ và d ấu “+” tr ước ký số.

VD: 15; 12.96; -902.6 …

� Hệ thập lục phân: Hệ số dùng các ký số “0” đến “9” cùng các ký tự “A” đến “F” để

biểu diễn số.

VD: 9AF; 6BC …

� Cách chuyển đổi ký số: (GV hướng dẫn tại lớp)

2.1.2 Biến, hằng, mảng

2.1.2.1 Biến

Biến được ví như mạch máu trong chương trình truyền dữ liệu từ hàm này sang hàm khác. Một

biến được đặc trưng bởi 2 đặc tính: kiểu biến và tầm vực của biến. Bảng dưới đây liệt kê các kiểu

biến được hỗ trợ trong C:

Biến : <kiểu dữ liệu> <tên biến> = <giá trị>;

Phần khai báo giá trị có thể cần hoặc không.

� Tầm vực truy xuất biến:

• Biến toàn cục:

o Biến toàn cục là biến xuất hiện khi chương trình thực thi, tồn tại suốt trong thời gian chương trình thực thi chỉ được giải phóng khi chương trình kết thúc.

o Tất cả các hàm trong chương trình đều có thể truy xuất giá trị của biến toàn cục o Biến toàn cục được khai báo đầu chương trình trong phần khai báo biến

• Biến địa phương:

Page 24: Pic Ccs Full

24 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

o Biến địa phương là biến xuất hiện khi đoạn chương trình chứa biến địa phương thực thi, giải phóng khi đoạn chương trình đó kết thúc.

o Chỉ chương trình con, đoạn chương trình chưa biến địa phương mới được truy xuất biến

o Biến địa phương được khai báo trong đoạn chương trình, chương trình con

� Ki ểu biến:

Bảng 2.1 Các kiểu dữ liệu trong C

2.1.2.2 Hằng

Hằng số trong C có ý nghĩa theo đúng hằng số toán học. Có nghĩa là giá trị của hằng số không

thay đổi trong suốt quá trình chương trình thực thi.Hằng số luôn có tầm vực toàn cục.

Để khai báo hằng số thuộc một kiểu dữ liệu nào đó ta thêm từ khóa “const” vào phía trước từ

khóa quy định kiểu dữ liệu.

Hằng: const <kiểu dữ liệu> <tên hằng> = <giá trị>;

Bắt buộc phải có phần khai báo giá trị.

VD: const int8 a = 10;

2.1.2.3 Mảng

� Khai báo mảng hằng số:

Page 25: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 25

25 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

const<kiểu dữ liệu mảng><tên mảng>[<kích thước mảng>] = {<giá trị các phần tử

mảng>};

VD: const int8 vidu[2] = {1,2};

• Lưu ý:

• Những phần tử nào chưa được đặt giá trị sẽ mặc định giá trị là 0

• Truy xuất giá trị vượt quá kích thước mảng sẽ làm chương trình chạy vô tận

• Mảng hằng số thường dùng làm bảng tra (ví dụ bảng tra các hàm lượng giác)

� Khai báo biến mảng:

Khai báo tương tự khai báo mảng hằng số.Tuy nhiên không có từ khóa const và không cần cài

đặt giá trị cho các phần tử của mảng (mặc định giá trị đầu sẽ là giá trị mặc định của kiểu dữ liệu

mảng).

Một số lưu ý về kích thước:

• Kích thước mảng phụ thuộc vào khai báo con trỏ và loại VDK

• PIC18F Kích thước biến mảng không giới hạn. Nếu khai báo con trỏ 8 bit thì biến

mảng tối đa là 256 byte, nếu là 16 bit thì toàn bộ không gian bộ nhớ RAM

• Một số lưu ý khi sử dụng biến, mảng, hằng số:

• Tràn số: Sự tràn số xảy ra khi khai báo kiểu dữ liệu nhỏ hơn phạm vi số sử dụng. Lúc

đó trình biên dịch sẽ làm tròn số theo cách vòng tuần hoàn:

VD: int8 a = 260;

Khi biên dịch giá trị a được làm tròn như sau: a = 260-256 = 4

• Tính toán với số âm: Khi tính toán với số âm bắt buộc ta phải khai báo kiểu dữ liệu là

số có dấu (mặc định là không dấu) nếu không sẽ gặp kết quả tương tự như trường hợp

tràn số.

• Chuyển kiểu và ép kiểu

unsigned char a =8 , b=200; Int c; c= (int16) a * b;

Page 26: Pic Ccs Full

26 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Ở đoạn code trên ta đã ép kiểu dữ liệu của phép nhân 2 số 8 bit thành một số 16 bit. Việc này sẽ

tránh lỗi tràn số cho phép nhân, đồng thời tiết kiệm bộ nhớ, giảm thời gian tính toán (vì nếu không

phải khai báo lại các biến a, b)

2.1.3 Cấu trúc lệnh

Nếu như biến, hằng, mảng trong chương trình được ví như hệ tuần hoàn, nơi lưu chuyển máu

(dữ liệu) trong chương trình thì các cấu trúc lệnh được ví như hệ thần kinh, là hệ thống điều khiển

dòng máu (dữ liệu đó). Mọi hoạt động trong chương trình đều dựa trên sự điều khiển của các cấu

trúc lệnh này.

Cấu trúc lệnh cơ bản đầu tiên cũng là nguyên tắc của lập trình C: Chương trình sẽ thực hiện lần

lượt các lệnh theo thứ tự từ trên xuống dưới. Nghĩa là nếu không có sự điều khiển nào khác thì

dòng lệnh nào đứng trước sẽ được biên dịch và thực hiện trước, dòng nào đứng sau sẽ được biên

dịch và thực hiện sau.

Ngoài ra để giúp cho người lập trình dễ dàng điều khiển các dòng dữ liệu trong chương trình, C

còn cung cấp những cấu trúc lệnh nâng cao (được cho trong bảng 2.2)

2.1.3.1 Cú pháp

Bảng 2.2 Các cấu trúc lệnh trong C

Ứng với những cấu trúc lệnh nâng cao này là những đoạn sơ đồ giải thuật đặc trưng của nó.

2.1.3.2 Giải thuật

Lưu đồ giải thuật là lưu đồ thể hiện dòng di chuyển dữ liệu và các thao tác xử lý dữ liệu trong

chương trình. Những quy tắc chung về cách thể hiện lưu đồ giải thuật giúp người lập trình có thể

Page 27: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 27

27 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

dễ dàng hiểu và hiện thực chúng dưới dạng các dòng lệnh. Một giải thuật tổng thể được hình thành

dựa trên những cụm giải thuật con, mỗi cụm giải thuật con này ứng với một dạng cấu trúc điều

khiển. Sau đây sẽ trình bày những dạng giải thuật của các cấu trúc điều khiển trong C:

Bảng 2.3 Lưu đồ giải thuật của các cấu trúc lệnh trong C

Cấu trúc Giải thuật

If…

If … else…

Page 28: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 28

28 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Switch…case…

Đk = đk1?

Start

Công việc 1

Stop

Sai

Đúng Đk = đk2?

Đk = đk(n)?

Công việc 2

Công việc n

���.....

While…

Page 29: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 29

29 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Do…while…

For…

Đk chỉ số?

Start

Stop

Sai

Đúng

Chỉ số = <gt đầu>

Thực hiện công việcCập nhật chỉ số

Page 30: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 30

30 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

2.1.4 Toán tử

2.1.4.1 Toán tử

Bảng 2.4 Toán tử trong C

� STT � Loại

toán tử

� Tên

toán tử

� Kí

hiệu � Chức năng

� 1

� Toán tử

tính

toán số

� Nhân � * � Nhân 2 số

� 2 � Chia � / � Chia 2 số

� 3 � Cộng � + � Cộng 2 số

� 4 � Trừ � - � Trừ 2 số

� 5 � Chia

lấy dư � %

� Chia lấy dư 2 số

nguyên

� 6

� Toán tử

bit

� Not bit � ~ � Đảo logic từng bit

� 7 � Dịch

trái � <<

� Dịch sang trái một số

bit

� 8 � Dịch

phải � >>

� Dịch sang phải một số

bit

� 9 � AND � & � “Và” t ừng bit

� 10 � XOR � ^ � XOR từng bit

� 11 � OR � | � OR từng bit

� 12 � Toán tử

logic

� AND � && � AND logic 2 giá trị

logic

� 13 � OR � || � OR logic 2 giá trị logic

� 14

� Toán tử

quan

hệ

� So sánh

bằng � == � So sáng bằng 2 số

� 15 � � So sánh

khác � != � So sánh khác 2 số

� 16 � � SS bé � < � SS bé hơn 2 số

Page 31: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 31

31 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

hơn

� 17 �

� SS bé

hơn,

bằng

� <= � SS bé hơn hoặc bằng 2

số

� 18 � � SS lớn

hơn � > � SS lớn hơn 2 số

� 19 �

� SS lớn

hơn,

bằng

� >= � SS lớn hơn hoặc bằng

2 số

2.1.4.2 Mức độ ưu tiên của các toán tử

Bảng 2.5 Bảng so sánh mức độ ưu tiên của các toán tử:

STT Tên Mức Toán tử Nhóm

1 Primary 1(high) () . [] � Left to Right

2 Unary 2 ! ~ -(type) * & ++ --sizeof Right to Left

3 Binary 3 / * % Left to Right

4 Arithmetic 4 + - Left to Right

5 Shift 5 >> << Left to Right

6 Relational 6 < <= > >= Left to Right

7 Equality 7 == != Left to Right

8 Bitwise 8 & Left to Right

9 Bitwise 9 ^ Left to Right

10 Bitwise 10 | Left to Right

11 Logical 11 && Left to Right

12 Logical 12 || Left to Right

13 Conditional 13 ? : Right to Left

Page 32: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 32

32 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

14 Assigment 14 (low) = += -= /= *= %= <= >= &= |= ^= Left to Right

2.1.5 Hàm

2.1.5.1 Cú pháp hàm

Một hàm C phải bao gồm một kiểu trả về (kiểu đó trả về void nếu không có giá trị trả về), một

tên xác định, một danh sách các tham số để trong ngoặc đơn (nếu danh sách này không có tham số

nào thì ghi là void bên trong dấu ngoặc), sau đó là khối các câu lệnh (hay khối mã) và/hay các câu

lệnh return. (Nếu kiểu trả về là void thì mệnh đề này không bắt buộc phải có. Ngược lại, cũng

không bắt buộc chỉ có một câu lệnh return mà tùy theo kỹ thuật, người lập trình có thể dẫn dòng

mã sao cho mọi hướng chẻ nhánh đều được trả về đúng kiểu.)

<ki ểu_tr ả_về> tên_hàm(<danh sách tham s ố>)

{

<các_câu_l ệnh>

return <bi ến (hay giá tr ị) có ki ểu là ki ểu_tr ả_về>;

}

Trong đó, <danh sách tham số> của N biến thì được khai báo như là kiểu dữ liệu và tách rời

nhau bởi dấu phẩy ,

Toàn bộ danh sách này được đặt trong ngoặc đơn ngay sau tên_hàm.

- Thí dụ:

Viết hàm add tính tổng hai số có kiểu integer, hàm abs tính trị tuyệt đối của số có kiểu integer,

và chương trình (hàm main) hiển thị hai dòng 1 + 1 = 2 và absolute value of -2 is

2.1.5.2 Các kiểu truy xuất biến trong hàm

Khi thực hiện một lời gọi hàm ta phải cung cấp đầy đủ thông tin phù hợp với hàm đó để hàm đó

có thể thực hiện

VD: void test(int8 n)

{}

test(x);

Page 33: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 33

33 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Ở đây n được gọi là tham số hình thức, chỉ mang tính hình thức.x là tham số thực sự. Việc gửi x

vào cho hàm test thay thế cho n được gọi là truyền tham số. Với những hàm không có tham số thì

không phải truyền. Có 3 loại truyền tham số:

� Truy ền tham tr ị:

Giá trị của tham số thực sự được gửi đến cho hàm. Khi thực hiện truyền tham số theo kiểu này

thì hàm được gọi chỉ tác động lên bản sao của tham số gốc, do vậy nó chỉ làm thay đổi giá trị của

bản sao mà không ảnh hưởng đến tham số gốc.

VD:

void test(int x) { x=x+10; } void main() { int n=5; test(n); cout<<"Gia tri n ="<<n<<endl; }

Kết quả sau khi thực hiện chương trình trên: Gia tri n = 5. Ở đây n vẫn giữ nguyên giá trị ban

đầu mặc dù trong test có câu lệnh nhằm làm thay đổi nó.

Truyền tham trị là cơ cấu mặc định trong truyền tham số.

� Truy ền tham khảo (tham chiếu)

Về bản chất, truyền tham chiếu là ta gửi địa chỉ của tham số tới hàm được gọi. Hàm được gọi sẽ

tác động lên vùng nhớ có địa chỉ mà nó nhận được(chính là tham số gốc). Bời vậy mọi thay đổi mà

nó gây ra đều làm ảnh hưởng đến tham số gốc.

Ví dụ:

void test(int &x) { x=x+10; } void main() { int n=5; test(n); cout<<"Gia tri n ="<<n<<endl; }

Page 34: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 34

34 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Kết quả sau khi thực hiện chương trình trên: Gia tri n = 15. Ở đây n đã bị thay đổi.Việc gửi địa

chỉ (tham chiếu) của tham số đến hàm được gọi, người ta gọi đó là truyền tham chiếu. Với hàm có

cơ chế truyền tham chiếu thì nó không có vùng nhớ riêng cho tham số đó, khi thực hiện lời gọi

hàm, nó sẽ gán cho tham số một bí danh (alias) - đó chính là tên của tham số hình thức và tự do tác

động lên vùng nhớ của tham số được gửi tới.

� Truy ền con trỏ

Địa chỉ vùng nhớ của một biến nào đó là một số, do đó ta có thể khai báo một biến khác để lưu

trữ giá trị địa chỉ này. Con trỏ là biến như thế.

Cách truyền con trỏ cũng tương tự như cách truyền một tham chiếu, tuy nhiên cần phân biệt con

trỏ và tham chiếu ở những điểm cơ bản sau:

- Có con trỏ null chứ không có tham chiếu null - Con trỏ có thể trỏ đến nhiều đối tượng, trong khi tham chiếu chỉ có thể chỉ đến tham chiếu được tạo cho nó.

Tham khảo:http://www.cplusplus.com/doc/tutorial/pointers/

2.2 NHỮNG VẤN ĐỀ LIÊN QUAN KHI S Ử DỤNG C CHO LẬP TRÌNH PIC

2.2.1 C Complier và MPLAB

2.2.2 Mô phỏng chương trình bằng Protus

(GV sẽ hướng dẫn trực tiếp cách sử dụng các phần mềm trên lớp)

2.2.3 Cấu trúc và thực thi chương trình

//Phần các chỉ thị tiền xử lý

#include < 16F877 .h >

#include < delay.h >

. . . .

//Phần khai báo biến, hằng, mảng toàn cục

Int a, b;

. . . .

// Phần khai báo hàm Prototype

Void ADC_Processing() ;

Void timer_INT();

//Chương trình chính

Main()

Page 35: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 35

35 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

{. . . }

//Chương trình con

Void ADC_Processing()

{ . . . }

//Chương trình xử lý ngắt

#Interrupts

Void timer_INT()

{. . . }

Page 36: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 36

36 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 3 : PRE-PROCESSOR DIRECTIVE

Bài 3 sẽ giới thiệu sơ lược về kiến trúc phần cứng của vi điều khiển PIC. Sau đó bài này sẽ giới

thiệu các chỉ thị tiền xử lý đáng lưu ý để cài đặt phần cứng trong CCSC, bao gồm các chỉ thị khai

báo processor, bộ dao động, chỉ thị define…

3.1 TỔNG THỂ KIẾN TRÚC PHẦN CỨNG VI ĐIỀU KHI ỂN

3.1.1 PIC vs Máy tính

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ừ đó hinh thành nên dòng vi điều khiển PIC ngày nay.

Sau đây, ta phân tích cấu trúc cơ bản của một bộ VĐK PIC. (Xét VĐK 18F4620)

Tổ chức phần cứng của PIC được thiết kế theo kiến trúc Havard. Như trong hình trên ta có thể

nhận thấy phần bộ nhớ dữ liệu và bộ nhớ chương trình là hoàn toàn độc lập và được truy xuất bởi 2

BUS khác nhau: Data BUS 8 bit và Instruction BUS 16 bit. Vì tính chất độc lập với cấu trúc dữ

liệu nên 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à 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).

3.1.2 Các thành phần của PIC

Dựa vào sơ đồ khối trên ta có thể thấy các phần cấu tạo nên vi điều khiển PIC hoàn toàn phù

hợp với một mô hình máy tính cơ bản.

� Phần bộ nhớ (khối A): bao gồm bộ nhớ chương trình và bộ nhớ dữ liệu.

� Phần tạo xung (khối B): bao gồm bộ tạo xung và các chức năng đi kèm với nó.

� Phần tính toán (còn gọi là bộ ALU – khối C): đảm nhận việc tính toán của VĐK.

� Phần I/O (khối D): bao gồm các port input và output.

� Phần ngoại vi (khối E): quản lý các chức năng tương tác ngoại vi trong VĐK.

Page 37: Pic Ccs Full

37 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Hình 3.1 - Sơ đồ khối tổng thể của PIC18F4620

(con số được ghi trên mỗi mũi tên chính là số bits dữ liệu trong việc giao tiếp giữa các khối)

3.1.3 Hoạt động thực thi lệnh trong CPU

Hoạt động thực thi lệnh của CPU trong PIC được thực hiện theo cơ chế Pipelinie. Trong một

chu kỳ lệnh này CPU vừa thực hiện lệnh trước vừa đọc lệnh tiếp theo. Do đó mỗi chu kỳ lệnh cần

4 xung clock từ bộ dao động (4 chu kỳ máy). Với cơ chế này ta có thể xem mỗi lệnh của PIC chỉ

được thực hiện trong một chu kỳ lệnh trừ những lệnh làm thay đổi giá trị của Program counter

(như lệnh rẽ nhánh, lệnh CALL…). Với cơ chế này có thể tận dụng tối đa hiệu năng của tất cả các

thành phần trong CPU tham gia vào xử lý lệnh.

Page 38: Pic Ccs Full

38 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Hình 3.2 - Pipelining – 4 xung clock cho một chu kỳ lệnh

Trong bài này chúng sẽ xem xét hai khối chính đó là khối bộ nhớ và khối tạo xung.

3.2 BỘ NHỚ

Tài li ệu tham khảo: Chương 5,6,7 datasheet 18F4620 – 18F2550

3.2.1 Cơ bản về tổ chức bộ nhớ của VĐK PIC

Tổ chức bộ nhớ vi điều khiển PIC được chia làm 3 thành phần chính:

• Program Memory (hay còn gọi là Flash Memory – bộ nhớ Flash, bộ nhớ lưu trữ)

• Data Memory (hay còn có tên gọi là Data RAM Memory)

• Data EEPROM Memory

Ngoài ra còn có các thành phần phụ khác đề bổ trợ cho quá trình hoạt động của một bộ VĐK.

3.2.2 Tổ chức bộ nhớ chương trình (Program Memory)

Bộ nhớ chương trình trong PIC là một bộ nhớ Flash, dùng để lưu trữ chương trình. Tuy nhiên,

nó không giống bộ nhớ chương trình bình thường là nó có thể được đọc, ghi, xóa một cách bình

thường. Thêm vào đó, thao tác ghi, xóa có thể thực hiện trên 64 byte tại cùng một thời điểm. Điều

này giải thích vì sao ta có thể nạp, xóa chương trình trên vi điều khiển nhiều lần.

3.2.2.1 Các thành phần bộ nhớ chương trình

Như chúng ta có thể thấy bộ nhớ chương trình được chia làm 3 phần chính:

Page 39: Pic Ccs Full

39 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

� Program Counter:

Phần này là một thanh ghi 21 bits (được chia thành 3 thanh ghi 8 bit, tên gọi là thanh ghi PC)

chứa giá trị địa chỉ của câu lệnh hiện thời trong Program Memory.

� Stack Memory:

Đây là bộ nhớ với 31 ô (mỗi ô có 21 bits) nhằm ghi lại địa chỉ vào ra của các chương trình con.

Stack Memory được thực hiện dựa trên cơ chế “VÀO SAU RA TRƯỚC”. Thanh ghi điều khiển

stack là STKPTR. Bình thường bit trạng thái STKUNF thể hiện stack còn trống sẽ tích cực. Nếu

PC đưa vào stack 31 lần địa chỉ mà không lấy ra lần nào thì bit STKFUL sẽ được đưa lên 1 báo

stack đã đầy. Bit này chỉ được clear bằng phần mềm hoặc bằng cơ chế POR. Hoạt động của POR

trên stack phụ thuộc vào bit STVREN (Stack Overflow Reset Enable). Nếu bit này được set thì

POR sẽ tự động reset hệ thống khi stack tràn và hệ thống có thể hoạt động lại bình thường ở trạng

thái đầu. Ngược lại, nếu bit này bị clear thì trong trường hợp tràn stack hệ thống sẽ bị treo và bắt

buộc phải reset nóng. Đây là một chú ý quan trọng khi lập trình với stack.

� Memory Space:

Đây là phần chứa toàn bộ nội dung của chương trình điều khiển (được mã hóa ra dạng mã hex).

Hình 3.3 - Tổ chức bộ nhớ chương trình của VĐK PIC

Page 40: Pic Ccs Full

40 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Hình 3.4 - Stack memory

3.2.2.2 Cấu trúc lệnh trong bộ nhớ chương trình

Như đã nói ở trước, cơ chế xử lý lệnh trong CPU là cơ chế Pipeline. Chính vì thế lệnh trong bộ

nhớ chương trình cũng phải có cấu trúc phù hợp với cơ chế này. Mỗi chu kỳ thực thi lệnh (chu kỳ

lệnh –TCY) của hệ thống bao gồm 4 chu kỳ xung clock (chu kỳ máy) Q1, Q2, Q3, Q4. Giản đồ

xung được cho trong hình sau:

Hình 3.5 - Giản đồ xung clock cấp cho CPU

Từ giản đồ ta có thể thấy:

- Q1: Tăng con trỏ PC – đọc lệnh

- Q2: Đọc dữ liệu từ Data memory

- Q3: xử lý lệnh, dữ liệu

- Q4: Ghi dữ liệu vào Data Memory

Page 41: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 41

41 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

3.2.3 Tổ chức bộ nhớ dữ liệu (Data Memory)

3.2.3.1 Tổ chức RAM

Data Memory trong PIC là SRAM. Mỗi ô nhớ trong RAM được định địa chỉ bằng 12 bit, do đó

dung lượng tối đa của RAM là 4096 ô nhớ. Toàn bộ RAM được chia thành 16 bank, mỗi bank

chứa 256 ô nhớ. PIC18F là loại PIC 8 bit nên mỗi ô nhớ tương ứng là 1 byte. 16 bank này được

chia thành các phần riêng biệt sau:

� Access Ram:

Để định địa chỉ của từng ô nhớ bên trong RAM, CPU dùng tới 12 bit địa chỉ. Trong 12 bit đó, 8

bit để định địa chỉ byte trong từng bank, và 4 bit để định địa chỉ bank. 4 bit này là một phần của

thanh ghi chức năng BSR (Bank Select Register). Tuy nhiên, theo cơ chế này, mỗi lần truy xuất bộ

nhớ có thay đổi địa chỉ thì thanh ghi này lại được cấu hình lại một lần. Điều này là không khả thi.

Do đó người ta thêm vào một phần bộ nhớ goi là Access Bank. Đây là nơi chứa bản đồ địa chỉ của

toàn bộ bộ nhớ, do đó khi truy xuất không cần phải cấu hình lại BSR. Một phần của bộ nhớ này

chưa những thanh ghi chức năng đặc biệt. Đây là phần bộ nhớ truy xuất nhanh, tức những dữ liệu

nào chúng ta thường hay truy xuất nên đưa vào phần RAM này.

� GPR (General Purpose Register): (thanh ghi dùng chung) đây nơi lưu trữ dữ liệu của

chương trình.

� SFR (Special Function Register): thanh ghi đặc biệt-vùng nhớ này dùng để lưu trữ

những thanh ghi đặc biệt (dùng điều khiển các chức năng của VĐK) – tham khảo bảng

5.1

3.2.3.2 Cơ chế định địa chỉ trong RAM

Bộ nhớ chương trình có thể được định địa chỉ theo nhiều cách và phụ thuộc vào dạng cấu trúc

lệnh. Đối với một vài lệnh thì việc định địa chỉ này là cố định. Những câu lệnh khác có thể sử dụng

3 cơ chế định địa chỉ: Inherent and Literal, Direct, Indirect. (tham khảo thêm datasheet 18f4620

chương 5, phần 5.4)

� Một địa chỉ Data bao gồm hai thành phần:

• Opcode: hay còn gọi là số thứ tự “ngăn” (mỗi ngăn 8 bits, 16 bits … tùy theo dòng

VĐK)

• BSR: hay còn gọi là số thứ tự “tủ”. Mỗi “tủ” chứa 256 ngăn.

Page 42: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 42

42 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

3.2.4 Data EEPROM Memory:

Data EEPROM (Electric Eraseable Programmable ROM) là dạng bộ nhớ lưu trữ dữ liệu không

bay hơi (không mất dữ liệu khi mất nguồn cấp). Chính vì thế bộ nhớ này được dùng để lưu trữ

những dữ liệu lâu dài của người dùng trên PIC. Để truy xuất nó sử dụng phương thức định địa chỉ

gián tiếp thông qua các thanh ghi SFR điều khiển tương ứng. Chính vì vậy việc cấp phát bộ nhớ

trên EEPROM là hoàn toàn do người dùng làm chủ. Có 5 thanh ghi liên quan tới việc điều khiển

đọc, ghi bộ nhớ này: EECON1, EECON2, EEDATA, EEADR, EEADRH. Tương tác với phần bộ

nhớ này sẽ được trình bày rõ hơn ở bài cuối của chương trình, bài các phương pháp lưu trữ dữ liệu.

3.3 BỘ DAO ĐỘNG

Tài liệu tham khảo: Chương 2 - datasheet PIC18F4620

3.3.1 Vai trò của bộ dao động

Bộ dao động (hay còn có tên gọi khác là bộ tạo xung) là phần tạo xung nhịp hoạt động chính

cho VĐK. Bộ tạo dao động nhằm tạo ra các hệ xung có chu kỳ cố định, đồng bộ hóa dữ liệu của

VĐK, hay nói cách khác hơn, thời gian chu kỳ của hệ xung dao động chính là đơn vị cơ bản để đo

đếm thời gian hoạt động của các module trong VĐK.

3.3.2 Cấu tạo bộ dao động

Nguồn xungBộ điều chế

xung

Xung ra

Hình 3.6 - Sơ đồ khối bộ dao động

Bộ dao động bao gồm 2 thành phần chính: nguồn xung và bộ điều chế xung (hình 3.4).

� Nguồn xung là thiết bị tạo xung thô có tần số xác định cấp cho vi điều khiển. Nguồn

xung có thể nằm bên trong hoặc bên ngoài vi điều khiển. Nếu nằm trong ta gọi là

nguồn xung nội, nằm ngoài ta gọi là nguồn xung ngoài.

� Bộ điều chế xung là thiết bị được tích hợp sẵn bên trong vi điều khiển. Bộ điều chế

xung có nhiệm vụ nhận xung đầu vào từ nguồn xung và điều chế ra xung ngõ ra phù

hợp để cung cấp cho CPU và các thiết bị ngoại vi. Thông số được điều chế là tần số

xung. Bộ điều chế xung có thể lập trình được, nghĩa là với cùng một nguồn xung chúng

ta có thể điều chế ra những xung có tần số khác nhau để cấp cho CPU bằng phần

Page 43: Pic Ccs Full

43 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

mềm. Để làm việc này chúng ta cần phải can thiệp vào các thanh ghi hệ thống của vi

điều khiển.

3.3.2.2 Nguồn xung

Để tạo xung cho hệ thống vi điều khiển có 2 cách cơ bản: dùng thạch anh và dùng mạch RC.

� Nguồn xung bằng thạch anh:

Hình 3.7 - Sơ đồ kết nối nguồn xung bằng thạch anh

Đây là nguồn xung đơn giản, dễ hiểu và dễ sử dụng nhất. Tín hiệu dao động vào VĐK theo ngõ

OSC1 và ra theo ngõ OCS2. Tụ C1 và C1 đóng vai trò như bộ ổn định xung nhịp. Giá trị C1 và C2

thay đổi theo tần số thạch anh (có thể tra bảng 2.1, 2.2 datasheet).

• Chú ý:

• Tăng tụ C1, C2 giúp ổn định xung dao động của thạch anh, tuy nhiên cũng làm tăng

thời gian khởi động của hệ thống (Power Up Delay)

• Điện trở nối tiếp RS có thể cần thiết để tránh trường hợp “overdriving” của thạch anh.

(overdriving: hoạt động quá tần số cho phép).

� Nguồn xung bằng mạch RC:

Page 44: Pic Ccs Full

44 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Hình 3.8 - Sơ đồ kết nối bộ tạo xung bằng mạch RC

Nguồn xung này dựa vào đặc tính dao động cơ bản của mạch RC. Bộ dao động loại này tương

đối khó sử dụng, thích hợp với những ứng dụng cho phép thay đổi tần số hoạt động của hệ thống.

� Nguồn xung nội:

Trong mỗi VĐK đều tồn tại một nguồn xung nội, tức là chúng ta có thể sẽ không cần dùng

nguồn xung bên ngoài mà VĐK vẫn hoạt động bình thường.

Khuyết điểm của nguồn xung nội là tần số hoạt động thấp hơn so với nguồn xung gắn ngoài, và

ít có sự lựa chọn hơn. Nhưng bù lại độ chính xác là tin cậy cao hơn, tiêu tốn ít năng lượng hơn.

Đây là nguồn xung tối ưu năng lượng cho vi điều khiển PIC.

Ngoài những nguồn xung trên ta cũng có thể tạo ra một nguồn dao động phức tạp hơn như máy

tao dao động hoặc mạch tạo dao động (IC555 chẳng hạn) để cấp cho vi điều khiển (hình 3.7). Ứng

với mỗi dạng nguồn xung, bộ điều chế xung phải được cài đặt ở các chế độ tương ứng (điều này sẽ

được nói rõ hơn trong phần tiếp theo).

Hình 3.9 - Nguồn xung bên ngoài

3.3.2.3 Bộ điều chế xung PIC18F4620

� Cấu tạo và các chế độ hoạt động:

Page 45: Pic Ccs Full

45 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Hình 3.10 - Bộ dao động PIC18F4620

Hình 3.8 mô tả bộ điều chế xung bên trong vi điều khiển PIC18F4620. Những ô được đánh dấu

phía bên trái là các ngõ vào của các nguồn xung, ô bên phải là xung ngõ ra cung cấp cho CPU. Bộ

điều chế xung là phần còn lại ở giữa.

Mỗi con đường đi từ ngõ vào tới ngõ ra thể hiện một sự cài đặt (điều chế) khác nhau. Công việc

của người lập trình là phải tính toán, lựa chọn một con đường thích hợp nhất và ra lệnh cho vi điều

khiển biết rằng họ đã chọn con đường đó. Để lựa chọn con đường này chúng ta cần xác định rõ

nguồn xung là gì và chế độ hoạt động của bộ điều chế dao động là gì. Để cài đặt chế độ hoạt động

cho bộ điều chế xung trong CCSC ta dùng các chỉ thị tiền xử lý chuyên dụng được trình bày trong

phần 3.4.

3.3.2.4 Các thanh ghi hệ thống

Thanh ghi hệ thống là nơi cài đặt tất cả các chức năng ban đầu của hệ thống. Các chỉ thị tiền xử

lý được giới thiệu trong phần 3.4 thực chất là những lệnh tương tác với thanh ghi hệ thống để cài

đặt các giá trị của thanh ghi này. Các thanh ghi hệ thống có thể tham khảo trong phần Special

Features of CPU trong Datasheet của các dòng vi điều khiển PIC.

Page 46: Pic Ccs Full

46 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bảng 3.1 Các thanh ghi hệ thống của PIC18F4620 (datasheet PIC18F4620 trg 251)

3.3.2.5 Thời gian khởi động của hệ thống (Power Up Delay)

Thời gian khởi động của hệ thống là thời gian mà thiết bị được giữ ở chế độ Reset để đảm bảo

nguồn cung cấp cho hệ thống và các chế độ cài đặt phần cứng của hệ thống ổn định trước khi CPU

tiến hành truy xuất bộ nhớ chương trình. Thời gian này được điều khiển bởi 2 timer chuyên dụng:

PWRT (Power up timer) – timer cài đặt thời gian cố định để khởi động hệ thống – liên quan tới sự

ổn định điện áp trên các chân nguồn; OST (Oscilator set timer) – timer cài đặt thời gian khởi động

của bộ dao động, phụ thuộc vào chế độ hoạt động cũng như giá trị của tụ C1, C2 của bộ dao động

– liên quan tới sự ổn định xung cấp cho CPU và các chế độ được cài đặt ở các thanh ghi hệ thống

(khoảng 2ms vào chế độ HS, HSPLL).

3.4 CÁC CHỈ THỊ TIỀN XỬ LÝ TRONG CCSC

3.4.1 Những tiền xử lý cơ bản:

� #include:

Tiền xử lý này dùng để thêm một file mới vào chương trình.

Cú pháp: #include <filename>

#include “filename”

Page 47: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 47

47 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Trong đó: filename là một tên file hợp lệ trong máy tính. Nó có thể bao gồm đường dẫn trực

tiếp. Ví dụ:

#include <C:\INCLUDES\COMLIB\MYRS232.C>

� #define:

Tiền xử lý #define dùng để định nghĩa một đối tượng trong chương trình.

Cú pháp: #define <name> <object>

Trong đó: <name> là tên định danh mới của đối tượng (tên này được dùng trong chương trình),

<object> là đối tượng cần định nghĩa.

Ví dụ:

#define mainRelayControlPin PIN_D0

Trong ví dụ trên, người dùng muốn định nghĩa chân D0 trên PORTD là chân điều khiển Relay

chính của hệ thống. Sau khi dùng tiền xử lý này, trong chương trình đối tượng

mainRelayControlPin sẽ được hiểu là PIN_D0.

� #device

� Đây là tiền xử lý khai báo chế độ lựa chọn của bộ xử lý (chip option)

� Cú pháp: #device <chip options>

� Có thể cùng lúc chọn nhiều option khác nhau, mỗi option cách nhau bởi dấu “,”.

Bảng 3.2 Các option về chip trong CCS

STT Loại Option Tên Options Ý nghĩa

1

Con trỏ

*5 Sử dụng con trỏ 5 bit

2 *8 Sử dụng con trỏ 8 bit

3 *16 Sử dụng con trỏ 16 bit

4 ADC ADC=x Sử dụng ADC x bit

5 Ngắt HIGH_INTS=TRUE Cho phép ưu tiên trong ngắt

6 Debug ICD=TRUE Cho phép debug bằng phần cứng

Page 48: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 48

48 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

� #FUSES:

Đây là tiền xử lý để khai báo phần cứng sử dụng cho hệ thống. Bao gồm bộ dao động, các

config thuộc về thanh nghi hệ thống như Watchdog, chế độ nạp, chế độ Reset,…

Cú pháp

#FUSES <Options>

Trong CCSC có các Options sau:

Bảng 3.3 Các lựa chọn của tiền xử lý #FUSES

STT Loại Option Tên Options Ý nghĩa

1

Bộ dao

động

LP Khai báo loại thạch anh ngoài điện áp thấp

2 XT Khai báo sử dụng thạch anh ngoài có F < 4MHz

3 HS Khai báo sử dụng thạch anh ngoài có F > 4MHz

4 RC Khai báo sử dụng bộ dao động RC

5 Watchdog WDT/NOWDT Có sử dụng WDT/không sử dụng WDT

6 Chế độ bảo

vệ code

PROTECT/

NOPROTECT

Có sử dụng chế độ bảo vệ đọc ngược code đã nạp/

không sử dụng chế độ bảo vệ đọc ngược code đã nạp

7 Power up PUT/NOPUT Có sử dụng Power up Timer (PUT)/ Không sử dụng PUT

8 Power down

reset detect

BROWNOUT/

NOBROWNOUT

Có sử dụng chế độ reset khi power down/ Không sử

dụng chế độ reset khi Power down

Một vài chế độ cần tới cấp độ, ví dụ như PROTECT cần chỉ rõ code được bảo vệ ở cấp độ mấy

có 15 cấp độ bảo vệ, tương ứng với các giá trị 0 ~ 15 (mặc định code sẽ được bảo vệ ở cấp 15, 4

block đều được bảo vệ)

� #USE

� Cú pháp: #USE <Options>

� Đây là chỉ thị tiền xử lý khai báo tần số thạch anh, các ngoại vi sử dụng trong hệ

thống. Cụ thể cho ở bảng sau:

Page 49: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 49

49 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bảng 3.4 Các lựa chọn của tiền xử lý #USE

STT Loại Option Tên Options Ý nghĩa

1

Tần số bộ

dao động

Delay(clock = <f>) Khai báo sử dụng thạch anh có tần số f, tần số này

dùng để sử dụng cho các lệnh delay_us(), delay_ms().

2 Delay(clock = <f>,

restart_wdt)

Khởi động lại WDT sau mỗi lệnh delay_us(),

delay_ms().

3 delay (clock=<f>,

type)

Type - loại bộ dao động sử dụng: oscillator hay

internal

4 delay(clock=<f1>,

type=<f2>)

Clock sử dụng tần số f1, hệ thống sử dụng tần số f2

5 Port FAST_IO Sử dụng chế độ IO nhanh

6

Các ngoại vi

I2C Sử dụng I2C

7 RS232 Sử dụng RS232

8 SPI Sử dụng SPI

� Ví dụ:

� #use delay(clock=20M, oscillator)

� #use delay(internal=8M)

� #pragma

� Cú pháp: #pragma <cmd>

� Đây là tiền xử lý cơ bản và mạnh nhất trong CCSC, có thể dùng chỉ thị tiền xử lý này

để thay thế cho tất cả các chỉ thị tiền xử lý trước đó.

� Ví dụ:

� #pragma device PIC16C54

3.5 BÀI T ẬP

Viết đoạn chương trình config cho PIC18f4550 với các yêu cầu sau:

• Thạch anh sử dụng 20MHz

• Cấp xung 48MHz cho CPU

Page 50: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 50

50 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 4 : IO PORT – OUTPUT

Bài 4 giới thiệu về module đầu tiên trong vi điều khiển – IO PORT. Đây là phần quan trọng bậc

nhất trong vi điều khiển vì tất cả các ứng dụng đều cần dùng đến. Học viên cần nắm rõ phần cứng

và cách tương tác phần cứng, từ đó áp dụng vào các ứng dụng cụ thể được hướng dẫn trong bài.

4.1 GIỚI THI ỆU PHẦN CỨNG

Tài liệu tham khảo: Chương I/O Port – datasheet 18F4550 /18F4431

4.1.1 Các PORT trong PIC

Trong các dòng PIC18F, PIC16F loại 40 chân có tổng cộng 5 PORT được đánh tên theo thứ tự

bảng chữ cái: A, B, C, D, E

4.1.1.1 PORT A

PORTA được sử chung chân với một số chức năng khác như ADC và Oscillator. Khi sử dụng

PORTA tại chân Analog cần thiết phải đặt giá trị cho thanh ghi ADCON1 là bit tương ứng đang ở

chế độ analog hay digital, với chân RA7 và RA6 do được nối với chân Oscillator nên chân này chỉ

được sử dụng khi không không đặt chế độ oscillator.

4.1.1.2 PORT B

PORTB với 8 chân giao tiếp bên ngoài, ngoài chức năng I/O nó còn là nơi có các chân ngắt

ngoài và ngắt thay đổi trạng thái. Chú ý khi đặt chế độ ngắt thì các chân I/O phải ở chế độ Input.

Một số chân Port B là có đi cùng chức năng Analog nên khi sử dụng phải khai báo chân này là

analog hay digital trong thanh ghi ADCON1. PORTB có thể được kéo lên nguồn yếu bằng cách

cài đặt bit RBPU trong thanh ghi INTCON2.

4.1.1.3 PORT C

Với 8 chân giao tiếp bên ngoài, PORT C là ngõ ra Digital thuần túy. Ngoài ra PORTC còn là

ngõ ra của nhiều module giao tiếp trong PIC, cụ thể như RS232, SPI, I2C, USB, …

4.1.1.4 PORT D và PORT E

PORTD và PORTE là các PORT giao tiếp I/O thuần túy. Port D và E có thêm chức năng làm

cổng giao tiếp song song tớ. Hoạt đông ở chế độ này xem chi tiết trong Datasheet.

Page 51: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 51

51 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

4.2 TẬP LỆNH TƯƠNG TÁC PORT TRONG CCSC

4.2.1 Các lệnh cài đặt chế độ

� Set_tris_x(value) ;

X - tên port : A, B, C, D, E

Value : giá trị 8bit cài đặt cho thanh ghi TRIS của PORTX

Lệnh này tương tác động vào thanh ghi TRIS của PORTX, cài đặt giá trị cho thanh ghi này.

Ứng với giá trị 1 trên bit tương ứng thì chân tương ứng trên PORTX sẽ có chức năng input, và

ngược lại giá trị 0 quy định chân tương ứng ở chức năng output.

4.2.2 Các lệnh input

� input_X()

Với: X là tên PORT (A, B, C, D, E)

Hàm dùng để đọc vào trạng thái logic của các chân trên PORT X.

� input(pin)

Với ‘pin’ là các ký hiệu chân (trên một PORT) được định nghĩa trong header file. Hàm dùng để

đọc vào trạng thái logic của chân tương ứng.

4.2.3 Các lệnh output

� Output_high(pin)

Hàm xuất ra mức cao trên chân ‘pin’. ‘pin’ được định nghĩa trong header file

� Output_low(pin)

Hàm xuất ra mức thấp trên chân ‘pin’. ‘pin’ được định nghĩa trong header file

� Output_float(pin)

Hàm thả nổi trạng thái logic trên chân ‘pin’. ‘pin’ được định nghĩa trong header file

� Output_x()

Với: X là tên PORT (A, B, C, D, E)

Hàm có tác dụng xuất ra PORT có tên X một giá trị 8 bit. Giá trị này sẽ quy định các mức điện

áp trên các chân của PORT đó.

Page 52: Pic Ccs Full

52 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

4.3 BÀI T ẬP - CÁC ỨNG DỤNG CỦA IO PORT-PHẦN OUTPUT

Tài liệu tham khảo: datasheet 7447, datasheet 74595

4.3.1.1 Ứng dụng chớp tắt LED:

Yêu cầu: GV hướng dẫn chớp tắt LED theo chù kỳ nhất định.

Sơ đồ mạch: đính kèm tài liệu (file)

4.3.1.2 Ứng dụng xuất LED 7 đoạn:

� Giới thi ệu chung:

LED 7 đoạn thực chất là bao gồm nhiều LED đơn được sắp xếp theo hình dạng các con số. 8

LED đơn này được ký hiệu từ a đến f (hình 4.1a) và được kết nối như trên hình 4.1b. Có hai dạng

chân chung cho Led 7 đoạn.

• Chân chung Anode(+)

• Chân chung Cathode(-)

(a) (b)

Hình 4.1 - Cấu tạo LED 7 đoạn

Để hiển thị một giá trị ra LED 7 đoạn ta phải cấp các mức điện áp tương ứng vào các chân từ a

tới f để điều khiển các con LED đơn tương ứng bên trong. Giá trị nhị phân này được gọi là mã của

LED 7 đoạn. Từ cấu tạo phần cứng của LED 7 đoạn nên chúng ta sẽ có 2 bảng giải mã khác nhau

cho các tín hiệu đầu vào:

Page 53: Pic Ccs Full

53 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bảng 4.1 Bảng mã dành cho LED 7 đoạn Anode chung

� Hiển thị nhiều LED 7 đoạn

Rõ ràng, để hiển thị một LED 7 đoạn ta cần 8 chân để cấp mã cho 8 LED bên trong. Trong thực

tế, các LED 7 đoạn thường được sử dụng theo tổ hợp với nhau để hiển thị các số thập phân, chữ từ

A tới F. Điều này đòi hỏi phải hiển thị nhiều LED 7 đoạn trong một hệ thống. Và rõ ràng, nếu số

chân điều khiển LED là một bội số của 8 (mỗi LED mất 8 chân) là không khả thi. Giải quyết cho

vấn đề này ta xét sơ đồ khối mạch như hình 4.2.

Phương pháp quét là phương pháp tận dụng sự lưu ảnh trong mắt người, bằng cách sử dụng các

hàm delays trong hiển thị. Trong một lần quét, chương trình chỉ hiển thị môt LED 7 đoạn, nhưng

do sử dụng tần số quét cao (>24Hz) để kích/tắt chân nguồn của LED 7 đoạn nên mắt người bị lầm

tưởng là các LED7 đoạn được hiển thị cùng lúc. Bộ điều khiển cấp nguồn có chức năng nhận lệnh

từ CPU và cho phép tại một thời điểm nhất định LED nào được sáng.

Phương pháp như trên được gọi là phương pháp quét. Đây là phương pháp cơ bản nhất để hiển

thị LED 7 đoạn. Ngoài ra còn có những phương pháp khác với sự hỗ trợ của các IC số như: 7447,

74595…

Page 54: Pic Ccs Full

54 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bảng 4.2 Bảng mã dành cho LED 7 đoạn Cathode chung

LED

7SEG

LED

7SEG

LED

7SEG

LED

7SEG

BỘ CẤ P MÃ HIỂN THỊ

NGUỒN DC

BỘ ĐIỀ U KHIỂN CẤ P NGUỒN

CPU

Hình 4.2 - Nguyên lý hiển thị nhiều LED 7 đoạn

4.4 BÀI T ẬP VỀ NHÀ:

Hiển thị ma trận LED 4x4.

Page 55: Pic Ccs Full

55 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

4.5 PHỤ LỤC – CHUẨN LOGIC NGÕ RA CỦA IO PORT

Ở chế độ output mức điện áp sẽ được đưa ra ngõ ra I/O pin, ngõ ra sẽ được đưa ra bằng một

trong hai mức logic 1 hoặc logic 0. Giá trị điện áp của ngõ ra được cho trong bảng sau:

• Dòng điện tối đa cho phép của một ngõ ra là ± 25mA.

• Tổng dòng điện tối đa cho Port là ± 200mA.

Page 56: Pic Ccs Full

56 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 5 : NGẮT (INTERRUPTS)

5.1 ĐỊNH NGHĨA NGẮT

Ngắt (interrupt) là quá trình tạm thời dừng chương trình chính, để thực thi một chương trình

khác, chương trình này còn được gọi là chương trình thực thi ngắt. Hoạt động ngắt giúp hệ thống

của chúng ta đặc tả tốt hơn các đặc tính thời gian thực.

5.2 PHÂN LOẠI NGẮT

Ngắt thường được chia thành hai loại chính sau đây:

� Ngắt cứng: Là loại ngắt được chính hệ thống chúng ta gọi bằng mã lệnh mà không phụ

thuộc vào các nhân tố bên ngoài.

� Ngắt mềm: Là loại ngắt được sinh ra do các nhân tố bên ngoài tác động vào (hầu hết

tất cả các loại ngắt chúng ta học trong khóa học đều là ngắt mềm).

� Các loại ngắt trong hệ thống:

Hình 5.1 - Sơ đồ logic của ngắt trong PIC 18F4550

Page 57: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 57

57 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

5.3 HOẠT ĐỘNG CỦA NGẮT

Quá trình hoạt động của ngắt được tóm tắt thông qua sơ đồ sau:

Hình 5.2 - Quy trình hoạt động của ngắt trong VĐK

5.4 TƯƠNG TÁC VỚI NGẮT

Trong khuôn khổ bài học chúng ta sẽ có dịp tương tác với 2 loại ngắt:

� Ngắt ngoài: Loại ngắt này được kích thích khi có sự thay đổi tr ạng thái của các chân

INTx.

� Ngắt RB (ngắt PortB): Lo ại ngắt này được kích hoạt khi có sự thay đổi tr ạng thái bất

kỳ của một trong các chân R4 – R7.

Cả 2 loại ngắt này được xếp vào loại ngắt External, thời gian từ khi xuất hiện ngắt đến khi

chương trình ngắt hoạt động có thể từ 3 tới 4 chu kỳ lệnh.

5.4.1 Quy trình khai báo ngắt:

Để tương tác với ngắt ta phải quan tâm tới 3 vấn đề sau :

� Trong chương trình chính

- Khai báo sử dụng ngắt (loại ngắt được chọn)

Page 58: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 58

58 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

- Khai báo kích hoạt ngắt toàn cục

� Trong chương trình ngắt

� Xử lý ngắt

� Reset cờ ngắt

5.4.2 Các hàm tương tác với ngắt trong CCSC

5.4.2.1 Các hàm tương tác với ngắt

� disable_interrupts(level); Disable ngắt tương ứng

� Enable_interrupts (level); Kích hoạt ngắt tương ứng

� Clear_interrupts(level ); Xóa cờ ngắt tương ứng

� ext_int_edge(source, edge); cài đặt cạnh ngắt cho ngắt ngoài INT, trong đó

� Source : là các nguồn ngắt ngoài có các giá trị là 0, 1, 2, …

� edge: khai báo loại cạnh xung báo ngắt, có các giá trị: L_TO_H ; H_TO_L

� Các cấp ngắt level :

Bảng 5.1 Các cấp ngắt (level)

STT Tên Level Ý nghĩa 1 INT_AD Analog to digital conversion complete 2 INT_ADOF Analog to digital conversion timeout 3 INT_BUSCOL Bus collision 4 INT_BUTTON Pushbutton 5 INT_CANERR An error has occurred in the CAN module 6 INT_CANIRX An invalid message has occurred on the CAN bus 7 INT_CANRX0 CAN Receive buffer 0 has received a new message 8 INT_CANRX1 CAN Receive buffer 1 has received a new message 9 INT_CANTX0 CAN Transmit buffer 0 has completed transmission 10 INT_CANTX1 CAN Transmit buffer 0 has completed transmission 11 INT_CANTX2 CAN Transmit buffer 0 has completed transmission 12 INT_CANWAKE Bus Activity wake-up has occurred on the CAN bus 13 INT_CCP1 Capture or Compare on unit 1 14 INT_CCP2 Capture or Compare on unit 2 15 INT_CCP3 Capture or Compare on unit 3 16 INT_CCP4 Capture or Compare on unit 4 17 INT_CCP5 Capture or Compare on unit 5 18 INT_COMP Comparator detect 19 INT_COMP1 Comparator 1 detect 20 INT_COMP2 Comparator 2 detect 21 INT_CR Cryptographic activity complete 22 INT_EEPROM Write complete

Page 59: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 59

59 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

23 INT_EXT External interrupt 24 INT_EXT1 External interrupt #1 25 INT_EXT2 External interrupt #2 26 INT_EXT3 External interrupt #3 27 INT_I2C I2C interrupt (only on 14000) 28 INT_IC1 Input Capture #1 29 INT_IC2 Input Capture #2 30 INT_IC3 Input Capture #3 31 INT_LCD LCD activity 32 INT_LOWVOLT Low voltage detected 33 INT_LVD Low voltage detected 34 INT_OSC_FAIL System oscillator failed 35 INT_OSCF System oscillator failed 36 INT_PSP Parallel Slave Port data in 37 INT_PWMTB PWM Time Base 38 INT_RA Port A any change on A0_A5 39 INT_RB Port B any change on B4-B7 40 INT_RC Port C any change on C4-C7 41 INT_RDA RS232 receive data available 42 INT_RDA0 RS232 receive data available in buffer 0 43 INT_RDA1 RS232 receive data available in buffer 1 44 INT_RDA2 RS232 receive data available in buffer 2 45 INT_RTCC Timer 0 (RTCC) overflow 46 INT_SPP Streaming Parallel Port Read/Write 47 INT_SSP SPI or I2C activity 48 INT_SSP2 SPI or I2C activity for Port 2 49 INT_TBE RS232 transmit buffer empty 50 INT_TBE0 RS232 transmit buffer 0 empty 51 INT_TBE1 RS232 transmit buffer 1 empty 52 INT_TBE2 RS232 transmit buffer 2 empty 53 INT_TIMER0 Timer 0 (RTCC) overflow 54 INT_TIMER1 Timer 1 overflow 55 INT_TIMER2 Timer 2 overflow 56 INT_TIMER3 Timer 3 overflow 57 INT_TIMER4 Timer 4 overflow 58 INT_TIMER5 Timer 5 overflow 59 INT_USB Universal Serial Bus activity

5.4.2.2 Các chỉ thị khai báo chương trình ngắt ngắt

Để khai báo chương trình ngắt ta thêm chỉ thị # vào trước tên của các cấp ngắt

Cú pháp: #level

Page 60: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 60

60 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Trong đó các level được cho và có ý nghĩa như ở bảng 5.1

5.4.2.3 Mẫu chương trình sử dụng ngắt

// Khai báo hàm ngắt

Void InterruptFunc();

Void main()

{

//Kích hoạt ngắt toàn cục

//Kích hoạt level ngắt tương ứng

While(1)

{

// User code

}

}

// vùng khai báo hàm ngắt

# level

Void InterruptFunc()

{

// code xử lý ngắt

// Reset cờ ngắt

}

5.5 BÀI T ẬP

Sử dụng PIC 18F4620 đọc số lần nhấn phím – hiển thị ra LED 7 đoạn(sử dụng ngắt ngoài)

Page 61: Pic Ccs Full

61 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 6 : IO PORT - INPUT

6.1 MÔ TẢ PHẦN CỨNG

Kiến trúc phần cứng xem ở bài 4.

6.2 BÀI T ẬP – ỨNG DỤNG IO PORT - INPUT

6.2.1 Bài tập 1 - Lập trình quét phím đơn

Trong các ứng dụng cần dùng ít phím thì ta có thể dùng một số chân của vi điều khiển để đọc

tín hiệu số 0/1 từ chân của phím (mức 1 tương ứng chưa nhấn phím, mức 0 tương ứng nhấn

phím). Phím được kết nối như thế này ta tạm thời gọi là phím đơn.

6.2.1.1 Mô tả phần cứng

Hình 6.1 - Sơ đồ mạch lập trình quét phím đơn

Sơ đồ nguyên lý của phím đơn như hình, khi không nhấn phím thì điện áp ngõ ra đưa vào được

điện trở kéo lên nguồn nên mức sẽ là mức 1, khi nhấn nút thì ngõ ra của nút nhấn được kéo thẳng

xuống đất nên điện áp ngõ ra là mức 0.

6.2.1.2 Yêu cầu

Các phím được kết nối lần lược vào các chân RB0 –RB3. 4 LED hiển thị tương ứng được nối

vào các chân RD0 –RD3. Lập trình để mỗi lần nhấn 1 phím, một led tương ứng sẽ sáng.

6.2.1.3 Giải thuật

Để đọc phím đơn ta có thể dùng ngắt hoặc phương pháp quét.

Page 62: Pic Ccs Full

62 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

6.2.2 Bài tập 2 - Lập trình quét phím ma trận

Với các ứng dụng lớn, cần nhiều phím thì không thể dùng quá nhiều chân của vi điều khiển để

đọc phím. Vậy làm thế nào để dùng ít chân mà vẫn đọc được nhiều phím?

=> Cần phải tổ hợp phím theo một qui luật và đọc tuần tự các phím -> mã hóa phím

Một phương pháp thông dụng nhất là tổ hợp phím ma trận: các phím sẽ được sắp xếp thành một

ma trận MxN:

• Số phím tạo ra là M.N

• Số đường dây tín hiệu cần đọc là M+N

VD: Ma trận 4x4 gồm 16 phím, dùng 8 đường tín hiệu

Ma trận 4x5 gồm 20 phím, dùng 9 đường tín hiệu

6.2.2.1 Mô tả phần cứng

Sơ đồ kết nối vật lý của các phím ma trận được cho ở hình dưới.

Hình 6.2 - Sơ đồ kết nối bàn phím ma trân 4x4

6.2.2.2 Yêu cầu

Các ROW lần lượt được nối vào RB0 – RB3, các COL lần lượt được nối vào RA0 – RA3, 4

LED hiển thị lần lượt được nối vào RD0 – RD3.

Page 63: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 63

63 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Lập trình sao cho khi mỗi phím được nhấn 4 LED sẽ hiển thị giá trị nhị phân chỉ địa chỉ (1 – 16)

của phím đó trên bàn phím

6.2.2.3 Giải thuật

Phân tích hoạt động của sơ đồ phím ma trận ở hình 6.2

• Tại mỗi thời điểm chỉ nhấn được 1 phím

• Ma trận được bố trí thành các hàng R1-> R4 và các cột C1->C4

• Các cột sẽ được cấp mức điện áp 0 tuần tự: 0111, 1011, 1101, 1110, 0111……….

• Tại mỗi trạng thái của các cột, toàn bộ tín hiệu tại các hàng sẽ được đọc và kiểm tra,

mỗi mức điện áp 0 xuất hiện tại một hàng tương ứng với một phím đã được nhấn ( ở vị

trí tương ứng)

• Tốc độ thay đổi trạng thái tại tổ hợp các cột gọi là tốc độ quét, tốc độ quét phải lớn hơn

tốc độ người dùng nhấn phím thì mới đọc được phím. Ví dụ người dùng trong 1 giây

có thể nhấn phím 3 lần thì tốc độ quét phải lớn hơn 4x3=12 Hz thì mới có khả năng

đọc được phím. Tổng quát:

Tốc độ quét (Hz) = Số cột x Số lần nhấn phím/s x Hệ số an toàn (2)

� Chi ti ết giải thuật:

Bắt đầu:

Xuất tín hiệu ra các cột C1C2C3C4: 0111

Đọc trạng thái tại các hàng R1R2R3R4?

-R1R2R3R4 = 0111? : ->phím 1 được nhấn

-R1R2R3R4 = 1011? : ->phím 4 được nhấn

-R1R2R3R4 = 1101? : ->phím 7 được nhấn

-R1R2R3R4 = 1110? : ->phím * được nhấn

Xuất tín hiệu ra các cột C1C2C3C4: 1011

Đọc trạng thái tại các hàng R1R2R3R4?

-R1R2R3R4 = 0111? : ->phím 2 được nhấn

-R1R2R3R4 = 1011? : ->phím 5 được nhấn

Page 64: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 64

64 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

-R1R2R3R4 = 1101? : ->phím 8 được nhấn

-R1R2R3R4 = 1110? : ->phím 0 được nhấn

Xuất tín hiệu ra các cột C1C2C3C4: 1101

Đọc trạng thái tại các hàng R1R2R3R4?

-R1R2R3R4 = 0111? : ->phím 3 được nhấn

-R1R2R3R4 = 1011? : ->phím 6 được nhấn

-R1R2R3R4 = 1101? : ->phím 9 được nhấn

-R1R2R3R4 = 1110? : ->phím # được nhấn

Xuất tín hiệu ra các cột C1C2C3C4: 1110

Đọc trạng thái tại các hàng R1R2R3R4?

-R1R2R3R4 = 0111? : ->phím A được nhấn

-R1R2R3R4 = 1011? : ->phím B được nhấn

-R1R2R3R4 = 1101? : ->phím C được nhấn

-R1R2R3R4 = 1110? : ->phím D được nhấn

Lặp lại điểm bắt đầu->……..

6.3 PHỤ LỤC

� Các mức điện áp sử dụng ở chế độ input

Ở chế độ này sẽ đọc mức điện áp ở chân I/O pin, và truyền dữ liệu đọc được trong thông qua

Data bus. Mức điện áp ở đây chỉ có một hoặc hai giá trị là là 1 hoặc 0, mức điện áp để nhận ra các

mức như sau:

• Mức logic 0: điện áp từ Vss đến 0,15Vdd khi điện áp cung cấp cho chip là <4,5V, và

Vss đến 0,8 V nếu điện áp từ 4,5 đến 5,5V.

• Mức logic 1: 0,25VDD + 0,8 đến VDD khi điện áp cấp bé hơn 4,5V, và từ 2.0 đến

VDD nếu điện áp cung cấp cho chip từ 4,5 đến 5,5V.

Đối với nhưng I/O có ngõ vào là Trigger Schmitt thì điện áp vào tương ứng là:

Logic 0: là Vss đến 0,2VDD, logic 1: 0,8VDD đến VDD.

Page 65: Pic Ccs Full

65 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bảng 6.1 Mức điện áp ở chế độ input

� Chú ý: khi điện áp cung cấp là mức nằm giữa mức logic 0 và 1 ở trên thì hoàn toàn

không đọc được, gây ra sai. Do đó khi thiết kế phải chú ý mức logic phải nằm trong hai

khoảng điện áp này.

Page 66: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 66

66 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 7 : TIMER

7.1 TIMER

7.1.1 Timer là gì?

Timer là bộ định thời có chức năng định mức một khoảng thời gian. Timer được dùng để hoạch

định thời gian cho các tác vụ của CPU. Nguyên lý timer được cho ở hình 7.1.

Hình 7.1 - Nguyên lý timer

Như ở hình 7.1 ta thấy: timer bao gồm 2 khối chính kết nối tuần tự với nhau, đó là bộ điều chế

xung và bộ đếm xung.

� Bộ điều chế xung:

Bộ điều chế xung có chức năng nhận các xung từ ngõ vào có tần số fin và điều chế ra xung ngõ

ra có cùng biên độ tín hiệu nhưng có tần số là fout. Để làm điều này bộ điều chế xung sử dụng một

bộ chia tần số. Các hệ số của bộ chia này tương ứng Prescaler và Postscaler. Như vậy ta có hệ

thức:

fout = fin / Prescaler/Postscaler

Trong nhiều trường hợp chỉ có 1 trong 2 thông số Prescaler hoặc Postscaler được cho. Trong

trường hợp đó thông số còn lại có giá trị là 1.

� Bộ đếm xung:

Bộ đếm xung nhận đầu vào là xung có tần số fout là ngõ ra của bộ điều chế xung. Mỗi khi có một

xung xuất hiện, thanh ghi giá trị của bộ đếm xung được tăng lên 1. Căn cứ vào giá trị của thanh ghi

này và tần số xung fout ta có thể tính được thời gian mà timer hoạt động. Rõ ràng ta có:

Thời gian timer = Thanh ghi giá trị/ fout

Page 67: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 67

67 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Giới hạn của thanh ghi giá trị được gọi là giới hạn của timer và được hiểu là số bit của timer đó

(số bit timer = số bit của thanh ghi giá trị). Khi giá trị trong thanh ghi này đạt giới hạn timer sẽ

kích hoạt một bit (gọi là bit cờ timer) để thông báo cho hệ thống biết là timer đã tràn.

Thanh ghi giá trị là một thanh ghi vật lý nên có thể tương tác được bằng phần mềm. Dựa vào

đặc điểm này ta có thể cài đặt giá trị ban đầu của thanh ghi giá trị (InitValue). Khi timer được kích

hoạt, bộ đếm xung sẽ tăng giá trị của thanh ghi giá trị từ điểm đầu này cho đến lúc tràn. Bằng cách

cài đặt những giá trị đầu khác nhau, rõ ràng ta có thể định được thời gian tràn cho timer là khác

nhau (xem hình 7.2)

0MaxValue = 2số bitInitValue

Khoảng giá trị timer hoạt động

Hình 7.2 - Điều chỉnh thời gian timer bằng thanh ghi giá trị

7.1.2 Tính toán timer

Như vậy, dựa vào cấu tạo của timer ta có thể thấy có 3 yếu tố ảnh hưởng tới thời gian tràn của

một timer:

- Tần số xung fout - Giới hạn timer: MaxValue = 2 số bit timer (giá trị cuối của thanh ghi giá trị)

- Giá trị đầu của thanh ghi giá trị: InitValue

Gọi: t – thời gian timer cần định thời (tính theo s)

Với 2 giá trị đầu và cuối này ta dễ dàng tính được số xung mà bộ đếm timer có thể đếm được

trước khi tràn:

Số xung đếm được = MaxValue – InitValue

Mà:

Số xung đếm được = t. fout = � (���

���������.��������)

Từ đó suy ra:

InitValue = MaxValue - � (���

���������.��������)

Hay: �������� = 2�ô� � ��� − � (���

���������.��������)

Page 68: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 68

68 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Đây chính là hệ thức tính giá trị cài đặt cho thanh ghi giá trị của timer dựa vào: số bit timer, thời

gian cần cài đặt và tần số xung ngõ vào.

Trong trường hợp vi điều khiển, chế độ định thời, tần số xung ngõ vào fin = FOSC/4 ta có hệ

thức:

�������� = 2�ô� � ��� − � (���

4.�� ����.�� � ����)

7.2 TƯƠNG TÁC VỚI TIMER

7.2.1 Quy trình khai báo timer như sau:

� Cài đặt

• Cài đặt chế độ hoạt động cho timer (8 bit/16 bit)

• Cài đặt nguồn xung cho timer (timer/counter)

• Cài đặt Prescaler cho timer

• Tính toán và cài đặt thời gian (nếu ở chế độ timer) cho timer

� Hoạt động

• Kích hoạt timer

• Chờ timer tràn

• Khi timer tràn – xử lý – reset cờ

• Nạp lại timer

Trên đây là quy trình tương tác với 1 timer. Tuy nhiên, điều này chỉ thực hiện được khi ta

tương tác với các thanh ghi quy định timer (sử dụng trong các ngôn ngữ ASM, C18, C30,

HiTechC...) Đối với CCSC, thư viện về timer đã được hỗ trợ sẵn nhiều hàm tương tác. Ta sẽ giới

thiệu tiếp theo ở phần tiếp theo sau đây:

7.2.2 Các hàm tương tác với timer trên PIC trong CCSC

� setup_timer_X(mode)

Đây là hàm cài đặt các trạng thái hoạt động của timerX.

Page 69: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 69

69 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bảng 7.1 Các chế độ (mode)

STT Timer Loại Cú pháp Ý nghĩa 1 Timer0

Xung vào RTCC_INTERNAL Dùng xung nội

2 RTCC_EXT_L_TO_H Dùng xung ngoài cạnh lên 3 RTCC_EXT_H_TO_L Dùng xung ngoài cạnh xuống 4

Prescaler/ Postscaler

RTCC_DIV_2 Prescaler = 2 5 RTCC_DIV_4 Prescaler = 4 6 RTCC_DIV_8 Prescaler = 8 7 RTCC_DIV_16 Prescaler = 16 8 RTCC_DIV_32 Prescaler = 32 9 RTCC_DIV_64 Prescaler = 64 10 RTCC_DIV_128 Prescaler = 128 11 RTCC_DIV_256 Prescaler = 256 12

Control RTCC_OFF Tắt timer0

13 RTCC_8_BIT Timer0 8 bit 14 RTCC_16_BIT Timer0 16 bit

� set_timerX(value)

hàm này dùng để cài đặt giá trị cho thanh ghi giá trị timer.

- X: Số timer (0, 1, 2, 3,...)

- Value: được tính theo công thức ở phần 7.1.2

Riêng đối với timer0 có thể dùng hàm này: set_rtcc(value)

� value=get_timerX

Hàm dùng để đọc giá trị hiện tại của thanh ghi giá trị timer (thường dùng trong chế độ counter)

- X: số timer (0, 1, 2, ...)

- Value: biến lưu giá trị timer

� Ngắt liên quan: INT_TIMERX or INT_RTCC v ới timer0

Cờ timer được kết nối tới cơ chế ngắt. Khi timer tràn hệ thống sẽ kích hoạt một ngắt. Chính vì

lý do này khi cài đặt timer cần kết hợp với cài đặt ngắt timer (các thao tác cài đặt ngắt xem lại bài

5).

7.3 BÀI T ẬP

7.3.1 Yêu cầu: Dùng timer0 để viết hàm delay cho hệ thống.

Để tạo hàm Delay ta có thể sử dụng một lệnh lặp nào đó chẳng hạn vòng lặp for để xác định

thời gian delay cần thiết, tuy nhiên khi thực hiện bằng phương pháp này khó xác định được chính

xác thời gian. Để xác định chính xác thời gian cần thiết phải sử dụng một bộ định thời để làm việc

này.

Page 70: Pic Ccs Full

70 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

7.3.2 Giải thuật (GV sẽ giảng trên lớp)

7.3.3 Thực hành: KIT thí nghi ệm sử dụng thạch anh có tần số dao động 25MHz.

7.4 MỞ RỘNG – WATCH DOG TIMER (WDT)

WDT là bộ định thời chuyên dụng để cài đặt thời gian time out cho hệ thống. Khi một lệnh của

hệ thống thực thi WDT sẽ được reset, nếu hệ thống treo trong thời gian vượt quá thời gian cài đặt,

WDT tự động reset lại hệ thống.

Hình 7.3 - Watch Dog Timer

WDT nhận xung dao động từ bộ tạo xung nội, chính vì thế nếu sử dụng WDT thì cũng phải

dùng bộ dao động nội của vi điều khiển. Ở chế độ bình thường WDT được cài đặt tràn ở 4 ms. Tuy

nhiên thời gian reset hệ thống của WDT có thể được tăng lên nhờ cài đặt Postscaler bằng phần

mềm (xem hình 7.3, 7.4).

Page 71: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 71

71 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 8 : BÀI T ẬP GIỮA KHÓA

8.1 YÊU CẦU

Hình 8.1 - Sơ đồ phần cứng mạch thí nghiệm

8.1.2 Bài tập 1: Đồng hồ số:

Với phần cứng trên chúng ta có thể thiết kế một đồng hồ số dùng timer. Thiết bị hiển thị là 6 led

7 đoạn (2 led cho giây, 2 led cho phút, 2 led cho giờ). Khi cần thay đổi hay cài đặt lại giá trị giờ ta

dùng các phím đơn làm phím điều khiển. Cơ chế nhận tác động của các phím đơn là cơ chế ngắt.

Giá trị giờ, phút, giây được nhập vào trong chế độ cài đặt bằng bàn phím ma trận. Led đơn dùng

làm led báo tín hiệu cài đặt tương ứng.

8.1.3 Bài tập 2: Máy tính bỏ túi:

Với phần cứng trên ta cũng có thể thiết kế một máy tính bỏ túi đơn giản với các phép tính cộng,

trừ, nhân, chia. 4 phím quy định phép tính là 4 phím đơn nhận vào bằng cơ chế ngắt. Các giá trị

hạng tử được nhập bằng bàn phím ma trận. Lỗi được hiển thị bằng các led đơn (2 led cho 4 mã

lỗi), 2 led đơn còn lại hiển thị cho 4 phép tính. Các giá trị trong quá trình nhập cũng như kết quả

được hiển thị qua 6 led 7 đoạn.

Mỗi nhóm học viên chọn 1 trong 2 bài để làm tại lớp, bài còn lại dành cho về nhà

8.2 MÔ TẢ PHẦN CỨNG

� Vi điều khiển: PIC18F4620, sử dụng thạch anh 24MHz.

Page 72: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 72

72 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

� Kết nối PORT sẽ được hướng dẫn tại lớp

8.3 GIẢI THUẬT

(GV hướng dẫn trực tiếp trên lớp)

8.4 CHƯƠNG TRÌNH

Chương trình được giải tại lớp

Page 73: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 73

73 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 9 : NGÔN NGỮ LẬP TRÌNH C NÂNG CAO

9.1 CÁC KI ỂU DỮ LIỆU NÂNG CAO TRONG C

Bảng 9.1 Các kiểu dữ liệu nâng cao trong C

char ‘a’�’z’; ‘A’ �’Z’; ‘0’ �’9’ Ki ểu ký tự 1B dữ liệu

float -1.175e-38 � 3.402e38 Kiểu số thực 4Bs dữ liệu

signed long -2147483648 � 2147483647 Kiểu số nguyên có dấu mở

rộng

4Bs dữ liệu

unsigned long 0 � 4294967295 Kiếu số nguyên không dấu

mở rộng

4Bs dữ liệu

9.2 CÁC HÀM THÔNG D ỤNG TRONG THƯ VIỆN C CHUẨN:

9.2.1 Các hàm chuyển đổi kiểu dữ liệu:

Yêu cầu bắt buộc:

#include <stdlib.h>

� atoi(data):

• Chức năng: chuyển đổi dữ liệu (data) sang kiểu số nguyên int.

• Tham số truyền vào: đưa vào phải bắt đầu bằng ký tự, nếu không chương trình sẽ bị lỗi

và không thực hiện được

• Dữ liệu trả về: dữ liệu trả về kiểu int.

� atol(data):

• Chức năng: chuyển đổi dữ liệu (data) sang kiểu long

• Tham số truyền vào: đưa vào phải bắt đầu bằng ký tự, nếu không chương trình sẽ bị lỗi

và không thực hiện được

• Dữ liệu trả về: trả về dữ liệu kiểu long

� atof(data):

• Chức năng: chuyển đổi kiếu dự liệu (data) từ dạng chuỗi sang dạng số thực float.

Page 74: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 74

74 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

• Tham số truyền vào: đưa vào phải bắt đầu bằng ký tự, nếu không chương trình sẽ bị lỗi

và không thực hiện được.

• Dữ liệu trả về: dữ liệu trả về thuộc kiểu float

9.2.2 Các hàm xử lý chuỗi:

Yêu cầu bắt buộc:

#include <string.h>

� strlen(str):

• Chức năng: đo độ dài chuỗi str

• Tham số truyền vào: str thuộc kiểu chuỗi

• Dữ liệu trả về: giá trị trả về chính là số ký tự trong chuỗi str, kiểu unsigned int

� strcat(str1,str2):

• Chức năng: nối 2 chuỗi str1 và str2

• Tham số truyền vào: str1 và str2 thuộc kiểu chuỗi

• Dữ liệu trả về: dữ liệu trả về thuộc kiểu chuỗi

� strcpy(str1, str2):

• Chức năng: sao chép từ chuỗi str1 sang chuổi str2

• Tham số truyền vào: str1 và str2 thuộc kiểu chuỗi

• Dữ liệu trả về: không có kiểu dữ liệu trả về

9.2.3 Các hàm toán học:

Yêu cầu bắt buộc:

#include <math.h>

� abs(data):

• Chức năng: lấy giá trị tuyệt đối một số

• Tham số truyền vào: data truyền vào thuộc kiểu số (char, int, long, float…)

• Dữ liệu trả về: dữ liệu trả về là dạng unsigned của dữ liệu truyền vào

� acos(data), asin(data), atan(data):

Page 75: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 75

75 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

• Chức năng: dùng để lấy các giá trị arcsin, arccos, arctan của dữ liệu

• Tham số truyền vào: dữ liệu đưa vào bắt buộc phải là kiếu số (char, int, long, float…)

• Dữ liệu trả về: kiếu dữ liệu trả về thuộc kiểu float

� cos(data), sin(data), tan(data):

• Chức năng: dùng để lấy các giá trị sin, cos, tan của dữ liệu

• Tham số truyền vào: dữ liệu đưa vào bắt buộc phải là kiếu số (char, int, long, float…)

• Dữ liệu trả về: kiếu dữ liệu trả về thuộc kiểu float

Page 76: Pic Ccs Full

76 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 10 : LCD

10.1 TỔNG QUAN VỀ LCD

10.1.1 LCD là gì?

LCD (Liquid Crystal Display) là một thiết bị hiển thị dạng điểm ảnh có màn hình dạng tinh thể

lỏng. LCD được sử dụng rất rộng rãi ngày nay.

10.1.2 Các loại LCD trên th ị trường

10.1.2.1 Character LCD

Character LCD là loại LCD chỉ thể hiện được các ký tự (“A” � “Z”, “a” � “z”, “0” � “9”).

Thông thường trên thị trường chỉ có một số kích cỡ LCD như 16x2 (16 cột – 2 dòng), 20x4 (20 cột

– 4 dòng).

Hình 10.1 - Graphic LCD

10.1.2.2 Graphic LCD

Graphic LCD được hiển thị bằng các điểm ảnh (dot). Chúng ta tạm chia loại này thành 2 loại

chính: Black/White LCD, Colour LCD.

Hình 10.2 - Graphic LCD

Về mặt kích thước loại LCD này khá đa dạng, một số kích thước thông dụng trên thị trường

như: 128 x 64, 240 x 128 …

Page 77: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 77

77 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Ngoài ra LCD còn có thể tích hợp tính năng nhận dữ liệu dạng TouchScreen (TouchScreen

LCD). Chương trình này chỉ xét tới LCD dạng Character LCD được điều khiển bởi chip HD

44780.

10.2 GIAO DI ỆN LCD - HD 44780

Hình 10.3 - Giao diện LCD HD44780

Giao diện loại LCD ký tự HD 44780 được cho như ở hình 10.3. Trong đó 3 chân EN, RS, RW

là 3 chân điều khiển; các chân DB0 – DB7 là bộ chân dữ liệu.

LCD hoạt động ở 2 chế độ: 4 bit và 8 bit, trong trường hợp 4 bit, chỉ có các chân từ DB4 – DB7

được kết nối với vi điều khiển, các chân DB0 – DB3 được bỏ trống.

10.3 CÁC HÀM T ƯƠNG TÁC VỚI LCD TRONG CCSC

� #include <lcd.c>

Dòng lệnh tiền xử lý trên có tác dụng load thư viện lcd.c trong hệ thống vào file code. Từ đó ta

mới có thể dùng các hàm trong thư viện này.

� lcd_init();

Hàm này là hàm khởi tạo LCD. Khi dùng LCD hàm phải được gọi ở đầu chương trình main.

� lcd_putc(char);

Hàm hiển thị ra LCD một ký tự.

� printf(lcd_putc, cstring, value...);

Hàm hiển thị LCD với nhiều sự lựa chọn khác nhau. Đây là hàm mạnh nhất và thông dụng nhất

trong hiển thị LCD. Trong đó:

- lcd_putc: tên hàm hiển thị LCD (nếu không có hàm này hàm printf sẽ dùng cho truyền

nhận chuỗi qua chuẩn RS232

- cstring: là một tập hợp các định dạng của dữ liệu (nếu có), cụ thể cho ở bảng sau

Bảng 10.1 Bảng các định dạng cstring trong LCD

STT Tên định dạng Ý nghĩa

1 %c Character

Page 78: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 78

78 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

2 %s String as character

3 %d Signed interger 8bit

4 %u Unsigned interger 8 bit

5 %Lu Long unsigned int

6 %Ld Long signed int

7 %x Hex int (lower case)

8 %X Hex int (upper case)

9 %Lx Hex long int (lower case)

10 %LX Hex long int (upper case)

11 %f Float with truncated decimal

12 %g Float with rounded decimal

13 %e Float in exponential format

14 %w Kiểu số thực có xác định số số sau dấu phẩy

� Ví dụ:

- printf("HiThere"); - printf("RTCCValue=>%2x\n\r",get_rtcc()); - printf("%2u %X %4X\n\r",x,y,z); - printf(LCD_PUTC, "n=%u",n);

10.4 BÀI T ẬP

Sử dụng thư viện lcd.c trong CCSC hiển thị ra LCD chuỗi ký tự cho trước.

Page 79: Pic Ccs Full

79 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 11 : ADC (ANALOG – DIGITAL CONVERT)

• Tài liệu tham khảo: Datasheet 18F4620 – Chương 19

11.1 TỔNG QUAN VỀ ADC

11.1.1 ADC là gì?

ADC (Analog to Digital Convert) là một bộ chuyển đổi từ tín hiệu tuần tự (analog) sang tín hiệu

số (digital). Trong nội dung bài hôm nay, chúng ta chỉ xét đến các bộ chuyển đổi ADC được tích

hợp trong VĐK. Trước hết, chúng ta sẽ tìm hiểu một số khái niệm cơ bản của bộ ADC.

Hình 11.1 - Analog - Digital

11.1.2 Độ phân giải (Resolution)

Độ phân giải là số giá trị bit có thể có để chứa hết toàn bộ các giá trị của tín hiệu. Độ phân giải

được tính theo đơn vị bits. Độ phân giải càng cao thì tín hiệu thu được sẽ càng “mịn” – tức là gần

giống với tín hiệu tuần tự hơn.

Hình 11.2 - Độ phân giải bộ chuyển đổi ADC 3 bit

11.1.3 Giá tr ị tham chiếu:

Giá trị tham chiếu là các giá trị cao nhất và thấp nhấp của bộ chuyển đổi ADC. Ta xét đến một

ví dụ sau đây:

Page 80: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 80

80 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Giả sử bạn có một bộ ADC 10 bits, giá trị tham chiếu được chọn là Vref+ = 5V - Vref- = 0V.

Nếu bạn thu về một tín hiệu tuần tự 3V, thì bạn sẽ thu về được giá trị của ADC là

2�� − 1

5 − 0 (3 − 0) = 614

Nhưng nếu chúng ta chọn Vref+ = 5V và Vref- = 1.5V, khi ta thu về một tín hiệu tuần tự ở mức

3V, ta sẽ nhận được giá trị như sau

2�� − 1

5 − 1.5 (3 − 1.5) = 438

11.2 CÁC HÀM T ƯƠNG TÁC ADC TRONG CCSC

� #device ADC = 10: khai báo sử dụng bộ chuyển đổi ADC 10 bit

� #device ADC = 8: khai báo sử dụng bộ chuyển đổi ADC 8 bit

� setup_adc (mode); setup_adc2(mode);

Các hàm cài đặt sử dụng bộ ADC, mode là các chế độ cho bộ chuyển đổi được định nghĩa chi

tiết trong header file.

Bảng 11.1 Các trạng thái sử dụng của bộ chuyển đổi ADC trong CCSC

STT Trạng thái Ý nghĩa 1 ADC_OFF Tắt bộ chuyển đổi ADC 2 ADC_CLOCK_DIV_2 TAD = TOSC/2 3 ADC_CLOCK_DIV_4 TAD = TOSC/4 4 ADC_CLOCK_DIV_8 TAD = TOSC/8 5 ADC_CLOCK_DIV_16 TAD = TOSC/16 6 ADC_CLOCK_DIV_32 TAD = TOSC/32 7 ADC_CLOCK_DIV_64 TAD = TOSC/64 8 ADC_CLOCK_INTERNAL TAD = Internal 9 ADC_TAD_MUL_0 TACQ = 0*TAD 10 ADC_TAD_MUL_2 TACQ = 2*TAD 11 ADC_TAD_MUL_4 TACQ = 4*TAD 12 ADC_TAD_MUL_6 TACQ = 6*TAD 13 ADC_TAD_MUL_8 TACQ = 8*TAD 14 ADC_TAD_MUL_12 TACQ = 12*TAD 15 ADC_TAD_MUL_16 TACQ = 16*TAD 16 ADC_TAD_MUL_20 TACQ = 20*TAD 17 VSS_VDD Điện áp tham khảo lấy từ nguồn nuôi 18 VREF_VREF Điện áp tham khảo lấy từ bên ngoài (chân RA2, RA3) 19 VREF_VDD Vref(-) = Vref; Vref(+) = VDD 20 VSS_VREF Vref(-) = VSS; Vref(+) = VREF

Page 81: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 81

81 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

� setup_adc_ports(mode)

Hàm khai báo sử dụng các PORT trong ADC. Các mode sử dụng như sau:

Bảng 11.2 Các trạng thái sử dụng của kênh ADC trong CCSC (PIC18F4620)

STT Tr ạng thái Ý nghĩa 1 NO_ANALOGS Không sử dụng analog 2 ALL_ANALOG Tất cả các kênh đều được sử dụng 3 AN0_TO_AN11 Các kênh từ 0 tới 11 4 AN0_TO_AN10 Các kênh từ 0 tới 10 5 AN0_TO_AN9 Các kênh từ 0 tới 9 6 AN0_TO_AN8 Các kênh từ 0 tới 8 7 AN0_TO_AN7 Các kênh từ 0 tới 7 8 AN0_TO_AN6 Các kênh từ 0 tới 6 9 AN0_TO_AN5 Các kênh từ 0 tới 5 10 AN0_TO_AN4 Các kênh từ 0 tới 4 11 AN0_TO_AN3 Các kênh từ 0 tới 3 12 AN0_TO_AN2 Các kênh từ 0 tới 2 13 AN0_TO_AN1 Các kênh từ 0 tới 1 14 AN0 Kênh số 0

� set_adc_channel(channel)

Hàm cài đặt kênh ADC sử dụng. Trong đó: channel là giá trị quy định số kênh, 0, 1, 2, 3...

� read_adc()

Hàm đọc giá trị ADC, hàm trả về giá trị kiểu int16.

11.3 QUY TRÌNH T ƯƠNG TÁC ADC TRONG CCSC

� Cài đặt

- Cài đặt chế độ hoạt động của ADC : dùng hàm setup_adc(mode)

- Cài đặt số PORT ADC sử dụng : dùng hàm setup_adc_ports(mode)

� Vận hành:

- Chọn kênh ADC cần đọc : dùng hàm set_adc_channel(channel)

- Delay khoảng 2us : dùng hàm delay_us(2);

- Đọc giá trị ADC : dùng hàm read_adc();

Page 82: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 82

82 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

11.4 BÀI T ẬP

� Bài tập 1:

Đọc giá trị điện áp rớt trên biến trở, hiển thị ra LCD

� Bài tập 2:

Dùng timer1 cài đặt thời gian lấy mẫu cho bộ chuyển đổi ADC; đọc giá trị ADC từ biến trở và

hiển thị ra LCD.

Page 83: Pic Ccs Full

83 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 12 : USART

12.1 KHÁI QUÁT V Ề CÁC CHUẨN GIAO TI ẾP

USART (Universal Synchronous & Asynchronous serial Receiver and Tranreceiver) có nghĩ là

“Chuẩn truyền nhận nối tiếp đồng bộ và bất đồng bộ”, đây là một thuật ngữ để chỉ một chuẩn giao

tiếp. Ngoài ra, chúng ta còn phân biệt thuật ngữ UART (nghĩa là chuẩn truyền nhận bất đồng bộ),

thường để chỉ một thiết bị phần cứng. Khi chúng ta sử dụng chuẩn giao tiếp USART, chúng ta phải

sử dụng thêm một bộ phận phần cứng đính kèm, thường thì bộ phần phần cứng này là một mạch

đệm dùng để chuyển điện áp 0V đến 5V sang một mức điện áp khác cho phù hợp với loại giao

tiếp. Sau đây, chúng ta sẽ cùng tìm hiểu những khái niệm cơ bản của USART:

12.1.1 Giao tiếp nối ti ếp:

Giao tiếp nối tiếp là kiểu truyền nhận mà dữ liệu đi trong bus dữ liệu ở dạng từng bit một, khác

với chuẩn truyền nhận song song khi mà dữ liệu được truyền trong bus ở dạng “gói dữ liệu”. Hình

ảnh sau giúp chúng ta dễ hình dung hơn chuẩn giao tiếp nối tiếp/ song song:

Hình 12.1 - Giao tiếp song song vs nối tiếp

Ưu điểm lớn nhất của chuẩn giao tiếp nối tiếp là băng thông nhỏ, chuẩn phần cứng đơn giản

(chỉ có 1 hay 2 đường dữ liệu). Bên cạnh đó, chuẩn giao tiếp nối tiếp có khuyết điểm lớn nhất là,

thời gian truyền chậm, nhưng nhờ có sự phát triển của kỹ thuật nên dần dần những khuyết điểm đó

được loại bỏ.

12.1.2 Truy ền thông đồng bộ và bất đồng bộ:

Truyền thông đồng bộ là kiểu tryền được chuẩn hóa về mặt thời gian, nên khi dữ liệu được

truyền đi chúng ta cần phải có tín hiệu báo trước. Khi ấy, chuẩn truyền đồng bộ này cần ít nhất hai

chân (một chân dữ liệu và một chân xung nhịp). Nhưng nhờ đó mà độ tin cậy trong truyền nhận

cao hơn, dữ liệu sai sót ít hơn.

Page 84: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 84

84 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Khác với chuẩn truyền thông đồng bộ, chuẩn truyền bất đồng bộ là chuẩn truyền mà chúng ta

không cần có tín hiệu báo trước. Nhưng để nhận biết dữ liệu truyền nhận chúng ta cần tuân thủ các

nguyên tắc chung trong truyền nhận, nên từ đó chúng ta có chuẩn truyền nhận cho các giao tiếp bất

đồng bộ.

12.1.3 Baud Rate:

Baud Rate là một chuẩn về thời gian cho việc truyền nhận, hay nói cách khác Baud Rate chính

là số bit truyền được trong một giây.

12.1.4 Frame truyền:

Do truyền thông bất đồng bộ rất dễ xảy ra sai lệch trong quá trình truyền nhận, nên người ta mới

ra quy định về frame truyền. Frame truyền là một “gói” dữ liệu truyền trong đó bao gồm các thành

phần cơ bản sau:

• Start bit : bit báo bắt đầu gới truyền.

• Stop bit : bis báo kết thúc gói truyền.

• Data : dữ liệu cần truyền.

• Parity bit: bit kiểm tra lỗi, thường có 2 loại bit parity (chẵn và lẻ)

12.2 CÁC HÀM T ƯƠNG TÁC VỚI USART TRONG CCSC

12.2.1 Khai báo sử dụng

#use rs232 (option)

Trong đó ‘option’ là các lựa chọn cài đặt, cách nhau bởi dấu ‘,’ và có thể có các lựa chọn như ở

bảng 12.1

Bảng 12.1 Các lựa chọn cài đặt cho USART trong CCSC

STT Options Ý nghĩa

1 STREAM=id Cài đặt ID cho thiết bị, ID này có thể được dùng trong các hàm truyền nhận như fputc()

2 BAUD=x Cài đặt baudrate (theo chuẩn RS232)

3 XMIT=pin Khai báo chân truyền

4 RCV=pin Khai báo chân nhận

Page 85: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 85

85 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

5 BRGH1OK Sử dụng buadrate mức cao

6 ENABLE=pin Chân này sẽ được kích khi có tín hiệu truyền (thường dùng để điều khiển RS485

7 DEBUGGER Cho phép debugger hoạt động khi truyền nhận

8 RESTART_WDT Cho phép hàm getc() ‘clear’ WDT

9 PARITY=X Khai báo parity bit, x có thể là N, E, hay O.

10 BITS =X Khai báo số bit truyền, x có thể 8-9

11 LONG_DATA Khai báo hàm getc() trả về 1 số int16 (được sử dụng khi truyền nhận 9 bit)

12 DISABLE_INTS Tắt ngắt

13 STOP=X Cài đặt stop bit (mặc định là 1)

14 TIMEOUT=X Cài đặt thời gian timeout khi nhận dữ liệu

15 UART1 Cài đặt chân truyền nhận cho module UART1

16 UART2 Cài đặt chân truyền nhận cho module UART2

Ngoài ra ta có thể dùng hàm setup_uart(baud, stream) để thay đổi cài đặt của module USART

trong khi chương trình hoạt động thay vì cài đặt ban đầu bởi chỉ thị tiền xử lý như cách trên.

12.2.2 Các hàm truyền dữ liệu

� Putc(character)

Hàm gửi 1 byte qua RS232

� Puts(cstring)

Hàm gửi 1 chuỗi qua RS232

� Printf( option)

Hàm gửi dữ liệu qua RS232 (xem thêm ở bài LCD)

12.2.3 Các hàm nhận dữ liệu

� Value = Getc()

Hàm nhận một byte dữ liệu từ RS232, hàm trả về kiểu int8

Page 86: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 86

86 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

� gets(string) hoặc Value = fgets(string, stream)

Hàm nhận 1 chuỗi từ RS232, hàm trả về dữ liệu string. Stream là ID của thiết bị

12.3 BÀI T ẬP

� Bài tập 1:

Viết chương trình truyền nhận 1 byte qua chuẩn RS232

� Bài tập 2:

Gửi các dữ liệu thu thập được từ ADC ở bài 11 lên máy tính

Page 87: Pic Ccs Full

87 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 13 : PWM / CAPTURE / COMPARE

13.1 TỔNG QUAN VỀ PWM/CAPTURE/COMPARE

13.1.1 PWM là gì?

PWM (Pulse-Width Modulation) còn gọi là chức năng “điều chế độ rộng xung” được ứng dụng

rất nhiều trong các lĩnh vực điện tử, điều khiển... Chức năng này thực chất là thay đổi giá trị trung

bình của điện áp (dòng điện,...) bằng cách điều chỉnh độ rộng xung kích mức cao trong một chu

kỳ. Chức năng này thường được ứng dụng trong việc điều chỉnh điện áp đầu ra, điều chỉnh tốc độ

của động cơ DC...

Hình 13.1 - Nguyên lý phương pháp điều rộng xung

� Các thông số đặc trưng của xung sử dụng trong phương pháp điều rộng xung

Biên độ xung: Là điện áp 2 ngưỡng của xung, ta gọi các mức điện áp này là V+ và V-

Tần số xung: Là tần số xung ngõ vào, thông số này không thay đổi khi ta sử dụng phương pháp

độ rộng xung. Tuy nhiên tần số xung là một trong những tham số quan trọng để tính toán độ nhấp

nhô của áp ngõ ra (thường dùng trong các nguồn xung). Ký hiệu tần số: f

Độ rộng xung: Đây là khoảng thời gian xung ở mức V+ trong một chu kỳ. Ký hiệu độ rộng: w

� Công thức tính toán điện áp ngõ ra

� Đ�ệ� á� � �� � � � � ���. �

� Trong đó: � �. �; T là thời gian xung ở mức cao.

Page 88: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 88

88 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

13.2 QUY TRÌNH SỬ DỤNG MODULE PWM TRONG PIC

13.2.1 Quy trình sử dụng PWM

� Khai báo sử dụng chức năng PWM

� Cài đặt timer 2

� Tính toán và cài đặt Period

� Tính toán và cài đặt duty cycle

13.2.2 Các hàm tương tác PWM trong CCSC

� Setup_CCPX(mode)

Hàm cài đặt các chế độ hoạt động của module CCP.

Trong đó:

- X là số module CCP (X nhận các giá trị số 1, 2, 3....)

- ‘mode’ là danh sách các chế độ, được định nghĩa chi tiết trong header file của từng dòng

PIC. Nếu có nhiều ‘mode’ thì các mode này cách nhau bởi dấu ‘,’. Một số chế độ được

trình bày ở bảng 13.1

Bảng 13.1 Một số chế độ hoạt động của CCP

STT Loại Tên Ý nghĩa

1 ĐK CCP_OFF Tắt module CCP

2

Capture mode

CCP_CAPTURE_FE Chế độ capture cạnh lên

3 CCP_CAPTURE_RE Chế độ capture cạnh xuống

4 CCP_CAPTURE_DIV_4 Chế độ capture /4

5 CCP_CAPTURE_DIV_16 Chế độ capture /16

6

Compare mode

CCP_COMPARE_SET_ON_MATCH Chế độ compare tạo xung lên

7 CCP_COMPARE_CLR_ON_MATCH Chế độ compare tạo xung xuống

8 CCP_COMPARE_INT Dùng ngắt compare

9 CCP_COMPARE_RESET_TIMER Reset timer khi compare

10 PWM mode

CCP_PWM Chế độ PWM

11 CCP_PWM _H_H Chế độ PWM high to high

Page 89: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 89

89 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

12 CCP_PWM _H_L Chế độ PWM high to low

13 CCP_PWM _L_H Chế độ PWM low to high

14 CCP_PWM _L_L Chế độ PWM low to low

� Setup_timer2(prescaler, period, postscaler)

Hàm cài đặt cho timer 2 dùng trong module PWM. Trong đó

- Prescaler: hệ số chia trước (xem trong header file phần timer)

- Postscaler: hệ số chia sau

- Period: là một số nguyên 8 bit, thể hiện chu kỳ của xung PWM được tính theo công

thức: (T trong công thức tính theo đơn vị là giây)

����� = � (���

4.�� ����.�� � ����)

� Set_PWMX_duty(duty cycle)

Hàm dùng để cài đặt giá trị ‘duty cylce’ cho bộ điều chế độ rộng xung PWM. Giá trị ‘duty

cycle’ là một con số từ 0 – 255 được tính toán theo tỉ lệ phần trăm dựa trên thông số ‘period’.

13.3 BÀI T ẬP

� Bài tập 1:

Sử dụng chức năng PWM để điều khiển tốc độ động cơ DC

� Bài tập 2:

Thiết kế hệ thống giám sát tốc độ động cơ DC bằng máy tính

� Bài tập 3:

Thiết kế hệ thống điều chỉnh tốc độ động cơ DC (đầu vào có thể là analog hoặc digital)

13.4 PHẦN MỞ RỘNG - ENCODER

13.4.1 Encoder là gì?

Để điều khiển được một động cơ DC đúng với vận tốc hay vị trị cần thiết, chắc chắn rằng chúng

ta phải đọc được vận tốc hay vị trí hiện tại của nó. Từ ta có 3 phương pháp chính:

Dùng tachometer (Tachometer là một cảm biến đo góc) Dùng biến trở xoay (thường phương pháp này dùng để xác định vị trí, ít khi nào dùng xác định vận tốc)

Dùng optical enocoder.

Page 90: Pic Ccs Full

90 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Hình 13.2 - Encoder là gì ???

Encoder là một loại cảm biến bao gồm 2 phần chính:

• Một bộ thu – phát tín hiệu quang học (cảm biến quang)

• Một đĩa kim loại có khắc vạch.

Độ chính xác của một encoder phụ thuộc rất lớn vào số vạch khác trên đĩa kim loại, cũng như

thời gian đáp ứng của bộ cảm biến quang học.

13.4.2 Phân loại encoder:

Có 2 loại encoder:

• Encoder tuyệt đối : thường được ứng dụng nhiều trong các hệ thống đo vị trí.

• Encoder tương đối: loại encoder này dùng rất nhiều và khá phổ biến. Nên từ nay chúng

ta thống nhất khi nói đến encoder, thì đó chính là encoder tương đối.

13.4.3 Tín hiệu đầu ra encoder:

Một encoder thường có 5 chân, bao gồm các chân sau:

• 2 chân cho nguồn và mass.

• 1 chân cho pharse A

• 1 chân cho pharse B

• 1 chân cho pharse Z

Page 91: Pic Ccs Full

91 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Hình 13.3 - Tín hiệu ngõ ra phase A, B trong encoder

Tín hiệu Pharse A và pharse B thường lệch nhau ½ chu kỳ, thường thì chúng ta dùng hai tín

hiệu này để nhận biết chiều quay của encoder.

13.4.4 Các phương pháp đọc tín hiệu encoder:

� Dùng chức năng Capture:

Ta dùng chức năng capture để đo chu kỳ của encoder, từ đó chúng ta có thể tính toán được vận

tốc của động cơ DC.

� Dùng chức năng Timer1:

Ta dùng chân T13CKI để thu nhận tín hiệu từ encoder gởi về (xem xung từ encoder như một

nguồn xung). Bên cạnh đó ta có thể kết hợp thêm chức năng Timer 0 để tính toán vận tốc của động

cơ DC.

� Dùng chức năng ngắt ngoài:

Dùng các kênh ngắt INTx để thu nhận tín hiệu từ encoder (xem xung từ encoder như một nguồn

kích). Bên cạnh đó, ta có thể kết hợp thêm chức năng Timer0 (đo thời gian) để tính toán vận tốc

của động cơ DC.

Page 92: Pic Ccs Full

92 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 14 : SPI – I2C

VÀ CÁC PHƯƠNG PHÁP LƯU TRỮ DỮ LIỆU

14.1 TỔNG QUAN VỀ SPI

SPI (Serial Peripheral Bus) là một chuẩn giao tiếp đồng bộ - nối tiếp do hãng Motorola đề xuất.

SPI là một chuẩn giao tiếp theo kiểu Master – Slave, với một chip Master điều khiển hoạt động

truy xuất của hàng loạt chip Slave. SPI cũng là một chuẩn giao tiếp song công (full duplex), theo

đó dữ liệu truyền và nhận đồng thời. Ở một số tài liệu, người ta còn gọi chuẩn SPI là chuẩn giao

tiếp 4 dây, với 4 đường truyền:

� SCK : xung giữ nhịp cho giao tiếp SPI, xung clock được phát ra từ chip Master và chip

Slave sẽ nhận xung và đồng bộ quá trình truy ền nhận. Nhờ có chân SCK mà quá trình

truy ền – nhận diễn ra ít lỗi hơn, và nhanh hơn.

� SDI : chân phát dữ liệu cho Master / Slave.

� SDO : chân thu nhận dữ liệu cho Master/Slave.

� SS (Select Slave) : đối với Master thì đây sẽ là chân chọn chip Slave nào sẽ truy ền, còn

đối với chip Slave thì đây là chân cho phép có truyền – nhận với chip Master.

14.2 HOẠT ĐỘNG CỦA SPI

14.2.1 Phần cứng ban đầu bao gồm

� Chân Master SDI nối với chân Slave SDO.

� Chân Master SDO nối với chân Slave SDI.

� Chân SCK của 2 chip nối với nhau.

� Một chân IO bất kỳ của Master nối với chân SS của Slave.

Hình 14.1 - Truyền nhận qua SPI

14.3 SPI TRONG PIC

// GV sẽ trình bày tại lớp

Page 93: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 93

93 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

14.4 MỞ RỘNG – I2C

14.4.1 Kiên thức cơ bản về giao tiếp I2C:

I2C (Inter-Intergrade Circuit) là một chuẩn truyền thông do hãng Philip Semiconductor đề xuất.

I2C là chuẩn đồng bộ - nối tiếp, tuy nhiên I2C có một đặc điểm khá hay là giao tiếp này là một

giao tiếp đa chủ, tức là một chip vừa có thể là Slave mà cũng có thể là Master. Trong một mạng

I2C với các chip đồng chức năng (cùng hỗ trợ Master – Slave) thì trong một thời điềm một chip có

thể là Master nhung một thời điểm khác nó có thể là Slave. Nhưng đối với các chip nhớ do thiết

kế của các nhà sản xuất nó chỉ hỗ trợ ở chế độ Slave.

14.4.2 Cấu hình phần cứng của giao tiếp I2C:

� Master là chip giữ vai trò điều phối thông tin trong mạng điều khiển, khi cần giao tiếp

với Slave nào thì Master chỉ việc gởi địa chỉ đến Slave đó, và bắt đầu quá trình giao

tiếp.

� Slave là chip thực thi trong mạng giao tiếp, trong mỗi chip Slave có chức một địa chỉ

trong mạng giao tiếp.

� SDA là đường truyền dữ liệu chính cho cả giao tiếp, tất cả dữ liệu phải được truyền

trên đường dư liệu này.

� SCL là đường xung nhịp đồng bộ hóa việc truyền nhận cho giao tiếp.

14.4.2.1 Các bit điều khiển cho giao tiếp I2C:

� Start: điều kiện bắt đầu từ trạng thái nghỉ, khi Master muốn bắt đầu quá trình truy ền

nhận, thì bắt buộc Master phải kéo SDA từ cao xuống thấp trong khi SCK vẫn ở mức

cao.

� Stop: điều kiện kết thúc, khi Master muốn kết thúc việc truyền nhận dữ liệu thì bắt

buộc Master phải kéo SDA từ cao xuống thấp trong khi SCL vẫn còn đang ở mức cao.

Quy trình Stop xảy ra chỉ khi việc truyền nhận kết thúc.

� Repeat: Khi việc truyền nhận kết thúc thay vì Master kết thúc quá trình truy ền truy ền

nhận bằng Stop bit, nhưng Master lại gởi ti ếp Start bit , trong tr ường hợp này ta gọi

đó là Repeat Start. Trường hợp này xảy ra khi Master muốn nhận dữ liệu liên tiếp từ

Slave.

� ACK: đây là bit dùng để báo hiệu xem việc truyền dữ liệu đã hoàn thành chưa.

Thường bit này được gởi từ Slave, Slave dùng nó để báo cho Master mình đã nhận đủ

dữ liệu.

Page 94: Pic Ccs Full

94 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

14.4.2.2 Địa chỉ Slave:

Địa chỉ thường được gởi đi từ Master đến Slave, địa chỉ chứa Slave mà nó mong muốn truyền

tới. Địa chỉ cũng là gói dữ liệu đầu tiên của một lần truyền. Cấu trúc gói địa chỉ bao gồm:

� 7 bits địa chỉ.

� 1 bit điều khiển hướng truyền (Read/Write).

14.4.2.3 Kết cấu một gói truyền:

Một gói truyền cơ bản bao gồm:

Thông thường người ta phối hợp giữa gói địa chỉ và gói dữ liệu:

14.4.2.4 Cuộc gọi chung:

Cuộc gọi chung là cuộc gọi mà địa chỉ có dạng 0000000W (địa chỉ = 0 và bít điều khiển hướng

là W). Cuộc gọi chung xảy ra khi Master muốn truyền dữ liệu cho tất cả Slave. Tất nhiên, trong

trường hợp này Slave có thể nhận hay không nhận cuộc gọi chung từ Master (tùy theo Slave có

được cài đặt chế độ cho phép nhận cuộc gọi chung hay không).

Page 95: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 95

95 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

14.5 CÁC PHƯƠNG PHÁP LƯU TRỮ DỮ LI ỆU

Với những dữ liệu tồn tại lâu dài theo thời gian ta bắt buộc phải lưu trữ. Việc lưu trữ dữ liệu

trong liên quan tới PIC có thể được chia làm 2 loại: có bộ nhớ ngoài và không có bộ nhớ ngoài.

Nếu không dùng bộ nhớ ngoài dữ liệu được lưu trữ trong EEPROM được hỗ trợ của PIC. Nếu

dùng bộ nhớ ngoài có thể dùng EEPROM ngoài hoặc các thiết bị lưu trữ khác như thẻ nhớ, USB,

máy tính… Ở nội dung bài này chỉ trình bày 2 vấn đề: Data EEPROM Memory và Extenal

EEPROM Memory.

14.5.1 Tài liệu tham khảo:

Chương 7, 17, 18 – Datasheet 18F4620

14.5.2 Data EEPROM Memory

14.5.2.1 Kiến trúc

Như chúng ta đã biết EEPROM là bộ nhớ có thể đọc, ghi bằng các tín hiệu điện và hoàn toàn

không bị mất khi ngắt nguồn nuôi. Chính vì thế bộ nhớ này được dùng để lưu trữ các dữ liệu tồn

tại lâu dài theo thời gian kể cả khi hệ thống dừng hoạt động.

Về mặt tổ chức, Data EEPROM được tổ chức theo dạng mảng (hoàn toàn tương tự một bank của

RAM). Chính vì thế việc truy xuất dữ liệu trong Data EEPROM có thể thực hiện bằng phần mềm

trong suốt quá trình hoạt động của PIC. Hoạt động truy xuất này được thực hiện thông qua việc cài

đặt các giá trị của 5 thanh ghi: EECON1, EECON2, EEDATA, EEADR, EEADRH

14.5.2.2 Các hàm tương tác với EEPROM nội trong CCSC

a. Đọc dữ liệu

� value = read_eeprom (address)

Hàm đọc ô nhớ tại địa chỉ ‘address’ trong ROM nội và lưu vào biến ‘value’

Trong đó:

- ‘address’ là địa chỉ tại vùng nhớ cần đọc trong EEPROM. Địa chỉ này là một con số bắt đầu

từ 0x00 và có giới hạn trên phụ thuộc vào dung lượng của bộ nhớ EEPROM đó

- ‘value’ là giá trị 8 bit

b. Ghi dữ liệu

� Write_eeprom (address, value)

Hàm ghi một giá trị số 8 bit ‘value’ vào vùng địa chỉ ‘address’ trong ROM nội.

Page 96: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 96

96 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

14.5.3 Extenal EEPROM Memory

Các IC lưu trữ (chip nhớ) ngoài thường được giao tiếp đồng bộ với hệ thống (PIC) thông qua 1

trong 2 chuẩn giao tiếp: SPI và I2C. Mọi hoạt động truy xuất bộ nhớ đều được thực hiện thông

qua các chuẩn giao tiếp này. Chính vì thế việc cài đặt và hoạt động truy xuất bộ nhớ ngoài là

việc cài đặt và hoạt động các chuẩn SPI hoặc I2C. (xem bài 15).

14.5.4 Bài tập

Lưu trữ dữ liệu nhiệt độ tham khảo ở bài tập tổng kết vào DataEEPROM Memory.

Page 97: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 97

97 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

Bài 15 : BÀI T ẬP TỔNG KẾT

15.1 YÊU CẦU

Hình 15.1 - Sơ đồ phần cứng của mạch thí nghiệm

Với sơ đồ phần cứng trên ta có thể giải quyết nhiều bài toán ứng dụng trong thực tế, trong

nội dung bài tập của khoá học yêu cầu được đặt ra như sau:

Yêu cầu: Thiết kế hệ thống tự động giám sát nhiệt độ có giao tiếp với máy tính

Đầu vào:

- Cảm biến nhiệt độ (analog sensor) - Biến trở để cài đặt giá trị nhiệt độ tham khảo - Nút nhấn để chọn chế độ hoạt động

Đầu ra:

- Hiển thị giá trị nhiệt độ hiện tại và giá trị nhiệt độ tham khảo ra LCD - Điều khiển vận tốc động cơ quạt (DC motor) để điều hoà nhiệt độ - Kết quả được truyền lên máy tính để lưu trữ, xử lý - Optional: bộ nhớ ngoài EEPROM

Hoạt động:

Hệ thống có vai trò giám sát và tự động điều chỉnh nhiệt độ của môi trường.

- Nhiệt độ tham khảo được cài đặt thông qua biến trở trong chế độ cài đặt (được chọn bởi nút nhấn (có thể dùng ngắt hoặc counter).

Page 98: Pic Ccs Full

Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – [email protected] 98

98 Nhóm đào tạo kỹ thuật BigLab - Giáo trình PIC - CCSC

- Khi nhiệt độ cao hơn giá trị tham khảo, hệ thống sẽ tự động khởi động quạt để làm giảm nhiệt độ của thiết bị cần giám sát.

- Giá trị nhiệt độ tham khảo và giá trị nhiệt độ hiện thời được hiển thị lên 2 dòng của LCD. - Sau một thời gian nhất định hệ thống sẽ tự động gửi dữ liệu nhiệt độ lên máy tính để giám

sát, kiểm tra. - Optional: Có thể lưu trữ giá trị dữ liệu vào chíp nhớ ngoài

15.2 MÔ TẢ PHẦN CỨNG

- Vi điều khiển PIC18F4620 hoặc PIC18F4550 - Kết nối các chân PORT sẽ được hướng dẫn tại lớp

15.3 GIẢI THUẬT

GV hướng dẫn tại lớp

15.4 CHƯƠNG TRÌNH

Thời gian hoàn thành chương trình là 4 tiếng đồng hồ (2 buổi học)