PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 05-12-2010, 10:09 PM   #1
pk178
Đệ tử 5 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 100
:
Xin giúp đỡ về Peripheral Pin Select trong dsPIC33

Chào các bác, em đang gặp phải vấn đề với chú pps này, em chỉ làm để test thôi, em thử với con dsPIC33FJ12MC202, với ngắt ngoài INT0 thì ko vấn đề gì, nhưng với ngắt ngoài INT1 và INT2 thì em không chọn được chân nối với 2 ngắt này, mặc dù em đã tham khảo code ở trên diễn đàn của Microchip.

Đây là code của em, cứ mỗi khi có ngắt ngoài xảy ra thì thay đổi mức logic của chân A0 :

Code:
#include <p33FJ12MC202.h>
#include <pps.h>
	_FOSCSEL(FNOSC_FRC)		// Su dung thach anh noi
	_FGS(GSS_OFF&GWRP_OFF)	// Tat che do bao ve code
	_FWDT(FWDTEN_OFF)		// Khong dung watchdog
	_FPOR(PWMPIN_ON&FPWRT_PWR1)	// Cho phep chan PWM, Cam Power on reset
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void interrupt_init();
void _ISR _INT0Interrupt(void);
void _ISR _INT1Interrupt(void);
void _ISR _INT2Interrupt(void);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void main(){
	TRISB = 0;
	LATB = 0;
	
	TRISA = 0;
	TRISB = 0xFFFF;
	interrupt_init();	
	while(1);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void interrupt_init(){
	PPSUnLock;	// Unlock
	_INT1R = 0;		// Chan RP0 la chan ngat ngoai 1
	_INT2R = 3;		// Chan RP3 la chan ngat ngoai 2
	PPSLock;	// Lock

	_INT0IE = 1;	// Cho phep ngat ngoai 0
	_INT1IE = 1;	// Cho phep ngat ngoai 1
	_INT2IE = 1;	// Cho phep ngat ngoai 2


}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void _ISR _INT0Interrupt(void){
	_LATA0 = !_LATA0;
	IFS0 = 0;
}  
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void _ISR _INT1Interrupt(void){
	_LATA0 = !_LATA0;
	IFS0 = 0;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void _ISR _INT2Interrupt(void){
	_LATA0 = !_LATA0;
	IFS0 = 0;
}
Các bác xem giúp em xem chương trình trên có lỗi gì không mà em mô phỏng trên proteus không thấy chạy ! Cám ơn các bác nhiều !
pk178 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-12-2010, 03:21 PM   #2
pk178
Đệ tử 5 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 100
:
Thông báo với các bác là em đã sửa được rồi, nguyên nhân cũng tại ko đọc kĩ datasheet, nó nằm ở đây :

Some ports are shared with ADC module pins. The corresponding bits in the
AD1PCFG and AD2PCFG registers, if present, must be set to ‘1’ for I/O port
functionality, even if the ADC module is turned off.


Hi vọng các bác nào sau này vấp phải vấn đề này thì biết để tránh :d
pk178 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam