Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 66 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
66
Dung lượng
3,74 MB
Nội dung
Bài 1: Giới thiệu chung vi điều khiển PIC Tổng quan kỹ thuật vi điều khiển PIC 1.1 Lịch sử phát triển PIC họ vi điều khiển RISC sản xuất công ty Microchip Technology Dòng PIC PIC1650 phát triển Microelectronics Division thuộc General_Instrument PIC bắt nguồn từ chữ viết tắt “Programmable Intelligent Computer” (Máy tính khả trình thông minh) sản phẩm hãng General Instruments đặt cho dòng sản phẩm họ PIC1650 Lúc này, PIC 1650 dùng để giao tiếp với thiết bị ngoại vi cho máy chủ 16 bit CP1600, vậy, người ta gọi PIC với tên “Peripheral Interface Controller” (Bộ điều khiển giao tiếp ngoại vi) CP1600 CPU tốt, lại hoạt động xuất nhập, PIC 8-bit phát triển vào khoảng năm 1975 để hỗ trợ hoạt động xuất nhập cho CP1600 PIC sử dụng microcode đơn giản đặt ROM, mặc dù, cụm từ RISC chưa sử dụng thời giờ, PIC thực vi điều khiển với kiến trúc RISC, chạy lệnh chu kỳ máy (4 chu kỳ dao động) Năm 1985 General Instruments bán phận vi điện tử họ, chủ sở hữu hủy bỏ hầu hết dự án – lúc lỗi thời Tuy nhiên, PIC bổ sung EPROM để tạo thành điều khiển vào khả trình Ngày nhiều dịng PIC xuất xưởng với hàng loạt module ngoại vi tích hợp sẵn (như USART, PWM, ADC…), với nhớ chương trình từ 512 Word đến 32K Word 1.2 Đặc điểm ứng dụng Hiện có nhiều dịng PIC có nhiều khác biệt phần cứng, điểm qua vài nét sau : 8/16 bit CPU, xây dựng theo kiến truc Harvard có sửa đổi Flash ROM tuỳ chọn từ 256 byte đến 256 Kbyte Các cổng Xuất/ Nhập (I/ O) (mức logic thường từ 0V đến 5.5V, ứng với logic logic 1) 8/16 bit Timer Các chuẩn giao tiếp nối tiếp đồng bộ/ khung đồng USART Bộ chuyển đổi ADC Analog-to-digital converters, 10/12 bit Bộ so sánh điện áp (Voltage Comparator) Các module Capture/ Compare/ PWM LCD MSSP Peripheral dựng cho giao tiếp I2C, SPI Bộ nhớ nội EPROM – ghi/ xoá lớn tới triệu lần Module Điều khiển động cơ, đọc encoder Hỗ trợ giao tiếp USB Hỗ trợ giao tiếp CAN Hỗ trợ giao tiếp LIN Hỗ trợ giao tiếp IrDA Một số dịng có tích hợp RF (PIC16f639, RFPIC) KEELOQ mờ hoá giải mờ DSP tính xử lý tín hiệu số (dsPIC) Đặc điểm thực thi tốc độ cao RISC CPU họ vi diều khiển PIC16F87XA : Chỉ gồm 35 lệnh đơn Tất lệnh 1chu kỳ ngoại trừ chương trình chu kỳ Tốc độ hoạt động : + DC- 20MHz ngõ vào xung clock + DC- 200ns chu kỳ lệnh Độ rộng nhớ chương trình Flash 8K x 14word, nhớ liệu (RAM) 368 x 8bytes, nhớ liệu EPROM (RAM) 256 x 8bytes Giới thiệu KIT lập trình PIC16F877A 2.1 Giới thiệu chung 2.2 Các khối chức - Khối điều khiển LED đơn - Khối điều khiển LED - Khối điều khiển LCD - Khối điều khiển giao tiếp IR - Khối điều khiển giao tiếp nhiệt độ - Khối điều khiển ADC - Khối điều khiển LED Matrix - Khối điều khiển UART - Khối điều khiển DS1307 - Khối điều khiển KEY Board 4x4 - Khối điều khiển Relay - Khối điều khiển động bước Bài 2: Cấu trúc vi điều khiển PIC - Các ghi chức Cấu trúc vi điều khiển PIC 1.1 Sơ đồ chân chức chân PIC 16F877A PIC16F8X nhóm PIC họ PIC16XX họ Vi điều khiển 8-bit, tiêu hao lượng thấp, đáp ứng nhanh, chế tạo theo công nghệ CMOS, chống tĩnh điện tuyệt đối Nhóm bao gồm thiết bị sau: + PIC16F83 + PIC16CR83 + PIC16F84 + PIC16CR84 - Tất PIC16/17 có cấu trúc RISC PIC16CXX đặc tính bậc, mức ngăn xếp Stack, nhiều nguồn ngắt tích hợp bên lẫn ngồi Có cấu trúc Havard với bus liệu bus thực thi chương trình riêng biệt cho phép độ dài lệnh 14-bit bus liệu 8-bit cách biệt Tất lệnh chu kỳ lệnh ngoại trừ lệnh rẽ nhánh chương trình chu kỳ lệnh Chỉ có 35 lệnh lượng lớn ghi cho phép đáp ứng cao ứng dụng - Họ PIC16F8X có nhiều tính đặc biệt làm giảm thiểu thiết bị ngoại vi, kinh tế cao, có hệ thống bật đáng tin cậy tiêu thụ lượng thấp Ở có lựa chọn dao dộng có chân kết nối dao động RC nên có giải pháp tiết kiệm cao Chế độ SLEEP tiết kiệm nguồn đánh thức nguồn reset Và nhiều phần khác giới thiệu bên nói rõ phần - PIC16F877A có 40/44 chân với phân chia cấu trúc sau: + Có port xuất/nhập + Có kênh chuyển đổi A/D 10-bit + Có PWM + Có định thời: Timer0, timer1 timer2 + Có giao tiếp truyền nối tiếp: chuẩn RS 232, I2C… + Có giao tiếp LCD 1.2 Các thông số PIC 16F877A Đây vi điều khiển thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ dài 14 bit Mỗi lệnh thực thi chu kì xung clock Tốc độ hoạt động tối đa cho phép 20 MHz với chu kì lệnh 200ns Bộ nhớ chương trình 8Kx14 bit, nhớ liệu 368x8 byte RAM nhớ liệu EEPROM với dung lượng 256x8 byte Số PORT I/O với 33pin I/O Các đặc tính ngoại vi bao gồmcác khối chức sau: Timer0: đếm bit với chia tần số bit Timer1: đếm 16 bit với chia tần số, thực chức đếm dựa vào xung clock ngoại vi vi điều khiển hoạt động chế độ sleep Timer2: đếm bit với chia tần số, postcaler Hai Capture/so sánh/điều chế độ rông xung Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI I2C Chuẩn giao tiếp nối tiếp USART với bit địa Cổng giao tiếp song song PSP (Parallel Slave Port) với chân điều khiển RD, WR, CS bên ngồi Các đặc tính Analog: kênh chuyển đổi ADC 10 bit Hai so sánh Bên cạnh vài đặc tính khác vi điều khiển như: Bộ nhớ flash với khả ghi xóa 100.000 lần Bộ nhớ EEPROM với khả ghi xóa 1.000.000 lần Dữ liệu nhớ EEPROM lưu trữ 40 năm Khả tự nạp chương trình với điều khiển phần mềm Nạp chương trình mạch điện ICSP (In Circuit Serial Programming) thông qua chân Watchdog Timer với dao động Chức bảo mật mã chương trình Chế độ Sleep Có thể hoạt động với nhiều dạng Oscillator khác Tổ chức nhớ PIC 16F877A 2.1 Bộ nhớ chương trình Bộ nhớ chương trình vi điều khiển PIC16F877A nhớ flash, dung lượng nhớ 8K word (1 word = 14 bit) phân thành nhiều trang (từ page0 đến page 3) Như nhớ chương trình có khả năngchứa 8*1024 = 8192 lệnh (vì lệnh sau mã hóa có dung lượng word (14bit) Để mã hóa địa 8K word nhớ chương trình, đếm chương trình có dung lượng 13 bit (PC) Khi vi điều khiển reset, đếm chương trình đến địa 0000h (Resetvector) Khi có ngắt xảy ra, đếm chương trình đến địa 0004h (Interruptvector) Bộ nhớ chương trình khơng bao gồm nhớ stack không địa hóa đếm chương trình 2.2 Bộ nhớ liệu Bộ nhớ liệu PIC nhớ EEPROM chia làm nhiều bank Đối với PIC16F877A nhớ liệu chia làm bank Mỗi bank có dung lượng 128 byte, bao gồm ghi có chức đặc biệt SFG (Special Function Register) nằm vùng địa thấp ghi mục đích chung GPR (General Purpose Register) nằm vùng địa lại bank Các ghi SFR thường xuyên sử dụng (ví dụ ghi STATUS) đặt tất cà bank nhớ liệu giúp thuận tiện trình truy xuất làm giảm bớt lệnh chương trình Sơ đồ cụ thể nhớ liệu PIC16F877A sau: Các ghi chức đặc biệt 3.1 THANH GHI FSR VÀ INDF Thanh ghi FSR chứa địa “con trỏ” đến, ghi INDF chứa nội dung có địa nằm ghi FSR Ví dụ: Thanh ghi 22H có giá trị 10 Nếu FSR =22H INDF =10 Tóm lại, Thanh ghi INDF ghi vật lí Nó chứa giá trị ghi có địa nằm ghi FSR 3.2 THANH GHI STATUS Thanh ghi trạng thái chứa trạng thái số học ALU, trạng thái Reset bit chọn Bank nhớ liệu Bit IRP: Bit lựa chọn bank ghi (Sử dụng cho định địa gián tiếp) = Bank 2, (100h – 1FFh ) = Bank 0, (00h – FFh) Bit – 5: RP1 – RP0: Bit lựa chọn bank ghi (Dùng định điạ trực tiếp) 11 = Bank ( 180h – 1FFh) 10 = Bank (100h – 17Fh) 01 = Bank (80h – FFh) 00 = Bank (00h – 7Fh) Each bank is 128 bytes Bit TO: Bit báo hiệu hoạt động WDT 1: Lệnh xóa WDT Sleep xảy 0: WDT hoạt động Bit PD: Bit báo công suất thấp ( Power down bit) 1: Sau nguồn tăng có lệnh xóa WDT 0: Thực thi lệnh Sleep Bit Z: bit Zero 1: Khi kết phép toán 0: Khi kết phép toán khác Bit DC: Digit Carry 1: Có số nhớ sinh phép cộng phép trừ bit thấp 0: Khơng có số nhớ sinh Bit C: cờ nhớ (Carry Flag)/ borrow 1: Có số nhớ sinh phép cộng phép trừ bit cao 0: Khơng có số nhớ sinh Ví dụ: Nếu A – B < C = ngược lại C = 3.3 THANH GHI ĐIỀU KHIỂN NGẮT INTCON (Interrupt Control Register) Bit GIE: Bit cho phép ngắt toàn cục 1: Cho phép ngắt toàn cục 0: Không cho phép ngắt Bit PEIE: Bit cho phép ngắt ghi vào EEPROM hoàn tất 1: Cho phép ngắt ghi vào EEPROM hoạt động 0: Không cho phép ngắt ghi vào EEPROM hoạt động Bit TMR0IE: Bit cho phép ngắt timer tràn 1: Cho phép ngắt timer tràn 0: Không cho phép ngắt timer tràn Bit INTE: Bit cho phép ngắt ngoại vi chân RB0/INT 1: Cho phép ngắt ngoại vi 0: Không cho phép ngắt ngoại vi Bit RBIE: Cho phép ngắt trạng thái PORTB thay đổi 1: Cho phép 0: Không cho phép Bit TMR0IF: Cờ báo ngắt Timer 1: Timer tràn 0: Timer chưa tràn Bit INTF:Cờ báo ngắt ngồi RB0/INT 1: Có ngắt 0: Khơng xảy ngắt Bit RBIF:Cờ báo ngắt có thay đổi trạng thái PORTB 1: Có thay đổi ADDEN = khơng cho phép xác nhận điz5 chỉ, byte liệu nhận vào bit thứ sử dụng bit parity Bit FERR Framing Eror bit FERR = xuất lỗi "Framing" q trình truyền nhận liệu FERR = khơng xuất lỗi "Framing" trình truyền nhận liệu Bit OERR Overrun Error bit, OERR = xuất lỗi "Overrun" OERR = không xuất lỗi "Overrun" Bit RX9D Bit chứa bit liệu thứ liệu truyền nhận Ngắt 5.1 Khái niệm Đầu tiên, Ngắt (interrupt) gì?, thật có ý nghĩa giống tên gọi nó, Interrupt tác vụ xử lý tín hiệu xử lý mà bắt PIC dừng lại làm để làm cơng việc khác Một chương trình chạy, thực vài chức mạch điện, Interrupt xảy chương trình tạm ngưng lúc thủ tục khác thực hiện, thủ tục kết thúc Pic lại quay chương trình Pic có 15 nguồn ngắt, ngắt xảy cần: khai báo ngắt (Set bit điều khiển IE tương ứng) có cờ ngắt tác động (IF) 5.2 Ngắt RB0 Ngắt dựa thay đổi trạng thái pin RB0/INT Cạnh tác động gây ngắt cạnh lên hay cạnh xuống điều khiển bit INTEDG (thanh ghi OPTION_REG ) Khi có cạnh tác động thích hợp xuất pin RB0/INT, cờ ngắt INTF set bất chấp trạng thái bit điều khiển GIE PEIE Thanh ghi OPTION ghi thiết lập chế độ cho Interrupt tích cực cạnh lên hay cạnh xuống tín hiệu vào, Bit ghi OPTION gọi INTEDG, Set Bit6 thiết lập interrupt tích cực cạnh lên tín hiệu vào (trạng thái default), Clear Bit6 thiết lập interrupt tích cực cạnh xuống tín hiệu vào Mặc nhiên sau bật nguồn Pic thiết lập chế độ Interrupt cạnh lên, có nghĩa interrup xảy tín hiệu vào thay đổi từ thấp lên cao (cạnh lên) 5.3 Ngắt PORTB Tương tự ngắt RB0, dựa vào biến đổi trạng thái chân từ RB4÷RB7 Tức RB4÷RB7 có biến đổi trạng thái cờ ngắt RBIF tích cực mức cao Vậy để sử dụng ngắt PortB chương trình cần Set bit RBIE (INTCON) Set bit GIE (INTCON) 5.4 Ngắt TIMER Như biết, giá trị Timer tăng theo mõi xung nhịp tác động, Timer0 Timer2 ghi TMR0 TMR2 đạt giá trị FFH (255) cờ tràn TMR0IF TMR2IF tích cực mức cao Riêng Timer1 để cờ tràn TMR1IF đạt giá trị tích cực mức cao giá trị TMR1 (16 Bit gồm ghi TMR1H TMR1L) phải đạt giá trị FFFFH (65535) Để sử dụng ngắt TIMER biết rỏ sử dụng Timer mà Set Bit TMRXIE tương ứng khai báo, đồng thời Set Bit PEIE Bit GIE (riêng đối Timer0 khơng cần Set Bit PEIE) 5.5 Ngắt ADC Đối với chuyển đổi ADC sau thiết lập chế độ (Chọn ngõ vào, điện áp chuẩn, tần số chuyển đổi…) xong, sau cho chuyển đổi ADC bắt đầu hoạt động thông qua bit ADON (ADCON0 ) Một thời gian sau, khoảng vài trăm µS q trình chuyển đổi hồn tất, cờ ngắt ADIF Set lên mức cao Nếu Set Bit ADIE, PEIE Bit GIE ngắt xảy 5.6 Ngắt cổng nối tiếp Tương tự ngắt ADC, truyền nhận nối tiếp, truyền (nhận) xong byte cờ ngắt Set lên mức cao Để ngắt xảy ta Set Bit điều khiển tương ứng, truyền nối tiếp cần Set Bit điều khiển khai báo:GIE, PEIE TXIE Còn nhận nối tiếp Bít cần Set: GIE, PEIE RCIE Bài 5: Thiết kế ứng dụng Ghép nối điều khiển LED đơn Chương trình mẫu điều khiển LED đơn Ví dụ 1: Ví dụ 2: #include "16f887.h" #include "def_16f887.h" #fuses NOWDT,NOPROTECT,PUT,NOLVP,HS #use delay(clock = 4000000) //Tan so thach anh 4MHz int8 k; void main() { setup_adc_ports(NO_ANALOGS|VSS_VDD); setup_adc(ADC_OFF); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard //Setup_Oscillator parameter not selected from Intr Oscillotar Config tab set_tris_c(0x00); //PORTC xuat du lieu PORTC = 0x00; //Cac led deu tat while(1) { delay_ms(1000); //Delay nhin thay cac led deu tat PORTC = (PORTC