toilet

Hướng dẫn - Bắt Đầu với IO với PIC16f877a trên Mplab XC8

Thảo luận trong 'Bắt đầu với PIC16F877A'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. Đăng 31/12/14 #1

    hoanglocmdc Kỹ sư

    Số bài viết: 416
    Đã được thích: 231
    Yahoo Messenger
    Facebook Profile
    Do lần đầu làm Mod mình đã hiểu sai chỉ thị của Admin dẫn tới làm mất các bài hướng dẫn cơ bản về PIC16f877a
    Để chuộc lỗi việc này, mình xin viết 1 tutorial để các bạn làm quen với PIC và lựa chọn PIC16f877a để bắt đầu sẽ dễ dàng tiếp cận hơn .
    Mình gửi lời xin lỗi tới người đã viết tutorial cũ, và xin lỗi mọi người do sai sót của mình.
    Và đây cũng là món quà của mình cho các bạn đang học pic và bắt đầu học pic cũng như có ý định học pic nhân dịp năm mới 2015.
    Mình sẽ hướng dẫn các bạn qua hình ảnh nhé, mình sẽ không làm video.
    - Mình giới thiệu qua về PIC16f877a
    + Pic16f877a là dòng vđk 8bit của hãng microchip
    + Tần số dao động ngoại lớn nhất 20Mhz
    + 8k x 14word flash program memory
    + 368 x 8byte data memory (RAM)
    + 256 x8byte eeprom
    + Bao gồm 3 bộ Timer với 2 bộ timer 8bit và 1 bộ 16bit
    + 2 bộ capture, compare, PWM
    + Hỗ trợ đầy đủ các chuẩn truyền thông cơ bản như SPI, I2C, UART
    + 1 bộ ADC 10bit với 8 kênh input
    + 1 bộ watchdog timer
    + 40 chân
    + sử dụng dãi điện áp rộng 2V-5V

    - Bài đầu tiên sẽ bắt đầu với việc tạo 1 project trên mplab x và xuất nhập IO + mô phỏng trên proteus
    + Tạo project thì mình đã hướng dẫn cụ thể ở bài hướng dẫn sử dụng mplab x
    + Bắt đầu lập trình
    B1: Tạo 1 main file
    upload_2014-12-31_20-52-37.
    B2: Mở phần configure bit để cấu hình bit cho vđk:
    upload_2014-12-31_20-54-36.
    Chọn FOSC là HS : sử dụng thạch anh ngoại
    Chọn WDTE là OFF : Không sử dụng bộ watchdog timer
    Chọn BOREN là OFF
    Chọn LVP là OFF
    các lựa chọn khác để mặc định
    các bạn chọn tiếp vào Generate Source Code to Output
    B3: Copy các fuse bit vào file main vừa tạo ở bước 1
    upload_2014-12-31_20-58-20.
    *** Trước khi bắt đầu viết 1 chương trình IO, mình sẽ giới thiệu 1 chút về bộ ngoại vi IO của vđk PIC16f877a
    Port A: Gồm có 6 chân từ RA0- RA5 , port A ngoài chức năng thông thường là IO còn có chức năng input analog(cái này mình sẽ nói trong bài ADC)
    Để làm việc với port A ở chế độ IO chung ta cần quân tâm tới các thanh ghi
    PORTA - Thanh ghi dữ liệu
    TRISA - thanh ghi điều hướng

    PortB : Gồm có 8 chân từ RB0-RB7, cũng như portA thì PortB ngoài chức năng IO thông thường còn có chức năng là bộ ngắt ngoài của pic16f877a, gồm 2 chế độ ngắt, là ngắt ngoài ở chân RB0 và ngắt ngoài trên chân RB4-RB7, khác với các port khác của pic16f877 thì PortB còn có chế độ kéo trở treo lên VCC trong thường hợp phần cứng các bạn không hỗ trợ kéo trở lên VCC
    Bit thứ 7 của thanh ghi OPTION_REG quản lý việc cho phép hay không cho phép kéo trở treo ở portB lên vcc
    Tương tự portA thì port B cũng có 2 thanh ghi để làm việc ở chế độ IO :
    PORTB - Thanh ghi dữ liệu
    TRISB - Thanh ghi điều hướng

    PORTC: Gồm 8 chân từ RC0-RC7, Portc ngoài chức năng IO thông thường thì là cổng hỗ trợ các bộ ngoại CCP, UART, I2C, SPI của PIC16f877a
    Để làm việc với port C ở chế độ IO chúng ta cũng có 2 thanh ghi là:
    PORTC - thanh ghi dữ liệu
    TRISC - thanh ghi điều hướng

    PORT D: Gồm 8 chân từ RD0-RD7
    Để làm việc với port D ở chế độ IO chúng ta cũng có 2 thanh ghi là:
    PORTD - thanh ghi dữ liệu
    TRISD - thanh ghi điều hướng

    PORT E: Gồm 3 chân RE0 - RE2, giống port A thì port E ngoài chức năng IO còn có chức năng input Analog
    Để làm việc với port E ở chế độ IO chúng ta cũng có 2 thanh ghi là:
    PORTE - thanh ghi dữ liệu
    TRISE - thanh ghi điều hướng
    ********************************
    B4: Chúng ta sẽ viết 1 chương trình đọc phím nhấn ở chân RB0 và bật đèn ở chân RD0
    Đầu tiên các bạn phải định nghĩa
    Mã:
    #define _XTAL_FREQ 20000000
    để sử dụng thư viện delay của MplabX và khai báo tần số làm việc của vđk
    Chúng ta sẽ cấu hình chân RB0 trên PORTB là chân input và sử dụng trở kéo lên VCC
    Mã:
    TRISB0 = 1;  // RB0 input mode
    OPTION_REG &= 0x7F;  //kéo trở treo lên VCC RBPU = 0
    Tiếp theo cấu hình Chân RD0 là chân output
    Mã:
    TRISD0 = 0;  //RD0 output mode
    B4: Tạo vòng lặp vô hạn để đọc phím ấn và bật tắt led
    Mã:
     while(1)
        {
            RD0 = 1; // tắt led
            while(RB0 == 0)  // nếu phím được nhấn
            {
                RD0 = 0;  // cho led sáng
            }
        }
    B5: các bạn ấn Clear and build để biên dịch và tạo file hex
    B6: tạo 1 chương trình mô phỏng trên proteus
    upload_2014-12-31_22-0-39.
    Nạp file hex vào vđk và ấn run để bắt đầu mô phỏng
    Code mẫu và file mô phỏng mình đã đính kèm ở dưới.

    Bài viết còn nhiều thiếu sót, mong mọi người ủng hộ !!!
    Thanks all !!!

    Các file đính kèm:

    DuanBui, Trần Thanh, dovanhieu8 others thích bài này.
    #1
  2. Đăng 3/1/15 #2

    trongpdl Học sinh phổ thông

    Số bài viết: 3
    Đã được thích: 0
    cảm ơn bạn, cho mình hỏi, khi có gì cần trao đổi thì mình gặp các bạn ở forum nào?? >:D<
    #2
  3. Đăng 3/1/15 #3

    hoanglocmdc Kỹ sư

    Số bài viết: 416
    Đã được thích: 231
    Yahoo Messenger
    Facebook Profile
    bạn cứ hỏi ở đây, hoặc lập 1 topic để hỏi
    #3
  4. Đăng 3/1/15 #4

    2young2die Học sinh trung cấp

    Số bài viết: 46
    Đã được thích: 4
    Tại sao dùng trình Complier này mà không phải những trình complier khác ?
    Phiền bạn đưa ra ưu điểm của trình complier này
    #4
  5. Đăng 3/1/15 #5

    hoanglocmdc Kỹ sư

    Số bài viết: 416
    Đã được thích: 231
    Yahoo Messenger
    Facebook Profile
    Bạn nên đọc bài giới thiệu về IDE Mplab X và compiler XC8 của mình, mình đã nói rõ là mỗi IDE có 1 ưu điểm riêng mình dùng IDE này vì đơn giản là mình thích thôi !!!
    Ưu điểm của IDE này có lẽ là nó được hỗ trợ bởi chính nhà sản xuất IC
    điều này đảm bảo 1 điều rằng, IDE này hỗ trợ tất cả các dòng sản phẩm mà NSX bán ra thị trường
    Còn 1 ưu điểm nữa mà có lẽ dân Code rất thích đó là có thể tự tạo ra các thư viện cho bản thân, khác với các IDE tích hợp, việc lập trình chỉ cần tick chọn thì IDE này buộc bạn phải đọc datasheet cũng như tài liệu liên quan để có thể viết 1 chương trình hoàn thiện cho vđk qua đó trình độ của bạn cũng sẽ lên khơ khớ .
    hết, còn gì nữa ae bổ xung nhé
    DuanBui2young2die thích bài này.
    #5
  6. Đăng 3/1/15 #6

    2young2die Học sinh trung cấp

    Số bài viết: 46
    Đã được thích: 4
    Cám ơn nhiều.Cố gắng đợi nhiều bài của bạn nhất là CAN và Bootloader,đang hóng 2 cái này nhất
    Concepthoanglocmdc thích bài này.
    #6
  7. Đăng 3/1/15 #7

    hoanglocmdc Kỹ sư

    Số bài viết: 416
    Đã được thích: 231
    Yahoo Messenger
    Facebook Profile
    Đây là loạt bài basic
    có lẽ sẽ làm bạn k vui khi k có 2 bài đó :D
    sau loạt bài basic có lẽ sẽ làm 1 cái topic cho ae thảo luận về bootloader và can, modbus, tcp/ip :D
    2young2die thích bài này.
    #7
  8. Đăng 4/1/15 #8

    2young2die Học sinh trung cấp

    Số bài viết: 46
    Đã được thích: 4
    À mình cũng đang xem lại từ đuầ về dòng PIC 8bit này.
    Hình như pic này chỉ có portB là có pull-up resistor.Vậy thì hơi bất tiện nhĩ
    hoanglocmdc thích bài này.
    #8
  9. Đăng 4/1/15 #9

    Concept Kỹ sư

    Số bài viết: 577
    Đã được thích: 790
    Chủ thớt có thể nói sơ qua về các mục sẽ trình bày tiếp theo trong loạt tut được gọi là "basic" này được không nhỉ ? nếu có dự định về thời gian hoàn thành TUT sẽ rất hay.

    Cũng không biết có loạt TUT đề cập đến một ứng dụng nào đó không vì thấy chủ thớt có vẻ rất giỏi về ứng dụng của VĐK :-?

    Ồ mà cám ơn chủ thớt đã quan tâm đến mặt tài chính của mình, nhưng riêng khoản này chủ thớt cứ yên tâm, đã cố để dành được một khoản đủ để học VĐK rồi :))
    #9
  10. Đăng 4/1/15 #10

    hoanglocmdc Kỹ sư

    Số bài viết: 416
    Đã được thích: 231
    Yahoo Messenger
    Facebook Profile
    Hi :D
    trong loạt bài basic sẽ có thêm bài về timer/counter, PWM, truyền thông RS232, cơ bản là như thế, sẽ ứng dụng gần hết các ngoại vi tích hợp trên vđk PIC
    Còn ứng dụng thì không bạn ah
    1 vài ứng dụng của VĐK mà bản thân mình đã tham gia thực hiện:
    + Ổn định nhiệt độ, tốc độ động cơ DC bằng thuật toán PID
    + Lập trình cho hộp đen taxi (nó cho oai thế chứ cái này trình mình chỉ đọc, check và sửa code cũng như bổ sung thôi các tính năng thôi, phần lõi đã có các cao thủ làm roài)
    + Thiết kế bộ điều khiển cho máy làm hương tự động
    + thiết kế bộ giám sát từ xa qua GSM, GPRS
    + điều khiển từ xa bằng hồng ngoại, RF
    + Thiết kế bộ đo và ổn định nhiệt độ, độ ẩm lò ấp trứng gà (cái này đang tiến hành :D chưa hoàn thành)
    ---> trước khi làm những việc đó, mình cũng phải rèn luyện qua các tut như thế này để nắm rõ về hoạt động cũng như cách làm việc với vđk.
    Colgate: Khoe tí
    lê sang thích bài này.
    #10

Chia sẻ trang này