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

Giáo trình Vi điều khiển PIC pot

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 (1.78 MB, 35 trang )

Microcontroller Training Center

DKS GROUP

1




























Microcontroller Training Center

DKS GROUP

2



MỤC LỤC
Bài 1.Giới thiệu vi ñiều khiển PIC
4
1.Giới thiệu các loại chip PIC
4
2. Giới thiệu vi ñiều khiển PIC16F877
5
3.Tổ chức bộ nhớ PIC16F877
8
3.1.Tổ chức bộ nhớ chương trình
8
3.2.Bộ nhớ dữ liệu
8
3.2.Một số thanh ghi quan trọng
8
4.Lập trình cho PIC
9
4.1.Giới thiệu
18
4.2.Phần mềm lập trình cho PIC
18

4.3.Giới thiệu phần mềm CCS
18
Bài 2.Giao tiếp vào ra IO
27
1.Giao tiếp IO
27
1.1.Giới thiệu
27
1.2.Các cổng vào ra
23
2.Sơ ñồ mạch
29
3.Lập trình
30
4.Nạp chương trình cho chip
35
Bài 3.Giao tiếp với led 7 thanh
39
1.Nguyên lý
39
2.Nguyên lý hoạt ñộng
39
Bài 4.Giao tiếp với bàn phím
42
Microcontroller Training Center

DKS GROUP

3


1.Sơ ñồ nguyên lý
42
2.Nguyên lý hoạt ñộng
42
3.Mã nguồn
43
4.Kỹ thuật chống rung
44
Bài 5.Bộ chuyển ñổi ADC
46
1.Sử dụng ADC với CCS
46
2.Hàm hỗ trợ
46

Bài 6.ðiều chế ñộ rộng xung (PWM)
50
1.ðôi nét về PWM
50
2.Sơ ñồ khối PWM
52
3.Hàm trong CCS
54
Bài 7.Giao tiếp máy tính
58
1.Giao tiếp RS-232
58
2.Hàm hỗ trợ
58
Bài 8.Giao tiếp I2C

64
1.Giới thiệu chung
64
2.ñặc ñiểm giao tiếp I2C
64
3.Start ,stop
66
4.ðịnh dạng dữ liệu truyền
67
5.ðịnh dạng ñịa chỉ cho thiết bị
62
6.Truyền dữ liệu trên bus I2C ,master-slave
69
7.Chế ñộ Multi-master
72
8.Modul I2C trong vi ñiều khiển PIC
72
9.ñặc ñiểm phần cứng
72
10.Cách sử dụng I2C trong CCS
73
Bài 9.Giao tiếp LCD
74
Microcontroller Training Center

DKS GROUP

4

1.Giới thiệu LCD 16x2

74
2.LCD với CCS (4 bit)
80
3.Ví dụ
82


Khái niệm vi ñiều khiển (microcontroller – MC) ñã khá quen thuộc với
các sinh viên CNTT, ñiện tử, ñiều khiển tự ñộng cũng như Cơ ñiện tử… Nó
là một trong những IC thích hợp nhất ñể thay thế các IC số trong việc thiết
kế mạch logic. Ngày nay ñã có những MC tích hợp ñủ tất cả các chức năng
của mạch logic. Nói như vậy không có nghĩa là các IC số cũng như các IC
mạch số lập trình ñược khác như PLD… không cần dùng nữa. MC cũng có
những hạn chế mà rõ ràng nhất là tốc ñộ chậm hơn các mạch logic… MC
cũng là một máy tính – máy tính nhúng vì nó có ñầy ñủ chức năng của một
máy tính. Có CPU, bộ nhớ chương trình, bộ nhớ dữ liệu, có I/O và các bus
trao ñổi dữ liệu. Cần phân biệt khái niệm MC với khái niệm vi xử lý
(microprocessor – MP) như 8088 chẳng hạn. MP chỉ là CPU mà không có
các thành phần khác như bộ nhớ I/O, bộ nhớ. Muốn sử dụng MP cần thêm
các chức năng này, lúc này người ta gọi nó là hệ vi xử lý (microprocessor
system). Do ñặc ñiểm này nên nếu ñể lựa chọn giữa MC và MP trong một
mạch ñiện tử nào ñó thì tất nhiên người ta sẽ chọn MC vì nó sẽ rẻ tiền hơn
nhiều do ñã tích hợp các chức năng khác vào trong chip. Trong phạm vi môn
học kiến trúc máy tính, chúng em xin chọn một loại MC ñể tìm hiểu với mục
ñích cuối cùng là hiểu hết các chức năng của MC này và thiết kế, lắp ráp
một mạch ño nhiệt ñộ dùng MC. Có rất nhiều loại MC ñể lựa chọn như họ
8051 của Atmel, Philips AVR của Atmel, dòng 68000 (32bit) của Motorola
Ở ñây xin chọn PIC của hãng microchip (www.microchip.com) vì sự phổ
biến của nó. Có một ñiều khá thú vị là trong sản phẩm trò chơi ñiện tử
PlayStation của Sony cũng có PIC.Theo ñánh giá thì PIC là dòng MC 8 bit

