PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp cổng COM và LPT

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

Giao tiếp cổng COM và LPT RS232, RS485 và LPT là những giao tiếp cơ bản và kinh điển khi mới học về vi điều khiển...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 08-03-2009, 06:18 PM   #1
Nin
Đệ tử 1 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 16
:
gửi kí tự nhận, gửi chuỗi ko nhận RS232?

em có thử viết CCS cho pic 16f877a giao tiếp qua máy tính, nhưng chỉ truyền kí tự thì nhận tốt, còn chuỗi thì không nhận ji cả, code như sau:
Đây là mã nhận kí tự ok:
Code:
#include <16f877a.h>
#include <def_877a.h>
#device *=16
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#include <lcd_lib_4bitm.c>

char c;

#int_rda       // ngat khi da co du lieu truyen thanh cong qua cong COM
void receive_isr()
{
   c=getc(c);    // thu du lieu nhan duoc cat giu vao bien c
   LCD_putcmd(0x80);
   printf(lcd_putchar,"nhan duoc:%c  ",c); // in ra cho biet nhan dc   
}   
   

VOID  main()
{   
   ENABLE_INTERRUPTS(INT_RDA);   // ngat khi data nhan tu RS232 san sang
   ENABLE_INTERRUPTS(GLOBAL);    // ngat toan cuc
   trisb7=0;
   trisb6=1;
   TRISE=0X00;    // portE: cong xuat du lieu (dieu khien cac chan E|R/W|RS cua LCD)
   TRISD=0X00;    // portB: cong xuat du lieu (du lieu tren man hinh LCD)
   LCD_init();    // khoi tao LCD
      
   while(1)
   {  
   }        
}
Giờ thay đuổi biến kí tự c thành mảng kí tự c thì ko nhận đc ji cả --> ngắt ko xảy ra?
Code:
#include <16f877a.h>
#include <def_877a.h>
#device *=16
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#include <lcd_lib_4bitm.c>

char c[80];

#int_rda       // ngat khi da co du lieu truyen thanh cong qua cong COM
void receive_isr()
{
   gets(c);    // thu du lieu nhan duoc cat giu vao c
   LCD_putcmd(0x80);
   printf(lcd_putchar,"nhan duoc:%s  ",c); // in ra cho biet nhan dc   
}   
   

VOID  main()
{   
   ENABLE_INTERRUPTS(INT_RDA);   // ngat khi data nhan tu RS232 san sang
   ENABLE_INTERRUPTS(GLOBAL);    // ngat toan cuc
   trisb7=0;
   trisb6=1;
   TRISE=0X00;    // portE: cong xuat du lieu (dieu khien cac chan E|R/W|RS cua LCD)
   TRISD=0X00;    // portB: cong xuat du lieu (du lieu tren man hinh LCD)
   LCD_init();    // khoi tao LCD
      
   while(1)
   {  
   }        
}
Anh Bắc, anh Falleft có vô chỉ dùm hay ai nhiều túi biết cái này cũng đc, chỉ giùm với, thanks nhiều!
Nin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-03-2009, 10:30 PM   #2
manhha2799
Đệ tử 5 túi
 
Tham gia ngày: Apr 2007
Bài gửi: 121
:
Send a message via Yahoo to manhha2799
Code:
#INT_RDA
void Receive_isr()
{
      c=getc();
      if((c=='/'))
         {mang[dem]='\0';
         flag1=1;}
      else
         {mang[dem]=c;
         dem++;
         ktra=c;
         }
}
Bạn nghiên cứu thử chương trình này coi.
__________________
Bảng ledsigns chất lượng cao...
http://www.ledviet.info - manhha2700@yahoo.com
Đt:0949299699

thay đổi nội dung bởi: namqn, 09-03-2009 lúc 03:49 AM. Lý do: định dạng code
manhha2799 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-03-2009, 10:32 AM   #3
Nin
Đệ tử 1 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 16
:
Mình có thể hiểu cái này, khi ta truyền từng kí tự nó sẽ cho dồn lần lượt vô mảng. Nhưng ở đây chương trình trên PC viết = VB6, cụ thể là dùng Textbox để nhập cái minh cần truyền, ta sẽ nhập nguyên cả 1 chuổi mình muốn, rồi sao đó mới bấm vào nút "Truyen" thì tại PIC sẽ không thể nhận ra có ngắt RDA được --> mảng sẽ ko bao giờ có ji cả. Nếu được, bạn send cho mình cả 2 chương trình trong PIC6F877A và chương trình truyền = VB6 trên PC để mình test thử coi nhận được ko.
Nin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-03-2009, 01:49 PM   #4
manhha2799
Đệ tử 5 túi
 
Tham gia ngày: Apr 2007
Bài gửi: 121
:
Send a message via Yahoo to manhha2799
Chương trình trên mình gửi dữ liệu từ phần mềm terminal. Mình đã nhận được một chuỗi theo ý muốn. Tuy nhiên theo code trên của mình thì phải có dấu "/" ở cuối chuỗi. Thì nó mới nhận biết được đã kết thúc chuỗi.
Còn VB mình mới học, cũng đang làm ở nhà đây, khi nào làm xong mình sẽ gửi code lên tham khảo.
__________________
Bảng ledsigns chất lượng cao...
http://www.ledviet.info - manhha2700@yahoo.com
Đt:0949299699
manhha2799 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-03-2009, 07:14 PM   #5
Nin
Đệ tử 1 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 16
:
ok, mong sẽ hịc hỏi tit61 . Pro nào vô gạ bài giúp.
Nin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-03-2009, 11:14 AM   #6
Nin
Đệ tử 1 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 16
:
Anh nào có trình VB6 (PC) với CCS cho pic 16F877a về vấn đề này ko, cho xin với. muốn truyền chuỗi số cho pic góc của động cơ bước cần quay thôi.
Nin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-02-2010, 10:40 PM   #7
nxl89
Nhập môn đệ tử
 
Tham gia ngày: Oct 2009
Bài gửi: 8
:
bộ tất cả bó tay rui sao vậy ta ,ko ai có khả năng giải quyết bài này sao?
nxl89 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à 07:56 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