|
Tài trợ cho PIC Vietnam |
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... |
|
Ðiều Chỉnh | Xếp Bài |
12-11-2011, 07:01 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Nov 2011
Bài gửi: 2
: |
Hỏi về Giao tiếp 16f877a với VB truyền số 16bit
đây là bài tập thực hành em đang làm:
Nội dung là truyền số 16bit từ VB xuống pic rồi từ pic nhân số 16bit đó cho 2, sau đó truyền số đó lên hiển thị trên giao diện VB , truyền theo từng byte. vấn đề là em chuơng trình VB mình test truyền nhận thì đúng ( nối chân 2-3 của cổng com) ,mô phỏng trên proteus với chuơng trình khác đúng, nhưng với chuơng trình cho pic sau thì kết quả truyền tín hiệu lên hiển thị sai so với yêu cầu. ví dụ: em truyền số 0 thì kết quả ra tín hiệu nhận là 32, truyền số 256 kết quả tín hiệu nhận là 288;... 512-->544. vậy nhờ các bác kiểm tra xem chuơng trình sau cho pic có lỗi chổ nào, phép toán đã đúng chưa, nội dung chuơng trình thì thầy đã hướng dẫn chung rồi nhưng về nhà làm lại không xong, do pic và c em mới học nên chưa hiểu nhiều ! mong các bác giúp đỡ ! đây là chuơng trình viết cho pic và file vb cùng file proteus mô phỏng. #include <16f877a.h> #fuses NOWDT,HS,NOPROTECT #use delay(clock=20000000) #use rs232(baud=9600,parity=n,xmit=PIN_C6,rcv=PIN_C7) char data[3]; int8 i; int8 high; int8 low; char datain; char data2; int8 a; int8 b; #int_RDA void interrupt_RDA() { for(i=0;i<3;i++) { data[i]=getc(); } if(data[2]=0xff) { high=data[0]; low=data[1]; datain=(high*256+low)*2; a=datain/256; b=datain%256; printf("%c %c",a,b); } } void main() { enable_interrupts(GLOBAL); enable_interrupts(int_RDA); delay_us(10); while(true) { } } p/s: sorry mod vì em ko thấy thẻ code đâu ! thay đổi nội dung bởi: toanho, 12-11-2011 lúc 07:08 PM. Lý do: Ðính Kèm file |
|
|