sử dụng nhiều nhất trên thế giới tại thời ñiểm năm 2006 này. Việt Nam có lẽ
cũng không phải là một ngoại lệ.
1.Giới thiệu các loại chip PIC
Như ñã nói ở phần trước, ở ñây ta sẽ chọn vi ñiều khiển PIC ñể tìm hiểu,
tuy nhiên việc chọn loại nào trong họ này cũng là một ñiều cần quan tâm.
PIC có rất nhiều dòng từ PIC12xx, PIC16xx, PIC18xx ñến dsPIC… theo thứ
tự ñộ phức tạp của từng dòng chip tăng lên, việc tìm hiểu chức năng của
Microcontroller Training Center

DKS GROUP

5

từng dòng này nằm ngoài phạm vi kiến thức của chúng em do ñó ở ñây xin
chọn loại cao nhất trong dòng 16 ñó là PIC16F877 (mid-range). Nó là loại vi
ñiều khiển loại trung với kích cỡ 1 lệnh là 14 bit (dòng 12 kích cỡ lệnh là
12bit, 18 có kích cỡ 16bit)
Chữ F trong tên gọi thể hiện bộ nhớ chương trình ở ñây là bộ nhớ FLASH
(có thể xoá và nạp lại xxxx lần)
2. Giới thiệu về PIC16F877



Hình 1.2.PIC16F877

a.PIC16F877 mang tất cả các ñặc ñiểm chung của các dòng PIC.
- Nó là máy tính có tập lệnh rút gọn (RISC). ðiều ñó có nghĩa là số lệnh của
nó hạn chế ñến mức tối thiểu ( 35 lệnh). Tại sao là RISC lại có lợi và phát
triển sau này? Như ta ñã biết ñể có thể thực hiện một chức năng nào ñó thì vi
ñiều khiển cần phải thực hiện các lệnh trong bộ nhớ chương trình (code

memory) ñược lưu dưới dạng các số nhị phân của nó bằng các bộ giải mã
(decoder). ðiều ñó cũng có nghĩa là nếu MC càng có nhiều tập lệnh càng
cần nhiều bộ decoder ñể giải mã. Như vậy số mạch giải mã tích hợp trong
chip sẽ cần nhiều lên. ðiều này làm cho chip cần tiêu thụ nhiều năng lượng
hơn cũng như chip sẽ dễ bị nóng hơn. Như vậy nếu như ứng dụng cần tiêu
thụ ít năng lượng thì người ta sẽ chọn RISC. Và có lẽ một phần nguyên nhân
là do mạch của nó ñơn giản hơn nên RISC như PIC chẳng hạn ñược mọi
người ñánh giá là loại MC chống nhiễu tốt nhất trong dòng 8 bit. Tất nhiên
Microcontroller Training Center

DKS GROUP

6

