題目:基于51單片機的RS485從機系統設計
單片機接口資源配置:
1. 上電復位電路;
2. 晶振電路采用11.0592Mhz晶振;
3. 485接口電路(P3.7用于485芯片的收發控制,收發管腳接單片機的rxd和txd);
4. P2口通過外部跳線接相應的高低電平,配置從機地址為組號;
5. P3.6外接一發光二極管(注意串聯電阻進行限流);
6. P3.2外接一按鍵,斷開高電平,按下低電平;
7. 按鍵檢測采用外部中斷方式,下跳沿觸發;
8. 單片機定時器0以模式1(16位模式)工作,產生50ms的定時中斷,并在此基礎上設計一單片機內部時鐘(24小時制,能計數時、分、秒、50ms值);
9. 單片機串行通信采用模式1非多機通信方式,采用9600波特率以串行中斷方式進行數據的收發通信,主機地址為0xF0,廣播地址為0xFF。
系統功能需求:
1. 系統配置和自檢功能:
l 從機上電后進行初始化,通過讀取P2口進行從機地址配置;
l 發光二極管以每秒一次的頻率閃爍(亮0.5秒,滅0.5秒);
l 檢測到一次按鍵按下操作后,熄滅發光二極管。
2. 數據接收和按鍵計時功能:
l 從機接收主機程序(PC機上的串口調試程序)的按鍵允許命令幀并進行校驗;
l 校驗正確并且目的地址是廣播地址或者本從機的地址,通過發光二極管長亮指示,并允許按鍵操作;
l 按鍵按下后,盡可能準確記錄按鍵的動作時點(定時器的低8位、定時器的高8位、50ms值、秒、分、小時);
l 按鍵操作只能響應一次,重復按鍵操作不響應;
l 按鍵的動作時點記錄后,發光二極管以每秒一次的頻率閃爍(亮0.5秒,滅0.5秒)。
3. 數據發送功能:
l 從機接收主機程序發來的時鐘數據搜索命令幀并進行校驗;
l 如果校驗正確并且數據幀的目的地址是本從機的地址,從機將前面記錄的按鍵動作時點數據(定時器的低8位、定時器的高8位、50ms值、秒、分、小時)按附錄中的時鐘數據返回幀的幀格式回傳給主機;
l 時鐘數據返回幀回傳結束后,熄滅發光二極管。
4. 校驗和生成和檢測功能:
l 發送數據幀時能自動生成數據幀校驗和;
l 每幀數據在發送幀尾前,發送一字節的當前幀數據的校驗和;
l 接收數據幀時能檢測校驗和并判斷接收數據是否正確。
附錄:幀定義
校驗和的計算:除去幀頭和幀尾后將幀中的其他數據求和并取低8位;
幀長:不計幀頭、幀尾和校驗和字節。
按鍵允許命令幀:
幀頭
幀長
目的地址
源地址
命令字
校驗和
幀尾
AA
04
FF
F0
01
F4
66
時鐘數據搜索命令幀:
幀頭
幀長
目的地址
源地址
命令字
保留字
校驗和
幀尾
AA
05
01
F0
03
00
F9
66
時鐘數據返回幀:
幀頭
幀長
目的地址
源地址
命令字
TL0
TH0
50ms
秒
分
時
校驗和
幀尾
AA
0A
F0
01
07
01
B6
09
03
00
00
c5
66
幀結構頭文件frame.h(內容如下)
//幀格式定義
#define
FRAME_HEAD 0xAA //幀頭
#define
FRAME_FOOT 0x66 //幀尾
#define
FRAME_LEN 0x00 //幀長
#define
FRAME_DST_ADR 0x01 //目的地址
#define
FRAME_SRC_ADR 0x02 //源地址
#define
FRAME_CMD 0x03 //命令字
#define
FRAME_DATA 0x04 //幀數據起始
//幀命令定義
#define
READY 0x01 //按鍵允許命令
#define
TIME_SERCH 0x03 //時鐘數據輪詢命令
#define
TIME_BACK 0x07 //時鐘數據返回命令
//地址定義
#define
BROAD_ADR 0xFF //廣播地址
#define
MASTER_ADR 0xF0 //主機地址
標簽:
51單片機
從機通信
上傳時間:
2020-06-18
上傳用戶:umuo