|
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 |
|
24-04-2010, 03:26 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Dec 2006
Bài gửi: 2
: |
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. |
04-05-2010, 01:37 PM | #2 |
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? |
11-05-2010, 01:49 AM | #3 | |
Nhập môn đệ tử
Tham gia ngày: Dec 2006
Bài gửi: 2
: |
Trích:
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. |
|
|
|