RISC cũng có ñiều không tốt, như ñể thực hiện một phép tính toán có thể
phức tạp hơn một chút như lệnh nhân 2 số 8 bit hay chia số 16 bit cho 8 bit
chẳng hạn thì cần viết các hàm cần một chút thủ thuật tính toán (ðó là nếu
viết trực tiếp bằng ngôn ngữ Assembly còn nếu viết bằng các ngôn ngữ cấp
cao như C thì sẽ không cần). Khi ñã xây dựng một trình dịch bằng ngôn ngữ
C chẳng hạn thì những việc khó khăn về thuật toán hoàn toàn do trình biên
dịch (compiler) xử lý nghĩa là nếu xét về mặt tốn công sức lập trình về các
thuật toán thì RISC cũng xem không tốn công hơn so với CISC. Có thể hình
dung chuyển từ CISC sang RISC là quá trình chuyển sự phức tạp từ phần
cứng sang sự phức tạp về phần mềm. Trái lại CISC lại có số lượng các thanh
ghi cũng như bộ nhớ ít hơn cần có ít hơn RISC vì: ðể thao tác một chức
năng nào ñó CISC cần thao tác với số thanh ghi nhỏ hơn RISC. Ngoài ra bộ
nhớ chương trình cũng giảm hơn rất nhiều. Tưởng tượng nếu RISC cần thực
hiện 1 phép toán nào ñó mà cần 5 lệnh chẳng hạn. Thay vì ñó trong máy tính
CISC người ta thiết kế một bộ giải mã lệnh ñể giải mã lệnh thay cho cả 5
lệnh này, như vậy rõ ràng trong máy tính CISC cần có thêm 1 bộ giải mã

lệnh nhưng mã nguồn lưu trữ trong chương trình lại giảm ñi ñược 1/5. Gần
ñây lại xuất hiện xu hướng ngược lại là chuyển từ phần mềm về phần cứng
và có lẽ sự lựa chọn tốt nhất trong tương lai sẽ là trung gian giữa hai loại ñể
trung hoà các ñặc tính của cả RISC lẫn CISC. Chính vì là RISC nên các lệnh
của PIC ñã ñược tối giản hoá, tất cả các lệnh trừ các lệnh thay ñổi con trỏ
chương trình(Program Counter - PC) ñều tốn 1 chu kỳ máy ( các lệnh thay
ñổi PC tốn 2 chu kỳ máy). ðiều này là khác với CISC có thể có những lệnh
tốn nhiều chu kỳ máy vì thực ra bản thân lệnh của CISC ñó cũng có thể coi
là bao gồm nhiều lệnh của RISC vậy.
PIC là MC mang cấu trúc Havard là cấu trúc có các ñường bus dữ liệu và
bus chương trình riêng lẻ. ðiều này làm cho chương trình có thể ñược thực
hiện ñồng thời các thao tác giải mã thực hiện lệnh với các thao tác ñọc dữ
liệu cùng lúc. ðiều này khác với cấu trúc Von Neumann có 2 ñường bus này
chung do ñó cùng lúc chỉ thực hiện 1 công việc. (Vẽ sơ ñồ tìm nạp) . ðây là
nguyên nhân làm cho cấu trúc Von neumann thực hiện 1 lệnh lâu hơn máy
mang cấu trúc Harvard. Tất nhiên người ta chỉ thấy ñược cái lợi của cấu trúc
Harvard khi mà công nghệ sản xuất chip ñã ñược phát triển lên.
Cũng cần phải nhớ là MC ñã ñược phát triển từ những dòng ñời trước rồi và
sau này nó có thêm các chức năng khác vào vậy một câu hỏi ñược ñặt ra là
nếu không có các chức năng phần cứng này thì trước ñây người ta sẽ làm
Microcontroller Training Center

DKS GROUP

7

thế nào ñể thực hiện các chức năng cần thiết? Thực tế người ta vẫn làm ñược
các công việc ñó nhưng là bằng phần mềm. Người viết mã sẽ phải thực hiện
các chức năng ñó bằng một số phương pháp nào ñấy. Còn khi tích hợp sẵn
vào trong phần cứng rồi thì việc thực hiện sẽ ñơn giản hơn trước ñây. ðiều

này có vẻ như lại ñi ngược với khuynh hướng ñã nêu ở trên ñối với các bộ
giải mã lệnh. Quá trình giải mã lệnh chuyển từ phức tạp phần cứng sang
phức tạp phần mềm. Còn quá trình thực hiện các chức năng khác lại chuyển
từ phức tạp phần mềm sang phần cứng. Hai quá trình này không có gì mâu
thuẫn với nhau mà ngược lại nó là một sự bổ sung cho nhau. Có thể sau này
ta sẽ thấy rõ hơn ñiều này nhưng ở ñây xin ñược nói sơ qua nguyên nhân.
Quá trình giải mã lệnh nếu như dùng trong RISC thì sự phức tạp phần mềm
ở ñây ngoài các giải thuật (là ñiều không ñáng ngại vì qua thời gian các giải
thuật này sẽ ñược tích luỹ dần dần cũng như xây dựng ñược các compiler
ngôn ngữ cấp trung và cấp cao như C, Pascal) là khó khăn ra thì các phép
tính cần những thứ trung gian thực hiện lúc này là bộ nhớ chính xác hơn là
các thanh ghi (càng ngày càng rẻ và dễ chế tạo). Còn ở quá trình thực hiện
các chức năng khác thì nếu không có phần cứng thêm vào thì các phần cứng
hiện thời ñược sử dụng sẽ mất công vào việc này mà sẽ không thực hiện
ñược việc khác. Chúng ta sẽ thấy rõ ñiều này hơn ở sau.
PIC16F877 có ñặc ñiểm phần cứng và các chức năng:
- 368 bytes bộ nhớ dữ liệu RAM. 8K Words bộ nhớ chương trình
FLASH (trong ñó mỗi word của dòng mid-range là 14bit), 256 bytes
EEPROM
- Có 3 bộ ñịnh thời Timer0, Timer1, Timer2
- Có khả năng xử lý ngắt từ nhiều nguồn ngắt khác nhau như ngắt
ngoài, ngắt tràn Timer, ngắt ngoại vi như ngắt ADC….
- Chức năng CCP gồm Comparator (Bộ so sánh), Capture và PWM
(ðiều biến ñộ rộng xung)
- Chức năng giao tiếp ñồng bộ nối tiếp SSP (Synchnorous Serial Port)
bao gồm 2 giao tiếp SPI và giao tiếp I2C
- Chức năng bộ truyền/phát không ñồng bộ ña năng nối tiếp USART
(Universal Serial Asynchnorous Receiver/Transmitter) ở dạng mô ñun
phần cứng phục vụ cho giao tiếp theo chuẩn RS- 232, do ñó ta không
cần quan tâm ñến các thao tác cấp thấp khi sử dụng RS-232. ðây là

chức năng hữu ích trong việc giao tiếp với PC của MC
Microcontroller Training Center

DKS GROUP

8

- Bộ chuyển ñổi ADC 10 bit chuyển ñổi tín hiệu tương tự thành tín hiệu
số 10 bit. Nguồn ñiện áp tham chiếu có thể chọn từ nguồn ngoài hoặc
từ nguồn Vdd và Vss cấp cho PIC
- Chức năng giao tiếp song song PSP (Parralel Slave Port)
- Chức năng Watchdog Timer
1. Tổ chức bộ nhớ
2. Giao tiếp vào ra I/O
3. Sử dụng Timer
4. Ngắt
5. Sử dụng EEPROM và FLASH ñể lưu tham số
6. Môñun CCP (Capture/Compare/PWM)
7. Bộ biến ñổi tương tự - số ADC 10bit, 8bit
8. Giao tiếp không ñồng bộ với máy tính qua chuẩn RS-232 bằng
USART
9. Các giao tiếp nối tiếp ñồng bộ SPI và I2C
10. Tóm gọn về tập lệnh
ðể có thể có cách ñọc dễ hiểu, trong quá trình giới thiệu chi tiết các chức
năng tích hợp trong chip, ta sẽ giới thiệu luôn các lệnh cần thiết tương ứng
cần dùng.
3.Tổ chức bộ nhớ của PIC 16F877
3.1.Tổ chức bộ nhớ chương trình
Nhìn vào sơ ñồ bên ta có thể hình dung về bộ nhớ chương trình của
PIC:Bộ nhớ chương trình có 8KWords (1 word = 14 bits) ñược phân

