Giáo trình gồm 10 chương với những nội dung chính như: Giới thiệu về vi điều khiển pic của microchip, kiến trúc phần cứng của PIC 18f4520, phần mềm MPLAB và trình dịch MCC18, hoạt động vào ra, hoạt động định thời, lập trình với LCD 1602, hoạt động ngắt, module CCP (CAPTURE/COMPARE/PWM), bộ chuyển đổi tương tự - số (ADC), truyền thông nối tiếp và giao tiếp giữa 2 vi điều khiển PIC. Mời các bạn cùng tham khảo.
Trang 1BỘ LAO ĐỘNG THƯƠNG BINH VÀ XÃ HỘI TRƯỜNG CAO ĐẲNG KỸ NGHỆ II KHOA ĐIỆN – ĐIỆN TỬ
Trang 2Chương 1 GIỚI THIỆU VỀ VI ĐIỀU KHIỂN PIC CỦA MICROCHIP
1 Giới thiệu về PIC 4
2 Các loại PIC thông dụng 4
3 Ứng dụng của PIC 5
Chương 2 KIẾN TRÚC PHẦN CỨNG CỦA PIC 18F4520 1 Sơ đồ khối 6
2 Sơ đồ chân 9
3 Tổ chức bộ nhớ 9
4 Khối tạo dao động 13
5 Hoạt động Reset 15
6 Các Port vào / ra 17
Chương 3 PHẦN MỀM MPLAB VÀ TRÌNH DỊCH MCC18 1 Cài đặt MPLAB 29
2 Sử dụng MPLAB 29
3 Trình dịch MCC18 40
Chương 4 HOẠT ĐỘNG VÀO RA 1 Lập Trình xuất 50
2 Lập Trình nhập 50
3 Hoạt động xuất/nhập 51
4 Bài tập ứng dụng 52
Chương 5: HOẠT ĐỘNG ĐỊNH THỜI 1 Giới thiệu 53
2 Timer 0 53
3 Timer 1 60
4 Lập trình với timer 64
Chương 6: LẬP TRÌNH VỚI LCD 1602 1 Khái niệm 69
2 Nguyên lý hoạt động 70
3 Nguyên tắc hiển thị trên LCD 70
4 Ví dụ lập trình điều khiển hiển thị trên LCD 71
Chương 7: HOẠT ĐỘNG NGẮT 1 Khái niệm 75
2 Tổ chức ngắt của PIC 18F4520 75
3 Ngắt ngoài 77
4 Các thanh ghi liên quan 77
5 Lập trình sử dụng ngắt 85
Trang 3Chương 8: MODULE CCP (CAPTURE / COMPARE / PWM)
1 Giới thiệu 91
2 Các thanh ghi liên quan 93
3 Sử dụng các bộ PWM 94
4 Lập trình điều chế độ rộng xung 96
Chương 9: BỘ CHUYỂN ĐỔI TƯƠNG TỰ - SỐ (ADC) 1 Giới thiệu 99
2 Các thanh ghi liên quan 101
3 Điều khiển hoạt động chuyển đổi A/D 104
4 Lập trình sử dụng ADC 111
Chương 10: TRUYỀN THÔNG NỐI TIẾP VÀ GIAO TIẾP GIỮA 2 VI ĐIỀU KHIỂN PIC 1 Giới thiệu 116
2 Các thanh ghi liên quan 118
3 Tốc độ baud 121
4 Ngắt USART 128
5 Lập trình sử dụng USART 131
Trang 4GIỚI THIỆU VỀ VI ĐIỀU KHIỂN PIC CỦA MICROCHIP
1 GIỚI THIỆU VỀ PIC
PIC là viết tắt của “Programable Intelligent Computer”, có thể tạm dịch là “máy tính thông minh khảtrình” do hãng General Instrument đặt tên cho vi điều khiển đầu tiên của họ PIC1650 được thiết kế để dùng làm các thiết bị ngoại vi cho vi điều khiển CP1600 Vi điều khiển này sau đó được nghiên cứu phát triển thêm và
từ đó hình thành nên dòng vi điều khiển PIC ngày nay
Hình 1.1 Vi điều khiển PIC
2 CÁC LOẠI PIC THÔNG DỤNG
Các kí hiệu của vi điều khiển PIC:
PIC12xxxx: độ dài lệnh 12 bit
PIC16xxxx: độ dài lệnh 14 bit
PIC18xxxx: độ dài lệnh 16 bit
C: PIC có bộ nhớ EPROM (chỉ có 16C84 là EEPROM)
F: PIC có bộ nhớ flash
LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp
LV: như LF, đây là kí hiệu cũ
Bên cạnh đó một số vi điều khiển có kí hiệu xxFxxx là EEPROM, nếu có chữ A
ở cuối là flash (ví dụ PIC16F877 là EEPROM, còn PIC16F877A là flash)
Ngoài ra còn có thêm dòng vi điều khiển PIC mới là dsPIC
Trang 5Ở Việt Nam phổ biến nhất là họ vi điều khiển PIC do hãng Microchip sản xuất Cách lựa chọn một vi điều khiển PIC phù hợp: Trước hết cần chú ý đến sốchân của vi điều khiển cần thiết cho ứng dụng Có nhiều vi điều khiển PIC với số lượng chân khác nhau, thậm chí có vi điều khiển chỉ có 8 chân, ngoài ra còn có vi điều khiển 28, 40, 44, … chân Cần chọn vi điều khiển PIC có bộ nhớ flash để có thể nạp xóa chương trình được nhiều lần hơn, tiếp theo cần chú ý đến các khối chức năng được tích hợp sẵn trong vi điều khiển, các chuẩn giao tiếp bên trong và sau cùng cần chú ý đến bộ nhớ chương trình mà vi điều khiển cho phép
3 ỨNG DỤNG CỦA PIC
Ngày nay PIC được ứng dụng rất rộng rãi trong thực tế, từ những vật dụng đơn giản cho đến những hệ thống điều khiển phức tạp trong công nghiệp
Hình 1.2 Ứng dụng PIC
Trang 6KIẾN TRÚC PHẦN CỨNG CỦA PIC 18F4520
1 SƠ ĐỒ KHỐI
Hình 2.1 Sơ đồ khối của PIC18F4520
Các khối chính trên PIC 18F4520 bao gồm:
Bộ xử lý trung tâm CPU (Central Processing Unit):
Trang 7 Tần số làm việc tối đa 40 MHz, sản xuất bằng công nghệ nanoWatt
Thiết kế theo kiến trúc Havard, tập lệnh RISC
Sử dụng kỹ thuật đường ống lệnh (Instruction Pipelining)
Đơn vị logic học (ALU: Arithmetic Logical Unit)
Thanh ghi làm việc (WREG: work register )
Bộ nhân bằng phần cứng (8x8 Multiply), kết quả được chứa trong cặp thanh ghi (PRODH, PRODL)
Thanh ghi đếm chương trình (PC: Program Counter) có 21 bit bao gồm thanh ghi PCL(PC-Low) chứa các bit từ 7-0, thanh ghi PCH (PC-High) chứa các bit từ 15-8, thanh ghi PCU (PC-upper) chứa các bit từ 20-16
Thanh ghi con trỏ ngăn xếp STKPTR (Stack Pointer)
31 mức ngăn xếp (31 level stack)
Thanh ghi lựa chọn băng (BSR: Bank Select Register)
Thanh ghi con trỏ dữ liệu gián tiếp FSR (Indirect Data Memory Address Pointer)
Nguồn xung chính được đưa vào chip qua chân OSC1 và OSC2
Nguồn xung phụ được đưa vào chip qua các chân T1OSI, T1OSO
Bộ phát xung nội INTRC tần số 31kHz
Bộ phát xung nội trên chíp tần số 8 MHz
Watchdog Timer (WDT): là một bộ timer có chức năng đặc biệt, khi bị tràn sẽ khởi động lại hệ thống Thời gian khởi động lại hệ thống có thể lựa chọn được
từ 4ms đến 131,072s WDT sẽ được khởi tạo ở đầu chương trình, trong thân chương trình sẽ được “chèn” các lệnh reset WDT sao cho khi vi điều khiển thực hiện các đúng tuần tự các lệnh, WDT chưa bị tràn Mục đích chính của việc sử dụng WDT là tránh cho vi điều khiển vô tình thực hiện phải một vòng lặp chết (dead loop) mà không thoát ra được
Bộ nạp chương trình: Bộ nạp chương trình nối tiếp trên chip (Single-Supply In-Circuit Serial Programming) sẽ giúp nạp chương trình từ mạch nạp vào bộ nhớ ROM qua các chân PGM, PGC và PGD
Trang 8lập trình kiểm soát lỗi chương trình bằng cách cho vi điều khiển hoạt động ở chế độ chạy từng lệnh, nhóm lệnh hay toàn bộ chương trình
Khối phát hiện tín hiệu reset: Mạch phát hiện tín hiệu reset có khả năng phát hiện 03 nguồn reset:
Reset từ chân MCLR
Reset khi bật nguồn (POR: Power-on Reset)
Reset khi nguồn yếu (BOR : Brown-out Reset)
Khối quản lý lỗi bộ phát xung (Fail-Safe Clock Monitor): Khối này được sự dụng để quản lý an toàn bộ phát xung hệ thống
Khối định thời khởi động bộ phát xung (Oscillator Start-up Timer): Khối này
sử dụng để tạo thời gian trễ chờ cho bộ phát xung ổn định
Thiết bị ngoại vi (Peripheral): PIC18f4520 được tích hợp các thiết bị ngoại vi sau:
Bộ phát hiện điện áp cao/thấp HLVD(High/low-Voltage Detect)
Bộ nhớ lưu dữ liệu khi tắt nguồn EEPROM
04 bộ đếm, định thời 16 bit: Timer0, Timer1, Timer2 và Timer3
01 bộ so sánh tín hiệu tương tự (Comparator)
02 bộ CCP1, CCP2 (Capture, Compare, PWM : Chụp, So sánh, xung Pwm);
13 kênh biến đổi tương tự - số (ADC) độ phân giải 10 bit
Khối giao tiếp vào/ra số: Vi điều khiển PIC18F4520 có 5 cổng vào/ra A, B, C,
D và E Mỗi cổng có một thanh ghi đệm dữ liệu tương ứng là PORTA, PORTB, PORTC, PORTD và PORTE, các thanh ghi này được định địa chỉ theo byte và theo bit
PORTA : RA7 - RA0
PORTB : RB7 - RB0
PORTC : RC7 - RC0
PORTD : RD3 - RD0
PORTE : RE3-RE0
Trang 92 SƠ ĐỒ CHÂN
Sơ đồ chân dạng PDIP (Lead Plastic Dual In-Line Package)
Hình 2.2 Sơ đồ chân PIC 18F4520 dạng PDIP
3 TỔ CHỨC BỘ NHỚ
Bộ nhớ của vi điều khiển PIC 18F4520 bao gồm 3 loại:
Bộ nhớ chương trình (Program memory)
Bộ nhớ dữ liệu RAM (Data RAM)
Bộ nhớ dữ liệu EEPROM (Data EEPROM)
Bộ nhớ của PIC 18F4520 được thiết kế theo kiến trúc Havard, bộ nhớ chương trình và bộ nhớ dữ liệu được thiết kế riêng đường Bus, cho phép CPU truy cập cùng lúc tới bộ nhớ chương trình và bộ nhớ dữ liệu Bộ nhớ dữ liệu EEPROM được sử dụng để lưu trữ dữ liệu khi mất điện
Bộ nhớ chương trình
Thanh ghi đếm chương trình PC (Program Counter) của PIC 18F4520 có 21 bit nên có thể địa chỉ hóa 2 Mbyte bộ nhớ chương trình Bộ nhớ Flash của PIC 18F4520 có dung lượng 32 Kbyte nên chứa được 16384 lệnh từ đơn (single-word instructions), với dải địa chỉ từ 0000h đến 7FFFh Nếu đọc ở vùng nhớ ngoài 32Kbyte của PIC 18F4520 và trong khoảng 2 Mbyte mà nó có thể quản lý thì giá trị dữ liệu trả về sẽ là “0” PIC 18F4520 có 31 mức ngăn xếp
Trang 10thanh ghi đếm chương trình PC sẽ được xóa về 0 Các thanh ghi của PIC 18F4520
sẽ được tải lại các giá trị mặc định
Hình 2.3 Sơ đồ tổ chức bộ nhớ chương trình và ngăn xếp
Vector ngắt ưu tiên cao (High-Priority Interrupt Vector) được đặt ở địa chỉ 0008h, vector ngắt ưu tiên thấp (Low-Priority Interrupt Vector) được đặt ở địa chỉ 0018h Thanh ghi đếm chương trình PC 21 bit chứa trong 3 thanh ghi 8 bit riêng biệt, 8 bit thấp chứa trong thanh ghi PCL, 8 bit tiếp theo chứa trong thanh ghi PCH, 5 bit cao chứa trong thanh thi PCU Thanh ghi PCH và PCU không cho phép truy cập trực tiếp mà phải truy cập thông qua hai thanh ghi PCLATH và PCLATU tương ứng PIC 18F4520 đươc thiết kế theo kỹ thuật đường ống lệnh (Instruction Pipelining) nên việc thực hiện lệnh PC-2 và đọc mã lệnh PC được diễn ra cũng một thời điểm
Trang 11Hình 2.4 Giản đồ xung đọc mã lệnh và thực hiện lệnh của PIC 18F4520
Bộ nhớ dữ liệu RAM
Hình 2.5 Sơ đồ tổ chức bộ nhớ dữ liệu RAM
Bộ nhớ dữ liệu RAM 1536 byte (SRAM) được chia thành 2 vùng chức năng riêng biệt, vùng RAM đa dụng GPR (General Purpose Registers) sử dụng để chứa dữ
Trang 12chứa các thanh ghi chức năng điều khiển ngoại vi và CPU
Bộ nhớ dữ liệu RAM được chia thành 16 Bank từ Bank 0 đến Bank15, vùng RAM
đa dụng nằm từ Bank 0 đến Bank 2, các thanh ghi SFR nằm ở Bank 15 Vùng địa chỉ từ 300h đến EFFh không được sử dụng, đọc ở vùng này sẽ trả về giá tri 00h Bốn bit thấp của thanh ghi lựa chọn băng BSR (Bank Select Register) được sử dụng để lựa chọn truy cập băng
Hình 2.6 Phân bổ địa chỉ của các thanh ghi chức năng đặc biệt SFR
Bộ nhớ dữ liệu EEPROM
Trang 13Bộ nhớ dữ liệu EEPROM của PIC 18F4520 là bộ nhớ mảng không bị mất dữ liệu khi mất điện, độc lập với bộ nhớ chương trình và bộ nhớ dữ liệu RAM, được sử dụng để lưu trữ dữ liệu lâu dài Nó có thể ghi/đọc được 1.000.000 lần, dữ liệu có thể lưu trữ trong bộ nhớ 100 năm
4 KHỐI TẠO DAO ĐỘNG
PIC 18F4520 có thể hoạt động ở một trong 10 chế độ tạo dao động khác nhau Việc lựa chọn các chế độ tạo dao động nhờ các bit FOSC3:FOSC0 trong thanh ghi CONFIG1H
Hình 2.7 Sơ đồ khối bộ tạo dao động trên PIC 18F4520
Các chế độ tạo dao động:
LP (Low-Power Crystal) nguồn xung thạch anh ngoài, nguồn thấp
XT (Crystal/Resonator) thạch anh/bộ cộng hưởng bên ngoài
HS (High-Speed Crystal/Resonator) thạch anh/bộ cộng hưởng bên ngoài tốc độ cao
HSPLL nhân 4 lần tần số HS bằng vòng khóa pha (Phase Locked Loop)
RC (External Resistor/Capacitor) tạo dao động bằng mạch RC bên ngoài, phát xung FOSC/4 ra chân RA6
RCIO tạo dao động bằng mạch RC ngoài, vào/ra trên chân RA6
INTIO1 bộ tạo dao động nội, phát xung FOSC/4 ra chân RA6, vào/ra trên chân RA7
INTIO2 bộ tạo dao động nội, vào/ra trên chân RA6 và RA7
EC bộ phát xung ngoài, phát xung FOSC/4 ra chân RA6
Trang 14Tạo dao động bằng thạch anh ngoài (Crystal/ Ceramic Resonator)
Trong chế độ tạo dao động LP, XT, HS, HSPLL sử dụng thạch anh (Crystal) chưa
có tụ điện hoặc mạch cộng hưởng thạch anh bọc gốm đã có tụ điện (Ceramic Resonator) Ở các chế độ này bộ tạo dao động kết nối với vi điều khiển PIC 18F4520 qua hai chân OSC1 và OSC2
- Sơ đồ kết nối giữa vi điều khiển với bộ phát xung ngoài:
Hình 2.8 Sơ đồ kết nối với bộ dao động thạch anh/mạch cộng hưởng ngoài
- Lựa chọn giá trị tụ điện khi sử dụng mạch cộng hưởng thạch anh bọc gốm
Bảng 2.1 Lựa chọn giá trị tụ điện khi sử dụng Ceramic Resonator
- Lựa chọn giá trị tụ điện khi sử dụng thạch anh chưa có tụ điện (Crystal)
Bảng 2.2 Lựa chọn tụ điện khi sử dụng thạch anh (Crystal)
Nguồn xung ngoài (External Clock)
Trang 15Chế độ EC và ECIO sử dụng nguồn xung ngoài làm xung hệ thống và được nối qua cổng NOT trước khi đưa vào chân OSC1/CLKI
- Chế độ nguồn xung ngoài EC (External Clock), nguồn xung được lấy từ bên ngoài nối qua cổng NOT trước khi đưa vào OSC1/CLKI và chân OSC2/CLKO phát ra tần số bằng ¼ tần số đầu vào
Hình 2.9 Chế độ dao động EC
- Chế độ nguồn xung ngoài ECIO (External Clock Input Output), nguồn xung được lấy từ bên ngoài nối qua cổng NOT trước khi đưa vào OSC1/CLKI và chân OSC2/CLKO là chân vào/ra RA6
Hình 2.10 Chế độ dao động ECIO
5 HOẠT ĐỘNG RESET
Vi điều khiển PIC 18F4520 có 8 nguồn Reset:
Reset do bật nguồn POR (Power-on Reset)
Reset từ chân MCLR, sử dụng trong quá trình hoạt động bình thường
Reset từ chân MCLR, sử dụng trong chế độ quản lý nguồn
Reset do Watchdog Timer (WDT)
Reset do sụt điện áp nguồn BOR (Brown-out Reset)
Reset bằng lệnh RESET
Reset do đầy ngăn xếp (Stack Full Reset)
Reset do rỗng ngăn xếp (Stack Underflow Reset)
Trang 16Hình 2.11 Mô tả các nguồn Reset của PIC 18F4520
a Reset từ chân MCLR
Nguồn reset MCLR đươc nối từ mạch reset bên ngoài qua chân MCLR/RE3 Nếu bit MCLRE trong thanh ghi CONFIG3H được đặt bằng 1 thì chân MCLR/RE3 là chân reset, đặt MCLRE = “0” chân MCLRE là chân vào/ra của PORTE Khi có mức điện áp thấp được đặt lên chân MCLR hệ thống sẽ thực hiện reset
Hình 2.12 Mạch reset ngoài MCLR
b Reset do bật nguồn POR (Power-on Reset)
Trang 17Khi nguồn được cấp vào chân VDD, khối reset POR sẽ phát hiện sườn dương trên chân VDD sau đó phát tín hiệu reset vi điều khiển Bit POR trong thanh ghi RCON
sẽ báo trạng thái của reset POR, POR = ‘1’ là không phát hiện tín hiệu reset, POR=
‘0’ là phát hiện tín hiệu reset POR
Giá trị linh kiện: R < 40 kΩ; R1 >= 1KΩ
Hình 2.13 Mạch reset do bật nguồn POR
Thanh ghi PORT là thanh ghi dữ liệu, được định địa chỉ theo byte và theo bit, sử dụng để đệm đọc/ghi dữ liệu trên các cổng
Thanh ghi LAT là thanh ghi chốt dữ liệu đầu ra (bằng ‘1’ đầu ra chốt mức
1, bằng ‘0’ đầu ra chốt mức 0)
Thanh ghi TRIS là thanh ghi lựa chọn hướng dữ liệu (bằng ‘0’ chiều ra, bằng ‘1’ chiều vào)
6.1 Cấu trúc chung của một chân vào/ra
Hình 2.14 thể hiện cấu trúc chung của một chân vào/ra Trong đó việc xác định chân vào hay ra do các bit cụ thể quy định
Trang 18Hình 2.14 Cấu trúc chung của một chân vào/ra
I/O Kiểu
RA0/AN0 RA0 0 O DIG Chiều ra dữ liệu sử dụng bit LATA<0>; không bị ảnh
hưởng bởi đầu vào tương tự
1 I TTL Chiều vào dữ liệu sử dụng bit PORTA<0>
AN0 1 I ANA Đầu vào kênh 0 của bộ biến đổi A/D hoặc chân đầu
vào C1- của bộ so sánh Mặc đinh khi Reset POR RA1/AN1 RA1
0 O DIG Chiều ra dữ liệu sử dụng bit LATA<1>; không bị ảnh
hưởng bởi đầu vào tương tự
1 I TTL Chiều vào dữ liệu sử dụng bit PORTA<1>
AN1 1 I ANA Đầu vào kênh 1 của bộ biến đổi A/D hoặc chân đầu
vào C2- của bộ so sánh Mặc đinh khi Reset POR RA2/AN2/ VREF-
/CVREF
RA2 0 O DIG Chiều ra dữ liệu sử dụng bit LATA<2>; Cấm chức
năng này khi đầu ra CVREF được cho phép
1 I TTL Chiều vào dữ liệu sử dụng bit PORTA<2> Chức
năng này sẽ bị cấm khi chức năng tương tự hoặc đầu
ra CVREF được cho phép
AN2 1 I ANA Đầu vào kênh 2 của bộ biến đổi A/D hoặc chân đầu
vào C2+ của bộ so sánh Mặc đinh khi Reset POR VREF- 1 I ANA A/D và đầu vào điện áp tham chiếu mức thấp bộ so
sánh
CVREF x O ANA Đầu ra điện áp tham chiếu bộ so sánh
Trang 19RA3/AN3/VREF+ RA3 0 O DIG Chiều ra dữ liệu sử dụng bit LATA<3>
1 I TTL Chiều vào dữ liệu sử dụng bit PORTA<3>; Chức
năng này bị cấm khi đầu vào tương tự được cho phép AN3 1 I ANA Đầu vào kênh 3 của bộ biến đổi A/D hoặc hoặc chân
đầu vào C1+ của bộ so sánh Mặc đinh khi Reset POR
VREF+ 1 I ANA A/D và đầu vào điện áp tham chiếu mức cao bộ so
sánh
RA4/T0CKI/C1OUT RA4 0 O DIG Chiều ra dữ liệu sử dụng bit LATA<4>
1 I ST Chiều vào dữ liệu sử dụng bit PORTA<4>; mặc định
khi reset POR
T0CKI 1 I ST Cấp xung cho Timer0
C1OUT 0 O DIG Đầu ra 1 bộ so sánh; ưu tiên hơn vào/ra dữ liệu RA5/AN4/SS/ RA5 0 O DIG Chiều ra dữ liệu sử dụng bit LATA<5>; không ảnh
hưởng bởi đầu vào tương tự
HLVDIN/C2OUT
1 I TTL Chiều vào dữ liệu sử dụng bit PORTA<5>; Chức
năng này bị cấm khi cho phép đầu vào tương tự AN4 1 I ANA Đầu vào kênh 4 của bộ biến đổi A/D mặc định khi
1 I TTL Chiều vào dữ liệu sử dụng bit PORTA<6> Chế độ
này chỉ được cho phép ở các chế độ RCIO, INTIO2
0 O DIG Chiều ra dữ liệu sử dụng bit LATA<7> Chức năng
này bị cấm ở chế độ dao động ngoài
1 I TTL Chiều vào dữ liệu sử dụng bit PORTA<7> Chức
năng này bị cấm ở chế độ dao động ngoài
OSC1 x I ANA Kêt nối với bộ dao động ngoài
CLKI x I ANA Kết nối với nguồn xung bên ngoài
Bảng 2.3 Chức năng các chân trên PORTA
Chú thích:
DIG = Digital level output (đầu ra số); TTL = đệm đầu vào chuẩn TTL Transistor Logic ); ST = đệm đầu vào sử dụng Schmitt Trigger; ANA = vào/ra tương tự; x= không xác định; I=Input (vào); O=Output (ra)
(Transistor-Chú ý: Hai chân RA6 và RA7 còn phụ thuộc vào cấu hình bộ phát xung hệ thống
Trang 20Các thanh ghi liên quan đến PORTA gồm 6 thanh ghi sau:
PORTA: Thanh ghi dữ liệu PORTA
LATA: Thanh ghi chốt dữ liệu đầu ra của PORTA
TRISA: Thanh ghi lựa chọn hướng dữ liệu của PORTA (bit tương ứng trên thanh ghi đặt bằng ‘0’ thì chân tương ứng có chiều ra, bằng ‘1’ là chiều vào)
ADCON1: Là thanh ghi điều khiển A/D, thiết lập các chân vào/ra là số hay tương tự
CMCON: Là thanh ghi điều khiển bộ so sánh
CVRCON là thanh ghi điều khiển điện áp tham chiếu của bộ so sánh
Tên Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
PORTA RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 LATA LATA7 LATA6 Thanh ghi chốt dữ liệu PORTA
TRISA TRISA7 TRISA6 Thanh ghi hướng dữ liệu PORTA
ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0
Bảng 2.4 Các thanh ghi liên quan đến PORTA
6.3 Port B
PORTB gồm 8 bit, tương ứng với 8 chân được ký hiệu từ RB0 đến RB7 Các chân của PORTB có thể đọc/ghi theo từng bit hoặc cả byte Các chân PORTB <7:4> của PORTB còn được sử dụng làm nguồn ngắt ngoài
a Chức năng các chân của PORTB
RB0 0 O DIG Chiều ra dữ liệu sử dụng bit LATB<0>; không bị ảnh
hưởng bởi đầu vào tương tự
1 I TTL Chiều vào dữ liệu sử dụng bit PORTB<0>; Không nối
điện trở pull-up khi RBPU = ‘0’ Cấm chức năng này khi cho phép đầu vào tương tự
INT0 1 I ST Ngắt ngoài 0
FLT0 1 I ST Đầu vào báo sự cố PWM (Module ECCP1); Cho phép
bằng phần mềm
AN12 1 I ANA Kênh 12 của bộ biến đổi A/D
RB1/INT1/AN10 RB1 0 O DIG Chiều ra dữ liệu sử dụng bit LATB<1>; chức năng này
không bị bởi đầu vào tương tự
1 I TTL Chiều vào dữ liệu sử dụng bit PORTB<1>; Ngắt kết nôi
trở pull-up khi RBPU = ‘0’ Cấm chức năng này khi đầu vào tương tự được cho phép
Trang 21INT1 1 I ST Ngắt ngoài 1
AN10 1 I ANA Kênh 10 của bộ biến đổi A/D
RB2/INT2/AN8 RB2 0 O DIG Chiều ra dữ liệu sử dụng bit LATB<2>; không bị ảnh
hưởng bởi đầu vào tương tự
1 I TTL Chiều vào dữ liệu sử dụng bit PORTB<2>; Ngắt kết nôi
trở pull-up khi RBPU = ‘0’ Cấm chức năng này khi đầu vào tương tự được cho phép
INT2 1 I ST Ngắt ngoài 2
AN8 1 I ANA Kênh 8 của bộ biến đổi A/D
RB3/AN9/CCP2 RB3 0 O DIG Chiều ra dữ liệu sử dụng bit LATB<3>; không bị ảnh
hưởng bởi đầu vào tương tự
1 I TTL Chiều vào dữ liệu sử dụng bit PORTB<3>; Ngắt kết nôi
trở pull-up khi RBPU = ‘0’ Cấm chức năng này khi đầu vào tương tự được cho phép
AN9 1 I ANA Kênh 8 của bộ biến đổi A/D
CCP2(2) 0 O DIG CCP2 của bộ so sánh và đầu ra của PWM
1 I ST Đầu vào của bộ capture CCP2
RB4/KBI0/AN1
1 RB4 0 O DIG
Chiều ra dữ liệu sử dụng bit LATB<4>; không bị ảnh hưởng bởi đầu vào tương tự
1 I TTL Chiều vào dữ liệu sử dụng bit PORTB<4>; Ngắt kết nôi
trở pull-up khi RBPU = ‘0’ Cấm chức năng này khi đầu vào tương tự được cho phép
KBI0 1 I TTL Chân ngắt của ngắt thay đổi mức PORTB
AN11 1 I ANA Kênh 11 của bộ biến đổi A/D
RB5/KBI1/PGM RB5 0 O DIG Chiều ra dữ liệu sử dụng bit LATB<5>
1 I TTL Chiều vào dữ liệu sử dụng bit PORTB<5>; Ngắt kết nôi
trở pull-up khi RBPU = ‘0’
KBI1 1 I TTL Chân ngắt của ngắt thay đổi mức PORTB
PGM x I ST Tín hiệu nối mạch nạp nối tiếp (Single-Supply
In-Circuit Serial Programming™ mode entry (ICSP™)) Cho phép bởi bit cấu hình LVP; Tất cả các chức năng khác sẽ bị cấm
RB6/KBI2/PGC RB6 0 O DIG Chiều ra dữ liệu sử dụng bit LATB<6>
1 I TTL Chiều vào dữ liệu sử dụng bit PORTB<6>; Ngắt kết nôi
trở pull-up khi RBPU = ‘0’
KBI2 1 I TTL Chân ngắt của ngắt thay đổi mức PORTB
PGC x I ST Đầu vào xung từ (Serial execution (ICSP) clock) mạch
nạp tích hợp ICSP và mạch nạp ICD
RB7/KBI3/PGD RB7 0 O DIG Chiều ra dữ liệu sử dụng bit LATB<7>
1 I TTL Chiều vào dữ liệu sử dụng bit PORTB<7>; Ngắt kết nôi
trở pull-up khi RBPU = ‘0’
KBI3 1 I TTL Chân ngắt của ngắt thay đổi mức PORTB
PGD
x O DIG Đầu ra dữ liệu nối tiếp từ (Serial execution data output)
cho ICSP và ICD
x I ST Đầu vào dữ liệu nối tiếp từ (Serial execution data
output) cho ICSP và ICD
Bảng 2.5 Chức năng các chân của PORTB
Trang 22Có 7 thanh ghi được sử dụng để điều khiển và chọn chức năng cho PORTB:
PORTB: Thanh ghi dữ liệu của PORTB
LATB: Thanh ghi chốt dữ liệu của PORTB
TRISB: Thanh ghi hướng dữ liệu của PORTB
INTCON: Thanh điều khiển ngắt
INTCON2: Thanh ghi điều khển ngắt 2
INTCON3: Thanh điều khiển ngắt 3
ADCON1: Thanh ghi điều khiển bộ biến đổi A/D Thanh ghi này dùng
để chọn các chân AN0 đến AN12 là các chân vào/ra số hay tương tự
Tên Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 LATB Thanh ghi chốt dữ liệu PORTB
TRISB Thanh ghi hướng dữ liệu PORTB
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 — TMR0IP — RBIP INTCON3 INT2IP INT1IP — INT2IE INT1IE — INT2IF INT1IF ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0
Bảng 2.6 Các thanh ghi liên quan đến PORTB
6.4 Port C
PORT C có độ rộng 8 bit, tương ứng với 8 chân được ký hiệu từ RC0 đến RC7 Các chân của PORTC có hai chiều dữ liệu và người lập trình có thể đọc/ghi theo từng bit hoặc cả byte
a Chức năng các chân của PORTC
Chân Chức
năng TRIS I/O
Kiểu
RC0/T1OSO/ RC0 0 O DIG Chiều ra dữ liệu sử dụng bit LATC<0>
T13CKI 1 I ST Chiều vào dữ liệu sử dụng bit PORTC<0>
T1OSO x O ANA Đầu ra bộ phát xung Timer1; Chức năng này được
cho phép khi cho phép bộ phát xung Timer1 Cấm vào chức năng vào/ra số
T13CKI 1 I ST Cấp xung cho Timer1/Timer3 chế độ đếm sự kiện
(Counter)
RC1/T1OSI/CCP2 RC1 0 O DIG Chiều ra dữ liệu sử dụng bit LATC<1>
1 I ST Chiều vào dữ liệu sử dụng bit PORTC<1>
Trang 23T1OSI x I ANA Đầu vào bộ dao động Timer1; Chức năng này được
phép khi cho phép bộ dao động Timer1 Cấm chức năng vào/ra số
CCP2
0 O DIG CCP2 của bộ so sánh và đầu ra của PWM; Chức năng
này ưu tiên hơn vào/ra dữ liệu
1 I ST Đầu vào capture(chụp) CCP2
RC2/CCP1/P1A RC2 0 O DIG Chiều ra dữ liệu sử dụng bit LATC<2>
1 I ST Chiều vào dữ liệu sử dụng bit PORTC<2>
CCP1
0 O DIG Chân ECCP1 của bộ so sánh hoặc đầu ra PWM; chức
năng này được ưu tiên hơn vào/ra dữ liệu
1 I ST Đầu vào capture(chụp) ECCP1
P1A(2) 0 O DIG Đầu ECCP1 của bộ PWM tăng cường, kênh A
Chức năng này được ưu tiên hơn chức năng vào/ra dữ liệu
RC3/SCK/SCL RC3 0 O DIG Chiều ra dữ liệu sử dụng bit LATC<3>
1 I ST Chiều vào dữ liệu sử dụng bit PORTC<3>
SCK
0 O DIG
Chân phát xung(clock) của SPI (Module MSSP); Chức năng này được ưu tiên hơn chức năng vào/ra dữ liệu
1 I ST Đầu vào xung (clock) SPI (Module MSSP)
SCL
0 O DIG
Chân phát xung(clock) của giao tiếp I2C™(Module MSSP); Chức năng này được ưu tiên hơn chức năng vào/ra dữ liệu
RC4/SDI/SDA RC4 0 O DIG Chiều ra dữ liệu sử dụng bit LATC<4>
1 I ST Chiều vào dữ liệu sử dụng bit PORTC<4>
SDI 1 I ST Chân đầu vào dữ liệu của giao tiếp SPI (Module
1 I I2C/SM
B
Đầu ra dữ liệu của giao tiếp I2C (Module MSSP); Kểu tín hiệu đầu ra phụ thuộc vào cấu hình cho Module RC5/SDO RC5 0 O DIG Chiều ra dữ liệu sử dụng bit LATC<5>
1 I ST Chiều vào dữ liệu sử dụng bit PORTC<5>
SDO 0 O DIG
Chân đầu ra dữ liệu của giao tiếp SPI (Module MSSP); Chức năng này được ưu tiên hơn chức năng vào/ra dữ liệu
RC6/TX/CK RC6 0 O DIG Chiều ra dữ liệu sử dụng bit LATC<6>
1 I ST Chiều vào dữ liệu sử dụng bit PORTC<6>
TX 1 O DIG Chân truyền dữ liệu nối tiếp không đồng bộ của
Module EUSART; Chức năng này được ưu tiên hơn chức năng vào/ra dữ liệu Chức năng này phải được cấu hình hướng ra dữ liệu
CK 1 O DIG Chân phát xung(clock) đồng bộ nối tiếp của Module
Trang 24RX 1 I ST Chân nhận dữ liệu nối tiếp không đồng bộ của Module
1 I ST Chân nhận dữ liệu nối tiếp đồng bộ của Module
EUSART Phải được cấu hình hướng dữ liệu có chiều vào
Bảng 2.7 Chức năng các chân của PORT C
b Các thanh ghi liên quan đến PORT C
Có 3 thanh ghi được sử dụng để điều khiển và chọn chức năng cho PORT C:
PORTC: Thanh ghi dữ liệu của PORTC
LATC: Thanh ghi chốt dữ liệu của PORTC
TRISC: Thanh ghi hướng dữ liệu của PORTC
Tên Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 LATC Thanh ghi chốt dữ liệu của PORTC (Chốt dữ liệu đọc ghi)
TRISC Thanh ghi chọn hướng dữ liệu của PORTC
Bảng 2.8 Các thanh ghi liên quan đến PORTC
6.5 Port D
PORTD có độ rộng 8 bit, tương ứng với 8 chân được ký hiệu từ RD0 đến RD7 Các chân của PORTD có hai chiều dữ liệu và người lập trình có thể đọc/ghi theo từng bit hoặc cả byte Ngoài ra PORTD còn được sử dụng để ghi/đọc dữ liệu song song với thiết bị ngoài khi kết hợp với các chân RD, CS và WR
a Chức năng các chân của PORTD
Chân Chức
năng TRIS I/O
Kiểu
RD0/PSP0 RD0 0 O DIG Chiều ra dữ liệu sử dụng bit LATD<0>
1 I ST Chiều vào dữ liệu sử dụng bit PORTD<0>
PSP0
x O DIG
Chân PSP của giao tiếp song song sử dụng bit LATD<0>,
có chiều ra, thao tác đọc dữ liệu của PSP; Chức năng này được ưu tiên hơn chức năng vào/ra dữ liệu
x I TTL Chân PSP của giao tiếp song song, có chiều vào
RD1/PSP1 RD1 0 O DIG Chiều ra dữ liệu sử dụng bit LATD<1>
1 I ST Chiều vào dữ liệu sử dụng bit PORTD<1>
Trang 25PSP1
x O DIG
Chân PSP của giao tiếp song song sử dụng bit LATD<1>,
có chiều ra, thao tác đọc dữ liệu của PSP; Chức năng này được ưu tiên hơn chức năng vào/ra dữ liệu
x I TTL Chân PSP của giao tiếp song song, có chiều vào
RD2/PSP2 RD2 0 O DIG Chiều ra dữ liệu sử dụng bit LATD<2>
1 I ST Chiều vào dữ liệu sử dụng bit PORTD<2>
PSP2
x O DIG
Chân PSP của giao tiếp song song sử dụng bit LATD<2>,
có chiều ra, thao tác đọc dữ liệu của PSP; Chức năng này được ưu tiên hơn chức năng vào/ra dữ liệu
x I TTL Chân PSP của giao tiếp song song, có chiều vào
RD3/PSP3 RD3 0 O DIG Chiều ra dữ liệu sử dụng bit LATD<3>
1 I ST Chiều vào dữ liệu sử dụng bit PORTD<3>
PSP3
x O DIG
Chân PSP của giao tiếp song song sử dụng bit LATD<3>,
có chiều ra, thao tác đọc dữ liệu của PSP; Chức năng này được ưu tiên hơn chức năng vào/ra dữ liệu
x I TTL Chân PSP của giao tiếp song song, có chiều vào
RD4/PSP4 RD4 0 O DIG Chiều ra dữ liệu sử dụng bit LATD<4>
1 I ST Chiều vào dữ liệu sử dụng bit PORTD<4>
PSP4
x O DIG
Chân PSP của giao tiếp song song sử dụng bit LATD<4>,
có chiều ra, thao tác đọc dữ liệu của PSP; Chức năng này được ưu tiên hơn chức năng vào/ra dữ liệu
x I TTL Chân PSP của giao tiếp song song, có chiều vào
RD5/PSP5/P1B RD5 0 O DIG Chiều ra dữ liệu sử dụng bit LATD<5>
1 I ST Chiều vào dữ liệu sử dụng bit PORTD<5>
PSP5
x O DIG
Chân PSP của giao tiếp song song sử dụng bit LATD<5>,
có chiều ra, thao tác đọc dữ liệu của PSP; Chức năng này được ưu tiên hơn chức năng vào/ra dữ liệu
x I TTL Chân PSP của giao tiếp song song, có chiều vào
P1B 0 O DIG Đầu ra kênh B của bộ PWM tăng cường ECCP1; Chức
năng này được ưu tiên hơn chức năng vào/ra dữ liệu và giao tiếp song song PSP
RD6/PSP6/P1C RD6 0 O DIG Chiều ra dữ liệu sử dụng bit LATD<6>
1 I ST Chiều vào dữ liệu sử dụng bit PORTD<6>
PSP6
x O DIG
Chân PSP của giao tiếp song song sử dụng bit LATD<6>,
có chiều ra, thao tác đọc dữ liệu của PSP; Chức năng này được ưu tiên hơn chức năng vào/ra dữ liệu
x I TTL Chân PSP của giao tiếp song song, có chiều vào
P1C 0 O DIG Đầu ra kênh C của bộ PWM tăng cường ECCP1; Chức
năng này được ưu tiên hơn chức năng vào/ra dữ liệu và giao tiếp song song PSP
RD7/PSP7/P1D RD7 0 O DIG Chiều ra dữ liệu sử dụng bit LATD<7>
1 I ST Chiều vào dữ liệu sử dụng bit PORTD<7>
PSP7
x O DIG
Chân PSP của giao tiếp song song sử dụng bit LATD<7>,
có chiều ra, thao tác đọc dữ liệu của PSP; Chức năng này được ưu tiên hơn chức năng vào/ra dữ liệu
x I TTL Chân PSP của giao tiếp song song, có chiều vào
P1D 0 O DIG Đầu ra kênh D của bộ PWM tăng cường ECCP1; Chức
năng này được ưu tiên hơn chức năng vào/ra dữ liệu và giao tiếp song song PSP
Bảng 2.9 Chức năng các chân của PORTD
Trang 26b Các thanh liên quan đến PORTD
Có 5 thanh ghi được sử dụng để điều khiển và chọn chức năng cho PORTD:
PORTD: Thanh ghi dữ liệu của PORTD
LATD: Thanh ghi chốt dữ liệu của PORTD
TRISD: Thanh ghi hướng dữ liệu của PORTD
TRISE : Thanh ghi hướng dữ liệu của PORTE Thanh ghi này có bit PSPMODE được sử dụng để chọn chế độ vào/ra song song PSP hay vào/ra
dữ liệu trên PORTD
CCP1CON: Thanh ghi điều khiển ECCP Thanh ghi này có 2 bit P1M1:P1M0 liên quan tới PORTD, nó sử dụng để cấu hình đầu ra cho bộ PWM tăng cường
Tên Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
PORTD RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 LATD Thanh ghi chốt dữ liệu của PORTD (Chốt dữ liệu đọc ghi)
TRISD Thanh ghi chọn hướng dữ liệu của PORTD
TRISE(1) IBF OBF IBOV PSPMODE — TRISE2 TRISE1 TRISE0 CCP1CON P1M1 P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0
Bảng 2.10 Các thanh ghi liên quan đến PORTD
0 O DIG Chiều ra dữ liệu sử dụng bit LATE<0>; không bị ảnh hưởng
bởi đầu vào tương tự
1 I ST Chiều vào dữ liệu sử dụng bit PORTE<0>; chức năng này sẽ
bị cấm khi đầu vào tương tự được cho phép
RD 1 I TTL Chân cho phép đọc dữ liệu, có chiều vào PSP (cho phép PSP)
AN5 1 I ANA Đầu vào kênh 5 của bộ biến đổi A/D; mặc định được cấu hình
có chiều vào khi reset POR
RE1/WR/AN6 RE1 0 O DIG Chiều ra dữ liệu sử dụng bit LATE<1>; không bị ảnh hưởng
bởi đầu vào tương tự
1 I ST Chiều vào dữ liệu sử dụng bit PORTE<1>; chức năng này sẽ
bị cấm khi đầu vào tương tự được cho phép
WR 1 I TTL Chân cho phép ghi dữ liệu của chế độ giao tiếp song song
PSP(cho phép PSP)
Trang 27AN6 1 I ANA Đầu vào kênh 6 của bộ biến đổi A/D; mặc định được cấu hình
có chiều vào khi reset POR
RE2/CS/AN7 RE2 0 O DIG Chiều ra dữ liệu sử dụng bit LATE<2>; chức năng này sẽ bị
cấm khi đầu vào tương tự được cho phép
1 I ST Chiều vào dữ liệu sử dụng bit PORTE<2>; chức năng này sẽ
bị cấm khi đầu vào tương tự được cho phép
CS 1 I TTL Chân cho phép chế độ giao tiếp song song PSP, có chiều vào
(cho phép PSP)
AN7 1 I ANA Đầu vào kênh 7 của bộ biến đổi A/D ; mặc định được cấu
hình có chiều vào khi reset POR
Phát hiện điện áp cao; sử dụng cho ICSP™
RE3 —(2) I ST Chiều vào dữ liệu sử dụng bit PORTE<3>; cho phép khi bit
cầu hình MCLRE được đặt bằng 0
Bảng 2.11 Chức năng các chân của PORTD
b Các thanh liên quan đến PORTE
Có 4 thanh ghi được sử dụng để điều khiển và chọn chức năng cho PORTE:
PORTE: Thanh ghi dữ liệu của PORTE
LATE: Thanh ghi chốt dữ liệu đầu ra của PORTE
TRISE: Thanh ghi hướng dữ liệu của PORTE, riêng chân RE3 mặc định có chiều vào
ADCON1: Thanh thi điều khiển A/D Được sử dụng để lựa chọn vào/ra số hay tương tự cho các chân của PORTE
- Thanh ghi TRISE
R-0 R-0 R/W-0 R/W-0 U-0 R/W-1 R/W-1 R/W-1 IBF OBF IBOV PSPMODE — TRISE2 TRISE1 TRISE0 bit 7 bit 0
Ghi chú:
R = Cho phép đọc W = Cho phép ghi U = Không sử dụng, đọc bằng ‘0’
-n = Reset - POR ‘1’ = Được thiết lập ‘0’ = Được xóa -x = Reset không xác định
bit 7 IBF: Bit trạng thái đầy bộ nhớ đệm nhận
1 = Đã nhận được liệu và chờ CPU đọc
0 = Chưa nhận được dữ liệu
bit 6 OBF: Bit trạng thái đầy bộ nhớ đệm truyền
1 = Bộ nhớ đệm truyền vẫn chứa dữ liệu được ghi trước đó
0 = Dữ liệu trong bộ nhớ đệm truyền đã được đọc
bit 5 IBOV: Bit báo tràn bộ nhớ đệm nhận
1 = Ghi dữ liệu xảy ra khi dữ liệu nhận trước đó chưa được đọc (phải được xóa bằng phần mềm)
Trang 28bit 4 PSPMODE: Bit lựa chọn chế độ PORT song song tớ
1 = Chế độ PORT song song tớ
0 = Chế độ vào/ra đa chức năng
bit 3 Không sử dụng: Đọc được ‘0’
bit 2 TRISE2: Bit chọn hướng RE2
Tên Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
PORTE — — — — RE3 RE2 RE1 RE0 LATE(2) — — — — — Thanh ghi xuất dữ liệu LATE TRISE IBF OBF IBOV PSPMODE — TRISE2 TRISE1 TRISE0 ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0
Trang 29Chương 3 PHẦN MỀM MPLAB VÀ TRÌNH DỊCH MCC18
1 CÀI ĐẶT MPLAB
Việc cài đặt MPLAB IDE được thực hiện dễ dàng bằng việc khởi chạy trình setup trong thư mục MPLAB_IDE_v8_70, trong đó có tùy chọn cài đặt Hi-tech C compiler for PIC
2.1 Tạo Project trên MPLAB
Bước 1: Tạo Project và lựa chọn chip
- Mở MPLAB IDE bằng cách click vào biểu tượng
Trang 30Hình 3.2 Cửa sổ khởi động của MPLAB
- Vào menu [Project] >> [Project Winzard] để tạo một Project mới
Hình 3.3 Tạo Project
- Chọn [Next] để chuyển sang cửa sổ chọn chip
Hình 3.4 Tạo Project (2)
Trang 31- Tại cửa sổ chọn chip (Step One: Slect a device) lựa chọn chip 18F4520
Hình 3.5 Tạo Project (3): Chọn vi điều khiển
Bước 2: Lựa trình biên dịch (ASM hoặc MCC18 hoặc CCS)
- Nếu chọn trình dịch hợp ngữ (ASM): Tại cửa sổ Step Two, cửa sổ lựa chọn công
cụ biên dịch [Active Toolsuite] lựa chọn công cụ biên dịch là [Microchip
MPASM Toolsuite] và trong ô [Toolsuite Contents] chọn [MPASM Assembler (mpasmwin.exe) v5.41], tiếp tục nhấn [Next] để sang bước 3
Hình 3.6 Tạo Project (4): Chọn trình dịch hợp ngữ
Trang 32công cụ [Microchip C18 Toolsuite] và trong ô [Toolsuite Contents] chọn [MPASM C18 C Compiler (mcc18.exe) v3.43], và nhấn [Next]
Hình 3.7 Tạo Project (4): Chọn trình dịch C
Bước 3: Đặt tên cho Project và chọn đường dẫn cho Project
Chú ý: Chọn tên Project và đường dẫn nên gợi nhớ theo nội dung của bài
- Đặt tên đường dẫn như hình 3.8
Hình 3.8 Tạo Project (5): Đặt tên, đường dẫn Project
Trang 33- Chọn [Next] sẽ xuất hiện cửa sổ hỏi lại bạn có muốn tạo thư mục theo đường dẫn này không Chọn [OK] để tạo thư mục và chuyển sang bước 4
Hình 3.9 Tạo Project (5):Tạo tên, đường dẫn Project
Bước 4: Thêm file vào Project và kiểm tra lại các thông tin của Project
- Cửa sổ bước thứ 4 (Step Four) sử dụng để thêm các file vào Project Ở bước này
chúng ta nhấn [Next] sẽ sang cửa sổ Summary (hình 3.10)
- Ở cửa sổ Summary hiển thị tóm tắt các thông tin của Project chúng ta vừa tạo,
kiểm tra lại các thông tin và nhấn [Finish] để kết thúc
Hình 3.10 Các thông tin của Project vừa tạo
Bước 5: Tạo file mã nguồn
- Vào menu [File] >> [New] để tạo file mã nguồn
Trang 34Hình 3.11 Tạo file mã nguồn từ menu File
- Vào menu [File] >> [Save As] để lưu file mã nguồn
Hình 3.12 Đặt tên, lưu file mã nguồn ASM
Chú ý: Chọn đường dẫn cho file ASM là được dẫn của Project vừa tạo bằng cách
trong mục Jump to chọn Project Directory, đặt tên của file ASM với phần mở rộng asm, tích chọn Add File To Project để thêm file ASM vào Project vừa tạo
Trong trường hợp file mã nguồn là file C, tên file cần có phần mở rộng C (xem hình 3.13)
Trang 35Hình 3.13 Đặt tên, lưu file mã nguồn C
- Viết chương trình vào file mã nguồn vừa tạo
Hình 3.14 Viết chương trình
2.2 Biên dịch và sửa lỗi chương trình
- Chọn menu [Project] >> [Buil All] hoạc nhấn [Ctrl + F10] hoặc click vào biểu
tượng Buil All trên thanh công cụ biên dịch
Trang 36- Sau khi biên dịch sẽ xuất hiện thông báo BUILD SUCCEEDED nếu như biên dịch ra file Hex thành công, tức là chương trình không có lỗi
Hình 3.15 Chương trình được biên dịch thành công
- Sau khi biên dịch sẽ xuất hiện thông báo BUILD FAILED nếu như biên dịch không thành công, có lỗi cú pháp Click vào lỗi [Error[113] D:\MAY1….] trình biên dịch IDE MPLAB sẽ trỏ vào lỗi trên cửa sổ viết mã chương trình, tiến hành sửa lỗi và biên dịch lại cho tới khi tao được file Hex (hình 1.31)
Hình 3.16 Sửa lỗi chương trình
2.3 Mô phỏng hoạt động của vi điều khiển bằng MPLAB SIM
- Từ thanh menu chọn [Debugger] >> [Select Tool] >> [MPLAB SIM] để lựa
chọn công cụ mô phỏng
Trang 37Hình 3.17 Chọn công cụ mô phỏng
Hình 3.18 Các chức năng của công cụ mô phỏng
Run - Chế độ chạy thực tế
Halt - Dừng tại lệnh hiện tại
Animate - Chạy với khoảng thời gian trễ giữa các lệnh
Step Into - Chạy từng lệnh
Step Over - Chạy trong vòng lặp
Step Out - Chạy ngoài vòng lặp
Reset - Thực hiện reset chip
Breakpoint - Điểm dừng của lệnh (sử dụng để đặt điểm dừng chương trình)
- Chọn menu [View] >> [Special Function Register] để quan sát giá trị của các
thanh ghi
Trang 38Hình 3.19 Quan sát các thanh ghi khi mô phỏng
- Click nút [Reset] trên thanh công cụ, sau đó nhấn [Step Into] để mô phỏng từng
lệnh
Hình 3.20 Mô phỏng từng lệnh
- Chọn menu [View] >> [Watch] Cửa sổ Watch hiện ra sẽ cho phép theo dõi hoạt
động của các thanh ghi SFR tùy chọn
Hình 3.21 Chọn các thanh ghi để quan sát
Trang 39- Để cho dễ quan sát chúng ta có thể chọn hiển thị thêm hệ đếm thập phân bằng cách Click chuột phải lên thanh chú thích
Hình 3.22 Chọn hệ đếm để hiển thị giá trị thanh ghi
- Tiến hành chạy mô phỏng trương trình để kiểm tra kết quả, theo dõi sự biến đổi của các thanh ghi trên cửa sổ Watch và Special Function Register
2.4 Nạp chương trình
- Kết nối máy tính với thiết bị:
Hình 3.23 Kết nối máy tính với thiết bị
+ Kết nối PICKit2 với thiết bị qua M-Connector trên thiết bị, với máy tính qua một cổng USB
+ Kết nối cáp USB với thiết bị qua USB1 trên thiết bị, với máy tính qua một cổng USB khác để cấp nguồn cho thiết bị
- Chọn bộ nạp PICkit2 (hình 3.24)
Trang 40Hình 3.24 Chọn bộ nạp
- Click lên biểu tượng “Program the target device” trên thanh công cụ
- Nhấn các phím Key1÷Key4 và quan sát kết quả trên LED1÷LED4
3 TRÌNH DỊCH MCC18
Hình 3.25 Quá trình biên dịch của MPASM và MCC18