sololey 发表于 2013-2-26 21:18:00

pic12f单片机在汇编下如何判断两个数的大小?

pic12f的单片机汇编指令好像只有35条,没看到有比较指令的,不知道如何通过汇编语言实现两个数大小的比较判断呢?

谁知道的可否告知一下?

eblc1388 发表于 2013-2-26 22:26:40

1. X , Y 代表两个数
2. MOVLW Y// 把 Y 放入 W 内
3. SUBLW X   // (X-Y)-->W 及设定旗号
4. 如果 Z=1,则两数相等,完成走人,否则不相等要看步骤(5)
5. 如果 C=1,则 X>Y, 如 C=0, 则Y>X

sololey 发表于 2013-2-27 11:22:52

eblc1388 发表于 2013-2-26 22:26 static/image/common/back.gif
1. X , Y 代表两个数
2. MOVLW Y// 把 Y 放入 W 内
3. SUBLW X   // (X-Y)-->W 及设定旗号


谢谢,明白了,就是现在是想判断计数器1的TMR1H及TMR1L的计数值与某个数比较大小,不知道该如何处理计数值,在汇编中怎么把TMR1H及TMR1L转换成一个整体的数,然后再与某数值比较,35条指令没有乘法指令好麻烦啊

eblc1388 发表于 2013-2-27 16:27:26

>> 汇编中怎么把TMR1H及TMR1L转换成一个整体的数

那不是汇编的问题而是楼主思路的问题。你可以先比较 TMR1H 与另一16位元数的高8位,相等时再比较 TMR1L 与整数的低8位。

注意如果比较时 TMR1 是运行的话,有机会 TMR1L 会溢出,令 TMR1H 增加而导至先前的比较失效。解决办法是:

1. 先停止 TMR1 然後再比较,或
2. 比较 TMR1L 后再一次比较 TMR1H,确保先前的比较并未失效。

sololey 发表于 2013-2-28 08:30:26

eblc1388 发表于 2013-2-27 16:27 static/image/common/back.gif
>> 汇编中怎么把TMR1H及TMR1L转换成一个整体的数

那不是汇编的问题而是楼主思路的问题。你可以先比较 TMR1 ...

之前想过,但是现在做的是红外遥控解码,高低宽度需要一个上下限,比如说引导码9ms,假设需要一个区间8.8ms到9.5ms的话,对应的计数器为0x2260~0x251c,那如果再通过先比较TMR1H再比较TMR1L的话,TMR1H对应的就会有0x22\0x23\0x24\0x25,这个还好比较,但是TMR1L就不好计算了,范围就会是0x00~0xFF了,现在就是纠结在这个点,常温下遥控识别正常,低温零度这样就会出现部分不灵,问题就是定位到解码时间界限上了

sololey 发表于 2013-2-28 09:58:07

看来只能丢弃第八位,高八位再判大一点

eblc1388 发表于 2013-2-28 15:57:59

>> 常温下遥控识别正常,低温零度这样就会出现部分不灵

如使用内部 RC 为时钟,那定时计数就要考虑 PIC 时钟低温工作时的实际频率。
页: [1]
查看完整版本: pic12f单片机在汇编下如何判断两个数的大小?