導航:首頁 > 操作系統 > 單片機雙機通訊能傳數組嗎

單片機雙機通訊能傳數組嗎

發布時間: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);

閱讀全文

與單片機雙機通訊能傳數組嗎相關的資料

熱點內容
安卓抖音顯示沒網路是怎麼回事 瀏覽:817
2d我的世界源碼 瀏覽:618
怎樣製作貼天花板的解壓球 瀏覽:337
伺服器如何打開蘋果 瀏覽:96
高響應比演算法的實現 瀏覽:848
windows寫命令行 瀏覽:61
騰訊天津數據中心伺服器雲空間 瀏覽:974
單片機掃描按鍵 瀏覽:386
如何設置google伺服器 瀏覽:695
linuxtrace工具源碼 瀏覽:178
源碼第二次開發 瀏覽:784
如何獲取網頁php源碼 瀏覽:729
還用飛那麼源碼 瀏覽:204
雲伺服器鏡像可以隨時更換嗎 瀏覽:92
r600a壓縮機多少錢 瀏覽:237
程序員那麼可愛第幾集在重慶相遇 瀏覽:674
上班兩公里源碼 瀏覽:819
南寧溯源碼燕窩訂制 瀏覽:934
在個人文件夾中新建文件 瀏覽:445
中國國家地理pdf下載 瀏覽:109