急求!如何用C语言实现两机通讯?

作者&投稿:刘元 (若有异议请与网页底部的电邮联系)
C51单片机多机通信C语言~

单片机a,b,c. a为主机,bc为从机。a上有一个外部中断0输入,按第一次a的两个LED亮500ms,再按一下,b机的两个LED灯亮500ms,第三次按下c机的两个LED灯亮500ms,然后周而复始。两个数码管分别显示0/1/2, 和abc(bc由从机反馈)
/*
主从通信基本步骤:
1. 主机从机初始化为方式2或者3,从机都置SM2=1,允许中断
2. 主机置TB8=1,发送从机地址
3. 所有从机均接收主机发送要寻址的从机地址
4. 被寻址的从机确认地址后,置本机SM2=0,向主机返回地址,供主机核对
5. 核对无误后,主机向被寻址的从机发送命令,通知从机接受或者发送数据。
6. 本次通信结束后,主从机重置SM2=1,主机可再对其他从机寻址
*/
******************************************************************
主机a:
******************************************************************
#include
#define uchar unsigned char
#define uint unsigned int
uchar leddata[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40,0x00};
uchar Mode;
sbit P10 = P1^0;
sbit P13 = P1^3;
sbit P17 = P1^7;
sbit P20 = P2^0;
sbit P21 = P2^1;
void UART_init()
{

TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
SCON = 0xd0;
ES = 1;
EX0 = 1;
IT0 = 1; //INT0下跳触发
EA = 1;
TI = 0;
}
void DelayMs(int ms)
{
uchar i;
while(ms--)
for(i=0; i<120; i++);
}
void putc_to_SerialPort(uchar c)
{
SBUF = c;
while(TI == 0);
TI = 0;
}
void MasterControl(unsigned char Addr, unsigned char Comd)
{
TB8 = 1;
putc_to_SerialPort(Addr);
DelayMs(50);
TB8 = 0;
putc_to_SerialPort(Comd);
DelayMs(50);
}
Ex0_int(void) interrupt 0
{
P0 = leddata[Mode];
P20 = 0;
if(Mode == 0)
{
P2 = leddata[10];
P10 = 0;
P13 = 0;
DelayMs(500);
P10 = 1;
P13 = 1;
// MasterControl('b','C');
// MasterControl('c','C');
}
else if(Mode == 1)
{
P10 = 1;
P13 = 1;
MasterControl('b','O');
// MasterControl('c','C');
}
else if(Mode == 2)
{
P10 = 1;
P13 = 1;
// MasterControl('b','C');
MasterControl('c','O');
}
Mode = (Mode + 1) % 3;
}
com_int(void) interrupt 4
{
if(RI)
{
RI = 0;
if(SBUF == 'b')
{
P2 = leddata[11];
}
if(SBUF == 'c')
{
P2 = leddata[12];
}
}
}
void main(void)
{
P0 = 0x00;
P1 = 0xff;
P2 = 0x00;
UART_init();
Mode = 0;
while(1);
}
******************************************************************
从机b:
******************************************************************
#include
#define uchar unsigned char
uchar RecData;
sbit P10 = P1^0;
sbit P13 = P1^3;
void UART_init()
{
TMOD = 0x21;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
SCON = 0xf0;
ES = 1;
PS = 1;
EA = 1;
}
void DelayMs(int ms)
{
uchar i;
while(ms--)
for(i=0; i<120; i++);
}
void putc_to_SerialPort(uchar c)
{
SBUF = c;
while(TI == 0);
TI = 0;
}
com_int(void) interrupt 4
{
if(RI)
{
RecData = SBUF;
RI = 0;
if(RB8 == 1) //地址
{
if(RecData == 'b') //是自己的地址,置SM2=0,准备接受数据
{
SM2 = 0;
putc_to_SerialPort('b');
}
else //不是自己的地址
{
SM2 = 1;
}
}
if(RB8 == 0) //数据
{
if(RecData=='O')
{
P10 = 0;
P13 = 0;
DelayMs(500);
P10 = 1;
P13 = 1;

}
if(RecData=='C')
{
P10 = 1;
P13 = 1;
}
SM2 = 1;
}
}
}
void main(void)
{
P0 = 0xff;
P1 = 0xff;
UART_init();
while(1);
}
******************************************************************
从机c:
******************************************************************
#include
#define uchar unsigned char
uchar RecData;
sbit P10 = P1^0;
sbit P13 = P1^3;
void UART_init()
{
TMOD = 0x21;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
SCON = 0xf0;
ES = 1;
PS = 1;
EA = 1;
}
void DelayMs(int ms)
{
uchar i;
while(ms--)
for(i=0; i<120; i++);
}
void putc_to_SerialPort(uchar c)
{
SBUF = c;
while(TI == 0);
TI = 0;
}
com_int(void) interrupt 4
{
if(RI)
{
RecData = SBUF;
RI = 0;
if(RB8 == 1) //地址
{
if(RecData == 'c') //是自己的地址,置SM2=0,准备接受数据
{
SM2 = 0;
putc_to_SerialPort('c');
}
else //不是自己的地址
{
SM2 = 1;
}
}
if(RB8 == 0) //数据
{
if(RecData=='O')
{
P10 = 0;
P13 = 0;
DelayMs(500);
P10 = 1;
P13 = 1;
SM2 = 1;
}
if(RecData=='C')
{
P10 = 1;
P13 = 1;
SM2 = 1;

}
}
}
}
void main(void)
{
P0 = 0xff;
P1 = 0xff;
UART_init();
while(1);
}

