|
发表于 2008-1-10 16:03:39
|
显示全部楼层
我看懂了!谢谢崂山老师!
[ 思考题:设计一段程序代码,当用户连续按下音量减小键后,判定音量寄存器09H的存储音量数值,防止该寄存器的值从0 变成255,以免震惊到用户。]
SMALL_SOUND: nop
decfsz 9H
goto OK
incf 9H
OK: nop
另外:
[ 思考题:利用decfsz 指令设计一段延时代码,使得延时时间可以在10个机器周期到65535个机器周期之间 。。。。]
给出的程序是不是会有下面的问题?
1)置数24086 (5E16H), jixu:得到的延时时间是(5E - 1)H * 256 * 3T + (5E - 1)H x 5T + 16H x 3T = 71955T
因为:0A寄存器减1用3T,0B寄存器减1用5T,当0B寄存器的数为 01H 时,运行decfsz 0BH 只要2T就结束了
(少了256*3T);
2)如果0B寄存器内的初始置数是0,如:10(0AH), 11(0BH), ... 255(0FFH), 无条件运行decfsz 0BH后,0B寄存器内数为
255, jixu:得到的延时时间将会非常长;
3)同样,如果0A寄存器内的初始置数是0,如:256(100H), 512 (0200H), 768 (0300H),.... 会多延时255* 3T ,因为无
条件运行decfsz 0AH后,0A寄存器内数为255(不为0),没有跳转,0B寄存器没有减1。
就是说:初始置数是256(100H) --〉延时时间(256*3 + 2)T = 770T;
初始置数是257(101H) --〉延时时间(2 + 2)T = 4T;
我是跟贴初学PIC汇编,可能是我理解错了。
再次谢谢崂山老师!
[ 本帖最后由 Julie 于 2008-1-11 06:16 编辑 ] |
|