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