Tải bản đầy đủ (.pdf) (71 trang)

Đề cương thiết kế hệ thống nhúng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.46 MB, 71 trang )

THIẾT KẾ HỆ THỐNG NHÚNG

MỤC LỤC
MỤC LỤC.......................................................................................................................................... 1
DANH MỤC HÌNH VẼ ..................................................................................................................... 4
Bài 1 ................................................................................................................................................... 5
TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC ......................................................................................... 5
1.1.
1.2.

Giới thiệu tổng quan về Pic .................................................................................................... 5
Kiến trúc Pic........................................................................................................................... 6

1.2.1.

Cấu trúc của PIC ............................................................................................................ 6

1.2.2.
RISC và CISC ................................................................................................................ 7
1.3. Vi điều khiển PIC 16F877A................................................................................................... 7
1.3.1.

Sơ đồ chân và kiểu đóng vỏ ........................................................................................... 7

1.3.2.
Sơ đồi khối ..................................................................................................................... 9
1.3.3.
Một số đặc điểm ............................................................................................................. 9
1.3.4.
So sánh với vi điều khiển họ 8051 ............................................................................... 10
Bài 2 ................................................................................................................................................. 11


TỔNG QUAN VỀ LẬP TRÌNH NHÚNG TRÊN PIC .................................................................... 11
2.1. Ngôn ngữ lập trình và trình biên dịch .................................................................................. 11
2.1.1.
Trên hệ điều hành window ........................................................................................... 11
2.1.2.
Trên hệ điều hành Linux .............................................................................................. 12
2.1.3.
Các mạch nạp và mạch gỡ rối chương trình................................................................. 12
2.2. Lập trình PIC với CCS ......................................................................................................... 15
2.2.1.
Tổng quan về CCS ....................................................................................................... 15
2.2.2.
Tạo PROJECT đầu tiên trong CCS .............................................................................. 16
2.3. Biến, hàm, cấu trúc lệnh và các chỉ thị tiền xử lý ................................................................ 23
2.3.1.
Biến, hằng, hàm và cấu trúc lệnh ................................................................................. 23
2.4. Mẫu chương trình cho lập trình CCS ................................................................................... 26
Bài 3 ................................................................................................................................................. 29
LẬP TRÌNH VÀO RA SỐ............................................................................................................... 29
3.1. Các hàm xử lý bit và các phép toán ..................................................................................... 29
3.1.1.
3.1.2.
3.1.3.

Hàm Shift_left, Shift_right........................................................................................... 29
Hàm Bit_set, Bit_clear ................................................................................................. 29
Hàm Bit_test................................................................................................................. 29

3.1.4.
3.1.5.


Hàm Swap .................................................................................................................... 30
Hàm Make8 .................................................................................................................. 30

3.1.6.
3.1.7.

Hàm Make16 ................................................................................................................ 30
Make32......................................................................................................................... 30

3.2. Các hàm vào ra ..................................................................................................................... 31
3.2.1.
Output_low (pin), Output_high (pin) ........................................................................... 31
3.2.2.
3.2.3.
3.2.4.

Output_bit (pin, value) ................................................................................................. 31
Input (pin) .................................................................................................................... 32
Output_X (value) ......................................................................................................... 32

3.2.5.

Input_X () ..................................................................................................................... 32
1


THIẾT KẾ HỆ THỐNG NHÚNG
3.2.6.
3.2.7.


Port_B_pullups ............................................................................................................. 32
Set_tris_X (value) ......................................................................................................... 32

3.3. Lập trình vào ra với led đơn, led 7 thanh và bàn phím ......................................................... 33
Bài 4 ................................................................................................................................................. 34
THỰC HÀNH: LẬP TRÌNH VÀO RA SỐ ..................................................................................... 34
Bài 5 ................................................................................................................................................. 34
LẬP TRÌNH VÀO RA TƯƠNG TỰ ............................................................................................... 34
5.1. Bộ chuyển đổi ADC và DAC ............................................................................................... 34
5.1.1
5.1.2.

Tổng quan ..................................................................................................................... 34
Độ phân giải ................................................................................................................. 35

5.1.3.
Điện áp tham chiếu ....................................................................................................... 36
5.2. Bộ chuyển đổi ADC trong PIC ............................................................................................. 36
5.2.1.
ADC trong PIC 16F877A ............................................................................................. 37
5.2.2.
5.2.3.

Cấu hình bộ ADC trong CCS ....................................................................................... 39
Lập trình ứng dụng ....................................................................................................... 42

Bài 6 ................................................................................................................................................. 44
THỰC HÀNH: LẬP TRÌNH VÀO RA TƯƠNG TỰ ...................................................................... 44
Bài 7 ................................................................................................................................................. 44

LẬP TRÌNH VÀ XỬ LÝ NGẮT ..................................................................................................... 44
7.1. Tổng quan về ngắt trong PIC 16F877A................................................................................ 44
7.2. Khai báo và sử dụng ngắt trong CCS ................................................................................... 45
7.3. Ngắt do sự thay đổi trạng thái của các chân trong PORTB .................................................. 48
7.4. Chế độ Sleep ......................................................................................................................... 50
7.5. Watch Dog Timer ................................................................................................................. 50
7.6. “Đánh thức” vi điều khiển .................................................................................................... 51
Bài 8 ................................................................................................................................................. 53
THẢO LUẬN LẬP TRÌNH XỬ LÝ NGẮT .................................................................................... 53
Bài 9 ................................................................................................................................................. 53
THỰC HÀNH: LẬP TRÌNH NGẮT................................................................................................ 53
Bài 10 ............................................................................................................................................... 53
TIMER TRONG PIC 16F877A........................................................................................................ 53
10.1.
Timer 0 ............................................................................................................................. 53
10.2.
10.3.
10.4.
10.4.1.

Timer 1 ............................................................................................................................. 55
Timer 2 ............................................................................................................................. 56
Khai báo Timer trong CCS ............................................................................................... 57
Các lệnh Timer0 ........................................................................................................... 57