用485通讯,或者用IO脚模拟I2C总线来实现。如果距离远必须485。
主机用轮询的方式与从机通讯,从机设为只能被动应答方式
通讯协议中必须有站号,给从机的站号必须是不一样的。

这就是大概的思路,希望对你有帮助。

#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <time.h>

int com_adr[3];/* com_adr[1]=0x3f8;comadr[2]=0x2f8; */
int com_in[3]; /* com_in[1]=0x0c;com_in[2]=0x0b; */
int com_n; /* 指向 要打开的com口?*/
FILE *fp; /* 文件指针 */
char filename[20]; /* 用于输入文件名 */
char open_kind[3]; /* 文件打开保存方式 */
char send_kind;
char status; /* 程序当前所处的状态: */
/* 0->可以接收字符和文件请求 */
/* 1->正在接收数据并且保存文件 */
/* 3->正在发送文件 */
char choice; /* 用于各种选择 */
void interrupt(*com_save)();/* 保存中断服务程序入口 */
long filesize,dealed,base,getnum,start;
int minute,second,minu,seco,i,j;
char mi,se;

void OpenInt()
{
outportb(com_adr[com_n]+0x00f9,0x01);
if(com_n==1)
outportb(0x21,inportb(0x21)&0xef);
else
outportb(0x21,inportb(0x21)&0xf7);
}

void CloseInt()
{
outportb(com_adr[com_n]+0x00f9,0x00);
if(com_n==1)
outportb(0x21,inportb(0x21)|0x10);
else
outportb(0x21,inportb(0x21)|0x8);
}

void DealAsk(char c)
{
CloseInt();
if(c==1)
{ printf("\n\n Received Request Of Text File. 1,Accept 2,Refuse ");
strcpy(open_kind,"a");
}
else
{ printf("\n\n Received Request Of Binary File. 1,Accept 2,Refuse ");
strcpy(open_kind,"ab");
}
choice=0;
while (choice<'1'||choice>'2')
{
asm mov ah,8
asm int 21h
asm mov choice,al
}
putchar(choice);
switch(choice)
{
case '1': printf("\n\nInput The File Name:");
scanf("%s",filename);
while((fp=fopen(filename,"r")))
{
printf("\nFile %s Aready Exist! Please Retype it:",filename);
fclose(fp);
scanf("%s",filename);
}
outportb(com_adr[com_n]+0x00f8,3);
printf("\nStart To Receive File ......\n\n");
status=1;
fp=fopen(filename,open_kind);
break;
case '2': outportb(com_adr[com_n]+0x00f8,4);
status=0;
printf("\n\n Request Has Been Refused!\n");
break;
}
while(inportb(com_adr[com_n]+0xfd)&0x01)
inportb(com_adr[com_n]+0xf8);
OpenInt();
}

