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 24-04-2010, 03:26 PM   #1
coulomb
Nhập môn đệ tử
 
Tham gia ngày: Dec 2006
Bài gửi: 2
:
Exclamation dsPIC30F4011 giao tiếp module SIM508Z

Em đang làm đồ án tốt nghiệp về mạch giao tiếp, để truyền nhận và điều khiển PIC thông qua SMS. Em dùng dsPIC30F4011 và module SIM508z. Em đang bị mắc ở chỗ nhận tín hiệu từ module gửi về PIC, mặc dù gửi dữ liệu từ PIC đến module thì module nhận và xử lý tốt. Em đã giao tiếp thành công giữa PC-module (thông qua Hyper-Terminal 9600-8-n-1), PC-dsPic (truyền nhận ngon lành). Dưới đây là chương trình ngắt của Uart1 để nhận dữ liệu. Các anh xem giúp em với


volatile unsigned char BuffUart1[20];
//================================================== ================
// Ngat UART 1
//================================================== ================
void __attribute__((interrupt, auto_psv)) _U1RXInterrupt(void){
volatile unsigned char * receiveddata = BuffUart1;
volatile unsigned char kytu;
do{
if(DataRdyUART1()){
kytu = ReadUART1();
if((kytu != 0x0D)|(kytu != 0x0A)){
*(receiveddata++) = kytu;
}
}
}
while(kytu != 0x0D); //gap nut "Enter" se ket thuc nhan chuoi
printf("\r\n%s\r\n",BuffUart1);// viet chuoi nhan duoc len PC
Init_GLCD();
GLCD_Print88(2,0,BuffUart1);// viet chuoi nhan duoc len GLCD
LATEbits.LATE0 = ~LATEbits.LATE0;//den` bao' co xay ra ngat
IFS0bits.U1RXIF = 0;
}

tín hiệu từ module trả về có dạng :"<CR><LF>OK<CR><LF>" với <CR> là ký tự có mã 0x0A và <LF> là ký tự có mã 0x0D

Nếu em định dạng ngắt Uart xảy ra khi bộ đêm có 1 ký tự thì khi PIC nhận tín hiệu từ module sẽ bị treo trong ngắt. Còn nếu ngắt xảy ra khi có 3-4 ký tự trong bộ đệm thì sẽ ko xảy ra ngắt khi mudule truyền dữ liệu tới.
coulomb vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-05-2010, 01:37 PM   #2
ubuntu7
Nhập môn đệ tử
 
Tham gia ngày: May 2008
Bài gửi: 5
:
hi bác.
em k hiểu lắm cái này nhưng em xin hỏi bác cái cho dòng lệnh sau:
if((kytu != 0x0D)|(kytu != 0x0A))
1. bác định dùng phép toán or logic hay toán học.
2. em giả sử ký tự bác nhận được là 0x0a -> bieu thức ss ban đầu đúng -> biểu thức sau có đúng hay sai k quan trọng. ngược lại nếu kytu = 0x0d.
k biết đây có phải là lý do k?
ubuntu7 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-05-2010, 01:49 AM   #3
coulomb
Nhập môn đệ tử
 
Tham gia ngày: Dec 2006
Bài gửi: 2
:
Trích:
Nguyên văn bởi ubuntu7 View Post
hi bác.
em k hiểu lắm cái này nhưng em xin hỏi bác cái cho dòng lệnh sau:
if((kytu != 0x0D)|(kytu != 0x0A))
1. bác định dùng phép toán or logic hay toán học.
2. em giả sử ký tự bác nhận được là 0x0a -> bieu thức ss ban đầu đúng -> biểu thức sau có đúng hay sai k quan trọng. ngược lại nếu kytu = 0x0d.
k biết đây có phải là lý do k?
1. cái này là or logic vì sau 1 lệnh so sánh a==b thì giá trị trả về bao jo` cũng ở dạng logic (em viết đó là or toán học cũng ko sai trong trường hợp này nhưng do em thiếu sót)
2.cái vòng if đó là để không lưu bất kỳ ký tụ 0x0A hoặc 0x0D vào trong BuffUart1, khi nào mà gặp ký tự 0x0D sẽ nhảy ra khỏi vòng while(); chả hiểu sao e paste vào nó ko dịch các tab nên hơi khó nhìn
3 thank bác đã quan tâm vì em post bài mà ko ai giúp
4 vấn đề của em đã dc giải quyết, cuối cùng là do baudrate, do trong ngắt xử lý nhiều lệnh nên em để baudrate 1200 jo` chạy ngon lành rồi

thay đổi nội dung bởi: coulomb, 11-05-2010 lúc 01:54 AM.
coulomb 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à 04:45 AM.


Đượ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