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

#1
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.png

B2: Mở phần configure bit để cấu hình bit cho vđk:
upload_2014-12-31_20-54-36.png

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.png

*** 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.png

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 !!!
 

Đính kèm

trongpdl

Học sinh phổ thông
#2
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<
 

2young2die

Học sinh trung cấp
#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
 
#5
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
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é
 

2young2die

Học sinh trung cấp
#6
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é
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
 
#7
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
Đâ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

Học sinh trung cấp
#8
Đâ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
À 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ĩ
 

Concept

Kỹ sư
#9
Đâ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
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 :-?

Quanh bạn bây h có thiết bị gì k dùng vi điều khiển chứ
Lớn thì các dây chuyển sản xuất tự động (PLC lõi cùng là VĐK mà thôi) hỏi có dây chuyền nào k dùng PLC
Nhỏ thầy máy giặt, tivi, tủ lạnh, máy nóng lạnh, điện thoại, quạt, đèn, xe máy, oto, cân, tới ấp con gà, nuôi con cá cảnh có thiết bị nào không dùng vi điều khiển - chẳng qua nhà bạn chưa đủ tiền để xài thôi
Cao siêu ảo diệu thì các máy bay, tàu vũ trụ, tàu thám hiểm, robot thăm dò , có cái nào k có 1 tới mấy chục con vi điều khiển trên đó
Bạn đang sống và đòi hỏi cuộc sông chung quanh đều là các thiết bị smart hỏi có thiết bị smart nào k sử dụng tới VĐK, VXL.
Ồ 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 :))
 
#10
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 :))
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í
 

Quảng cáo Google