Mình rất thích dòng vi điều khiển PIC , việc lập trình PIC đối với người chưa biết gì như mình rất khó, với những ai giống mình , bài viết này sẽ cung cấp cho bạn những kiến những cơ bạn , học tới đâu thì tìm hiểu thêm về nó! Hi vọng bài viết này sẽ có ích cho các bạn, mình chọn chip 16f887 để thực hành :
1,
Hình 1. Sơ đồ chân PIC16F887
Module I/O của PIC16F887 có 35I/O trong đó có 1 input. Tất cả các chân của PIC có khả năng cấp và rút dòng khoảng 25mA, đủ điều khiển 2 LED mắc song song. Tuy nhiên, giới hạn của mỗi PORT (8 chân) chỉ là 90mA mà thôi. Do đó, khi thiết kế cần tính toán tránh quá tải cho từng chân (vượt quá 25mA) và tránh quá tải cho toàn PORT (90mA).
Các PORT của PIC16F887 lần lượt được đặt tên theo chữ cái là PORTA, PORTB, PORTC, PORTD và PORTE, tương ứng với mỗi chân I/O ngoài chứng năng Input và Output logic ra còn tích hợp thêm nhiều tính năng khác, như RX, TX cho module USART, SDO, SDI, SCK, SS cho module SPI ….
Ngoài ra, trên Hình 1, những chân ANx được tô vàng là những chân có tính năng Analog, nghĩa là ngõ và của module ADC.Ứng với mỗi chân sẽ có 1 bit cấu hình chế độ Analog hay Digital trong 2 thanh ghi ANSEL và ANSELH.
Hình 2. Thanh ghi ANSEL
Hình 3. Thanh ghi ANSELH
Tương ứng với mỗi chân ANx (tô vàng trong Hình 1) mỗi bit ANSx (x = 0 – 13) sẽ quyết định chân ANx đó có tính năng Analog hay Digital, trong Hi-Tech C có thể dùng các định nghĩa của Datasheet để gán/đọc giá trị các thanh ghi này. Với giá trị được xóa về không (0) thì chân AN tương ứng sẽ là chân Digital (có thể xuất, đọc mức logic từ PORT), nếu ANSx được gán bằng Một (1) thì chân AN tương ứng sẽ là chân Analog, chỉ có tính năng Analog input cho ADC.
Lưu ý cách đọc giá trị thanh ghi trong datasheet, dòng chữ trên cùng R/W-1 có nghĩa là bit này có thể Read/Write và khi Reset sẽ có giá trị là 1. Điều đó cũng có nghĩa là mặc định những chân có kỹ hiệu AN sẽ có tính năng Analog, muốn bật tắt 1 con LED trên những chân này,hãy cấu hình bit AN tương ứng trước nhé. Một ví dụ trong Hi-Tech C:
Hay có thể cấu hình theo từng bit (từng chân)
Ứng với mỗi PORT sẽ có 2 thanh ghi chính để điều khiển là
TRIS và
PORT, tương ứng với PORTA, PORTB, PORTC, PORTD và PORTE có các thanh ghi TRISA, TRISB, TRISC, TRISD và TRISE để điều khiển hướng xuất nhận của PORT.
Lưu ý, TRIS cấu hình cho PORT là input thì lúc này, chân được cấu hình input có trở kháng cao, có thể đọc được logic điện áp trên chân đó, và có thể coi như chân đó cách ly với mạch bên ngoài. Không phải tất cả các PORT đều có đầy đủ 8 bit. PORTB còn có thêm tính năng Interrupt On Change và Internet Pull-Up
Ví dụ PORTA, có thanh ghi TRISA và thanh ghi PORTA
Hình 4. Thanh ghi PORTA
Hình 5. Thanh ghi TRISA
Như vậy để cấu hình I/O PORT để sử dụng, cần 3 bước:
+ Xác định xem chân sử dụng có tính năng Analog hay không, nếu có, cấu hình là Analog (ADC) hay Digital (I/O) tùy thuộc vào mục đích
+ Cần xác định xem I/O cần dùng là ngõ vào hay ngõ ra, nếu ngõ vào điều khiển TRIS tương ứng bằng 1 (số 1 giống chứ i trong input) và ngược lại là 0 (giống chư o trong output)
+ Xuất ra I/O mức cao hay mức thấp tùy thuộc vào yêu cầu mà xuất trên PORT
Ví dụ: Cấu hình RE1 là ngõ ra digital điều khiển LED và RB0 là ngõ vào đọc giá trị nút nhấn:
(tiếp theo …)
WEAK PULL-UP trên PORTB
IOC trên PORTB
Ví dụ về bật tắt LED trên chân RE1 trong mỗi 500ms
| __CONFIG(INTOSC & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & |
| BORDIS & IESODIS & FCMDIS & LVPDIS); |
No comments:
Post a Comment