51單片機多機通信原理圖:
0.png (35.76 KB, 下載次數: 59)
下載附件
2016-10-9 22:44 上傳
0.png (55.73 KB, 下載次數: 47)
下載附件
2016-10-9 22:45 上傳
單片機多機通信仿真工程文件及所有完整程序等資料下載地址:
http://m.raoushi.com/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++)
- {}
- }
- }
- /* 發送數據函數 */
- uchar recvdata()
- {
- /* 接收數據 */
- while(!RI);
- if (RB8==1)
- return 0xee; // 若接收的為地址幀,則返回0xee
- buf = SBUF;
- RI = 0;
- return 0; // 返回0
- }
- /* 串口初始化函數 */
- void init_serial()
- {
- TMOD = 0x20; // 定時器T1使用工作方式2
- TH1 = 250;
- TL1 = 250;
- TR1 = 1; // 開始計時
- PCON = 0x80; // SMOD = 1
- SCON = 0xd0; // 工作方式,9位數據位,波特率9600kbit/s,允許接收
- }
- /* 主程序 */
- void main()
- {
- uchar i = 0;
- uchar tmp = 0xff;
- P1= 0xff;
- addr = P1&0x0f; // 獲取本機地址
- P23 = 1; // 發光管不亮
-
- init_serial(); // 串口初始化
- EA = 1; // 關閉所有中斷
-
- /* 進入設備應答 */
- while(1)
- {
- SM2 = 1; // 只接收地址幀
-
- /* 如果接收到的地址幀不是本機地址,則繼續等待 */
- while (tmp!=addr)
- {
- RI = 0;
- while(!RI)
- tmp = SBUF;
- RI = 0;
- }
- SM2 = 0; // 允許接收數據
- /* 數據接收 */
- tmp = recvdata();
- //if(buf!=0x00)
-
- if (tmp==0x00)
- {
- P0=buf;
- /* 綠燈亮,持續500ms,表示接收數據成功 */
- P23 = 0;
- delay(30);
- P23 = 1;
-
- }
- // 如果接收數據時發現地址幀,則重新開始整個接收過程
- }
- }
復制代碼
|