Các chủng loại khác nhau của pic đặc biệt là tính ổn định của chúng làm nhiều người thích thú và ưa chuộng vì vậy chúng đã được ứng rộng rãi trên toàn thế giới. PIC16F877A là một vi điều khiển có kiến trúc HARVARD có bộ nhớ chương trình và bộ nhớ dữ liệu được truy xuất độc lập với nhau, sử dụng 14 bit cho các lệnh và tập lệnh của nó hầu hết chỉ có một word
Tài liệu tham khảo cho pic16f877a (đợc viết đào trọng nghĩa- đtvt 3a) Chơng1 Giới thiệu tổng quan họ vi điều khiển pic Hiện máy móc công nghiệp thiết bị phục vụ sinh hoạt cho Sống hầu hết ứng dụng rộng r i thiết bị điện tử ,mà xử lý trung tâm Chip vi điều khiển thông minh đặc biệt Chip lập trình đợc Bởi ngời! Vì cần phải nghiên cứu phát triển Trên thị trờng phổ biến nhiều loại vi điều khiển phong phú chủng loại giá tơng đối rẻ phù hợp với điều khiện Việt Nam phổ biến có loại nh : MCS51 ; AVR ATMEL , PIC MICROCHIP , PSOC CYPRESS MICRO SYSTEM Hiện với đa dạng nhiều chủng loại khác PIC đặc biệt tính ổn định chúng đ làm cho nhiều ngời thích thú a chuộng chúng đ đợc ứng dụng rộng r i toàn giới Cụm từ PIC đợc viết tắt từ cụm từ : peripheral interface controller (Bộ Điều Khiển giao tiếp thiết bị ngoại vi).Khác với vi xử ,bộ vi điều khiển đợc tích hợp toàn nh RAM , ROM , PORTS truy xuất ,giao tiếp ngoại vi trực tiếp chíp nhỏ gọn PIC16F877A vi điều khiển có kiến trúc HARVARD (bộ nhớ chơng trình nhớ liệu đợc truy xuất độc lập với nhau) sử dụng 14 bit cho lệnh , tập lệnh hầu hết có WORD Chơng2 Cấu trúc phần cứng PIC16f877a i)bộ nhớ chơng trình pic Không gian nhớ chơng trình PIC khác tuỳ thuộc vào loại Sau số ví dụ: -16C711,16F84 có 1024(1K) -16F877A có 8192(8K) -17C766 có 16384(16K) II)bộ nhớ liệu pic Các ghi đa mục đích cho ngời dùng PIC ô nhớ RAM Mỗi ghi có độ rộng bít cho tất PIC Sau lả vài ví dụ: -12C508 có 25 Bytes RAM -16C71C có 36 Bytes RAM -16F877A có 368 Bytes(plus 256 Bytes of nonvolatile EEPROM) III)CáC CHÂN CủA PIC 16F877A 1)các chân nguồn Trong sơ đồ mạch 8051 thờng kí hiệu chân cấp nguồn VCC , chân nối mass GND Còn PIC ngợc lại thay VCC = VDD chân GND = VSS Trong PIC 16F877A hình vẽ ta thấy có tất chân cấp nguồn nh sau: - Chân 11 , 32 chân VDD (+5v) - Chân 12 , 31 chân VSS (0v) 2)chân reset Trên hình ta thấy chân số 1(MCLR) chân RESET PIC , chân có nhiệm vụ khởi động lại chip chân đợc tích cực Chân RESET PIC tích cực mức thấp trái ngợc hoàn toàn với họ 8051 3)mạch dao động Trên hình vẽ ta thấy chân 13(OSC1) chân 14(OSC2) chân dao động Tốc độ dao động đợc xác định thông qua tần số dao động tạo dao động Sơ đồ mạch dao động nh hình vẽ sau: 4)cổng xuất nhập +PORT A ghi TRIS A: Cổng A có bit thực chức vào theo chiều việc xác định hớng xuất nhập dợc thực thông qua ghi TRIS A Việc đa bit ghi TRIS A lên đồng nghĩa với việc đặt chân tơng ứng cổng A chân nhập liệu Việc xoá bit ghi TRIS A xuống đồng nghĩa với việc đặt chân tơng ứng cổng A chân xuất liệu Chân RA4/TOCKI chân đa mục đích với việc vừa chân xuất nhập vừa đầu vào đếm TIMER0 Đầu vào chân RA4 trigger schmitt nên có cực máng hở chế độ nhập cần gắn thêm điện trở kéo dơng cho Các chân khác PORT A đầu vào tín hiệu tơng tự chuyển đổi ADC Sự hoạt động chân chế độ việc điều kiển thích hợp bít ghi ADCON1 CMCON +port b ghi tris b: Cổng B có bít xuất nhập theo chiều ,việc chọn chức xuất nhập đợc điều khiển thông qua ghi TRIS B tơng tự nh với PORTS A Ba chân PORT B chân đa chức năng(RB3/PGM,RB6/PGC/RB7/PGD) với ứng dụng nh mạch gỡ rối chơng trình điện áp thấp Mỗi chân PORT B có điện trở kéo dơng bên có giá trị khoảng 47K cho phép hoạt động chế độ thông qua việc set bit RBPU ghi OPTION Việc điện trở kéo bị khoá PORT B chuyển sang chế độ xuất liệu VĐK khởi động Bốn chân PORT B chân từ RB4 đến RB7 chân phục vụ ngắt, chân đợc định hình đầu vào nguyên nhân cho ngắt phát sinh Khi ngắt đợc tạo đồng thời cờ RBIF(INTCON.0) đợc set lên 1, đánh thức VĐK chế độ ngủ(SLEEP) + PORT C ghi TRIS C: PORTC có tất chân đa mục đích với chức nh : xuất nhập liệu, đặc biệt chân 18(SCL) 23(SDA) chân thực chức giao tiếp với ngoại vi thông qua chuẩn I2C Thanh ghi TRISC tơng tự nh làm nhiệm vụ định nghĩa chân tơng ứng cổng vào hay cổng +PORT D ghi TRIS D - PORT E ghi TRIS E: Hai PORT có chân đa mục đích nhng chủ yếu để xuất nhập đữ liệu ứng dụng khác chung ta không xét Các bạn tham khảo thêm hình dới đây: Chơng Các ghi có chức đặc biệt Các ghi có chức điều khiển hoạt động khối giao tiếp ngoại vi vi điều khiển i) ghi Status Bit : cờ báo tràn có nhớ từ bit phép cộng có mợn phép trừ Bit : cờ nhớ phụ bị tác động thực phép toán vợt bít thấp Bit : Z=1 kết phép toán Z=0 kết phép toán khác Bit : PD=1 sau bật nguồn lệnh CLRWDT PD=0 lệnh SLEEP đợc thực thi Bit : TO=1 có lệnh SLEEP thực thi lệnh CLRWDT sau bật nguồn T0=0 WDT bị chàn Bit 6-5: 00: chọn bank 01: chọn bank 10: chọn bank 11: chọn bank Bit 7: 1: chọn bank 2,3 0: chọn bank 0,1 ii) ghi option_reg: Bit 0-1-2 : dùng để chọn giá trị cho chia tần cho TIMER0 WDT Bit : PSA =1: chia tần dùng cho WDT PSA =0: chia tần dùng cho TIMER0 Bit : TOSE =1: chọn sờng xuống sờng tác động lên chân RA4 TOSE =0: chọn sờng lên sờng tác động lên chân RA4 Bit : TOCS =1: chọn xung đếm TIMER0 xung chân RA4 TOCS =0: chọn xung đếm TIMER0 xung nội Bit : INTEDG =1: xảy ngắt chân RB0 có sờn lên INTEDG =0: xảy ngắt chân RB0 có sờn xuống Bit : RBPU =1: cấm cho phép điện trở kéo dơng PORTB RBPU =0: cho phép điện trở kéo dơng PORTB III) ghi intcon: Bit 0: Cờ báo ngắt cho chân RB4-RB7 RBIF =1: xuất ngắt chân RB4-RB7 RBIF =0: không xuất ngắt chân RB4-RB7 Bit 1: Cờ ngắt cho chân RB0 INTF =1: xuất ngắt chân ngắt RB0 INTF =0: không xuất ngắt chân ngắt RB0 Bit 2: Cờ ngắt cho TIMER0 TMR0IF =1: xảy tràn ghi TMR0 TMR0IF =0: cha xảy tràn ghi TMR0 Bit 3: RBIE =1: cho phép ngắt chân RB4-RB7 RBIE =0: cấm ngắt chân RB4-RB7 Bit 4: INTE =1: cho phép ngắt chân RB0 INTE =0: cấm ngắt chân RB0 Bit 5: TMR0IE =1: cho phép ngắt TIMER0 TMR0IE =0: cấm ngắt TIMER0 Bit 6: PEIE =1: cho phép ngắt phục vụ cho thiết bị ngoại vi PEIE =0: cấm ngắt phục vụ cho thiết bị ngoại vi Bit 7: GIE =1: cho phép tất ngắt đợc thực GIE =0: cấm tất ngắt không đợc thực Chú ý: Vị trí nhớ liệu đợc chia thành BANK ghi(các khối , vùng) thời điểm , truy xuất BANK ghi mà Việc chọn BANK thông qua việc điều khiển bit 5-6-7 ghi STATUS Chúng ta thấy PIC nhiều ghi chức khác nhng không bàn đến đây.Nếu bạn cần mở rộng kiến thức tham khảo thêm DATASHEET 16F877A Chơng Các ứng dụng pic 16F877a I) đếm định thời: 1)Bộ định thời TIMER0 Timer0 định thời PIC16F877A , định thời sử dụng ghi chức khác với nhiệm vụ cách thức hoạt động khác +các ghi dùng timer0 Thanh ghi option: Là ghi cho phép đọc ghi dùng để điều khiền thiết lập cấu hình cho Timer0 Thanh ghi intcon:Là ghi chứa cờ ngắt Timer0 Thanh ghi tmr0: Là ghi bit ,mỗi lần có xung tác động giá trị ghi tăng lên đơn vị tràn ghi chở +hoạt động định thời timer0: Nhìn sơ đồ khối TIMER0 ta thấy hoạt động chế độ - Chế độ định thời: chế độ cần chọn xung tác động xung nội(TOCS =0) lúc xung tạo giao động sau đợc chia qua chia tần cung cấp cho Timer0 đếm Sau xung đợc đếm giá trị ghi TMR0 tăng lên đơn vị , xảy tràn cờ TMR0IF đợc set lên - Chế độ đếm: chế độ cần chọn xung tác động xung ngoài(TOCS =1) Timer0 lấy xung từ bên thông qua chân RA4 thông qua chia tần cung cấp cho Timer0 tơng tự nh trên.Việc chọn kiểu xung tác động thông qua việc điều khiển bit T0SE - Chế độ WDT: không tìm hiểu vấn đề 2)bộ định thời timer1: Bộ định thời Timer1 định thời 16 bit với chức nh Timer0 +các ghi dùng timer1: Thanh ghi t1con: Là ghi thiết lập cấu hình hoạt động cho Timer1 Bit 0: Bit 1: dơng) Bit 2: TMR1ON =1: cho phép Timer1 hoạt động TMR1ON =0: không cho phép Timer1 hoạt động Tmr1cs =1: dùng nguồn xung từ bên thông qua chân RC0 (sờng Tmr1cs =0: dùng nguồn xung từ tạo dao động Tmr1cs =1: t1sync=1: không sử dụng xung xung đồng t1sync=0: cho phép sử dụng xung xung đồng Tmr1cs =0: Bit không đợc sử dụng Bit 3: T1oscen=1: cho phép tạo dao động hoạt động T1oscen=0: không cho phép tạo dao động hoạt động Bit -4 : Thiết lập giá trị cho chia tần THANH GHI TMR1: Là ghi lu trữ giá trị định thời 16 bit đợc tạo thành từ ghi bit tmr1l tmr1h Thanh ghi pir1: Là ghi chứa cờ tràn TMR1IF Timer1 Thanh ghi pie1: Là ghi chứa bit TMR1IE cho phép ngắt Timer1 hoạt động +hoạt động định thời timer1 - - Nhìn vào sơ đồ khối ta thấy Timer1 có chức sau: Chế độ định thời: trớc hết cần phải cho Timer1 hoạt động cách set bit TMR1ON sau chọn chế độ sử dụng xung nội(TMR1CS =1).Xung từ tạo dao động đợc chia sau đa qua chia tần cung cấp cho Timer1 đếm đồng thời giá trị ghi TMR1 tăng lên đơn vị tràn cờ tràn TMR1IF=1 Chế độ đếm: sử dụng chế độ chung ta cần phải set bit TMR1CS =1, nguồn xung từ bên lấy từ chân RC0 - RC1 thông qua việc thiết lập bit T1OSCEN , bit T1SYNC=0 xung tác động từ bên đồng với xung dao động bên , trình đồng xảy sau xung qua chia tần 3)bộ định thời timer2: Timer2 định thời bit tơng tự nh Timer1 nhng lại có tới chia tần đợc dùng ứng dụng để điều chế độ rộng xung (PWM) Các ghi dùng timer2: Thanh ghi t2con: Là ghi thiết lập cấu hình cho Timer2 Bit 1- 0: thiết lập gia trị cho chia tần Prescale 00 = 1:1 01 = 1:4 1x = 1:16 Bit 2: TMR2ON=1: cho phép sử dụng Timer2 TMR2ON=0: không cho phép sử dụng Timer2 Bit 6- 3: thiết lập giá trị cho chia tần Postcale Thanh ghi pir1: chứa cờ tràn TMR2IF Timer2 Thanh ghi Pie1: chứa cờ cho phép ngắt TMR2IE Timer2 Thanh ghi Pr2: ứng dụng PWM Thanh ghi tmr2: lu trữ giá trị định thời bit cho Timer2 +hoạt động định thời timer2 - Chế độ định thời: nguồn xung từ tạo dao động sau đợc chia đợc đa chia tần Prescale nạp vào ghi TMR2 , xảy tràn bit TMR2IF=1 Chế độ PWM: trớc hết nạp giá trị cho ghi PR2 sau giá trị ghi TMR2 đợc so sánh với giá trị ghi PR2 chúng ghi TMR2 đợc Reset đồng thời giá trị chân PWM thay đổi đề cập đến vấn đề phần sau II) ngắt thông dụng: Nh đ biết, vi điều khiển thời điểm làm công việc định Nhng thực tế lại khác, ngời lập trình lại muốn vi điều khiển làm công việc lại tự động chuyển sang làm công viẹc khác ,vậy làm để vi điều khiển làm đợc đó? đơn giản sử dụng chế gọi : Ngắt 1)các ngắt pic 16f877a +Ngắt tràn Timer0 +Ngắt có thay đổi trạng thái chân từ RB4- RB7 +Ngắt chân RB0 +Ngắt chuyển đổi ADC đ hoàn tất +Ngắt chuyển đệm RS 232 chống +Ngắt liệu nhận từ RS232 đ sẵn sàng +Ngắt tràn Timer1 +Ngắt tràn Timer2 +Ngắt có capture hay compare chân CCP1 +Ngắt có capture hay compare chân CCP2 +Ngắt có hoạt động SPI hay I2C +Ngắt có liệu vào cổng parallel slave +Ngắt ghi vào EPROM hoàn tất +Ngắt xung đột BUS +Ngắt kiểm tra comparator Ta thấy Pic có nhiều ngắt ứng dụng nhiều chức khác nhng đề cập đến số ngắt sau: +Ngắt timer ngắt : Về hoạt động ngắt Timer ngắt hoạt động nh sau: - Xung tạo tạo dao động hoặcnguồn xung bên đợc cung cấp cho ghi định thời tơng ứng định thời , định thời xảy tràn cờ ngắt tong ứng đợc bật yêu cầu ngắt đợc phục vụ lúc vi điều khiển tạm ngừng công việc tại, hoàn thành lệnh thời tức khắc để nhảy vào chơng trình phục vụ ngắt ISR Khi đếm chơng trình PC đợc đẩy vào ngăn xếp STACK đồng thời bit GIE =0 chơng trình rẽ nhánh đến địa vectơ ngắt 0x04 ,tại vi điều khiển thực yêu cầu mà ngắt đòi hỏi - Việc thiết lập cấu hình cho ngắt thông qua bit ghi chức nh sau: +Đối với Timer0 : Bít điều khiển bit TMR0IE(INTCON.5) +Đối với Timer1 : Bít điều khiển bit TMR1IE(PIE.0) +Đối với Timer2 : Bít điều khiển bit TMR2IE(PIE.1) +Đối với ngắt ngoài: Bít điều khiển bit INTE(INTCON.4) +Đối với ngắt chân RB4 RB7: Bít điều khiển bit RBIE(INTCON.3) Chú ý: Trớc thiết lập ngắt cần phải cho phép ngắt toàn cục thông qua việt cho bit GIE =1(INTCON.7) III) Điều chế độ rộng xung( PWM) Một tính quan trọng PIC đợc ứng dụng nhiều điều chế độ rộng xung PWM(Pulse Width Modulation) Thanh ghi điều khiển ccp1con/ccp2con: Bit 3- 0: chọn chế độ làm việc Bit - 4:???? Quá trình hoạt động chức PWM nh sau: - Với PIC 16F877A có chân điều chế độ rộng xung CCP1 CCP2 ,sau chọn chức PWM cách điều khiển bít thấp ghi CCPxCON , nạp giá trị cho ghi PR2 ghi CCPRx Khi Timer2 hoạt động giá trị TMR2 tăng giá trị ghi PR2 lúc chân CCPx tơng ứng lên mức đồng thời ghi TMR2 bị xoá giá trị ban đầu.Mức chân CCPx đợc cho đên giá trị ghi TMR2 giá tri ghi CCPRx sau chân CCPx lại trở giá trị ghi TMR2=PR2 nh trình lặp lại nh ban đầu - Nh rút nh sau: Chu kì xung khoảng thời gian để giá trị ghi TMR2 tăng đến giá trị ghi PR2 Khoảng xung dơng khoảng thời gian để ghi TMR2 tăng đến giá trị ghi CCPRx Để hiểu rõ xem sơ đồ sau: [...]...Chơng 4 Các ứng dụng cơ bản của pic 16F877a I) đếm và định thời: 1)Bộ định thời TIMER0 Timer0 là một trong 3 bộ định thời của PIC16F877A , mỗi một định thời thì sử dụng các thanh ghi chức năng khác nhau với nhiệm vụ và cách thức hoạt động cũng khác nhau +các thanh ghi dùng trong timer0 Thanh ghi option: Là thanh ghi cho phép... bộ định thời timer0: Nhìn sơ đồ khối của TIMER0 ta có thể thấy nó hoạt động ở 2 chế độ - Chế độ định thời: ở chế độ này chúng ta cần chọn xung tác động là xung nội(TOCS =0) lúc này xung tạo ra bởi bộ giao động sau khi đợc chia 4 sẽ đi qua bộ chia tần cung cấp cho Timer0 đếm Sau khi một xung đợc đếm giá trị của thanh ghi TMR0 sẽ tăng lên 1 đơn vị , khi xảy ra tràn thì cờ TMR0IF sẽ đợc set lên 1 - Chế