|
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 |
18-04-2007, 07:43 PM | #11 |
Nhập môn đệ tử
Tham gia ngày: Aug 2006
Bài gửi: 4
: |
Thắc mắc
Anh Bắc cho em hỏi tí:
Sao em viết chương trình giao tiếp cổng Com giữa Pic 16f877A với máy tính bằng chương trình Matlab của anh đó. Chương trình trên Pic như sau: Code: Code:
#include <16F877a.h> #include <stdlib.h> #fuses HS,NOWDT,NOPROTECT,NOLVP,PUT #use delay(clock=20000000) #use rs232(BAUD=9600,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7) #use fast_io(B) #byte PORTA=0x05 #byte PORTB=0x06 #byte PORTC=0x07 #byte PORTD=0x08 int m,d,a,i; char h; void main() { a=0; i=0; h=getc(); if (h='3') { for (d=1;d<3;d++) { for (i=48;i<56;i++) { putc(i); // ở đây nếu em có delay_ms(100) thì kết quả cũng như ở phía dưới } } } if (h>null) { putc('r'); } } Nếu em tự viết bằng các dòng lệnh trên Command Window đó anh: Code: Code:
s = serial('COM1','BaudRate',9600); >> fopen(s) >> fprintf(s,'3') >> fscanf(s) Warning: A timeout occurred before the Terminator was reached. ans = 012345670123456 Theo như em hiểu thì timeout là khoảng thời gian tối đa cho việc đọc và ghi dữ liệu qua cổng Com phải ko anh? Mặc định của nó là 10s 10 s này là cho việc truyền mỗi ký tự hay sao vậy anh ? em đã thử khai báo thay đổi timeout như sau Code: Code:
>> s.timeout=0.1 % tức là 100 ms hay cho nó lớn hơn >> s.timeout=50 % tức là 50s nhưng sao nó vẫn hiện thông báo :Warning: A timeout occurred before the Terminator was reached À ở đây em muốn hỏi thêm về anh là em định dùng chương trình này để mở rộng cho điều khiển động cơ bằng PID. Em sẽ dùng Matlab nhập 3 thông số xuống , sau đó em đọc tín hiệu hồi tiếp từ encoder vể qua Com và vẽ lên đồ thị. Như vậy thì em phải có 1 biến thời gian phải không anh? Giả sử em cho cứ sau 100 ms ( có lớn quá không anh?) PIC xuất tín hiệu số encoder đọc được qua cổng Com , rồi em theo đoạn code của anh thêm vào: Code: Code:
function BytesAvailable_Callback(obj,event) global hand; ind = fscanf(obj); % Edit code here - Ngo Hai Bac set(handles.edit_RX,'String',ind); set(handles.dulieu,'string','co du lieu'); % em viết thêm: y =str2double(ind); axes(handles.dothi); x = 0:.1:100; plot(x,y,'k','LineWidth',2);grid rồi em vẽ đồ thị trên GUI.Nhưng mà em nghĩ biến x ở đây phải là 1 biến theo thời gian thực phải không anh? Vậy em làm sao khai báo biến x theo thời gian thực vậy anh? Ạnh chỉ em với (^_^) |
|
|
Similar Threads | ||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
Giao tiếp RS232 trên PC | ngohaibac | Giao tiếp cổng COM và LPT | 188 | 23-01-2023 02:18 AM |
giao tiep qua PCI de doc AD bằng Matlab | hanhluckyly | Matlab-Simulink & Labview & 20-Sim | 22 | 06-06-2011 09:55 PM |
Communicate between PC and PIC via RS232 standard using Matlab (GUI, IO). | ngohaibac | English forum on PICs | 3 | 02-06-2011 06:46 PM |
cần mua bộ thu GPS có giao tiếp RS232 | kienvq | Tìm mua sản phẩm | 15 | 17-03-2011 11:25 PM |
Help! Dùng C để giao tiếp RS232 | dandiennang | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 6 | 15-03-2009 06:41 PM |