thành 4 trang có ñịa chỉ như bên. Cần nhớ với con trỏ chương trình PC là
13 bit thì kích cỡ ñịa chỉ tối ña ñánh ñược là 2
13
= 8K do ñó ta có thể
thấy với dòng mid-range thì kích thước bộ nhớ chương trình PIC16F877
ñã là tối ña có thể ñạt ñược ñến, với những loại kém hơn trong mid-range
thì bộ nhớ ít hơn do ñó khi PC tăng vượt quá giá trị bộ nhớ của nó sẽ xảy
ra hiện tượng quay vòng trở lại phần ñầu của bộ nhớ chương trình
Có 8 stack. Stack là nơi ta lưu PC lúc cần phục vụ cho các thao tác ngắt
cũng như chương trình con. Chỉ có 8 mức stack ñiều ñó có nghĩa là nếu
có 9 lần ñẩy vào stack thì lần ñầu tiên sẽ bị mất ñịa chỉ trở về và chương
trình sẽ bị chạy sai. PIC không có cờ ngắt báo xảy ra tràn stack.
3.2.Bộ nhớ dữ liệu
PIC là loại chip có bộ xử lý chỉ quản lý một không gian ñịa chỉ duy nhất,
gọi là không gian ñịa chỉ bộ nhớ.
Microcontroller Training Center

DKS GROUP

9

Bộ nhớ dữ liệu phân thành 4 banks như hình bên phân thành hai vùng là
vùng các thanh ghi trạng thái và ñiều khiển, vùng 2 là vùng các thanh ghi
ña mục ñích. Nếu muốn thực hiện một chức năng nào ñó thông thường ta
cần thao tác với các thanh ghi ñiều khiển ñể thiết lập một số cài ñặt cần
thiết, còn vùng các thanh ghi ña mục ñích GPR (General Purpose
Register) thường ñể lưu các biến trung gian phục vụ cho các thao tác tính
toán. Microchip xem vùng không gian nhớ RAM như là các thanh ghi
mặc dù chức năng của nó thực sự không phải như các thanh ghi, nó chỉ
dùng ñể chứ dữ liệu. Nếu muốn thao tác với thanh ghi nào trước tiên ta

phải xem nó thuộc bank nào trong 4 bank sau ñó ta phải chuyển ñến bank
ñó bằng cách thao tác với 2 bít RP1 và RP0 của thanh ghi trạng thái
STATUS như bảng dưới với các lệnh
BCF STATUS, RP1
BSF STATUS, RP0
sẽ chuyển về bank 1.
Các tên STATUS, RP1, RP0 khi dịch ra không có ý nghĩa gì với PIC mà
nó chỉ là các tên ñịnh danh ñã ñược khai báo trong tệp tiêu ñề (mà ta sẽ
phải include ở ñầu chương trình) của MPASM (Trình biên dịch
assembler) tương ứng với giá trị ñịa chỉ của thanh ghi ñó, cũng có thể
chuyển các bank bằng cách sử dụng macro ñã ñược trình biên dịch hợp
ngữ BANKSEL.
Nếu ta viết
BCF 0x03, 6
BSF 0x03, 5
Thì cũng hoàn toàn tương ñương với lệnh trên (lúc này không cần thiết
include nữa)
3.3.Một số thanh ghi quan trọng
a) Thanh ghi trạng thái
Cũng giống như tất cả các bộ vi xử lý khác, ở ñây ta có thanh ghi trạng
thái STATUS tại các ñịa chỉ 03h, 83h,103h, 183h nằm ở cả 4 bank.
Thanh ghi trạng thái có ñịa chỉ tại 4 bank ñể ta có thể tiện trong quá trình
thao tác, hơn nữa ngay bản thân các bit xác ñịnh vị trí bank cũng nằm
trong thanh ghi trạng thái
IRP: Bit lựa chọn bank ñược dùng trong chế ñộ truy nhập ñịa chỉ gián
tiếp
Microcontroller Training Center

DKS GROUP


10

