2016-03-02 54 views
0

我的練習:•使用三個環@ 1 MHz時鐘頻率計算可能的最大延遲。 (回答49.94 S)計算來自3個嵌套環路的延遲

delay: ldi r23,$FF   ;Initialise 3rd loop counter 
loop3: ldi r24,$FF   ;Initialise 2nd loop counter 
loop2: ldi r25,$FF   ;Initialise 1st loop counter 
loop1: dec   r25    ;Decrement the 1st loop counter 
      brne loop1   ;and continue to decrement until 1st loop counter = 0 
      dec r24    ;Decrement the 2nd loop counter 
      brne loop2   ;If the 2nd loop counter is not equal to zero repeat the 1st loop, else continue 
      dec r23 
      brne loop3 
     ret     ;Return 

我試圖計算使用這些3路,答案顯然是49.94秒和我真的很掙扎它與2個嵌套循環簡單得多的最大延時。

這是我所嘗試過的,但答案很遙遠。

33*((255*3)-1) + 17*((33*3)-1) + 11*3 

ldi - 1個時鐘週期,brne 1或2個時鐘週期

架構:ATmega8535的

+0

'ldi r23,$ FF;初始化第三循環計數器17' < - 您的評論與代碼不匹配。您在嘗試計算時也使用了17和33。你從哪裏得到這些價值?如果你想盡可能延遲,不應該把計數器初始化爲0嗎? – Michael

+0

哪個架構是?將它添加到標籤 –

回答

2

對於初學者來說,最長的環路將加載0FF櫃檯,但我們堅持FF所以我們得到了預期的答案。用FF循環運行254次並在255日退出。

通式爲1ldi(n-1) * (body + 3)爲全面迭代(1dec2brne)和(body + 2)爲最後一個(dec11爲不採取brne)。 body意味着無論在循環體中,對於0的最內層循環,因爲它是空的。

因此,對於最內層循環:1 + 254 * (0 + 3) + (0 + 2) = 765。 對於中間循環,body是來自最內層循環的765,因此我們有:1 + 254 * (765 + 3) + (765 + 2) = 195840。 對於最外層循環body195840從中間循環,因此 我們有:1 + 254 * (195840 + 3) + (195840 + 2) = 49939965這是預期的答案。

+0

我現在有點困惑(身體+3)所以ldi運行一次所以1然後dec和brne運行254次所以不會是最後循環2 * 254 brne是2所以整個事情看起來像1 + 2 * 254 + 2 – Higeath

+0

你交換了'brne'的時間,當它跳回時它需要2個時鐘,在循環中需要2個時鐘,當它不跳轉時需要1個時鐘,是最後一次迭代。 – Jester

+0

我現在明白了,謝謝:)我不是要給你帶來負擔,但你能告訴我延遲會是什麼,例如,循環r23,$ 06,r24,$ FD,r23,$ DD;這是很難遵循所有相同的數字我對這些的答案是1174836時鐘週期我試圖在Excel中重新創建它,所以我不必每次計算它 – Higeath