10.4.2. Các lệnh Timer1 ........................................................................................................... 59
10.4.3. Các lệnh Timer2 ........................................................................................................... 59
10.5.
Lập trình ứng dụng ........................................................................................................... 60
Bài 11 ............................................................................................................................................... 61

THỰC HÀNH: LẬP TRÌNH TIMER/COUNTER .......................................................................... 61
Bài 12 ............................................................................................................................................... 62
THẢO LUẬN VỀ TIMER/COUNTER ........................................................................................... 62
Bài 13 ............................................................................................................................................... 62
2


THIẾT KẾ HỆ THỐNG NHÚNG
THỰC HÀNH: LẬP TRÌNH TIMER/COUNTER (TIẾP) .............................................................. 62
Bài 14 ............................................................................................................................................... 62
LẬP TRÌNH TRUYỀN THÔNG ..................................................................................................... 62
14.1.
Tổng quan về lập trình truyền thông ................................................................................ 62
14.2.
Chuẩn RS232 ................................................................................................................... 62
14.3.

Lập trình ứng dụng ........................................................................................................... 66

Bài 15 ............................................................................................................................................... 67
THỰC HÀNH: LẬP TRÌNH TRUYỀN THÔNG ........................................................................... 67
Bài 16 ............................................................................................................................................... 68
LẬP TRÌNH TRUYỀN THÔNG (tiếp) ........................................................................................... 68
16.1.
Chuẩn I2C ........................................................................................................................ 68
16.2.
Lập trình ứng dụng ........................................................................................................... 69
Bài 17: .............................................................................................................................................. 70
THỰC HÀNH: LẬP TRÌNH TRUYỀN THÔNG (TIẾP) ............................................................... 70
Bài 18: .............................................................................................................................................. 70

THẢO LUẬN VỀ LẬP TRÌNH TRUYỀN THÔNG ...................................................................... 70
Bài 19 ............................................................................................................................................... 70
LẬP TRÌNH NÂNG CAO ............................................................................................................... 70
19.1.
GLCD ............................................................................................................................... 70
19.2.
Thẻ nhớ ............................................................................................................................ 70
19.3.
Ethernet ............................................................................................................................ 70
Bài 20: .............................................................................................................................................. 70
THỰC HÀNH: LẬP TRÌNH NÂNG CAO ..................................................................................... 70
Bài 21: .............................................................................................................................................. 70
BÀI TẬP, THẢO LUẬN TỔNG KẾT ............................................................................................ 70
TÀI LIỆU THAM KHẢO................................................................................................................ 71

3


THIẾT KẾ HỆ THỐNG NHÚNG

DANH MỤC HÌNH VẼ
Hình 1: Kiến truc Harvard và Von-Neumann..................................................................................... 6
Hình 2: Một số sơ đồ chân và kiểu đóng vỏ cho PIC 16F87XA ........................................................ 8
Hình 3: Sơ đồ khối của vi điều khiển PIC 16F877A .......................................................................... 9
Hình 4: Trình biên dịch MPASM trên .............................................................................................. 11
Hình 5: Mạch nạp PIC Kit 2 và PIC Kit 3 ........................................................................................ 13
Hình 6: MPLAB ICD3 - Công cụ nạp và gỡ rối............................................................................... 14
Hình 7: MPLAB REAL ICE – In Circuit Emulator ......................................................................... 15
Hình 8: Giao diện PICC ................................................................................................................... 16
Hình 9: Cửa sổ Save As.................................................................................................................... 17

Hình 10: Tab General ....................................................................................................................... 18
Hình 11: Tab Communications......................................................................................................... 18
Hình 12: Tab SPI andLCD ............................................................................................................... 19
Hình 13: Tab Timer .......................................................................................................................... 20
Hình 14: Tab Analog ........................................................................................................................ 20
Hình 15: Tab Other ........................................................................................................................... 21
Hình 16: Tab Interrupts .................................................................................................................... 22
Hình 17: Tab Driver ......................................................................................................................... 22
Hình 18: Mạch flash ADC với 4 bộ so sánh..................................................................................... 35
Hình 19: Minh họa tín hiệu Analog và digital của hàm sin .............................................................. 36
Hình 20: Sơ đồ khối bộ chuyển đổi ADC......................................................................................... 38
Hình 21: Các cách lưu kết quả chuyển đổi ADC.............................................................................. 38
Hình 22: Sơ đồ kết nối với vi điều khiển PIC 16F877 ..................................................................... 42
Hình 23: Sơ đồ logic của các ngắt trong PIC 16F877A ................................................................... 45
Hình 24: Ghép nối điều khiển LED đơn........................................................................................... 46
Hình 25: Sơ đồ ghép nối xử lý ngoài trên PortB .............................................................................. 49
Hình 26: Sơ đồ khối của bộ Timer0 ................................................................................................. 54
Hình 27: Sơ đồ khối của Timer1 ...................................................................................................... 55
Hình 28: Sơ đồ khối Timer2 ............................................................................................................. 57
Hình 29: Sơ đồ mạch ví dụ dùng Timer0 ......................................................................................... 60
Hình 30: Hình ảnh giao diện DB9 và DB25 ..................................................................................... 63
Hình 31: Sơ đồ chân trên giao diện DB9 và DB25 .......................................................................... 63
Hình 32: Sơ đồ khối các vi mạch MAX232, MAX233 .................................................................... 66
Hình 33: Sơ đồ ghép nối thiết bị chuẩn I2C ..................................................................................... 68

4


THIẾT KẾ HỆ THỐNG NHÚNG


ĐỀ CƯƠNG BÀI GIẢNG HỌC PHẦN

THIẾT KẾ HỆ THỐNG NHÚNG
Bài 1
TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC
1.1.

Giới thiệu tổng quan về Pic