void interrupt service()
{ unsigned char c;
c=inportb(com_adr[com_n]+0xf8);
if(status==0)
{
if(c==1||c==2)
{DealAsk(c);}
else
{
if(choice==0){printf("\n\n");choice=10;}
printf("Received: ");
printf("%c",c);
while(inportb(com_adr[com_n]+0xfd)&0x01)
printf("%c",inportb(com_adr[com_n]+0xf8));
putchar('\n');
}
}
else if(status==1)
{
CloseInt();
i=0;
filesize=0;
base=1;
while(i<4)
{
getnum=c;
filesize=filesize+getnum*base;
base=base*256;
while(!(inportb(com_adr[com_n]+0xfd)&0x01));
c=inportb(com_adr[com_n]+0xf8);
i++;
}
dealed=0;
while(1)
{
if(inportb(com_adr[com_n]+0xfd)&0x01)
{
fputc(c,fp);
c=inportb(com_adr[com_n]+0xf8);
if(inportb(com_adr[com_n]+0xfd)&0x1e)
{
printf("\n\nSomething Error ocured! Transfers Fail......");
getch();
exit(1);
}
dealed++;
printf("\r%3.2f % ",(100.0*dealed)/filesize);
for(j=0;j<70.0*dealed/filesize;j++)
printf("%c",254);
}
if(dealed>=filesize) break;
}
mi=inportb(com_adr[com_n]+0xf8);
se=inportb(com_adr[com_n]+0xf8);
minu=mi;
seco=se;
printf("\nReceive File Finish!\n\n");
printf("File Size is %ld Byte. %d Seconds Used. ",filesize,minu*60+seco);
if(minu==0&&seco==0)
printf(" File is too small!\n\n");
else
printf("Transfers Speed is %f KB/S\n\n",filesize/(1024.0*(minu*60+seco)));
fclose(fp);
status=0;
OpenInt();
}
else if(status==2)
{
if(c==3)
{
if(send_kind==1)
{ filesize=0;
fgetc(fp);
while(!feof(fp))
{ filesize++;
fgetc(fp);
}
}
else if(send_kind==2)
{
fseek(fp,0L,2);
filesize=ftell(fp);
}
dealed=filesize;
i=4;
while(i)
{
c=dealed;
outportb(com_adr[com_n]+0x00f8,c);
dealed=(dealed-c)/256;
i--;
}
fseek(fp,0L,0);
dealed=0;
printf("\n\nStart To Send File ......\n\n");
asm mov ah,2ch
asm int 21h
asm mov mi,cl
asm mov se,dh
minute=mi;
second=se;
while(!feof(fp))
{
printf("\r%3.2f % ",(100.0*dealed)/filesize);
for(j=0;j<70.0*dealed/filesize;j++)
printf("%c",254);
while(!(inportb(com_adr[com_n]+0xfd)&0x20));
outportb(com_adr[com_n]+0x00f8,fgetc(fp));
dealed++;
}
asm mov ah,2ch
asm int 21h
asm mov mi,cl
asm mov se,dh
minu=mi;
seco=se;
mi=minu-minute;
if(mi<0)mi=60+mi;
se=seco-second;
minu=mi;
seco=se;
outportb(com_adr[com_n]+0x00f8,mi);
outportb(com_adr[com_n]+0x00f8,se);
printf("\nSend File Finish!\n\n");
printf("File Size is %ld Byte. %d Seconds Used. ",filesize,minu*60+seco);
if(minu==0&&seco==0)
printf(" File is too small!\n\n");
else
printf("Transfers Speed is %f KB/S\n\n",filesize/(1024.0*(minu*60+seco)));
printf("Press Any Key To Continue......");
}
else if(c==4)
{
printf("\n\nRequest Was Refuseed !\n\nPress Any Key To Continue......");
}
else
{
printf("\n\nSomething error happened The Other Side!\n\nPress Any Key To Continue......");
}
status=0;
}
outportb(0x20,0x20);/*保留中断服务寄存器,以响应下一个中断*/
}

