作者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