PIC bắt nguồn là chữ viết tắt của "Programmable Intelligent Computer" (Máy
tính khả trình thông minh) là một sản phẩm của hãng General Instrument đặt cho
dòng sản phẩm đầu tiên của họ là PIC1650.
PIC sử dụng tập lệnh RISC (Reduced Instructions Set Computer), với
dòng PIC low-end (độ dài mã lệnh 12 bit, ví dụ: PIC12Cxxx) và mid-range (độ dài
mã lệnh 14 bit, ví dụ: PIC16Fxxxx), tập lệnh bao gồm khoảng 35 lệnh, và 70 lệnh
đối với các dòng PIC high-end (độ dài mã lệnh 16 bit, ví dụ: PIC18Fxxxx). Tập
lệnh bao gồm các lệnh tính toán trên các thanh ghi, với các hằng số, hoặc các vị trí
bộ nhớ, cũng như có các lệnh điều kiện, lệnh nhảy/gọi hàm, và các lệnh để quay trở
về, nó cũng có các tính năng phần cứng khác như ngắt hoặc sleep (chế độ hoạt động
tiết kiện điện). Microchip cung cấp môi trường lập trình MPLAB, nó bao gồm phần
mềm mô phỏng và trình dịch ASM.
Các dòng Pic hiện nay được phân chia theo các loại:
-

Vi điều khiển 8 bit: Pic10xxxx, Pic 12xxxx, Pic 14xxxx, Pic 16xxxx, Pic
17xxxx, Pic 18xxxx.

-

Vi điều khiển 16 bit: Điển hình ở đây là Pic 24, dsPIC30, dsPIC33F


-

Vi điều khiển 32 bit: PIC 32

Hiện nay có khá nhiều dòng PIC và có rất nhiều khác biệt về phần cứng, nhưng
chúng ta có thể điểm qua một vài nét như sau:
-

FLASH và ROM có thể tuỳ chọn tùy theo từng loại chip

-

Các cổng Xuất/Nhập (I/O ports) (mức logic thường từ 0V đến 5. 5V, ứng
với logic 0 và logic 1)

-

8/16 Bit Timer

-

Các chuẩn giao Tiếp Ngoại Vi Nối Tiếp Đồng bộ/Không đồng
bộ USART, AUSART, EUSARTs

-

Bộ chuyển đổi ADC Analog-to-Digital Converters, 8, 10/12... bit

-


Bộ so sánh điện áp (Voltage Comparators)

-

Các module Capture/Compare/PWM

-

MSSP Peripheral dùng cho các giao tiếp I2C, SPI, và I²S
5


THIẾT KẾ HỆ THỐNG NHÚNG

1.2.

-

Bộ nhớ nội EEPROM - có thể ghi/xoá lên tới 1 triệu lần

-

FLASH (dùng cho bộ nhớ chương trình) có thể ghi/xóa 10. 000 lần (tiêu
chuẩn)

-

Hỗ trợ giao tiếp USB


-

Hỗ trợ điều khiển Ethernet

-

Hỗ trợ giao tiếp CAN

-

Một số dòng có tích hợp bộ RF (PIC16F639, và rfPIC)

-

DSP những tính năng xử lý tín hiệu số (dsPIC)

Kiến trúc Pic

1.2.1. Cấu trúc của PIC
Cấu trúc phần cứng của một vi điều khiển được thiết kế theo hai dạng kiến trúc:
Kiến trúc Von Neuman và kiến trúc Harvard.

Data
memory

CPU

Program
memory


Harvard

CPU

Program
and Data
memory

Von-Neumann

Hình 1: Kiến truc Harvard và Von-Neumann

