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

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

pdf35 trang | Chia sẻ: huongnhu95 | Lượt xem: 532 | Lượt tải: 1download
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:

  • pdfgiao_trinh_vi_dieu_khien_plc.pdf