void OpenCom(int n)
{
int out_data=0x0c;
com_save=getvect(com_in[n]);
OpenInt();
printf("\n\nChoose The Baud Rate :\t");
printf("1, 9600 2, 4800 3, 57600 4, 115200 ");
choice=0;
while (choice<'1'||choice>'4')
{
asm mov ah,8
asm int 21h
asm mov choice,al
}
putchar(choice);
switch(choice)
{
case '1':out_data=0x0c;break;
case '2':out_data=0x18;break;
case '3':out_data=0x02;break;
case '4':out_data=0x01;break;
}
outportb(com_adr[n]+0xfb,0x80);
outportb(com_adr[n]+0xf8,out_data);
outportb(com_adr[n]+0xf9,0);

printf("\n\nChoose The Data Bit :\t");
printf("1, 8Bit 2, 7Bit 3, 6Bit 4, 5Bit ");
choice=0;
while (choice<'1'||choice>'4')
{
asm mov ah,8
asm int 21h
asm mov choice,al
}
putchar(choice);
switch(choice)
{
case '4':out_data=12;break;
case '3':out_data=13;break;
case '2':out_data=14;break;
case '1':out_data=15;break;
}
printf("\n\nChoose The Stop Bit :\t");
printf("1, 1Bit 2, 1.5 Or 2Bit ");
choice=0;
while (choice<'1'||choice>'2')
{
asm mov ah,8
asm int 21h
asm mov choice,al
}
putchar(choice);
switch(choice)
{
case '1':out_data&=0xfb;break;
case '2':out_data|=0x04;break;
}

printf("\n\nChoose Parity Check :\t");
printf("1.None 2, Odd 3,Event ");
choice=0;
while (choice<'1'||choice>'3')
{
asm mov ah,8
asm int 21h
asm mov choice,al
}
putchar(choice);
switch(choice)
{
case '1':out_data&=0xf7;break;
case '2':out_data&=0xef;break;
case '3':out_data|=0x10;break;
}
outportb(com_adr[n]+0xfb,out_data);
outportb(com_adr[n]+0xfc,0x0b);
disable();
setvect(com_in[n],service);
enable();
printf("\n\nSettings Finished\n\n");
system("pause");
}

void Get_Key()
{
check:
outportb(com_adr[com_n]+0x00f9,0x01);
outportb(com_adr[com_n]+0x00f9,0x00);
sleep(1);
asm mov ah,1
asm int 16h
asm jz check;
}

void SendChar()
{
char c;
fflush(stdin);
clrscr();
printf("\n* Note: To Return Please Press Enter Only *\n\n");
Get_Key();
scanf("%c",&c);
while(c!='\n')
{
outportb(com_adr[com_n]+0x00f9,0x01);
outportb(com_adr[com_n]+0x00f9,0x00);
do
{
outportb(com_adr[com_n]+0xf8,c);
scanf("%c",&c);
}
while(c!='\n');
Get_Key();
scanf("%c",&c);
}
}

void SendFile()
{
printf("\n\n 1,Send Text File 2,Send Binary File 3,Back ");
choice=0;
while (choice<'1'||choice>'3')
{
asm mov ah,8
asm int 21h
asm mov choice,al
}
putchar(choice);
switch(choice)
{
case '1': strcpy(open_kind,"r");
send_kind=1;
break;
case '2': strcpy(open_kind,"rb");
send_kind=2;
break;
case '3': return;
}
printf("\n\nInput The File Name:");
scanf("%s",filename);
while(!(fp=fopen(filename,open_kind)))
{
printf("\nCan not open file %s!! Please retype it:",filename);
scanf("%s",filename);
}
status=2;
outportb(com_adr[com_n]+0x00f8,send_kind);
printf("\nWaiting For The Agreement");
printf("\n\nPress Any Key To Ask Again......");
fflush(stdin);
while(status==2)
{
Get_Key();
getch();
if(status==2)
outportb(com_adr[com_n]+0x00f8,send_kind);
}
fclose(fp);
}

void CheckFile()
{
char c=0;
if(inportb(com_adr[com_n]+0xfd)&0x01)
{ c=inportb(com_adr[com_n]+0xf8);
if(c==2||c==1)
{DealAsk(c);
return;
}
}
printf("\n\nNo File Ask! Press Any Key To Return......");
Get_Key();
getch();
}

void main()
{
com_adr[1]=0x300;
com_adr[2]=0x200;
com_in[1]=0x0c;
com_in[2]=0x0b;
status=0;

while(1)
{
clrscr();
printf("\n");
for(i=0;i<80;i++)
printf("%c",42);
printf("\n\t\t Welcome To Turbo C Serial Comminucations \n\n");
for(i=0;i<80;i++)
printf("%c",42);
printf("\n\t1,Open Com 1\t2,Open Com 2\t 3,Exit\n\n");
printf("Choose Your Operation: ");
choice=0;
while (choice<'1'||choice>'3')
{
asm mov ah,8
asm int 21h
asm mov choice,al
}
putchar(choice);
if(choice!='3')
{
com_n=choice-'0';
OpenCom(com_n);
while(1)
{
clrscr();
for(i=0;i<80;i++)
printf("%c",29);
printf("\n\t\t\t\t\t\t\t Note: Com[%d] Opened",com_n);
printf("\n 1, Chat 2, Send File 3,Check File 4, Back\n",com_n);
printf("\n\nChoose Your Operation: ");
choice=0;
Get_Key();
choice=getch();
putchar(choice);
if(choice=='1') SendChar();
else if(choice=='2') SendFile();
else if(choice=='3') CheckFile();
else if(choice=='4') break;
}
}
else break;
}
setvect(com_in[com_n],com_save);
}

