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
35 trang |
Chia sẻ: huongnhu95 | Lượt xem: 547 | Lượt tải: 1
Tóm tắt tài liệu Giáo trình Vi điều khiển PLC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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 ngồ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ể xố 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 tố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 tố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 tốn hồn tồ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 tố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. Ngồ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 tố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 hồ 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 hố, 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 ngồ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
ngồ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 ngồ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à 213 = 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
tố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 hồn tồ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 ngồ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 ngồ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 ngồ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ụngNgồ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, WDTTrong 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/ngồ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 ngồ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. Ngồ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 ngồ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, 9356Ngồ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
#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.
Microcontroller Training Center
DKS GROUP
26
Mơ tả nội dung chương trình.
- #include 16f877a.h : ði kèm chương trình dịch, chứa khai báo về các
thanh ghi trong mỗi con PIC, dùng cho việc cấu hình cho PIC.
- #include def_877a.h: Files do người lập trình tạo ra, chứa khai báo về các
thanh ghi trong PIC giúp cho viêc lập trình được dễ dang hơn ví dụ ta co thể
gán PORTB =0xAA (chi tiết files này sẽ trình bày trong phần dưới đây)
- #device *=16 ADC = 10: Khai báo dùng con trỏ 8 hay 16 bit, bộ ADC là 8
hay 10 bit
- #FUSES NOWDT, HS: Khai báo về cấu hình cho PIC
- #use delay(clock=20000000): Tần số thạch anh sử dụng
- #use rs232 (baud=9600,): Khai báo cho giao tiếp nối tiếp RS232
- #use i2c(master, SDA=PIN_C4,): Khai báo dùng I2C, chế độ hoạt
động
- #include :Khai báo các files thư viện được sử dụng ví dụ
LCD_lib_4bit.c
- #INT_xxx : Khai báo địa chỉ chương trình phục vụ ngắt
- Void tên_chương_trình (tên_biến) {}: Chương trình chính hay chương
trình con
Chương trình mẫu cho PIC16F877A
//================================================= =======
// Ten chuong trinh : Mach test den LED_1
// Nguoi thuc hien : Falleaf
// Ngay thuc hien : 23/05/2005
// Phien ban : 1.0
// Mo ta phan cung : Dung PIC16F877A - thach anh 20MHz
// : LED giao tiep voi PORTB
// : Cuc am cua LED noi voi GND
// : RB0 - RB7 la cac chan output
//----------------------------------------------------------------
// Ngay hoan thanh : 23/05/2005
// Ngay kiem tra : 23/05/2005
// Nguoi kiem tra : Doan Hiep
//----------------------------------------------------------------
// Chu thich : Mo ta cac diem khac nhau cua cac phien ban khac nhau
// : hoac cac chu thich khac
// : vd, dung che do Power On Reset, PORTB = 00000000
// : hoac, chuong trinh viet cho PIC Tutorial
// : hoac, chuong trinh nay hoan toan mien phi va co the dung cho
// : moi muc dich khac nhau
//================================================= =======
Microcontrolle
Các file đính kèm theo tài liệu này:
- giao_trinh_vi_dieu_khien_plc.pdf