作者cczeke (阿其)
看板ASM
標題[語法] 請問一個組語的計時程式問題?
時間Mon Jul 9 15:52:15 2007
※ [本文轉錄自 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
1F:推 loveflames:會不會是沒把指令週期算進去? 07/09 17:25
2F:推 cczeke:剛有大大幫我解答了 因為DJNZ、DEC都會把R1值-1 所以出錯了 07/09 17:32
3F:推 loveflames:對喔,忘了djnz會自動減 07/09 17:54