|
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 |
|
14-01-2009, 11:43 PM | #1 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 25
: |
bác namqn cho em hỏi vấn đề này. trên VB6 em viết cho 1 nút ấn đơn giản là khi ân nút thì truyền 1 lúc 12 byte ví dụ là chữ "XIN CHAO BAN" với 12 lênh MSComm1.Output = các kí tự tương ứng.
ở vdk em cấu hình UART như sau Code:
U2MODE = 0x8000; //Main I/O, 8-bit, no parity, 1 stop bit U2STA = 0x0400; //bit10=UTXEN, ngắt khi nhận 1 kí tự U2BRG = 32; //9600 bps @ Fcy = 5 MHz Code:
void __attribute__((__interrupt__)) _U2RXInterrupt(void) { _U2RXIF = 0; m++; if (m==5) { putstr(U2RXREG);} } nếu em thay if(m==1) thì hiện ra đúng chữ X, nhung thay if(m==2) vẫn hiện ra chứ X, còn thay if(m==3 hoặc 4 hoặc 5.....) thì ko hiện ra chữ j cả em thay thành đoặn code sau Code:
void __attribute__((__interrupt__)) _U2RXInterrupt(void) { _U2RXIF = 0; m++; dislayLCD(m); } Với đoặn trên thì từ trên PC em viết lại là ấn nút thì chỉ truyền 1 byte thôi thì ở dưới số lần ngắt có tăng lên, nhưng m chỉ bằng đến 4 là ko tăng nữa, mặc dù vẫn ấn truyền. Tr hợp này thì như nào hả bác. Mong bác giải thích cho em và chỉ em cách để làm sao mà mình truyền trên PC 1 lúc nhiều byte thì vdk nhận từng byte sẽ ngắt đúng hả bác |
15-01-2009, 02:24 AM | #2 |
Trưởng lão PIC bang
|
Khi có ngắt nhận ký tự ở dsPIC, bạn chỉ tăng biến đếm chứ không lấy ký tự ra khỏi bộ đệm của UART. Bạn nên tạo một bộ đệm ở dsPIC, khi có ký tự là lấy ngay ra khỏi bộ đệm (giả sử bộ đệm là buff[], trong đoạn code xử lý ngắt bạn thực hiện buff[i] = U2RXREG, i cần được khởi tạo trước đó).
Nên xóa cờ ngắt sau khi đã phục vụ xong ngắt, thay vì ngay đầu code xử lý ngắt. Cách đơn giản để phản hồi về PC của bạn là khi vào code xử lý ngắt, bạn đọc được ký tự nào thì gửi ngược ký tự đó về PC. Ví dụ, U2TXREG = buff[i]. Bộ đệm của UART trong dsPIC chỉ chứa được 4 ký tự, do đó bạn chỉ nhận được 4 ký tự đầu tiên (các ký tự sau đó sẽ bị dsPIC bỏ qua, vì lý do tràn bộ đệm, mời bạn xem lại các tài liệu đã được tôi đề cập trong tutorial). Cũng mời bạn đọc lại tutorial của tôi. Những gì tôi vừa nêu trên đã được đề cập trong tutorial. 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 |
15-01-2009, 06:03 PM | #3 | |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 25
: |
Trích:
Còn khi em tr 1 lúc 12 byte thì sao chỉ xảy ra có 2 lần ngắt ah |
|
15-01-2009, 06:26 PM | #4 | |
Trưởng lão PIC bang
|
Trích:
Khi bạn truyền ồ ạt 12 ký tự thì có thể giữa các ký tự có thời gian nghỉ không đủ lớn (một bạn thành viên trên diễn đàn này cũng đã gặp điều đó, tôi có đề nghị thêm vào một khoảng delay nhỏ giữa các ký tự ở phía PC thì đã giải quyết được). Ngoài phần phục vụ ngắt UART thì dsPIC còn có thể phải phục vụ các ngắt khác ở mức ưu tiên cao hơn, điều này bạn chưa cho biết. 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 |
|
15-03-2009, 09:59 AM | #5 |
Đệ tử 4 túi
Tham gia ngày: Jan 2008
Bài gửi: 68
: |
Thầy Nam cho em hỏi : em muốn giao tiêp PC vơi dsPIC30f2010 , bằng cách dùng PC gửi kí tự xuống dsPIC sau đó dsPIC hiện thị những kí tự vừ nhận lên màn hình LCD và gửi lại cho PC , project em làm là dựa trên code của thầy (cả TUTO LCD và UART), nhưng không hiểu sao nó không chạy, nếu không có hiện thị lên LCD thì chạy bình thường(em dùng hyper terminal) . Module LCD của em nó cũng chạy rồi . Nhưng cứ "nối" 2 module này lại là không chạy !
Em cảm ơn Thầy ! Trân trọng ! thay đổi nội dung bởi: conglong, 15-03-2009 lúc 10:04 AM. |
15-03-2009, 10:13 AM | #6 |
Đệ tử 4 túi
Tham gia ngày: Jan 2008
Bài gửi: 68
: |
Thầy Nam cho em hỏi câu nữa liên quan tới C30 là: giả sử em đã có 2 project LCD và UART , mà trong project UART em muốn hiện thị LCD , vậy em có thể dung thêm lệnh preprocessor ở đầu project UART là
"#include LCD.c" Để lấy hàm hiện thị "LCD_puttring()" trong LCD. c được không thầy , Em cảm ơn ! Trân trọng !. |
15-03-2009, 08:23 PM | #7 | |
Trưởng lão PIC bang
|
Trích:
Nếu bạn dùng "#include LCD.c" thì trình biên dịch chỉ đơn giản bê nguyên nội dung của "LCD.c" đặt vào tập tin mã nguồn hiện tại của bạn thôi. Tôi không cho đây là cách làm hay. Không rõ bạn có được học về lập trình C trong chương trình đại học hay không? 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 |
|
15-03-2009, 08:19 PM | #8 | |
Trưởng lão PIC bang
|
Trích:
Tốc độ gửi dữ liệu của bạn ra sao? Mỗi giây một giá trị từ PC hay thế nào? Hàm lcd_putstr() của bạn nhận đối số là một chuỗi ký tự, nhưng bạn lại gọi hàm với đối số là temp (có kiểu unsigned short). Lần trước tôi đã hướng dẫn bạn dùng hàm sprintf() để chuyển giá trị số thành một chuỗi ký tự trước khi xuất ra LCD rồi mà. 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 |
|
16-03-2009, 05:15 PM | #9 | |
Đệ tử 4 túi
Tham gia ngày: Jan 2008
Bài gửi: 68
: |
Trích:
char temp[1]; mà nó vẫn không chạy ; Không chạy ở đây là : Hyper terminal không detect được tốc độ truyền và định dạng truyền, em truyền 1 kí tự từ bàn phím , sau 2s hoặc lâu hơn em nhấn bàn phím 1 lần mà không thấy kết quả. em cảm ơn thấy ! Trân trọng !. |
|
Tags |
dspic30f i2c, dspic30f uart, i2c, rtc |
|
|
Similar Threads | ||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
dsPIC Tutorial 3-Đọc ngõ vào và giao tiếp LCD | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 92 | 19-02-2017 11:15 PM |
dsPIC Tutorial 2-Các kỹ thuật cơ bản | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 33 | 17-10-2013 11:09 PM |
dsPIC Tutorial 5-Module ADC và MCPWM | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 83 | 12-09-2013 10:33 PM |
dsPIC Tutorial 1-Tạo và biên dịch một project (ASM30) | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 16 | 22-08-2012 12:35 AM |
Alternate UART pin??? | alexjp | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 1 | 02-05-2006 06:26 PM |