Tổ chức phần cứng của Pic được thiết kế theo kiến trúc Harvard. Điểm khác biệt
giữa kiến trúc Harvard và kiến trúc Von-Neumann là cấu trúc bộ nhớ dữ liệu và bộ
nhớ chương trình.
Đối với kiến trúc Von-Neumann, bộ nhớ dữ liệu và bộ nhớ chương trình nằm
chung trong một bộ nhớ, do đó ta có thể tổ chức, cân đối một cách linh hoạt bộ nhớ
chương trình và bộ nhớ dữ liệu. Tuy nhiên điều này chỉ có ý nghĩa khi tốc độ xử lý
của CPU phải rất cao, vì với cấu trúc đó, trong cùng một thời điểm CPU chỉ có thể
tương tác với bộ nhớ dữ liệu hoặc bộ nhớ chương trình. Như vậy có thể nói kiến
trúc Von-Neumann không thích hợp với cấu trúc của một vi điều khiển.
Đối với kiến truc Harvard, bộ nhớ dữ liệu và bộ nhớ chương trình tách ra thành
hai bộ nhớ riêng biệt. Do đó trong cùng một thời điểm CPU có thể tương tác với cả
hai bộ nhớ, như vậy tốc độ xử lý của vi điều khiển được cải thiện đáng kể.
Một điểm cần lưu ý nữa là tập lệnh trong kiến trúc Harvard có thể được tối ưu
theo yêu cầu kiến trúc của vi điều mà không phụ thuộc vào cấu trúc dữ liệu. Ví dụ,
đối với vi điều khiển dòng 16F, độ dài lện luôn là 14 bit (trong khi dữ liệu được tổ
6



THIẾT KẾ HỆ THỐNG NHÚNG

chức thành từng byte), còn đối với kiến truc Von-Neumann, độ dài lệnh luôn là bội
số của 1 byte (do dữ liệu được tổ chức thành từng byte).
1.2.2. RISC và CISC
Như đã trình bày, kiến truc Harvard là kiến trúc mới hơn so với kiến trục VonNeumann. Khái ni
Lệnh này được hình thành nhằm cải tiến tốc độ thực thi của một vi điều khiển.
Qua việc tách rời bộ nhớ dữ liệu và bộ nhớ chương trình, bus của chương trình và
bus dữ liệu, CPU có thể cùng một lúc truy xuất cả bộ nhớ chương trình và bộ nhớ
dữ liệu, giúp tăng tốc độ xử lý của vi điều khiển lên gấp đôi. Đồng thời cấu trúc
lệnh không còn phụ thuộc vào cấu trúc dữ liệu nữa mà có thể linh động điều chỉnh
tùy theo khả năng và tốc độ của từng vi điều khiển. Và để cải thiện tốc độ thực thi
lệnh, tập lệnh của họ vi điều khiển PIC được thiết kế sao cho chiều dài mã lệnh luôn
cố định (ví dụ với họ 16Fxxxx chiều dài mã lệnh luôn là 14 bit) và cho phép thực
thi lệnh trong một chu kỳ xung clock (ngoại trừ một số trường hợp đặc biệt như
lệnh nhảy, gọi chương trình con… cần hai chu kỳ xung đồng hồ). Điều này có nghĩa
tập lệnh của vi điều khiển thuộc cấu trúc Harvard sẽ ít lệnh hơn, đơn giản hơn và
ngắn hơn để đáp ứng yêu cầu mà mã hóa lệnh bằng một lượng bit nhất định.
Vi điều khiển được tổ chức theo kiến trúc Harvard còn gọi là vi điều khiển RISC
(Reduced Instructions 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-Neumann còn được gọi là vi điều khiển
CISC (Complex Instructions Set Computer) hay vi điều khiển có tập lệnh phức tạp
vì mã lệnh của nó không phải là một số cố định mà luôn là bội số của 8 bit.

1.3.

Vi điều khiển PIC 16F877A

1.3.1. Sơ đồ chân và kiểu đóng vỏ


7


THIẾT KẾ HỆ THỐNG NHÚNG

Hình 2: Một số sơ đồ chân và kiểu đóng vỏ cho PIC 16F87XA

Hình 2 trình bày sơ đồ chân và kiểu đóng vỏ của Pic16F87XA. Trong đó:
-

Kiểu đóng vỏ 40-Pin PDIP: Pic16F87XA được đóng trong một vỏ có 44
chân, kích thước lớn, chân cắm hàn trên mạch, thích hợp lắp đặt cho các
mạch có kích thước linh kiện lớn.

-

Kiểu đóng vỏ 44-Pin PLCC: là kiểu đóng vỏ kích thước IC nhỏ, có 4
hàng chân xung quanh, chân ngắn, thích hợp cho lắp mạch với linh kiện
dán.

-

Kiểu đóng vỏ 44-Pin TQFP: gần tương tự kiểu đóng vỏ 44-Pin PLCC với
kích thước chân dài hơn, dùng trên các mạch lắp linh kiện dán.
Mặc dù được đóng vỏ khác nhau (kích thước lớn/nhỏ chênh lệch nhiều)
song tính năng, khả năng hoạt động của Pic vẫn không thay đổi.

8



THIẾT KẾ HỆ THỐNG NHÚNG

1.3.2. Sơ đồi khối

Hình 3: Sơ đồ khối của vi điều khiển PIC 16F877A

1.3.3. Một số đặc điểm
Đây là vi điều khiển thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ dài 14
bit. Mỗi lệnh đều được thực thi trong một chu kỳ xung clock. Tốc độ hoạt động tối
đa cho phép là 20 MHz với một chu kỳ lệnh là 200ns. Bộ nhớ chương trình 8Kx14
bit, bộ nhớ dữ liệu 368x8 (368 byte) RAM và bộ nhớ dữ liệu EEPROM với dung
lượng 256x8 (256 byte). Số PORT I/O là 5 với 33 pin I/O.
Các đặc tính ngoại vi bao gồm các khối chức năng sau:
9


THIẾT KẾ HỆ THỐNG NHÚNG

-

Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit.

-

Timer1: bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm
dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ
sleep.

-


Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler.

-

Hai bộ Capture/so sánh/điều chế độ rông xung.

-

Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C.

-

Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ.

-

Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều
khiển RD, WR, CS ở bên ngoài.

-

Các đặc tính Analog: 8 kênh chuyển đổi ADC 10 bit.

-

Hai bộ so sánh.

Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:
-


Bộ nhớ flash với khả năng ghi xóa được 100. 000 lần.

-

Bộ nhớ EEPROM với khả năng ghi xóa được 1. 000. 000 lần.

-

Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm.

-

Khả năng tự nạp chương trình với sự điều khiển của phần mềm.

-

Nạp được chương trình ngay trên mạch điện ICSP (In Circuit Serial
Programming).

-

Watchdog Timer với bộ dao động trong.

-

Chức năng bảo mật mã chương trình.

-

Chế độ Sleep.


-

Có thể hoạt động với nhiều dạng Oscillator khác nhau.

1.3.4. So sánh với vi điều khiển họ 8051
-

Về kiến trúc VXL

-

Tốc độ làm việc

-

Bộ nhớ chương trình, dữ liệu, …

-

Đặc điểm bộ lệnh

-

Các hỗ trợ vào ra số, vào ra tương tự

-

Hỗ trợ về truyền thông


-

Xử lý thời gian/bộ đếm (timer/counter)

-

Các tính năng khác

10


THIẾT KẾ HỆ THỐNG NHÚNG

Bài 2
TỔNG QUAN VỀ LẬP TRÌNH NHÚNG TRÊN PIC
2.1.

Ngôn ngữ lập trình và trình biên dịch

2.1.1. Trên hệ điều hành window
a) Trình biên dịch MPASM (hợp ngữ)
Microchip cung cấp trình biên dịch MPASM miễn phí, và đi kèm trong bộ cài
MPLAB IDE.
Khi không sử dụng trình soạn thảo chuyên dụng trong PIC, chúng ta hoàn toàn
có thể sử dụng Notepad hoặc Notepad Plus,... để soạn thảo chương trình và sau đó
trực tiếp chạy MPASMWIN. exe để biên dịch.

Hình 4: Trình biên dịch MPASM trên

b) Hi-Tech soft

-

Trình soạn thảo: HI-TIDE (Hitech IDE)

-

Trình biên dịch: HTPIC

-

Ngôn ngữ lập trình: C

-

Đây là trình biên dịch chuyên nghiệp dành cho PIC

c) Microchip MPLAB C
-

Trình soạn thảo: MPLAB IDE

-

Trình biên dịch: C18 (dành cho PIC 18), C30 (dành cho PIC 24, dsPIC),
C32 (dành cho PIC 32)

-

Ngôn ngữ lập trình: C
11



THIẾT KẾ HỆ THỐNG NHÚNG

-

