51單片機多機通信原理圖:
0.png (35.76 KB, 下載次數(shù): 59)
下載附件
2016-10-9 22:44 上傳
0.png (55.73 KB, 下載次數(shù): 47)
下載附件
2016-10-9 22:45 上傳
單片機多機通信仿真工程文件及所有完整程序等資料下載地址:
http://www.zg4o1577.cn/bbs/dpj-56304-1.html
源程序:
- #include "PMPDataR.h"
- unsigned char zu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8d};
- /* 延時t毫秒 */
- void delay(uint t)
- {
- uint i;
- while(t--)
- {
- /* 對于11.0592M時鐘,約延時1ms */
- for (i=0;i<125;i++)
- {}
- }
- }
- /* 發(fā)送數(shù)據(jù)函數(shù) */
- uchar recvdata()
- {
- /* 接收數(shù)據(jù) */
- while(!RI);
- if (RB8==1)
- return 0xee; // 若接收的為地址幀,則返回0xee
- buf = SBUF;
- RI = 0;
- return 0; // 返回0
- }
- /* 串口初始化函數(shù) */
- void init_serial()
- {
- TMOD = 0x20; // 定時器T1使用工作方式2
- TH1 = 250;
- TL1 = 250;
- TR1 = 1; // 開始計時
- PCON = 0x80; // SMOD = 1
- SCON = 0xd0; // 工作方式,9位數(shù)據(jù)位,波特率9600kbit/s,允許接收
- }
- /* 主程序 */
- void main()
- {
- uchar i = 0;
- uchar tmp = 0xff;
- P1= 0xff;
- addr = P1&0x0f; // 獲取本機地址
- P23 = 1; // 發(fā)光管不亮
-
- init_serial(); // 串口初始化
- EA = 1; // 關(guān)閉所有中斷
-
- /* 進入設(shè)備應(yīng)答 */
- while(1)
- {
- SM2 = 1; // 只接收地址幀
-
- /* 如果接收到的地址幀不是本機地址,則繼續(xù)等待 */
- while (tmp!=addr)
- {
- RI = 0;
- while(!RI)
- tmp = SBUF;
- RI = 0;
- }
- SM2 = 0; // 允許接收數(shù)據(jù)
- /* 數(shù)據(jù)接收 */
- tmp = recvdata();
- //if(buf!=0x00)
-
- if (tmp==0x00)
- {
- P0=buf;
- /* 綠燈亮,持續(xù)500ms,表示接收數(shù)據(jù)成功 */
- P23 = 0;
- delay(30);
- P23 = 1;
-
- }
- // 如果接收數(shù)據(jù)時發(fā)現(xiàn)地址幀,則重新開始整個接收過程
- }
- }
復(fù)制代碼
|