RP1:RP0 Bit lựa chọn bank ñược dùng trong chế ñộ truy nhập ñịa chỉ
trực tiếp
TO : Bit Time-out
1 = Sau khi bật nguồn hoặc lệnh CLRWDT, hoặc lệnh SLEEP
0 = 1 time-out của WDT xảy ra (WDT = watch dog timer)
PD : Bit Power-down
1 = Sau khi bật nguồn hoặc lệnh CLRWDT
0 = Sự thực hiện lệnh SLEEP
Z : Cờ trạng thái zero
1 = Thao tác logic hoặc số học bằng 0
0 = khác 0
DC : Bit carry/borrow chữ số
1 = carry từ 4 bit thấp
0 = không carry từ 4 bit thấp
C : Carry/borrow
1 = carry từ bit MSb
0 = không carry từ bit MSb
b)Thanh ghi trạng thái OPTION
Nó chức các bit ñiều khiển ñể cấu hình
RBPU : Bit enable ñiện trở kéo lên ở PORTB
INTEDG : Bit xác ñịnh cạnh lên của ngắt ngoài tại chân RB0/INT
T0CS : Bit lựa chọn nguồn clock của timer0
T0SE :
PSA: Bit gán tỷ lệ Prescaler
1 = Gán cho WDT
0 = Gán cho môñun Timer0
PS2:PS0 Bit lựa chọn tỷ lệ gán
c)Thanh ghi INTCON(Thanh ghi ñiều khiển ngắt chung)

GIE : Bit enable tất cả các nguồn ngắt, nếu muốn disable tất cả các nguồn
ngắt chỉ cần disable nguồn ngắt này, còn nếu enable 1 nguồn ngắt nào ñó
thì enable bit này sẽ là lệnh cuối cùng
PEIE: Bit enable các ngắt ngoại vi
TMR0IE: Bit enable ngắt trnà của timer0
INTE: Bit enable ngắt ngoài trên chân RB0/INT
RBIE: Bit enable ngắt thay ñổi trên cổng PORTB
TMR0IF: Bit cờ báo ngắt của timer0
Microcontroller Training Center

DKS GROUP

11

INTF: Bit cờ báo ngắt ngoài trên chân RB0/INT
RBIF: Bit cờ báo ngắt thay ñổi trên cổng RB
d)Thanh ghi PIE1 (Thanh ghi ñiều khiển ngắt thiết bị ngoại vi)
PSPIE: Bit enable ngắt ñọc/ghi cổng slave song song
ADIE: Bit enable ngắt ADC
RCIE: Bit enable ngắt nhận của USART
TXIE: Bit enable ngắt phát của USART
SSPIE: Bit enable ngắt cổng nối tiếp ñồng bộ
CCP1IE: Bit enable ngắt của CCP1 (Compare-Capture-PWM)
TMR2IE: Bit enable ngắt của timer2?
TMR1IE: Bit enable ngắt tràn timer1
e) Thanh ghi PIR1
4.Lập trình cho PIC
4.1.Giới thiệu
ðể lập trình cho PIC16F877 bạn có thể sử dụng 2 ngôn ngữ cơ bản là C và
ASM .Nhìn chung ,2 ngôn ngữ này có những ưu và nhược ñiểm riêng.Ngôn

ngữ ASM có ưu ñiểm là gọn nhẹ ,giúp người lập trình nắm bắt sâu hơn về
phần cứng .Tuy nhiên lại có nhược ñiểm là phức tạp ,khó hiểu ,không thuận
tiện ñể xây dựng các chương trình lớn.Ngược lại ngôn ngữ C lại dễ dung
,tiện lợi ,dễ debug ,thuận tiện ñể xây dựng các chương trình lớn.Nhưng
nhược ñiểm của ngôn ngữ C là không giúp người lập trình hiểu biết sâu về
phần cứng.
4.2.Các phần mềm lập trình cho PIC
-CCS
Phần mềm CCS là phần mềm chuyên dụng ñể lập trình cho PIC (viết bằng
ngôn ngữ C).Phần mềm CCS có bộ thư viện hàm rất phong phú ,hỗ trợ ñầy
ñủ các tính năng như giao tiếp RS-232 ,LCD ,chức năng I/O, Timer ,thuận
tiện ñể làm các ứng dụng lớn.Hiện nay CCS ñã có phiên bản 4 ñược cập nhật
bộ thư viện hàm mới .
Microcontroller Training Center

DKS GROUP

12


Hình 2.2.Giao diện phần mềm CCS

-HT-PIC
HT-PIC là phần mềm biên dịch cho PIC sử dụng ngôn ngữ lập trình C. HT-
PIC thường ñược tích hợp trong môi trường MPLAB-IDE ñể soạn thảo
chương trình.
-MPLAB IDE
Microcontroller Training Center

DKS GROUP


13


Hình 2.3.Giao diện phần mềm MPLAB IDE

