导航:首页 > 操作系统 > 单片机双机通讯能传数组吗

单片机双机通讯能传数组吗

发布时间:2023-05-11 23:47:50

单片机串口发送数组,程序如下,请帮忙修改!!!

二进制数组不像字符串一样有结束标志,不能直接用发送数组的函数发送,

作如下修改就可以了(仿真输出结果见代码后面的图):

#include<reg52.h>//注意:11.0592M晶振波特率9600
sbitkey1=P2^0;
sbitkey2=P2^1;
unsignedcharcodeJ50_2[]={0X00,0X00,0XFF,0X09,0X09,0XFF,0XFF,0X4B,0X22,0X01,0X03,0X01,0X0A,0X0A,0X7C,0X00};//如何发送出去
unsignedcharcodeJ50_3[]={0X00,0X00,0XFF,0X09,0X09,0XFF,0XFF,0XAC,0X22,0X02,0X03,0X01,0X0A,0X0A,0X1A,0X00};//如何发送出去
unsignedcharcodeString1[]={"Test1Pass! "};
unsignedcharcodeString2[]={"Test2Pass! "};
/**************************************************************
函数功能:延时若干毫秒
**************************************************************/
voiddelayms(unsignedintms)
{
unsignedinti;
while(ms--)
for(i=0;i<600;i++);
}
/*****************************************************
函数功能:向PC发送一个字节数据
***************************************************/
voidSendByte(unsignedchardat)
{
SBUF=dat;
while(TI==0);
TI=0;
}
/*****************************************************
函数功能:向PC发字符串
***************************************************/
voidSendStr(unsignedchar*str)//第2种发送字符串函数
{
while(*str!=0)
{
SendByte(*str);
str++;
delayms(1);//延时Nms
}
}
/*****************************************************
函数功能:向串口发n个字节数据
***************************************************/
voidSendnBytes(unsignedchar*str,unsignedintn)//发送n个字节函数
{
while(n--!=0)
{
SendByte(*str);
str++;
delayms(1);//延时Nms
}
}
/*****************************************************
函数功能:串口初始化
***************************************************/
voidUartInit(void)
{
SCON=0x50;//串口工作方式1,8位UART,波特率可变
TH2=0xFF;
TL2=0xFD;//波特率:115200晶振=11.0592MHz
RCAP2H=0xFF;
RCAP2L=0xFD;//16位自动再装入值
TCLK=1;
RCLK=1;
C_T2=0;
EXEN2=0;//波特率发生器工作方式
TR2=1;//定时器2开始
}
/*****************************************************
函数功能:主函数
***************************************************/
voidmain(void)
{
UartInit();
SendStr("Howareyou! ");
while(1)
{
//SendStr(J50_2);//发送不成功
SendnBytes(J50_2,sizeof(J50_2));//发送成功
if(key1==0)
{
P1=0xFE;
SendStr(String1);//发送数据
delayms(10);//10ms发送一次数据
P1=0XFF;
delayms(10);
}
//SendStr(J50_3);//发送不成功
SendnBytes(J50_3,sizeof(J50_3));//发送成功
if(key2==0)
{
P1=0xFD;
SendStr(String2);//发送数据
delayms(10);//10ms发送一次数据
P1=0XFF;
delayms(10);
}
}
}

⑵ 两个单片机经串口通信是可以传送整型类型的数据吗

串口数据有1位起始位友丛,7位或8位数据位,1位或2位停止位,然后是奇偶校验位。
所好宽樱以一个串口数据最多只能是一个char型
想要传整型的,巧衫只能把整型拆成4个char型,一个一个传。

⑶ 您好请问一下,两个单片机互相传数据的程序怎么写

两个单片机互相传数据,其实很简单的 就是两个单片机的串口通信,当然需要一个串口通信的协议,如指令码、数据长度、数据等等,就是什么指令需要怎么操作、操作数据是什么。如这是两个单片机简单通信操作的仿真实例可以作为参考。

#include <reg52.h> // 单片机1

#define uchar unsigned char

#include <stdio.h>

unsigned char* c;

sbit k0=P3^2;

sbit k1=P3^3;

sbit led1=P3^5;

uchar k;

bit y0,y1;

bit t,s;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c) //发送字节到PC

{

TI=0;

SBUF = c;

while(!TI);

TI=0;

}

void SendString(char *st) //发送字符串到PC

{

while(*st)

{

SendOneChar(*st++);

}

}

void main()

{

SCON = 0x50; //SCON: mode 1, 8-bit UART, enable rcvr

TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload

PCON = 0x80; // 数据位8、停止位1。效验位无 (11.0592M)

TH1 = 0xF4; //TH1: reload value for [email protected]

TR1 = 1; //启动定时器1

ES = 1; //允许串口中断位

EA = 1; //允许总中断位

c=0;

s=1;

k=0;

P1 =~table[k];

while(1)

{

if(k0==0 && y0==0)

{

y0=1;

c = "az";

SendString(c); //发送字符串

}

if(k0==1 ) { y0=0; }

if(k1==0 && y1==0)

{

y1=1;

c = "as";

SendString(c); //发送字符串

}

if(k1==1 ) { y1=0; }

// for(i = 0; i < 4000; i++); //延迟一小段时间

}

}

void chuankou(void) interrupt 4

{

if(RI==1)

{

RI = 0;

if(t==1)

{

if(SBUF=='z') { k++;led1=~led1; }

s=1; t=0;

if(k==10) { k=0;}

P1 =~table[k];

}

if(SBUF=='a' && s==1) { t=1;s=0;}

}

}

