![]() |
|
Tài trợ cho PIC Vietnam |
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 |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Oct 2007
Bài gửi: 4
: |
Vấn đề ngắt tiếp theo ...
Cũng với chương trình ngắt phía trên:
+Khai báo biến toàn cục: Code:
unsigned int ADC_1; unsigned int ADC_2; Code:
void interrupt_int4() org 0x80 { //When ADS is asserted addr_select = PORTA; addr_select &= 0x3F; if (addr_select == 0) { LATD = ADC_1; //ADC_1 } else if (addr_select == 2) { LATD = ADC_2; //ADC_2 } else { LATD = addr_select; } IFS3bits.INT4IF = 0; //ensure interrupt not pending } ví dụ: Code:
ADC_1 = 0xAA; ADC_2 = 0xBB; Vấn đề ở đây là gì ??? Các bác giúp em với |
![]() |
![]() |
![]() |
#2 | |
Trưởng lão PIC bang
|
Trích:
Theo tôi thì nên dùng switch case thay cho các if lồng nhau. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: Oct 2007
Bài gửi: 4
: |
Cám ơn anh Nam đã giúp đỡ !!! .Em sẽ nghiên cứu để chuyển sang C30.
Về vấn đề hàm ngắt INT4: -Ban đầu khi em chưa sử dụng biến ADC_1 và ADC_2 mà đưa luôn giá trị ra PORTD: Code:
void interrupt_int4() org 0x80 { //When ADS is asserted addr_select = PORTA; addr_select &= 0x3F; if (addr_select == 0) { LATD = 0xAA; } else if (addr_select == 2) { LATD = 0xBB; } else { LATD = addr_select; } IFS3bits.INT4IF = 0; //ensure interrupt not pending } Vấn đề ở đây có lẽ là do cách mình khai báo biến: Code:
unsigned int ADC_1; unsigned int ADC_2; 1>Liệu có sự thay đổi nào của ADC_1 và ADC_2 khi nhảy vào trong hàm ngắt 2>cách gán giá trị trong hàm ngắt như sau có vấn đề: Code:
LATD = ADC_1; LATD = ADC_2; |
![]() |
![]() |
![]() |
#4 |
Trưởng lão PIC bang
|
Ở post #2 bạn đặt các giá trị hằng số vào ADC_1 và ADC_2 và cho biết kết quả không đúng khi có ngắt ngoài, nhưng ở post #4 bạn lại cho biết giá trị của ADC_1 và ADC_2 có được từ việc chuyển đổi A/D. Liệu có khả năng khi bạn thử đặt các giá trị 0xAA và 0xBB vào ADC_1 và ADC_2 thì thao tác chuyển đổi A/D lại ghi các giá trị khác vào ADC_1 và ADC_2 hay không?
Bạn tham khảo ví dụ 5.1 trong tutorial 5 cho dsPIC của tôi. Tôi đã dùng đúng cách mà bạn đang dùng để đọc ngõ vào analog và cập nhật các thanh ghi PDC bằng kết quả chuyển đổi A/D. Tôi cũng dùng biến unsigned int, và không hề có điều gì bất thường xảy ra. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
![]() |
![]() |
![]() |
|
|