MPLAB C không hỗ trợ cho PIC 10/12/16 do đó đây là một lựa chọn phù
hợp cho những dòng PIC cao hơn. Tuy nhiên nếu muốn sử dụng trình hợp
ngữ thì MPLAB cũng có thể giúp chúng ta thực hiện.

d) CCSInfo
-

Trình soạn thảo: CCS IDE

-

Trình biên dịch: CCS C

-

Ngôn ngữ lập trình: C

-

Đây là trình biên dịch dễ dàng nhất cho người dùng, tuy nhiên các phiên
bản CCS hỗ trợ các dòng chip mới thường rất chậm. Đây là công cụ phù
hợp với mức độ sản xuất vừa và nhỏ và nó rất thuận tiện cho người mới
bắt đầu hoặc chuyển từ vi điều khiển khác qua sử dụng PIC.


e) Mikro Elektronika
-

Trình soạn thảo: MikroE IDE

-

Trình biên dịch: MikroC (ngôn ngữ C), MikroPascal (ngôn ngữ Pascal),
MikroBasic (ngôn ngữ Basic)

f) SourceBoost
-

Trình soạn thảo: SourceBoost IDE

-

Trình biên dịch: Boost C (ngôn ngữ C), Boost C++ (ngôn ngữ C++),
BoostBasic (ngôn ngữ Basic), Novo RTOS (hệ điều hành), Flowcode
(ngôn ngữ flowchart)

-

Đây là phần mềm được phát triển mạnh với nhiều ngôn ngữ lập trình
khác nhau, đặc biệt là đây là phần mềm đầu tiên trong việc phát triển PIC
trên nền tảng hướng đối tượng C++.

2.1.2. Trên hệ điều hành Linux
a) Trình biên dịch hợp ngữ
GPUTILS là một công cụ tổng hợp, bao gồm được phát triển từ năm 2001 và

ngày nay được phát triển và hỗ trợ rất nhiều.
b) PIKLab
Trình biên dịch ngôn ngữ câp cấp mã nguồn mở cho PIC là SDCC và GCC. Bên
cạnh các phần mềm mã nguồn mở, hai công ty CCSInfo và HI-TECH Soft cũng
cung cấp phần mềm trên Linux
2.1.3. Các mạch nạp và mạch gỡ rối chương trình
Nếu một vi điều khiển mà không có chương trình nằm bên trong nó (firmware)
thì nó chưa thể thực hiện được một chức năng nào cả. Do đó, mạch nạp là một phần

12


THIẾT KẾ HỆ THỐNG NHÚNG

không thể thiếu khi chúng tra nghiên cứu và sử dụng với vi điều khiển nói chung và
với PIC nói riêng.
Có rất nhiều mạch nạp trên thị trường thế giới cũng như Việt Nam. Tuy nhiên
chúng ta có thể phân loại theo đối tượng sử dụng như sau:
Mạch nạp và gỡ rối dành cho sinh viên: Loại này giá rẻ, chức năng tương đối
bị hạn chế, và chủ yểu chỉ đảm nhiệm chức năng nạp chương trình (firmware).
Hiện nay mạch nạp dành cho sinh viên rất phong phú, đặc biệt với mục tiêu hạ
giá thành sản phẩm tới mức tối đa. Điển hình là một số mạch nạp sau:
-

Mạch nạp PICKit 2, PICKit 3 của microchip

Tính năng: Nạp hầu hết các dòng sản phẩm Microchip PIC/dsPIC, hỗ trợ
Programmer Go (Không cần sử dụng máy tính, nạp chương trình vào PICKit, sau
đó cấp nguồn và bấm nút để nạp vào PIC), cấp nguồn từ USB
Giá thành: Từ 30$ đến 50$


Hình 5: Mạch nạp PIC Kit 2 và PIC Kit 3

-

Mạch gỡ rồi ICD2 LE (phiên bản giới hạn)

Tính năng: nạp và debug hầu hết các dòng Microchip/dsPIC, không hỗ trợ
nguồn từ ICDE LE. Bề ngoài nhìn giống PICKit 2 nhưng có màu xanh dương. Do
đây là phiên bản giới hạn (limited Edition) nên sản phẩm không được phổ biến lắm.
Giá thành: Từ 60$ đến 80$.
-

Mạch nạp PK2FUN của R&P

Tính năng: giống với PICKit 2, nhưng bỏ đi 2 tính năng chính là tính năng
Programmer To Go và tính năng cấp nguồn từ USB.
Giá thành: Khoảng 10$

13


THIẾT KẾ HỆ THỐNG NHÚNG

-

Mạch nạp Gusb của PduyTech

Tính năng: Đây là một mạch phát triển từ mạch GTP-USB, sử dụng với chương
trình nạp WinPIC800. Tuy nhiên, sau đó Pduytech đã phát triển lại phần mềm và

phát triển khá tốt.
Giá thành: Khoảng 10$
Mạch nạp, gỡ rối dành cho nhà thiết kế: Loại này trong bị nhiều tính năng hơn,
chủ yếu tập trung vào tính năng gỡ rối và mô phỏng. Đây là phiên bản trả phí,
với các nhà thiết kế ở Việt Nam thường chấp nhận bỏ qua tính năng mô phỏng
(Emulator) mà chỉ dừng ở tính năng gỡ rồi (debugger) nhằm giảm chi phí trang
thiết bị.
Một số sản phẩm tiểu biểu:
-

ICD3 – In Circuit Debugger 3
Tính năng: Là một phiên bản cải tiến từ ICD2, tuy nhiên hiện nay

ICD2 không còn sản xuất nữa, ICD3 tăng tốc độ nạp chip đáng kế.
Giá thành: Khoảng 200$

Hình 6: MPLAB ICD3 - Công cụ nạp và gỡ rối

-

REAL ICE – In Circuit Emulator

Tính năng: Mô phỏng trực tiếp trên mạch, chủ yếu sử dụng cho các mạch nạp
phức tạp, thuật toán phức tạp
Giá thành: Khoảng 550$

14


THIẾT KẾ HỆ THỐNG NHÚNG


Hình 7: MPLAB REAL ICE – In Circuit Emulator

Mạch nạp dành cho nhà sản xuất: Chỉ tập trung vào tính năng duy nhất là tính
năng nạp, điều quan trong nhất là phải nạp nhanh, thao tác đơn gian, bền vữ và đảm
bảo cho công nhân kỹ thuật có thể sử dụng.
Vấn đề chính của các nhà sản xuất chính là số giữa tốc độ nạp chip và số lượng
nhân công. Một bài toán rất rõ ràng như sau: nếu khi nhà sản xuất lên tới khoảng
100000 sản phẩm mỗi năm, việc nạp chip trở thành một vấn đề lớn. Giải phải bắt
buộc là phải nạp cùng lúc nhiều sản phẩm, vì thời gian nạp để cho chop gần như là
khó có thể giam, tùy theo dung lượng của chip và kích thước firmware.
Các loại mạch trên thị trường hiện nay cho phép nạp cúng lúc từ 4 đến 32 chip
điển hình một số loại như sau:
-

SoftLog IC2GANG

Tính năng: mỗi lần nạp 4 chip, có thể ghép nối với 16 mạch ICP2GANG với
nhau để nạp tới 64 chip cùng lúc.
Giá thành: Khoảng 1600$
-

CCSInfo PRIME8

Tính năng: Mỗi lần nạp được 8 chip, không cần sử dụng máy tính, chỉ cần nạp
firmware vào PRIM8 sau đó chỉ cần cấp nguồn để nạp
Giá thành: Khoảng 900$

2.2.


Lập trình PIC với CCS

2.2.1. Tổng quan về CCS
CCS là trình biên dịch lập trình ngôn ngữ C cho Vi điều khiển PIC của hãng
Microchip. Chương trình là sự tích hợp của 3 trình biên dich riêng viết cho 3 dòng
PIC khác nhau đó là:


PCB cho dòng PIC 12‐bit opcodes



PCM cho dòng PIC 14‐bit opcodes
15


THIẾT KẾ HỆ THỐNG NHÚNG



PCH cho dòng PIC 16và 18‐bit

Tất cả 3 trình biên dich này đuợc tích hợp lại vào trong một chương trình bao
gồm cả trình soạn thảo và biên dịch là CCS.
Giống như nhiều trình biên dịch C khác cho PIC, CCS giúp cho người sử dụng
nắm bắt nhanh được vi điều khiển PIC và sử dụng PIC trong các dự án. Các chương
trình diều khiển sẽ được thực hiện nhanh chóng và đạt hiệu quả cao thông qua việc
sử dụng ngôn ngữ lập trình cấp cao – ngôn ngữ C
2.2.2. Tạo PROJECT đầu tiên trong CCS
Để tạo một Project trong CCS có nhiều cách, có thể dùng ProjectWizard,

ManualCreat, hay đơn giản là tạo một Files mới và thêm vào đó các khai báo ban
đầu cần thiết và“bắt buộc”.
Dưới đây sẽ trình bày cách tạo một project hợp lệ theo cả 3 phương pháp. Một
điều ta cần chú ý khi tạo một Project đó là: khi tạo bắt cứ một Project nào mới thì ta
nên tạo một thư mục mới với tên liên quan đến Project ta định làm, rồi lưu các files
vào đó. Khi lập trình và biên dịch, CCS sẽ tạo ra rất nhiều files khác nhau, do đó
nếu để chung các Project trong một thư mục sẽ rất mất thời gian trongviệc tìm kiếm
sau này. Đây cũng là quy tắc chung khi ta làm việc với bất kỳ phần mềm nào, thiết
kế mạch hay lập trình.
Việc đầu tiên bạn cần làm là khởi động máy tính và bật chương trình PIC C
Compiler.
Tạo một PROJECT sử dụng PIC Wizard
Trước chết bạn khởi động chương trình làm việc PICC Compiler. Từ giao diện
chương trình bạn di chuột chọn Project ‐> New‐>PIC Wizard nhấn nút trái chuột
để chọn.

Hình 8: Giao diện PICC

Sau khi nhấn chuột, một cửa sổ hiện ra yêu cầu ban nhập tên Files cần tạo. Bạn
tạo một thư mục mới, vào thư mục đó và lưu tên files cần tạo tại đây.
16


THIẾT KẾ HỆ THỐNG NHÚNG

Hình 9: Cửa sổ Save As

Như vậy là xong bước đầu tiên. Sau khi nhấn nút Save, một cửa sổ NewProject
hiện ra. Trong của sổ này bao gồm rất nhiều Tab, mỗi Tab mô tả về một vài tính
năng của con PIC. Ta sẽ chọn tính năng sử dụng tại các Tab tương ứng.

Dưới đây sẽ trình bày ý nghĩa từng mục chọn trong mỗi Tab. Các mục chọn này
chính là đề cập đến các tính năng của một con PIC, tùy theo từng loại mà sẽ có các
Tab tương ứng. Đối với từng dự án khác nhau, khi ta cần sử dụng tính năng nào của
con PIC thì ta sẽ chọn mục đó. Tổng cộng có 13 Tab để ta lưa chọn, ta sẽ đi vào một
số tab hay sử dụng
a) Tab General
Tab General cho phép ta lựa chọn loại PIC mà ta sử dụng và một số lựa chọn
khác như chọn tần số thạch anh dao động, thiết lập các bit CONFIG nhằm thiết lập
chế độ hoạt động cho PIC (hình dưới).
-

Device: Liệt kê danh sách các loại PIC12F, 16F, 18F…Ta sẽ chọn tên Vi
điều khiển PIC mà ta sử dụng trong dự án. Lấy ví dụ chọn PIC16F877A

-

Oscilator Frequency: Tần số thạch anh ta sử dụng, chọn 20 MHz (tùy
từng loại)

-

Fuses: Thiết lập các bit Config như: Chế độ dao động (HS, RC, Internal),
chế độ bảovệ Code, Brownoutdetected…

-

Chọn kiểu con trỏ RAM là 16bit hay 8bit

17



THIẾT KẾ HỆ THỐNG NHÚNG

Hình 10: Tab General

b) Tab Communications
Tab Communications liệt kê các giao tiếp nối tiếp mà một con PIC hỗ trợ,
thường là RS232 và I2C, cùng với các lựa chọn để thiết lập chế độ hoạt động cho
từngloại giao tiếp.
c) Giao tiếpRS232
Mỗi một Vi điều khiển PIC hỗ trợ một cổng truyền thông RS232 chuẩn. Tab này
cho phép ta lựa chọn chân Rx, Tx, tốc độ Baud, Data bit, Bit Parity…

Hình 11: Tab Communications
18


THIẾT KẾ HỆ THỐNG NHÚNG

d) Giao tiếp I2C
Để sử dụng I2C ta tích vào nút chọn Use I2C, khi đó ta có các lựa chọn: Chân
SDA, SCL, tốc độ truyền (Fast- Slow), chế độ Master hay Slave, địa chỉ cho Salve.
e) Tab SPI and LCD
Tab này liệt kê cho người dùng các lựa chọn đối với giao tiếp nối tiếp SPI,
chuẩn giao tiếp tốc độ cao mà PIC hỗ trợ về phầncứng. Chú ý khi ta dùng I2C thì
không thể dùng SPI và ngược lại. Để có thể sử dụng cả hai giao tiếp này cùng một
lúc thì buộc một trong 2 giao tiếp phải lập trình bằng phần mềm (giồng như khi
dùng I2C cho các chip AT8051, không có hỗ trợ phần cứng SSP).
Phần cấuhình choLCD dành cho các chip dòng 18F và 30F.


Hình 12: Tab SPI andLCD

f) Tab Timer
Liệt kê các bộ đếm/địnhthời mà các con PIC dòng Midrangecó: Timer0, timer1,
timer2, WDT…
Trong các lựa chọn cấu hình cho các bộ đếm /định thời có: chọn nguồn xung
đồng hồ (trong/ngoài), khoảng thời gian xảy ra tràn…

19


THIẾT KẾ HỆ THỐNG NHÚNG

Hình 13: Tab Timer

g) Tab Analog
Liệt kê các lựa chọn cho bộ chuyển đổi tương tự/số (ADC) của PIC. Tùy
vàotừng IC cụthể mà cócáclựa chọn khácnhau, bao gồm:
Lựa chọn cổng vào tương tự
Chọn chânđiện áp lấymẫu (Vref)
Chọn độ phângiải:8bit = 0~ 255 hay10bit = 0~1023
Nguồn xung đồng hồ cho bộ ADC (trong hay ngoài), từ đó mà ta có được tốc độ
lấy mẫu, thường ta chọn là internal2-6 us.
Khi khôngsử dụng bộ ADC ta chọn none

Hình 14: Tab Analog
20


THIẾT KẾ HỆ THỐNG NHÚNG


h) Tab Other
Tab này cho phép
Capture/Comparator/PWM.

ta

thiết

lập

các

thông

số

cho

các

bộ

Capture
-

Chọn bắt giữ xung theo sườn dương (risingedge) hay sườn âm
(fallingedge) của xung vào

-


Chọn bắt giữ au 1, 4 hay 16 xung (copy giá trị của Timer X vào thanh ghi
lưu trữ CCCPx sau1, 4 hay 16 xung).

Compare
Ta có các lựa chọn thực hiện lệnh khi xayư ra bằng nhau giữa 2 đối tượng so
sánh là giá trị của Timer1 với giá trị lưu trong thanh ghi để so sánh. Bao gồm:
- Thực hiệnngắt và thiết lập mức 0
- Thực hiệnngắt và thiết lập mức 1
- Thực hiệnngắt nhưng không thay đổi trạng thái của chân PIC.
- Đưa Timer1 về 0 nhưng không thay đổi trạng thái chân.
PWM - Điều chế độ rộng xung
Lựa chọn về tần số xung ra và dutycycle. Ta có thể lựa chọn sẵn hay tự chọn tần
số, tất nhiên tần số ra phải nằm trong một khoảng nhất định.
Comparator - So sánh
Lựa chọn mức điện áp so sánhVref. Có rất nhiều mức điện áp để ta lựa chọn.
Ngoài ra ta còn có thể lựa chọn cho đầu vào của các bộ so sánh.

Hình 15: Tab Other

21


THIẾT KẾ HỆ THỐNG NHÚNG

i) Tab Interrupts và Tab Driver
TabInterrupts cho phép ta lựa chọn nguồn ngắt mà ta muốn sử dụng. Tùy vào
từng loại PIC mà số lượng nguồn ngắt khác nhau, bao gồm: ngắt ngoài 0 (INT0),
ngắt RS232, ngắt Timer, ngắt I2C‐SPI, ngắt onchange PORTB. v. v…
TabDrivers được dùng để lựa chọn những ngoại vi mà trình dịch đã hỗ trợ các

hàm giao tiếp. Đây là nhưng ngoại vi mà ta sẽ kết nối với PIC, trong các IC mà
CCS hỗ trợ, đáng chú ý là các loại EEPROM như 2404, 2416, 2432, 9346,
9356…Ngoài ra còn có IC RAM PCF8570, IC thời gian thực DS1302, Keypad3x4,
LCD, ADC…Chi tiết ta có thể xem trong thư mục Driver của chươngtrình: \...
\PICC\Drivers

Hình 16: Tab Interrupts

Hình 17: Tab Driver

22


THIẾT KẾ HỆ THỐNG NHÚNG

Sau các bước chọn trên, ta nhấn OK để kết thúc quá trình tạo một Project trong
CCS, một File ten_project. c được tạo ra, chứa những khai báo cần thiết cho PIC
trong một Files ten_project. h.

2.3.

Biến, hàm, cấu trúc lệnh và các chỉ thị tiền xử lý

2.3.1. Biến, hằng, hàm và cấu trúc lệnh
Giống với ngôn ngữ lập trình C, tham khảo tài liệu lập trình c và CCS
Chỉ thị tiền xử lý
#ASM và #ENDASM
Cho phép đặt một đoạn mã ASM giữa hai chỉ thị này, chỉ thị đặt trong hàm. CCS
định nghĩa 1 biến 8 bit để giới hạn giá trị trả về cho hàm từ đoạn mã Assembly.
Mã Assembly theo tập lệnh của vi điều khiển mà không phải theo kiểu mã của

