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,
Module I/O PORT của PIC16F887
Hình 1. Sơ đồ chân PIC16F887Module 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 ANSELHTươ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: view sourceprint?
1
ANSEL = 0; /* Cấu hình cho các chân AN0 -> AN7 là chân Digital */
2
ANSELH = 0; /* Cấu hình cho các chân AN8 -> AN13 là chân Digital */
Hay có thể cấu hình theo từng bit (từng chân) view sourceprint?
1
ANS0 = 0; /* Cấu hình chân AN0 là chân Digital (chân RA0) */
2
ANS5 = 1; /* Cấu hình chân AN5 là chân Analog (Chân RE0) */
Ứ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 PORTAHình 5. Thanh ghi TRISANhư 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: view sourceprint?
ANS6 = 0; //RE1 là chân Digital
ANS12 = 0; //RB0 là chân Digital
TRISE1 = 0; //RE1 là Digital Output, có thể điều khiển LED
TRISB0 = 1; //RB0 là Digital Input, có thể đọc giá trị của nút nhấn
RE1 = 1; //Xuất mức cao ra RE1
if(RB0 == 0) {
RE1 = 0; //Đọc giá trị của RB0, kiểm tra nếu RB0 = 0 thì xuất mức 0 ra RE1
}
(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 view sourceprint?
ANSEL = ANSELH = 0; //Cấu hình tất cả các chân AN là chân Digital
TRISE1 = 0; //Cấu hình chân RE1 là chân Digital Output
while(1){
RE1 ^= 1; //Đảo trạng thái của RE1 ( dấu "^" nghĩa là XOR, Nếu RE1 = 1,
//thì 1^1 = 0, gán lại cho RE1=0, nếu RE1 = 0, 0^1=1, gán lại RE1 = 1;)
delay_ms(500); //Chờ trong khoảng 500mili giây
}
}
void delay_ms(int ms)
{
int i;
for(i=0; i
_delay(1000);//Dao động 4MHz,
///tần số Clock là 1Mhz, => delay 1000 chu kỳ máy = 1mili giây
}
}
Email ThisBlogThis!Share to XShare to FacebookShare to Pinterest Labels: PIC
No comments:
Post a Comment
Newer Post Older Post Home Subscribe to: Post Comments (Atom)
Cùng tôi học Điện Tử ..(http://ilovec.tk)..
Loading... Billnee Nguyen
Bài xem nhiều
PIC 16F887 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...
Code ví dụ cho 89c51 .ASM 1. Viết chương trình hiển thị các led tắt dần D1 đến D8; lặp lại quá trình 10 lần; thời gian delay giữa các led là 250ms d...
Download và hướng dẫn cài đặt Orcad 16.3 Giới thiệu về Orcad 16.3 Cadence SPB / OrCAD 16.30.000 is a comprehensive package of design of electronic circuits, analog and digital...
Làm mạch cảm biến ánh sáng sử dụng quang trở LDR Đây là một số DIY chuyển mạch sử dụng LDR trên mạng. LDR thiết bị chuyển mạch được sử dụng để cấp nguồn cho relay hoặc thiết bị khác khi ...
Canh sat ky tai 5,6,7 (Cực kì vui nhộn) Cảnh sát kỳ tài (Kochikame-7/16 volume) Cảnh sát kỳ tài Là bộ manga dài nhất từ trước đến na...
Auto capture camera C# interface serial comport pic16f877 save image in hard drive Source code và Mô phỏng : Download
Tìm hiểu IC 4017 Tìm hiểu IC 4017 Sơ đồ chân: IC đếm thập phân 4017 có 10 ngõ ra ở mức cao. Bộ đếm thập phân là gì? IC 4017 có 10...
5 BÍ QUYẾT TRỞ THÀNH NGƯỜI BÁN HÀNG BẬC THẦY Hãy để chế độ xem: View mode Slideshow Hãy để chế độ xem: View mode Slideshow
Làm sao để khách hàng thường xuyên quay trở lại website? Hãy để chế độ xem: View mode Slideshow Hãy để chế độ xem: View mode Slideshow