PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   help help!! PIC16f877 và MPLAB (http://www.picvietnam.com/forum/showthread.php?t=31067)

kunhut91 03-11-2012 05:18 PM

help help!! PIC16f877 và MPLAB
 
Dạo quanh khắp 4rum cùng anh google, vẫn chưa tìm được tài liệu cần thiết!!
4rum có ai đã từng dùng MPLAB code cho 16f887 hoặc 16f877 vào giúp tôi 1 tay với.
Khi dùng muốn sử dụng ngắt (cụ thể trong trường hợp của mình là ngắt ngoài RB0 và 1 ngắt timer)~> mục đích là phát hiện có tín hiệu ngõ vào và đo thời gian mức thấp của tín hiệu.
Vấn đề ở đây của mình là cách khai báo và sử dụng ngắt trong MPLAB viết bằng C.
Các bác có thông tin hay tài liệu nào thì cho em xin cái, cảm ơn trước rất nhìu

handsometran 04-11-2012 03:49 PM

Trích:

Nguyên văn bởi kunhut91 (Post 79079)
Dạo quanh khắp 4rum cùng anh google, vẫn chưa tìm được tài liệu cần thiết!!
4rum có ai đã từng dùng MPLAB code cho 16f887 hoặc 16f877 vào giúp tôi 1 tay với.
Khi dùng muốn sử dụng ngắt (cụ thể trong trường hợp của mình là ngắt ngoài RB0 và 1 ngắt timer)~> mục đích là phát hiện có tín hiệu ngõ vào và đo thời gian mức thấp của tín hiệu.
Vấn đề ở đây của mình là cách khai báo và sử dụng ngắt trong MPLAB viết bằng C.
Các bác có thông tin hay tài liệu nào thì cho em xin cái, cảm ơn trước rất nhìu

Bạn muốn dùng ngắt RB0 cũng đơn giản thôi, tôi có dùng nó để đếm xung encoder.
//===Khởi tạo ngắt RB0===============================//
void init_ngat()//Cấu hình ngắt RB0
//XEM DATASHEET TRANG 128
{
PEIE = 1;//cho phep ngat ngoai vi
GIE = 1;//cho phep ngat toan cuc
INTEDG = 0;//ngat RB0 khi co xung xuong
INTF = 0;//xoa co báo ngat RB0
ANS12 = 0;//Chon chuc nang cua chan RB0 la I/O digital
TRISB0 = 1;//Cho chan RB0 nhan xung tu encoder
WPUB = 0xff;//Bat chuc nang danh thuc MCU
}
/=====CHUONG TRINH DEM XUNG ENCODER====================//
void interrupt ISR()
{
if(INTF && INTE)//INTE=1 khi có tín hiệu tác động vào RB0, INTF=1 khi có xung cạnh xuống.
{xung++;
INTF =0;}//xóa cờ báo ngắt.
}
//===Khoi tao timer 1====================================//
void init_timer1()
{
// TMR1CS: Timer 1 clock source select bit
// TMR1CS = 1 : External clock form pin RC0
// TMR1CS = 0 : Internal clock Fosc/4
TMR1CS=0;
// T1OSCEN: Timer1 oscillator enable control bit
// T1OSCEN = 0 : Enable
// T1OSCEN = 1 : Shut-off
T1OSCEN=0;
// T1CKPS1:T1CKPS0 Prescale clock select bit
// 11 : 1/8; 10 : 1/4; 01 : 1/2; 00 : 1/1
T1CKPS1 = T1CKPS0 = 1; //presclaer = 1:8

TMR1GE=0;//Not used Gate Control
T1SYNC=0;//khong dong bo
TMR1IF=0;//CLEAR TIMER1 INTERRUPT FLAG
TMR1ON=0;//chưa cho Timer1 hoạt động
}
Bạn tham khảo thêm ỏ bên link này
http://www.picvietnam.com/forum/showthread.php?t=30520

kunhut91 06-11-2012 01:10 AM

chú thích rất rõ ràng, thank lần nữa @@

antho_pavel 06-11-2012 11:56 AM

Trích:

Nguyên văn bởi kunhut91 (Post 79079)
Dạo quanh khắp 4rum cùng anh google, vẫn chưa tìm được tài liệu cần thiết!!
4rum có ai đã từng dùng MPLAB code cho 16f887 hoặc 16f877 vào giúp tôi 1 tay với.
Khi dùng muốn sử dụng ngắt (cụ thể trong trường hợp của mình là ngắt ngoài RB0 và 1 ngắt timer)~> mục đích là phát hiện có tín hiệu ngõ vào và đo thời gian mức thấp của tín hiệu.
Vấn đề ở đây của mình là cách khai báo và sử dụng ngắt trong MPLAB viết bằng C.
Các bác có thông tin hay tài liệu nào thì cho em xin cái, cảm ơn trước rất nhìu

cách khai báo trong MBLAb bạn tham khảo ở đây.
http://mecskill.blogspot.com/2012/10...l#.UJiJ2W8xolg


Múi giờ GMT. Hiện tại là 04:24 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam