• 沒有找到結果。

編撰使用者 script

在文檔中 中 華 大 學 (頁 38-43)

第三章、 可由使用者程式化的 WINS

3.4 編撰使用者 script

CMD Index (b7~b3)

CMD Para 1 (b2~b0)

Byte1 HEX

Para2 Remark

Rn.0=0:StandBy, Rn.0=1:Rx);

b7=0(b0=0:Standby, b0=1:Rx)

8 Timer_Proc 000: Set Timer 40 b7~b6:Timer index, b4~b0: Reg# Reg_n: TimerL, Reg_n+1: TimerH 000: #Data -> Reg0 48 Immediate data

001: #Data -> Reg1 49 Immediate data 010: #Data -> Reg2 4A Immediate data 011: #Data -> Reg3 4B Immediate data 100: #Data -> Reg4 4C Immediate data 9 Data_Cpy2

101: #Data -> Reg5 4D Immediate data

1. 設定 Port 0 為 0xFE 以點亮 LED0 2. 延遲 0.5 秒

3. 設定 Port 0 為 0xFB 以點亮 LED1 4. 延遲 0.5 秒

5. …8 個 LED 都點亮過後從第 1 步重新開始

因為 8 個 LED 都在同一個輸出埠 P0 上,可以用「左旋」運算功能簡化程式;故整個 程式可以寫成如下的迴圈型式:

1. 設定 Reg0 為 0xFE (LED 為低位驅動, 0xFE 為只有 LED0 低位) 2. 將 Reg0 資料輸出至 Port 0 以點亮 LED

3. 延遲 0.5 秒

4. 將 Reg0 內容左旋 1 個 bit 5. 跳回第 2 步

步驟三、查表並將所需之命令逐一填入

表格 6:跑馬燈之程式設計命令表 Step Line# Instruction CMD Code 說明

1 00 #FEh -> R0 48h, FEh 將立即值放入 R0 2 01 R0 -> P0 10h, 00h 將 R0 內容 copy 至 P0 3 02 (RL R0 once) -> R0 2Ah, 20h 將 R0 左旋一個 bit, 放回 R0 4 03 Delay 500mS 0Fh, D0h 延遲 500mS 以供顯示

5 04 Jump to CMD line#1 30h, 01h 跳回 line#1(從 0 起算),造成 無限迴圈

從這一個簡單的實作中可以發現,使用本系統開發這類小型設備的操作程式是十分地簡 單與直覺,只要可以描述得出來便可以撰寫得出來,本系統將 delay 這些最常用的程式寫

成了單一個命令,而且未來隨時可依需求加入更多更方便的命令,以加速並簡化 script 寫 作。

3.4.3 無線收發功能驗證 script 設計

在上一節中驗證了 script 的架構及硬體基本動作之後,接下來本節會驗證硬體之無線收 發功能,這是 WINS 中最重要的一項硬體功能,沒有無線收發能力,便只能稱為是自動控 制實驗板了。

步驟一、定義並詳細描述系統的功能

本節的 script 會每 0.5 秒無線發送一筆資料,然後將剛發出去的資料進行左旋轉運算(像 上節一樣),在等待下一個 0.5 秒到來之時會持續檢查是否有收到資料(從另一個 WINS 發 出),會將收到的資料顯示在連結在 P0 上的 LED。

步驟二、決定程式的流程及細部的行為

1. 設定 nRF2401 RF Address 為 9BA1592647H:

1.1 設 Reg0 為 9BH 1.2 設 Reg1 為 A1H 1.3 設 Reg2 為 59H 1.4 設 Reg3 為 26H 1.5 設 Reg4 為 47H

1.6 設定 RF Address 為從 Reg0 起的 5 個 Register 內容 2. 設定 nRF2401 RF Channel 為 1AH

3. 設定 Reg5 為 7FH (此為供發送用之資料) 4. 設定 Timer0 之 interval 為 0.5 秒

4.1 設 Reg0 為 D0H

4.2 設 Reg1 為 07H

4.3 設定 Timer0 之初值為 Reg0 起的 2 個 Register 內容,並啟動 Timer0 5. 設定 nRF2401 為資料發送模式

5.1 禁止 nRF2401 接收模式 5.2 將 nRF2401 設成發送模式 6. 將 Reg5 內容左旋 1 個位元 7. 將 Reg5 內容複製到 Reg6

7.1 將 Reg5 內容複製到 Acc 7.2 將 Acc 內容複製到 Reg6

8. 將 Reg6 至 Reg12 之資料由 nRF2401 送出(一個封包中 PAYLOAD 為 7 個 byte) 9. 設定 nRF2401 為接收模式

10. 致能 nRF2401 接收模式

11. 將 nRF2401 的狀態讀回,放在 Reg2 中 12. 將 Reg2 內容複製到 Acc

13. 若 Acc 之 bit0 為 0(未收到資料),跳至 16

14. 將 nRF2401 接收到之資料複製到從 Reg6 至 Reg12 的 7 個 register 內 15. 將 Reg6 的內容顯示在 P0 上(這是由另一個 node 所發出的)

16. 若 Timer0 時間未到,則跳至 11 17. 跳至 4

步驟三、查表並將所需之命令逐一填入

表格 7:無線收發功能驗證 script 設計命令表

Line # Function Block Instruction

Byte1 HEX

Byte2 HEX

Remark / 說明

0 #9BH -> Reg0 48 9B

1

Set RF Address 9BA1592647H

#A1H -> Reg1 49 A1

Line # Function Block Instruction

Byte1 HEX

Byte2 HEX

Remark / 說明

2 #59H -> Reg2 4A 59

3 #26H -> Reg3 4B 26

4 #47H -> Reg4 4C 47

5 Set RF Address 3A 00

設定 RF Address 為從 R0 開始的 5 個位置內 容

6 Set RF Channel 1AH Set RF Channel 38 1A 設定 RF 頻道為 1A

7

設定 Reg5 為 7FH (此為供發送用之 資料)

#7FH -> Reg5 4D 7F 設定 Reg5 為 7F(待送出之資料)

8 #D0 -> Reg0 48 D0

9 #07 -> Reg1 49 07

10

設定 Timer0 之 interval 為 0.5 秒

Set RF Rx 40 00

設定 Timer0 之初值為 Reg0 起的 2 個 Register 內容,並啟動 Timer0

11 3E 00 Disable Rx

12

設定 nRF2401 為資料發送模式

39 00 Set Tx

13 將 Reg5 內容左旋 1 個位元 RL Reg5 2A 25 Rotate Reg5 left, once

14 Reg 5 -> A 23 05

15

將 Reg5 內容複製到 Reg6

A -> Reg 6 22 06

16

將 Reg6 至 Reg12 之資料由 nRF2401 送出

Send RF data 3C 06 將 Reg6 至 Reg12 之資料由 nRF2401 送出

17 Set Rx 39 01

18

設定並致能 nRF2401 為接收模式

Enable Rx 3E 01

19

將 nRF2401 的狀態讀回,放在 Reg2 中

Get RF status ->

Reg2

3B 02

20 將 Reg2 內容複製到 Acc Reg2 -> A 23 02

21

若 Acc 之 bit0 為 0(未收到資料), 跳 至 24

JNB,A.0,+3 35 03

22

將 nRF2401 接收到之資料複製到 從 Reg6 至 Reg12 的 7 個 register 內

Get Data -> R6~ 3D 06 接收到的資料放在從 R6 開始的 7 個位置中

23

將 Reg6 的內容顯示在 P0 上(這是 由另一個 node 所發出的)

Write Reg6 to P0 10 06 Write Reg6 to port 0

24 若 Timer0 時間未到,則跳至 19 JMP if not timer0 37 1B JNTimer0,-5 (000 11011)

25 Loop Jump to line #8 30 08

此一 script 最大的功能便是驗證硬體的收發功能:首先讓 A 與 B 都執行這個 script,然 後會看到 A 與 B 的 LED 每隔 0.5 秒便會變換狀態,若將 A 之電源關閉,則會發現 B 的 LED 也不會變化了,這能證實該 B 所顯示的資料的確是從 A 而來。

在文檔中 中 華 大 學 (頁 38-43)

相關文件