phần mềm hỗ trợ (MPLAB).
#INCLUDE
Cú pháp: #include <filename>
Filename: tên file cho thiết bị *. h, *. c. Nếu chỉ định file ở đường dẫn khác thì
thêm đường dẫn vào, luôn phải có khai báo chương trình viết cho VĐK nào và luôn
đặt ở dòng đầu tiên
Ví du: #include <16F877. H> // Chương trình sử dụng vđk 16F877
#include <C:\data\code. c>
#BIT, #BYTE, #LOCATE, #DEFENE
#BIT
Cú pháp: #BIT id = x. y
id: tên biến, x: biến (8, 16, 32, …bit) hay hằng số địa chỉ thanh ghi.
y: vị trí bit trong x
Tạo biến 1 bit đặt ở byte x vị trí bit y, tiện dùng kiểm tra hay gán trị cho bit
thanh ghi. Điểm khác biệt so với dùng biến 1 bit từ khai báo int1 là: int1 tốn 1 bit bộ
nhớ, đặt ở thanh ghi đa mục đích nào đó do CCS tự chọn, còn #BIT thì không tốn
thêm bộ nhớ do id chỉ là danh định đại diện cho bit chỉ định ở biến x, thay đổi giá trị
id (0 / 1) sẽ thay đổi giá trị bit tương ứng y do đó thay đổi trị x.
VD:
Int16 a=35; //a=00000000 00100011
#bit b= a. 11 //b=0
#BYTE
Cú pháp: #BYTE id = x
X: địa chỉ, id: tên biến

23


THIẾT KẾ HỆ THỐNG NHÚNG


Gán tên biến id cho địa chỉ (thanh ghi) x, sau đó muốn gán hay kiểm tra địa chỉ
x chỉ cần dùng id. Không tốn thêm bộ nhớ, tên id thường dùng tên gợi nhớ chức
năng thanh ghi ở địa chỉ đó. Lưu ý rằng giá trị thanh ghi có thể thay đổi bất kỳ lúc
nào do hoạt động chương trình nên giá trị id cũng tự thay đổi theo giá trị thanh ghi
đó. Không nên dùng id cho thanh ghi đa mục đích như 1 cách dùng biến int8 vì
CCS có thể dùng các thanh ghi này bất kỳ lúc nào cho chương trình, nếu muốn dùng
riêng, hãy dùng #LOCATE.
VD:
#byte port_b = 0xc6; // 16F877:0xc6 là địa chỉ portb
Muốn port b có giá trị 120 thì: port_b=120;
#byte status = 0xc3
#LOCATE
Cú pháp: #LOCATE id = x
Làm việc như #byte nhưng có thêm chức năng bảo vệ không cho CCS sử dụng
địa chỉ đó vào mục đích khác.
VD: # LOCATE temp = 0xc20 // 0xc20:thanh ghi đa mục đích
#DEFINE
Cú pháp: #DEFINE id text
Text: chuỗi hay số. Dùng định nghĩa giá trị.
VD: #define a 12345
# DEVICE
Cú pháp: #DEVICE chip option
chip: tên VĐK sử dụng, không dùng tham số này nếu đã khai báo tên chip ở #
include.
option: toán tử tiêu chuẩn theo từng chip:
* = 5 dùng pointer 5 bit (tất cả PIC)
* = 8 dùng pointer 8 bit (PIC14 và PIC18)
* = 16 dùng pointer 16 bit (PIC14, PIC 18)
ADC = x sử dụng ADC x bit (8, 10,... bit tuỳ chip), khi dùng hàm read_adc (),
sẽ trả về giá trị x bit.

ICD = true: tạo mã tương thích debug phần cứng Microchip
HIGH_INTS = TRUE : cho phép dùng ngắt ưu tiên cao
- Khai báo pointer 8 bit, bạn sử dụng được tối đa 256 byte RAM cho tất cả biến
chương trình.
- Khai báo pointer 16 bit, bạn sử dụng được hết số RAM có của VDK
- Chỉ nên dùng duy nhất 1 khai báo #device cho cả pointer và ADC.
24


THIẾT KẾ HỆ THỐNG NHÚNG

VD: #device * = 16 ADC = 10
# ORG
Cú pháp:
#org start, end
#org segment
#org start, end { }
Start, end: bắt đầu và kết thúc vùng ROM dành riêng cho hàm theo sau, hoặc để
riêng không dùng
VD:
Org 0x30, 0x1F
Void xu_ly ()
{
} // hàm này bắt đầu ở địa chỉ 0x30
org 0x1E00
anotherfunc ()
{
} //hàm này bắt đầu tuỳ ý ở 0x1E00 đến 0x1F00
Org 0x30, 0x1F { }
// không có gì cả đặt trong vùng ROM này, thường thì không dùng ORG.

#USE
#USE delay (clock = speed)
Speed: giá trị OSC mà bạn dùng. VD: dùng thạch anh dao động 40Mhz thì: #use
delay (clock = 40000000)
Chỉ khi có chỉ thị này thì trong chương trình bạn mới được dùng hàm delay_us
() và delay_ms ().
#USE fast_io (port)
Port: là tên port:từ A-G (tuỳ chip)
Dùng cái này thì trong chương trình khi dùng các lệnh io như output_low (), …
nó sẽ set chỉ với 1 lệnh, nhanh hơn so với khi không dùng chỉ thị này.
Trong hàm main () bạn phải dùng hàm set_tris_x () để chỉ rõ chân vào ra thì chỉ
thị trên mới có hiệu lực, không thì chương trình sẽ chạy sai.
Không cần dùng nếu không có yêu cầu gì đặc biệt.
VD: # use fast_io (A)
#USE I2C (options) - thiết lập giao tiếp I2C.
Option bao gồm các thông số sau, cách nhau bởi dấu phẩy:
25


×