Giáo trình này sẽ chủ yếu hướng dẫn các bạn lập trình PIC bằng ngôn ngữ C
.Sử dụng phần mềm CCS phiên bản 3
4.3.Giới thiệu phần mềm CCS
4.3.1.Vì sao ta sử dụng CCS ?
Sự ra ñời của một loại vi ñiều khiển ñi kèm với việc phát triển phần mềm
ứng dụng cho việc lập trình cho con vi ñiều khiển ñó. Vi ñiều khiển chỉ hiểu
và làm việc với hai con số 0 và 1. Ban ñầu ñể việc lập trình cho VðK là làm
việc với dãy các con số 0 và 1. Sau này khi kiến trúc của Vi ñiều khiển ngày
càng phức tạp, số luợng thanh ghi lệnh nhiều lên, việc lập trình với dãy các
số 0 và 1 không còn phù hợp nữa, ñòi hỏi ra ñời một ngôn ngữ mới thay thế.
Và ngôn ngữ lập trình Assembly. Ở ñây ta không nói nhiều ñến Assmebly.
Sau này khi ngôn ngữ C ra ñời, nhu cầu dùng ngôn ngữ C ñề thay cho ASM
trong việc mô tả các lệnh lập trình cho Vi ñiều khiển một cách ngắn gọn và
Microcontroller Training Center

DKS GROUP

14

dễ hiểu hơn ñã dẫn ñến sự ra ñời của nhiều chương trình soạn thảo và biên
dịch C cho Vi ñiều khiển : Keil C, HT-PIC, MikroC,CCS…
Tôi chọn CCS cho bài giới thiệu này vì CCS là một công cụ lập trình C
mạnh cho Vi ñiều khiển PIC. Những ưu và nhược ñiểm của CCS sẽ ñược ñề
cập ñến trong các phần dưới ñây.

4.3.2.Giới thiệu 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 dịch riêng biệ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
- PCH cho dòng PIC 16 và 18-bit
Tất cả 3 trình biên dịch 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, phiên bản mới nhất là
PCWH Compiler Ver 3.227.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 ñiề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.Tài liệu hướng dẫn sử dụng có rất nhiều, nhưng chi
tiết nhất chính là bản Help ñi kèm theo phần mềm (tài liệu Tiếng Anh).
Trong bản trợ giúp nhà sản xuất ñã mô tả rất nhiều về hằng, biến, chỉ thị tiền
xủa lý, cấu trúc các câu lệnh trong chương trình, các hàm tạo sẵn cho người
sử dụng…Ngoài ra về Tiếng Việt cũng có bản dịch của tác giả Trần Xuân
Trường, SV K2001 DH BK HCM. Tài liệu này dịch trên cơ sở bản Help
của CCS, tuy rằng chưa ñầy ñủ nhưng ñây là một tài liệu hay, nếu bạn tìm
hiểu về PIC và CCS thì nên tìm tài liệu này về ñọc. ðịa chỉ Download tài
liệu: www.picvietnam.com -> Mục nói về CCS.
-Tạo PROJECT ñầu tiên trong CCS
ðể tạo một Project trong CCS có nhiều cách, có thể dùng Project Wizard,
Manual Creat,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ẽ
Microcontroller Training Center

DKS GROUP

15

rất mất thời gian trong việ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 hết bạn khởi ñộng chương trình làm việc PIC C 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
.

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
.
Microcontroller Training Center

DKS GROUP

16



Như vậy là xong bước ñầu tiên. Sau khi nhấn nút Save, một cửa sổ New
Project 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. Tôi giới thiệu những Tab chính thường hay ñược sử
dụng.
-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.
Microcontroller Training Center

DKS GROUP

17




-Device: Liệt kê danh sách các loại PIC 12F, 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ảo vệ Code, Brownout detected…
-Chọn kiểu con trỏ RAM là 16-bit hay 8-bit
-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ừng loại giao tiếp.
Giao tiếp RS232
Microcontroller Training Center

DKS GROUP

18


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

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.


-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ần cứ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
Microcontroller Training Center

DKS GROUP

19


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ấu hình cho LCD dành cho các chíp dòng 18F và 30F.

Hình 2.4: Tab SPI and LCD
-Tab Timer
Liệt kê các bộ ñếm/ñịnh thời mà các con PIC dòng Mid-range có: 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…
Microcontroller Training Center

