PDA

View Full Version : giao tiếp máy tính


nguyenquoctoan
10-11-2008, 02:35 PM
nhờ các cao thủ xem dùm em,giao tiếp với pic18 cổng com như sau,sai chỗ nào,sao chương trình kô chạy
#include<18f4550.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#device PIC184550*=16 ADC=10
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#include<stdlib.h>
#include<lcd_lib_4bit.c>
#byte porta = 0x80
#byte portb = 0x81
#byte portc = 0x82
#byte porte = 0x84
char buffer[64],tam[5];
int i,j,j1;
float x5,x10,x15,x20;
int x1,x2,x3,x4,x6,x7,x8,x9,x11,x12,x13,x14,x16,x17,x1 8,x19;
int c=1;
int k=0;

void getvalue()
{
gets(buffer);
c=0;
k=1;
}


void main()
{
set_tris_b(0);
set_tris_e(0);
LCD_init();
delay_us(10);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"nhan du lieu");
LCD_putcmd(0xc0);
delay_us(10);
printf(LCD_putchar,"hien thi mang ?");
delay_ms(1000);
while (1)
{

if(c==1)
{
getvalue();
}
if(k==1)
{
LCD_putcmd(0x01);
delay_us(10);
LCD_putcmd(0xc0);
delay_us(10);
printf(LCD_putchar,"da ta ok");
delay_ms(500);
j=0;j1=0;

for (i=1;i<64;++i)
{
if (buffer[i]!="A") //nue khac a
{
tam[j]=buffer[i];
j=j+1;
}
else
{
//tam[j]='\0';
if (j1==0) x1=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x1:%u",x1);
delay_ms(1000);
if (j1==1) x2=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x2:%u",x2);
delay_ms(1000);
if (j1==2) x3=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x3:%u",x3);
delay_ms(2000);
if (j1==3) x4=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x4:%u",x4);
delay_ms(2000);
if (j1==4) x5=atof(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x5:%f",x5);
delay_ms(2000);
if (j1==5) x6=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x6:%u",x6);
delay_ms(2000);
if (j1==6) x7=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x7:%u",x7);
delay_ms(2000);
if (j1==7) x8=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x8:%u",x8);
delay_ms(2000);
if (j1==8) x9=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
printf(LCD_putchar,"x9:%u",x9);
delay_ms(2000);
if (j1==9) x10=atof(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x10:%f",x10);
delay_ms(2000);
if (j1==10) x11=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x11:%u",x11);
delay_ms(2000);
if (j1==11) x12=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x12:%u",x12);
delay_ms(2000);
if (j1==12) x13=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x13:%u",x13);
delay_ms(2000);
if (j1==13) x14=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x14:%u",x14);
delay_ms(2000);
if (j1==14) x15=atof(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x15:%f",x15);
delay_ms(2000);
if (j1==15) x16=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x16:%u",x16);
delay_ms(2000);
if (j1==16) x17=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x17:%u",x17);
delay_ms(2000);
if (j1==17) x18=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x18:%u",x18);
delay_ms(2000);
if (j1==18) x19=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x19:%u",x19);
delay_ms(2000);
if (j1==19) x20=atof(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x20:%f",x20);
delay_ms(2000);
if (j1==20) break; //j1 xac dinh so chuoi
j1=j1+1;
j=0;
}

}

}

}
}
em đã test với mạch thật mà kô nhận được dữ liệu,...hic hic?

tungtot_vl
11-11-2008, 03:02 PM
nhờ các cao thủ xem dùm em,giao tiếp với pic18 cổng com như sau,sai chỗ nào,sao chương trình kô chạy
#include<18f4550.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#device PIC184550*=16 ADC=10
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#include<stdlib.h>
#include<lcd_lib_4bit.c>
#byte porta = 0x80
#byte portb = 0x81
#byte portc = 0x82
#byte porte = 0x84
char buffer[64],tam[5];
int i,j,j1;
float x5,x10,x15,x20;
int x1,x2,x3,x4,x6,x7,x8,x9,x11,x12,x13,x14,x16,x17,x1 8,x19;
int c=1;
int k=0;

void getvalue()
{
gets(buffer);
c=0;
k=1;
}


void main()
{
set_tris_b(0);
set_tris_e(0);
LCD_init();
delay_us(10);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"nhan du lieu");
LCD_putcmd(0xc0);
delay_us(10);
printf(LCD_putchar,"hien thi mang ?");
delay_ms(1000);
while (1)
{

if(c==1)
{
getvalue();
}
if(k==1)
{
LCD_putcmd(0x01);
delay_us(10);
LCD_putcmd(0xc0);
delay_us(10);
printf(LCD_putchar,"da ta ok");
delay_ms(500);
j=0;j1=0;

for (i=1;i<64;++i)
{
if (buffer[i]!="A") //nue khac a
{
tam[j]=buffer[i];
j=j+1;
}
else
{
//tam[j]='\0';
if (j1==0) x1=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x1:%u",x1);
delay_ms(1000);
if (j1==1) x2=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x2:%u",x2);
delay_ms(1000);
if (j1==2) x3=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x3:%u",x3);
delay_ms(2000);
if (j1==3) x4=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x4:%u",x4);
delay_ms(2000);
if (j1==4) x5=atof(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x5:%f",x5);
delay_ms(2000);
if (j1==5) x6=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x6:%u",x6);
delay_ms(2000);
if (j1==6) x7=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x7:%u",x7);
delay_ms(2000);
if (j1==7) x8=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x8:%u",x8);
delay_ms(2000);
if (j1==8) x9=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
printf(LCD_putchar,"x9:%u",x9);
delay_ms(2000);
if (j1==9) x10=atof(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x10:%f",x10);
delay_ms(2000);
if (j1==10) x11=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x11:%u",x11);
delay_ms(2000);
if (j1==11) x12=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x12:%u",x12);
delay_ms(2000);
if (j1==12) x13=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x13:%u",x13);
delay_ms(2000);
if (j1==13) x14=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x14:%u",x14);
delay_ms(2000);
if (j1==14) x15=atof(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x15:%f",x15);
delay_ms(2000);
if (j1==15) x16=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x16:%u",x16);
delay_ms(2000);
if (j1==16) x17=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x17:%u",x17);
delay_ms(2000);
if (j1==17) x18=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x18:%u",x18);
delay_ms(2000);
if (j1==18) x19=atol(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x19:%u",x19);
delay_ms(2000);
if (j1==19) x20=atof(tam);
LCD_putcmd(0x01);
LCD_putcmd(0x80);
delay_us(10);
printf(LCD_putchar,"x20:%f",x20);
delay_ms(2000);
if (j1==20) break; //j1 xac dinh so chuoi
j1=j1+1;
j=0;
}

}

}

}
}
em đã test với mạch thật mà kô nhận được dữ liệu,...hic hic?

chắc là bạn chưa dùng 19f4550 bao giờ phải không.

#include<18f4550.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#device PIC184550*=16 ADC=10
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#include<stdlib.h>
#include<lcd_lib_4bit.c>
#byte porta = 0x80
#byte portb = 0x81
#byte portc = 0x82
#byte porte = 0x84
xem lại phần khai báo trên nhất là #fuses NOWDT,PUT,HS,NOPROTECT
phần khai báo fuses bạn nên xem lại trong file 18f4550.h của ccs.
PIC 18f không dùng porta = value mà là output_a(value);

nguyenquoctoan
11-11-2008, 06:34 PM
cảm ơn sư huynh đã chỉ giáo,đệ đã tìm ra được lỗi sai và sữa rồi chạy ok,..
thanks alot

nbb3i
16-11-2008, 01:59 PM
Bạn cho mình xin file lcd_lib_4bit.c được ko?

nguyenquoctoan
16-11-2008, 08:03 PM
ok kô thành vấn đề

ketxanh
29-11-2008, 11:41 AM
cảm ơn sư huynh đã chỉ giáo,đệ đã tìm ra được lỗi sai và sữa rồi chạy ok,..
thanks alot

minh cũng đang muốn làm giao tiếp máy tính với 18f4550. bạn cỏ thể post bài của bạn lên cho mọi người tham khảo không? Đặc biệt là mình, đang rất cần tài liệu tham khảo.

nhok12
29-11-2008, 04:20 PM
mình khônh hiểu điều các bạn nói . Thông cảm có thể giải thích cho mình hiểu

nguyenquoctoan
30-11-2008, 11:01 PM
giao tiếp máy tính với 18f4550 cũng giống như 16f877a bạn đã làm với con này chưa,bạn có thắc mắc ji,cứ hỏi mọi người ở đây có thể giúp bạn,con code thì đơn giản lắm

ketxanh
02-12-2008, 09:24 AM
Nói thiệt là mấy vụ giao tiếp máy tình minh không thạo mấy. Tại mình chưa làm giao tiếp máy tính bao giờ hết. Bạn thông cảm. Bạn có thể cho mình it ý tưởng về giao tiếp máy tính không. Thanks a lot!

nguyenquoctoan
02-12-2008, 03:50 PM
giao tiếp máy tính : truyền nhận giữa máy tính và vi điều khiển chủ yếu qua 3 cổng :com,lpt,usb, bạn nên làm cổng com trước vì loại này đơn giản
- trước tiên bạn cần có phần cứng: mạch vi điều khiển pic và phần giao tiếp (max 232 và 4 cái tụ)
- dùng c,vb, hay matlab có hỗ trợ oncom giao tiếp, dùng các chương trình này tao giao diện truyền và nhận dữ liệu,...
bạn nên thực hiện từng bước vướng mắc chỗ nào thì post bài lên đây mọi người sẽ giúp đỡ bạn

congnamppk
24-01-2009, 09:19 PM
các huynh có tai liệu viết phần mềm truyền dữ liệu bằng delphi7 ra cổng COM ko, đệ đang mày mò mai mà không ra,mong các huynh giúp. đệ đã tìm nhưng lại phải sử dụng thư viện dll có sẵn nên nhiều chỗ chưa hiểu lắm.