pic ccs full
Post on 03-Jan-2016
534 Views
Preview:
DESCRIPTION
TRANSCRIPT
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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: vxquoc@gmail.com
Nhóm biên soạn
BigLab
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
cơ
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í.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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)
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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ự
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
…
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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)
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
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:
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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:
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ố:
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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;
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ể
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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…
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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…
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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ố
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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ố
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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);
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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; }
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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()
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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()
{. . . }
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
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.
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:
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
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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
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:
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:
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.
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”
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
�
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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:
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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 đó.
�
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:
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…
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.
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.
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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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)
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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)
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.
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.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
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.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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�ô� � ��� − � (���
���������.��������)
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
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).
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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):
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
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 …
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
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:
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
�
�
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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();
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
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.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
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.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
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
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.
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
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
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).
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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.
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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).
Nhóm biên soạn BigLab – Chủ biên: ThS. Võ Xuân Quốc – vxquoc@gmail.com 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)
top related