/* multi_s.c */
/* 多機通信的從機部分 */
#ifndef __MULTI_S_C__
#define __MULTI_S_C__
#include
#include
#define __MAX_LEN_ 64 // 數據最大長度
#define _MHz_ 11 // 設置 單片機 使用的晶振頻率(11.0592MHz)
/* 以下為程序協議中使用的握手信號 */
#define __SUCC_ 0x0f // 數據傳送成功
#define __ERR_ 0xf0 // 數據傳送錯誤
void init_serial(); // 串口初始化
unsigned char recv_data(unsigned char *buf); // 接收數據
void Beep_ok(); // 蜂鳴表示數據接收ok,該函數代碼未給出
void main()
{
char buf[__MAX_LEN_];
unsigned char i = 0;
unsigned char tmp = 0xff;
unsigned char addr; // 保存本機地址
/* 從P1口讀取本機地址 */
P1 = 0xff;
addr = P1;
/* 串口初始化 */
init_serial(); // 初始化串口
EA = 0; // 關閉所有中斷
/* 進入設備應答階段 */
while(1)
{
SM2 = 1; // 只接收地址幀
/* 如果接收到的地址幀不是本機地址,則繼續等待 */
tmp = addr-1;
while(tmp != addr)
{
RI = 0;
while(!RI);
tmp = SBUF;
RI = 0;
}
/* 發送應答信號,并做好接收數據的準備 */
TI = 0;
TB8 = 0; // 主機不檢測該位
SBUF = addr;
while(!TI);
TI = 0;
SM2 = 0; // 允許接收數據信息
/* 數據接收 */
tmp = 0xff;
while(tmp == 0xff) // 如果數據校驗失敗則重新接收數據
{
tmp = recv_data(buf); // 校驗失敗返回0xff,檢測到地址幀則返回0xfe,接收成功則返回0
}
if(tmp == 0xfe) // 在數據接收過程中,如果發現地址幀,則重新開始整個接收過程
continue;
Beep_ok(); // 蜂鳴表示數據接收成功
}
}
/* 初始化串口 */
void init_serial()
{
TMOD = 0x20; //定時器T1使用工作方式2
TH1 = 250; // 設置初值
TL1 = 250;
TR1 = 1; // 開始計時
PCON = 0x80; // SMOD = 1
SCON = 0xd0; //工作方式3,9位數據位,波特率9600bps,允許接收
}
/* 接收數據,注意該函數使用buf指向的緩沖區保存數據,在數據末尾使用’\0’表示數據結束
* 返回值為0,數據校驗成功,返回值為0xfe,接受過程中接收到地址幀,返回值為0xff,數據校驗失敗
*/
unsigned char recv_data(unsigned char *buf)
{
unsigned char len; // 該字節用于保存數據長度
unsigned char ecc; // 該字節用于保存校驗字節
unsigned char i,tmp;
/* 接收數據長度 */
RI = 0;
while(!RI);
if(RB8 == 1) // 若當前接收為地址幀則返回0xfe
return 0xfe;
len = SBUF;
RI = 0;
/* 使用len的值為校驗字節ecc賦初值 */
ecc = len;
/* 接收數據 */
for(i=0; i
while(!RI);
if(RB8 == 1) // 若當前接收為地址幀則返回0xfe
return 0xfe;
*buf = SBUF; // 接收數據
ecc = ecc^(*buf); // 進行字節校驗
RI = 0;
buf++;
}
*buf = 0; // 表示數據結束
/* 接收校驗字節 */
while(!RI);
if(RB8 == 1) // 若當前接收為地址幀則返回0xfe
return 0xfe;
tmp = SBUF;
RI = 0;
/* 進行數據校驗 */
ecc = tmp^ecc;
if(ecc != 0) // 校驗失敗
{
*(buf-len) = 0; // 清空數據緩沖區
TI = 0; // 發送校驗失敗信號
TB8 = 0;
SBUF = __ERR_;
while(!TI);
TI = 0;
return 0xff; // 返回0xff表示校驗錯誤
}
TI = 0; // 校驗成功
TB8 = 0;
SBUF = __SUCC_;
while(!TI);
TI = 0;
return 0; // 校驗成功,返回0
}
#endif
上一篇:單片機雙機點對點通信的從機程序
下一篇:多機通信的主機部分程序
推薦閱讀
史海拾趣
高頻電子在精確時間和頻率生成技術方面一直處于世界領先地位。公司不斷投入研發,推出了一系列高精度、高性能的定時和頻率控制產品,如銣蒸氣原子振蕩器、溫度穩定的石英晶體振蕩器等。這些產品被廣泛應用于商業、政府、軍事等多個領域,包括衛星通信、指揮控制系統、電子戰系統等。高頻電子的技術創新不僅提升了自身競爭力,還推動了整個行業的發展。
高頻電子的業務范圍廣泛且多元化,主要包括FEI-NY、Gillam-FEI和FEI-Zyfer三個部門。FEI-NY部門主要負責紐約總部設施和子公司FEI-Asia與FEI-Elcom的運營;Gillam-FEI部門則負責比利時與法國的業務,并專注于電纜網絡同步產品的設計、研發和生產;FEI-Zyfer部門則主要經營公司加州業務,并設計生產附帶GPS技術的產品。這種多元化業務布局不僅降低了公司的經營風險,還實現了各業務之間的戰略協同和資源共享。
背景:FRONTIER Electronics作為一家專注于無源元件和集成無源元件設計與制造的公司,自成立以來便致力于技術創新。
發展故事:在21世紀初,FRONTIER Electronics憑借其在電感器、變壓器、二極管等領域的深厚技術積累,成功推出了一系列高性能、高可靠性的電子產品。隨著市場需求的不斷增長,公司逐步擴大生產規模,并在全球范圍內建立了完善的銷售網絡。通過持續的技術研發和市場拓展,FRONTIER Electronics逐漸在電子行業中嶄露頭角,成為該領域的領軍企業之一。
隨著業務規模的不斷擴大,佰鴻意識到提升產能效率的重要性。于是,公司在1990年轉投資中國大陸興建東莞高步廠,現有土地面積和廠房面積均達到相當規模,員工數量也增至數千人。這一舉措極大地提升了佰鴻的生產能力,使其能夠更好地滿足市場需求,同時也為公司后續的發展提供了有力的支持。
為了進一步擴大市場份額,Frequency Devices公司積極實施國際化戰略。公司通過參加國際電子展會、建立海外銷售網絡、與國際知名企業建立合作關系等方式,不斷提升品牌國際影響力。同時,公司還根據不同國家和地區的市場特點,定制化開發符合當地需求的高頻電子產品。這些努力使得Frequency Devices公司的產品成功打入多個國際市場,實現了全球化布局。
在1980年代,Dallas公司憑借其創新的DS1820溫度傳感器產品,成功打開了新市場的大門。這款溫度傳感器以其高精度、低功耗和易于集成的特性,贏得了眾多客戶的青睞。它的推出不僅為Dallas公司帶來了顯著的收入增長,也為公司后續的產品研發和市場拓展奠定了堅實的基礎。
由于對allegro軟件不太熟悉,對原理圖的制作產生 一定的延緩,怕大家著急,先貼出topview,供大家討論,對于原理圖的方案更改請大家積極參與,各抒己見,我們會盡快根據大家的意見,篩選,整理,應用到我們的方案當中。 現在有事要出去下,時間 ...… 查看全部問答∨ |
|
惠普的GPS授時器HP58540A。這個東西是花500元買來的,相同功能的還有天寶的授時器。 接上GPS天線,連接上三顆衛星就可以工作了,利用衛星上的頻率基準校準OCXO恒溫晶振,可以有一流的長期穩定性,如果沒有接天線,被校準好的恒溫晶振仍然可以輸 ...… 查看全部問答∨ |
如果把潘朵拉星球比作職場,那么杰克.阿凡達無疑是一名職場新人,站在職業規劃的視角來觀看《阿凡達》,影片展示的是他從職場新人到超級精英的成長過程?!栋⒎策_》之所以如此熱映,源于從主人公杰克.阿凡達的身上,能夠找到我們每一個職場人內心深 ...… 查看全部問答∨ |
Pocke PC SE 2003 部署真機的時候出現磁盤空間不足問題 部署的時候它系統自帶的DLL 比如 Syatem.Data.dll 還有我自己寫的編譯好的DLL都部署進去 所產生的磁盤空間不足問題,請問各路高手如何解決。 注:我已經將項目的屬性中的部署.NET Compact Framework的最新版本(包括 Service pack)前面的對勾去 ...… 查看全部問答∨ |
WinCE系統拔出SD卡以后,在上面運行的程序并讀取上面的文件就會失去響應,而且無法關閉(TerminateProcess無法關閉)。 怎樣修改程序才能避免(在拔卡時)出現無法關閉的情況。 … 查看全部問答∨ |
用電腦指令,用7段數碼顯示.我現在能通訊上7段上的數也變化但是和我輸入的不一樣屬于亂變,怎么才能不讓7段顯示的亂嗎呢~我用了MAX232做電平轉換了.能幫解答下嗎~謝謝~~… 查看全部問答∨ |
最近要用NRF9E5模塊,其中用到了EEPROM25AA320,不知道要用什么型號的燒寫器才能將程序下載到芯片中?麻煩大家給推薦一個便宜適用的燒寫器型號,謝謝! 另外,編程器和仿真器的作用分別是什么?單獨用燒寫器是不是能實現從電腦上將程序燒寫到芯片 ...… 查看全部問答∨ |