[語法] 請問一個組語的計時程式問題?

看板ASM (組合語言)作者 (阿其)時間17年前 (2007/07/09 15:52), 編輯推噓3(300)
留言3則, 2人參與, 最新討論串1/1
※ [本文轉錄自 C_and_CPP 看板] 作者: cczeke (阿其) 看板: C_and_CPP 標題: [語法] 請問一個組語的計時程式問題? 時間: Mon Jul 9 15:14:15 2007 小弟最近正在自學組合語言 在寫一個範例時遇到一個問題 不知道那位大大可以幫我解答一下@@ 下面是每秒要P3.2反向一次的程式 COUNT EQU 9217 CHECK EQU P3.2 ORG 0000H MOV R0,#00H DJNZ R0,$ CLR CHECK MOV SP,#40H MOV R1,#100 <-----------問題 MOV TMOD,#01H CLR TF0 MOV TH0,#(65536-COUNT)/256 MOV TL0,#(65536-COUNT)MOD 256 SETB TR0 LOOP: JNB TF0,LOOP CLR TF0 MOV TH0,#(65536-COUNT)/256 MOV TL0,#(65536-COUNT)MOD 256 DEC R1 DJNZ R1,LOOP CPL CHECK MOV R1,#100 <------------問題 AJMP LOOP END 這個程式是以原本 10MS 反向一次 然後改成 10MS 計數100次之後再反相一次 這樣理論上應該會變成每 10MS * 100 = 1S 反相一次 可是把程式燒進晶片之後發現實際上是每0.5S的反相一次 後來我測試之後發現 R1如果是單數的話不會有動作 例如 R1=1 無動作 R1=2 有動作 …R1=99 無動作 R1=100有動作 因此100實際上只計數了50次 造成晶片實際上每0.5S才反相一次 所以請問會組語的大大 不知道能不能幫小弟解決這個煩惱@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.179.145 cczeke:轉錄至看板 ASM 07/09 15:14 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.179.145

07/09 17:25, , 1F
會不會是沒把指令週期算進去?
07/09 17:25, 1F

07/09 17:32, , 2F
剛有大大幫我解答了 因為DJNZ、DEC都會把R1值-1 所以出錯了
07/09 17:32, 2F

07/09 17:54, , 3F
對喔,忘了djnz會自動減
07/09 17:54, 3F
文章代碼(AID): #16aUamoi (ASM)
文章代碼(AID): #16aUamoi (ASM)