⑴ 单片机串口发送数组,程序如下,请帮忙修改!!!
二进制数组不像字符串一样有结束标志,不能直接用发送数组的函数发送,
作如下修改就可以了(仿真输出结果见代码后面的图):
#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);