close
html模版



立即點擊


標題

8051程式的語法錯誤?


問題


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


最佳解答


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)


其他答案


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


以上文章來自奇摩知識家,如有侵犯請留言告知


https://tw.answers.yahoo.com/question/index?qid=20070826000015KK10198

263EE75ACB693161
arrow
arrow

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