------------------

#include <reg51.h> // 单片机2

#define uchar unsigned char

unsigned char* c;

sbit led1=P3^2; // 接收 az , P.2 输出低电平, P3.3 输出高电平。

sbit led2=P3^3; // 接收 aa , P.2 输出高电平, P3.3 输出低电平。

sbit k0=P3^5;

bit y0,t,s;

uchar k;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c) //发送字节到PC

{

TI=0;

SBUF = c;

while(!TI);

TI=0;

}

void SendString(char *st) //发送字符串到PC

{

while(*st)

{

SendOneChar(*st++);

}

}

void main (void)

{

SCON = 0x50; // REN=1允许串行接受状态,串口工作模式1

TMOD = 0x21; // 定时器工作方式2

PCON = 0x80; // 数据位8、停止位1。效验位无 (11.0592M)

TH1 = 0xF4; // TH1 = 0xFD; 波特率 2400

TH0=(65536-54253)/256; // 50 mS

TL0=(65536-54253)%256;

TR1 = 1;

ES = 1; // 开串口中断

EA = 1; // 开总中断

// ET0=1;

// TR0=1;

s=1;

k=0;

P1 =~table[k];

while(1)

{

if(k0==0 && y0==0)

{

y0=1;

c = "az";

SendString(c); //发送字符串

}

if(k0==1 ) { y0=0; }

}

}

void chuankou(void) interrupt 4

{

if(RI==1)

{

RI = 0;

if(t==1)

{

if(SBUF=='z') {led1=0;led2=1; k++; }

if(SBUF=='s') {led1=1;led2=0; k--; }

s=1; t=0;

if(k==10) { k=0;}

if(k==255) { k=9; }

P1 =~table[k];

}

if(SBUF=='a' && s==1) { t=1;s=0;}

}

}

void T0_time()interrupt 1

{

TH0=(65536-54253)/256; // 50 mS

TL0=(65536-54253)%256;

k++;

if(k==10) // 这里修改时间

{

k=0;

led1=1;

led2=1;

}

}

⑷ 单片机串口分别三次向VB上位机发送数组数据

第一,你要解决数据是否同步的问题。电脑的频率比单片机的时钟频率快很多,所以串行通信选择同步传输。当单片机发送完数组的第一个数据,上位机接收到这个数据后发送一个应答信号给单片机,然后单片机收到应答信号接着发送第二个数据给上位机,以此类推(应答信号的具体数值是你的通讯协议定义的)

第二,你的vb要添加MSComm控件,参考文章
http://wenku..com/linkurl=gaBSjBHSDk9b_THl3f1XYPtpRZgpIt6wczgHWXe_h_1q8ICdfPRP_Q-Fq4JLsbT_r_D8gzTRs_-sa9956OHq0XD9ahbc6sa4d-_omQVAlXG
控件MSComm的接收数据程序:
Private Sub MSComm1_OnComm()
Dim indata As Variant
Dim bte(0) As Byte
Select Case MSComm1.CommEvent
Case 2
indata = MSComm1.Input
bte(0) = AscB(indata)
If bte(0) = 数组的第一个数值
Then MSComm1.Output = 应答信号1
text1.text=bte(0)
end if
If bte(0) =数组的第二个数值 Then MSComm1.Output =应答信号2
text2.text=bte(0)
end if
If bte(0) =数组的第三个数值 Then MSComm1.Output =应答信号3
text3.text=bte(0)
end if
MSComm1.OutBufferCount = 0
End Select
End Sub

⑸ 单片机如何实现数组通信

这种单片机在实现数字通信的过程中,是可以直接在里面进行编程,然后就能够实现了。

⑹ 单片机串口通信 怎么把接收到的数据写入数组 求大神啊

你定义个变念旁量q=0; 你接收一次的数据仔悉橡a 放数组位陆亏sj[i] 然后再把q值加1. 重复 接数据 放数字 再加1

⑺ 单片机如何实现数组通信

单片机如何实现数组通信,首先呢,我们可以通过它里面通过连接器,然后连接一个单反片,通过单反片之后就可以直接连接通信了呀。

⑻ 单片机C语言数组传送,

加按键抬起握咐检测段丛纯就可以了郑渣
if(temp!=0xf0)
{
temp=P3;
while(temp!=0x0f)//按键不抬起,一直读P3
{
temp=P3;
temp=temp&0x0f;
}
switch(temp)
{
case 0xee:..........

我觉得还可以更简单 while(P3!=0xfe);

阅读全文

与单片机双机通讯能传数组吗相关的资料

热点内容
java结束函数 浏览:622
打开远程桌面的命令 浏览:836
树莓派如何搭建mqtt服务器 浏览:587
怎么加密w8文件 浏览:609
linuxprogram 浏览:708
php接口编程思想 浏览:92
如何下载电话软件app 浏览:906
java命令行解析 浏览:572
云服务器白嫖 浏览:917
程序员小清新 浏览:989
编译器地址8字节对齐 浏览:464
三菱plc编程win1064 浏览:258
高中英语单词pdf 浏览:425
编译原理词法分析常见问题 浏览:197
车小艺app怎么更新 浏览:77
手机app被管控如何移除 浏览:753
51单片机温湿度检测 浏览:575
安卓抖音显示没网络是怎么回事 浏览:818
2d我的世界源码 浏览:620
怎样制作贴天花板的解压球 浏览:337