使用Windows sockets

看一下SOCKET编程的相关教材。


c语言编程,如何求一个整数n的倍数?
假如整数n除以m,结果是无余数的整数,那么我们称m就是n的因子。 需要注意的是,唯有被除数,除数,商皆为整数,余数为零时,此关系才成立。反过来说,我们称n为m的倍数 。如果利用C语言求一个整数n的因子,可以从1开始到n,依次加1,如果它是n的的因子,则输出。具体的源码实现如下:#include <...

C语言编程求1!+2!+3!…
以下是用C语言编程求出1!+2!+3!+……+20!的值示例代码 include<stdio.h> int main(){ int i,j;long sum,k;sum=0;for(i=1;i<=20;i++){ k=1;for(j=1;j<=i;j++){ k=k*j;} sum=sum+k;} printf("1+2!+3!+…+20!=%d",sum);} ...

怎样用C语言实现求a占b的百分比?
按照百分比的定义,要求a占b的百分比时,只需要a\/b*100即可。需要注意的是,百分比的结果为实数,需要用浮点数类型(float或double)来储存,当操作数a,b均为整型时,需要先转为浮点型再进行操作,否则会出错。以输入两个整型数a,b,求a占b的百分比并输出为例,给出参考代码如下:int a,b;float r...

c语言如何进行求和?
题主的求和问题,是可以循环语句和向量运算来实现的。这两种方法的实现过程如下:一、用循环语句来实现 1、首先对y初始化,即 y=0。2、其二使用for循环语句,求每次的 yi=1\/(2*n-1)*1\/3^(2*n-1) 的值。3、对y值累加,即 y=y+yi。二、用向量运算来实现 1、使用for循环语句,求每次的...

如何用C语言编写函数实现用递归法求Fibonacci数列前n项的值, n的值由...
设此所求的数列为:0,1,1,2,3,5,8,13,21,……(n=0,1,2,3,……)include<stdio.h> long Fibonacci(int n){ if(n==0||n==1)return (long)n;else return Fibonacci(n-1)+Fibonacci(n-2);} int main(){ int n;scanf("%d",&n);printf("F(%d)=%ld\\n",n,Fibonacci(n)...

c语言实现输入n个数并求平均值
3、因为这里要求我们使用指针来对我们输入的数字进行访问,所以我们要先给我们输入的每一个数字给予它的地址,便于我们进行访问。看下图。4、因为题目最后的结果是要求我们从键盘上输入5个整数,并且最后由计算机输出其平均值,所以在代码中我们必须含有sum=sum+*p;average=sum\/5;这两组代码。5、代码全部...

求用C语言循环程序实现1 123 12345 1234567 12345 123 1组成一个菱形...
include <stdio.h>#define LENGTH 4 \/\/数字最长的行数void main(){int i=0,j=0,k=LENGTH,l=0; \/\/k为第一行数字前的空格数,也是最多的空格for(i=0;i<2*LENGTH;i++) \/\/一共输出2*LENGTH-1行{if(i<=LENGTH) \/\/如果输入没有过一半{for(l=0;l<k;l++) \/\/输出数字前面...

用C语言编程,求0!=1的解释
第一个空填的内容是0,因为我们要求阶乘的相加,同时for循环中是通过一个变量来对阶乘进行存储的,所以说sum的值赋值为0,就可以实现记录阶乘的和。第二个空填的是“double item=1”,因为for循环中有一个item变量,但是在第二个空之前没有定义,所以说这里填的是变量的定义,并且必须赋值为1。第三...

用c语言求两个数的最大公约数
用c语言求两个数的最大公约数的回答如下:在C语言中,可以使用欧几里得算法(也称为辗转相除法)来求解两个数的最大公约数。该算法基于如下原理:两个数的最大公约数等于其中较小的数和两数的差的最大公约数。以下是用C语言实现求两个数的最大公约数的代码:include<stdio.h>intgcd(inta,intb){...

c语言如何实现输入三个数求平均的功能
include <stdio.h>void main(){float a,b,c,s;printf(“请输入上底下底高:”);scanf("%f,%f,%f",&a,&b,&c);s=(a+b)*c\/2;printf("%f\\n",s);}

方山县18732931581: 单片机双机通信,两个单片机的一方作为发送,另一方作为接收,分别调 -
宓贷活性: #include<reg51.h>#define uchar unsigned char uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void delay(uchar a) { uchar i; while(a--)for(i=0;i<120;i++); } main() { uchar i; TMOD=0x20; TH1=0...

方山县18732931581: C语言socket编程怎么实现2个客户端之间通信 -
宓贷活性: 两个单独的客户端是没法通信的,必须经过服务器.服务器和客户端连接过程如下:客户端:socket-->connect-->read/write 服务器:socket-->bind-->listen-->accept-->write/read 若要通讯必须要有服务器,只有在connect和accept建立好连接之后才能真正的通信.如果你是问编程的流程或者上述函数的意义和用法百度上一大堆.

方山县18732931581: 利用C语言写一个程序实现两个进程间进行管道通信 -
宓贷活性: #include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#define N 10#define MAX 100int child_read_pipe(int fd){ char buf[N]; int n = 0;while(1) { n = read(fd,buf,sizeof(buf)); buf[n] = '\0';printf("Read %d bytes : %s.\...

方山县18732931581: c语言实现单片机双机通讯 求帮助 这个程序错在哪里 -
宓贷活性: 应该用T1来做波特率发生器.SCON = 0x50; TCON = 0x20; TH1 = 0xfd; TL1 = 0xfd; TR1 = 1;

方山县18732931581: max485实现两单片机间的通信 -
宓贷活性: 两个单片机需要有RS232的通信口,在买两个RS232转RS485的通信模块就行了.如果想将RS485电路做到板子里,我有图.程序可按你的要求去写,简单.

方山县18732931581: 找大侠帮我用C语言写max232串口通信程序,可以实现单片机与PC机相互通信,还要有通信协议
宓贷活性: #include&lt;reg51.h&gt;#define uchar unsigned charuchar dat,flag;void uart_isr() interrupt 4{ if(RI) { RI=0; dat=SBUF; flag=1; } if(TI) { TI=0; }}main(){ TMOD=0x20; SCON=0x50; TH1=TL1=0xfd; TR1=1; ES=1; EA=1; flag=0; while(1) { if(flag) { SBUF=dat; flag=0; } }}

方山县18732931581: 各位大虾,本人新手,求助!!通过C语言,编辑一个通过一个服务器,实现3台计算机之间的通信的程序. -
宓贷活性: 用 Borland C++ Builder 吧 拖放几个 网络通讯用的 TCP/IP组件就能搞定 自带的Demo里有 聊天室原型程序 ,应该跟你这个要求差不多了.

方山县18732931581: linux下如何用tcp,c/s模式实现两台电脑之间通信? -
宓贷活性: 1. 建议lz使用socket套接字.这个方式可以很好的实现client/server模式,tcp和udp协议都可以选择.使用socket来实现两台电脑的进程间通信,要先理解一些函数,如socket,binder,listen,connect,recv,send等等... 2. lz可以上网搜索关键字“linux socket编程”,或追问我.

方山县18732931581: 求两块51单片机之间实现并行通信用C语言程序怎么写?
宓贷活性: 实际应用是不会这么做的,主要是浪费资源,包括硬件软件的.一般都用串口通讯.要实现并行通信也是可以的,可以给你一些方法,硬件连接 Px 并口(8个 IO口)+ INTx 外部中断+ 发送请求(2个IO口), 发送端: 把要发送 的数据 写入 并口,同时写入 发送请求(如低电平有效 加一些延时后置高电平)接收端: 产生 接收 外部中断,把Px 接收并口 写入0xff , 并读取 数据,也可以发送 返回数据 与发送端相同.

方山县18732931581: 求两片8051单片机的异步串行通信c语言程序(完整的),其中用到两片MAX232芯片转换电路 -
宓贷活性: 异步串行通性直接用到单片机的多机通信就可以了,把单片机的两个串口接在一起然后利用串口通过串口异步通信程序就可以实现了,如何还不明白再可以跟我要程序

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网