close
標題:

8051程式的語法錯誤?

發問:

我目前正在寫8051控制步進馬達的程式指令碼,突然在延遲時間的 部份出現了錯誤? 我是照著書上面打的 指令如下 movtl0,#<(2**16-10000).mod.32 movth0,#>(2**16-10000)/32 有錯誤的地方應該是(2**16-10000)這部份 但是我不知道是要怎麼 改,麻煩大家告知一下 謝謝 更新: 我把延遲時間的部份貼上來 這樣比較容易了解問題原因 Delay_10ms: movtmod,#00000001b movtl0,#<(2**16-10000).mod.32 movth0,#>(2**16-10000)/32 setbtr0 Timer_wait: jbctf0,Timer_Ok jmpTimer_wait Timer_Ok: djnzr7,Delay_10ms clrtr0 ret end

最佳解答:

movtl0,#<(2**16-10000).mod.32 movth0,#>(2**16-10000)/32 這兩行我用2500AD的編譯器是沒發生錯誤 但是這兩行的運算用法有點怪怪的 第一行看起來像是要取出除以32之餘數 第二行看起來像是要取出除以32之商數 可是在算式最前都用了 < 及 > 這< 及 > 是用來取出算式結果的低位元組與高位元組 所以看起來用法不合邏輯 合理的算式,要不是應該為 movtl0,#(2**16-10000).mod.32 movth0,#(2**16-10000)/32 或者是 movtl0,#<(2**16-10000)/32 movth0,#>(2**16-10000)/32 你必須要了解你的程式要得到什麼運算結果,才知道算式要怎樣寫 2007-08-28 08:17:24 補充: 如果是delay 10mS,最後式子應該是 movtl0,#<(2**16-10000) movth0,#>(2**16-10000)

其他解答:

aa.jpg

 

此文章來自奇摩知識+如有不便請留言告知

或許你的組譯器沒有支援這部份的運算, 不過你的式子真的有點怪, 所以你還是用計算機直接算出 計時10ms所需的TH0,TL0的值, 這樣反而會比較容易些FBEFE3C2E0474026
arrow
arrow

    ceui4w8 發表在 痞客邦 留言(0) 人氣()