PDA

View Full Version : help help!! PIC16f877 và MPLAB


kunhut91
03-11-2012, 05:18 PM
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
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
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/cach-dung-mplab-ide-v850.html#.UJiJ2W8xolg