圖 8-5 運算器功能方塊圖
圖 8-5 運算器之功能方塊圖,運算器內部有運算子暫存器,可暫存四則運算子+ ,−,×,÷ 等,以及運算元暫存器 1,運算元暫存器 2,可暫存準備被運算的數值,誰該執行暫存會受到符號/數值,等號/四則,等控制旗標決定。
後面有加法功能方塊 + ,減法功能方塊, − ,乘法功能方塊 × ,及除法功能方塊 ÷ 。這四個功能方塊可由兩個運算元暫存器得到準備被運算的數值。但何時要執行,是出現符號以及等號旗標時執行,而誰要執行則受到運算子暫存器內容決定。
註:功能方塊圖上,有箭頭跨過方塊而不是指向方塊時,是指這一個訊號會被方塊參考做為要不要執行以及如何執行的控制線。
由於運算器會逐一記錄運算子,以及兩個運算元。功能方塊結構體必需要有它們的欄位。
typedef struct {
uint8_t Operator;
uint8_t ArithmeticElement[2];
} CalculatorStr_t
運算器初值為 0 可以無需再初始化
uint8_t Calculator_step(CalculatorStr_t* Str_p, uint8_t Symbol, uint8_t
EqualSign, uint8_t Operator, uint8_t CumResult,float* Result_p)
• 簡介:本函式會接收前級輸出的符號/數值, 等號/四則 旗標變數,以及輸出累進值。於收到四則運算子時,會同步將累進值存入運算元 1 暫存器,將運算子存入運算子暫存器。 於收到等號時,會先將累進值存入運算元 2暫存器。而後參考運算子,執行運算並輸出結果
• 傳值變數:
uint8_t Symbol:符號/數值 旗標變數輸入。
uint8_t EqualSign: 等號/四則 旗標變數輸入
uint8_t Operator:運算子輸入。
uint8_t CumResult:累進值輸入。
• 傳址變數:
CaculatorStr_t *Str_p:運算器功能方塊結構體住址。
float* Result_p:計算結果輸出值住址。
• 回傳:錯誤訊息,無錯誤回傳 0。
如前例『 12+3= 』,在鍵入 1,2,3 時,運算器都不會有動作。當鍵入『 + 』時,經前面鍵號解譯器判斷,它是『符號』,而且是『四則』這時會促使運算子暫存器記錄前級送來的運算子編號,另外因為它是『符號』,所以會促使運算元暫存器1 記錄由累加進位器送來的累進值,但這時仍不做任何運算。直到鍵入『 = 』時,因為它是『符號』,而且是『等號』,運算元暫存器 2 會先記錄累進值。然後+−×÷ 四個四則運算功能方塊均會參考運算子暫存器的運算子碼,其中只有『 + 』運算符合會執行加算,執行時會由運算元暫存器 1 及運算元暫存器 2 分別取得準備被加起來的兩個數值,將它們加起來後送出做為運算結果。