Ⅰ 組態王與單片機通信 怎麼才能一次發送多個字
嚴格點講,單片機每次只能發送一個位元組數據,但完全可以通過循環的方式連續發送多個位元組的數據,宏觀上就像是一次發送多個位元組了。發送數據時,最好採用查詢方式連續發送,如果還有其它任務需要同時完成,就得採用中斷方式,每次中斷發送一個位元組。不論什麼方式發送,可以定義一個數組,將要發送的數據放在數組里,根據需要定義數組元素的個數,發送時就可以循環發送這個數組就行了,表面上就像是一次發送多個數據了。
Ⅱ c51,單片機從串口接收字元串,放到一個數組裡面,然後在通過串口發出去。急!謝謝
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
uchardatatable[10];//暫存數組,可以將10改為你需要的數值
/***********************************************
串列口初始化波特率9600,定時器1,工作方式2 *************************************************/
voidserial_init(void)
{
TMOD=0x20;//計時器1作為比特率發生器,方式2
TH1=0xfd;
TL1=0xfd;//裝入初值
TR1=1;//計時中斷允許
SM0=0;
SM1=1;//串列口工作於方式2
ES=1;//串列口中斷允許
REN=1;//接收允許
EA=1;// 總中斷允許
}
/***********************************************
串列口傳送數據
傳送顯示數組各字元給計算機
*************************************************/
voidsend(uchar*dis)
{
while(*dis!='')
{
SBUF=*dis;
dis++;
while(!TI);
TI=0; //軟體請發送中斷
}
}
voidmain()
{
serial_init();//初始化
while(SBUF!=0x0d);//計算機鍵盤按下回車鍵,則開始將接收到的數據回傳給計算機
send(table);
}
/***********************************************
串列中斷服務函數
單片機接收數據,存入table數組
*************************************************/
voidserial()interrupt4
{
inti;
ES=0; //關串口中斷
table[i++]=SBUF;//命令存到命令數組
RI=0;//軟體清除接收中斷
ES=1;//開串口中斷
}
已經通過proteus模擬如下