DKS GROUP

20


Hình 2.5: Tab Timer
-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ào
từng IC cụ thể mà có các lựa chọn khác nhau, bao gồm:
- Lựa chọn cổng vào tương tự
- Chọn chân ñiện áp lấy mẫu (Vref)
- Chọn ñộ phân giải: 8-bit = 0 ~ 255 hay 10-bit = 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à internal 2-6 us.
-Khi không sử dụng bộ ADC ta chọn none
Microcontroller Training Center

DKS GROUP


21


4.3.3. Tab Other
Tab này cho phép ta thiết lập các thông số cho các bộ
Capture/Comparator/PWM.
Capture - Bắt giữ
- Chọn bắt giữ xung theo sườn dương (rising edge) hay sườn âm (falling
edge) của xung vào
- Chọn bắt giữ sau 1, 4 hay 16 xung (copy giá trị của TimerX vào thanh ghi
lưu trữ CCCPx sau 1, 4 hay 16 xung).
Compare - So sánh
- Ta có các lựa chọn thực hiện lệnh khi xảy 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:
o Thực hiện ngắt và thiết lập mức 0
o Thực hiện ngắt và thiết lập mức 1
Microcontroller Training Center

DKS GROUP

22

o Thực hiện ngắt nhưng không thay ñổi trạng thái của chân PIC.
o ðư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à duty cycle. 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 ñiện áp

-
Lựa chọn mức ñiện áp so sánh Vref. 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.

4.3.4.Tab Interrupts và Tab Driver
Tab Interrupts 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
Tab Drivers ñượ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,
Microcontroller Training Center

DKS GROUP

23

9346, 9356…Ngoài ra còn có IC RAM,PCF8570, IC thời gian thực DS1302,
Keypad 3x4, LCD, ADC… Chi tiết ta có thể xem trong
- thư mục Driver của chương trình: \ \PICC\Drivers

Hình 2.7: Tab Interrupts

Microcontroller Training Center

DKS GROUP

24



Hình 2.8: Tab Driver


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 Files 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. Dưới ñây là nội dung một files chương trình mẫu.
#include D:\1-PIC project\chuong trinh test.HEX.h
#int_EXT
EXT_isr()
{
// Code here
}
Void Chuong_trinh_con()
{
// Code here
}
void main()
{
setup_adc_ports(AN0);
Microcontroller Training Center

DKS GROUP

25

setup_adc(ADC_CLOCK_INTERNAL);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_EXT);
enable_interrupts(INT_TBE);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
// Enter your code here
}
Chuong_trinh_mau.h
#include <16F877A.h>
#device adc=8
#FUSES NOWDT,HS,NOPUT,NOPROTECT,NODEBUG,
#use delay(clock=20000000)
#define SRAM_SCL PIN_C3
#define SRAM_SDA PIN_C4
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
4.3.5. Mẫu chương trình chuẩn cho lập trình CCS

Phần trên ta ñã tìm hiểu cách tạo một Project trong CCS, tuy nhiên theo
cách ñó mất khá nhiều thời gian, mặt khác mỗi người lập trình sẽ tạo ra
nhưng form tài liệu theo cách riêng khác nhau, không ñồng nhất. Tài liệu
không ñược chuẩn hóa sẽ gây một số khó khăn cho người ñọc, người ñọc có
thể không hiểu hết những gì mà người lập trình muốn diễn ñạt.Với mục ñích
ñưa ra một form tài liệu chuẩn cho việc lập trình bằng CCS, qua tham khảo
bản mẫu cho lập trình bằng ASM của anh Falleaf trên diễn ñàn
WWW.PICVIETNAM.COM .Tôi ñưa ra ñây một form tài liệu cho việc viết
lập trình bằng CCS. ði kèm văn bản này còn có các files nguồn cho văn bản
mẫu, bao gồm files cho PIC16F877A, 16F876A, 16F88. Về sau khi lập trình

bạn chỉ việc copy tài liệu này vào thư mục chứa Project của bạn, sửa ñổi tên
files.Khi cần thay ñổi nội dung cấu hình cho PIC bạn chi việc tham khảo qua
PIC Wizard , xem code và copy ñưa vào Project.

×