7.2.1 總體設計
1. 需求分析
(1) 需求獲取
本項目最初由湘潭大學理化實驗室提出需求,在化學實驗金屬相圖實驗中,原有的實驗儀(一臺PC機、一臺加熱爐、一臺測溫儀)要做一個完整的實驗需要四五個小時以上,并且數(shù)據要學生自己記錄并自己計算和給制圖形,往往幾個小時不能完成一個實驗,為了解決這個問題,提出開發(fā)一種新的實驗設備,新的實驗儀(PC機一臺、兩臺測溫儀,每臺測溫儀可以接六路溫度傳感器,兩臺加熱爐),這樣一臺PC機可同時采集12路數(shù)據,整個過程由PC機上軟件完成,不需學生記錄數(shù)據和繪制圖形和表格,大大提高了實驗速度,實驗結果更準確和直觀。同時一個實驗室可以省下一半PC機,節(jié)約了設備成本。本項目只是該實驗儀中一部分,也就是加熱爐的控制部分。
(2) 設計開發(fā)任務書
本項目開發(fā)人員如下:項目負責人一名,軟件工程師四名、硬件工程師一名、結構工程師一名、技術員一名、采購員一名。其中兩名軟件工程師負責PC軟件開發(fā)、一名軟件工程師負責測溫儀軟件開發(fā)、一名軟件工程師負責加熱爐軟件開發(fā)。
2. 方案設計
整個方案在這里就不詳述,這里只就加熱爐部分進行說明,由于一臺PC機同時控制兩臺加熱儀和兩臺測溫儀,所以本臺都有相應地址,與PC機通訊采用CAN總線,地址用24C01存儲,加溫速度由PC機根據當時室溫發(fā)送相應加熱功率百分比來控制加熱爐。加熱爐由89C1051控制。如接收到PC機發(fā)送的功率是80,則可通過控制加熱爐80%時間打開電源,20%時間關斷電源,具體通訊協(xié)議讀者可以自己制訂,并完整好程序,并在做實驗或實訓時調試。
3. 測試計劃
硬件是否正確、加熱爐在不同室溫下能不能在相同時間加熱到指定溫度。
7.2.2 詳細設計
1. 硬件設計:
(1) 主要原器件:
89C2051、24C01、雙向可控硅等。
(2) 原理圖:
I2C總線原理及工作時序:


隨機讀時序圖
2. I2C總線的24C02讀寫程序:
MCU2-I2C總線AT24C02讀寫程序
;**********************************************
;*Title:AT24C02與51單片機連接讀寫程序*
;*Date:2005.7.7 *
;***************************************************************************
;連線:SCL—P3.4,SDA—P3.5,WP—接地
;(R3)=器件地址,(R4)=片內字節(jié)地址,
;(R5)=連續(xù)讀寫字節(jié)數(shù),(R1)=欲讀寫數(shù)據存放地址指針
;***************************************************************************
SCL EQU P30
SDA EQU P31
;寫24C02子程序
I2C_WRITE:
SETB SDA
SETB SCL
CLR SDA ;發(fā)開始信號
MOV A,R3 ;發(fā)器件地址
ACALL SEND ;調發(fā)送單字節(jié)子程序
MOV A,R4 ;送片內字節(jié)地址
ACALL SEND
I2CW_AGAIN:
MOV A,@R1
ACALL SEND
INC R1
DJNZ R5,I2CW_AGAIN ;連續(xù)寫N個字節(jié)
CLR SDA ;SDA位置0,準備送停止信號
ACALL DELAY ;延時以滿足傳輸速率要求
SETB SCL ;發(fā)送停止信號
ACALL DELAY
SETB SDA
RET
SEND:
MOV R0,#08H
I2CW_LOOP:
CLR SCL ;開始[信號之后的]寫地址操作 SCL清'0'
RLC A
MOV SDA,C
NOP
SETB SCL ;寫完一位打操作后,SCL 置'1'
ACALL DELAY
DJNZ R0,I2CW_LOOP
CLR SCL
ACALL DELAY
SETB SCL ;
ACKLP: MOV C,SDA
JC ACKLP ;判斷應答到否,未到則等待
CLR SCL
RET
;***************************************
;讀24C02子程序
I2C_READ:
SETB SDA
SETB SCL
CLR SDA ;發(fā)開始信號
MOV A,R3 ;發(fā)器件地址
ACALL SEND ;調發(fā)送單字節(jié)子程序
MOV A,R4 ;送片內字節(jié)地址
ACALL SEND
SETB SDA
SETB SCL
CLR SDA ;發(fā)開始信號
MOV A,R3 ;發(fā)器件地址
SETB ACC.0 ;發(fā)讀命令
ACALL SEND
I2CR_AGAIN:
ACALL READ
MOV @R1,A
INC R1
DJNZ R5,I2CR_AGAIN
CLR SDA ;SDA位置0,準備送停止信號
ACALL DELAY ;延時以滿足傳輸速率要求
SETB SCL ;發(fā)送停止信號
ACALL DELAY
SETB SDA
RET
READ:MOV R0,#08H
I2CR_LOOP:
SETB SCL
ACALL DELAY
MOV C,SDA
RLC A
CLR SCL
ACALL DELAY
DJNZ R0,I2CR_LOOP
CJNE R5,#01H,LW
SETB SDA ;若是最后一個字節(jié),置ACK=1
AJMP SETOK
LW: CLR SDA ;否則置ACK=0
SETOK: ACALL DELAY
SETB SCL
ACALL DELAY
CLR SCL
ACALL DELAY
SETB SDA ;應答完畢,SDA置1
RET
DELAY:
NOP
NOP
RET
END

