assembly - pic汇编中如何计算超过255?

标签 assembly counter pic

我需要计算来自串口的字节数,并在超过 300 时执行某些操作,但内存地址只能从 0 计数到 255,而且我不知道如何计数超过 255

抱歉,这是一个愚蠢的问题,但我没有 asm 开发经验......

PD:我知道我可以用 C 语言对图片进行编程,但我正在编辑一些以前为工作中的其他人制作的软件

图片16f77

COUNT
    INCF COUNTRX,1
    MOVLW D'255'  ;need these value over 300 
    MOVWF VALUE         
    MOVF COUNTRX,W
    SUBWF VALUE,W
    BTFSS STATUS,0      
    GOTO ITSVALUE
    GOTO NOTITSVALUE

最佳答案

有多种方法可以做到这一点,但是您需要额外的变量来存储大于 255 的结果:

1)使用额外的第九位,这样您就可以数到 511 (2^9 - 1)。

;Data memory definition
    SomeVariable  SET 1 
    #define  CountRxBit9        SomeVariable, n    ;define CountRxBit9 bit vhere n is in range 0..7
;... 
;Clear variable
    CLRF   COUNTRX
    BCF    CountRxBit9
;...
;increment COUNTRX     
    INCF   COUNTRX,1
    BTFSC  STATUS, 2     ;Test Zero flag after increment
    BSF    CountRxBit9   ;Set ninth bit if ZERO is one

2)使用一个额外的字节,这样您就可以数到 65535 (2^16 - 1)。

;Data memory definition
    HighCountRxBit   SET 1 
;... 
;Clear variable
    CLRF   COUNTRX
    CLRF   HighCountRx
;...
;increment COUNTRX     
    INCF   COUNTRX,1
    BTFSC  STATUS, 2     ;Test Zero flag after increment
    INCF   HighCountRx, 1;Increment high byte of counter if ZERO is one

关于assembly - pic汇编中如何计算超过255?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18876540/

相关文章:

assembly - 使用 Masm + LOCALS 在 Windows 上的 x64 程序集中正确设置堆栈指针

汇编中的 C++ 类函数

assembly - 相当于 Gfortran 中的 asm volatile ?

c - PIC18F2550内存游戏PIC C18编程LED灭

assembly - 为什么 cmp $0xffffffffffffffff, %edi 用于汇编?

javascript - 触发功能并同时打开URL

python - 从 Counter 中删除最不常见的元素

javascript - 如何倒计时该月的每个星期日?

c - usb_device.c 文件的微芯片问题,出现我无法解决的错误

c - PIC 和 XC8 编译器问题