This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430FR4133:使用汇编器旋转指令

Guru**** 2589265 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/637502/ccs-msp430fr4133-using-assembler-instructions-to-rotate

部件号:MSP430FR4133

工具/软件:Code Composer Studio

大家好,

我正在使用我的MSP430以一个圆圈的方式点亮8个LED。 我希望每个LED依次亮起,然后返回到开头。 我的方法是使用通用寄存器R5 (较低的字节)来存储当前LED。 我稍后会对每个位进行比较,以确定打开哪个LED。

我正在编写两段代码,一段用于增加当前LED,另一段用于减少:

MOV.W #0x01,R5 ;将通用寄存器R5设置为1。

;------------------
; 这个主循环无限期地执行
;------------------
主要: 无操作 ;主程序
;BIS.W #LPM0+GEE,SR ;输入带中断的LPM0
JMP ledDown

ledUp: RLA.B R5 ;左移R5 (仅前8位)
Jnc. 主 ;如果不携带,则跳转,即如果不在LED 8上
MOV.W #0x01,R5 ;如果携带,即LED 8亮起,则返回到1
JMP 主 ;返回

ledDown: RA.B R5 ;右移R5 (仅前8位)
Jnc. 主 ;如果不携带,则跳转,即如果不在LED指示灯1上,则跳转
MOV.W #0x80,R5 ;如果携带,即LED指示灯1亮起,则返回到8
JMP 主 返回
;------------------ 

ledUp部分按我的预期工作。 当我逐步执行代码时,R5更改如下:

R5 = 0000 0001

R5 = 0000 0010

R5 = 0000 0100

R5 = 0000 1000

R5 = 0001 0000

R5 = 0010 0000

R5 = 0100 0000

R5 = 1000 0000

R5 = 0000 0001

R5 = 0000 0010   等等

但是,当我使用ledDown句段时,我得到以下信息:

R5 = 0000 0001

R5 = 1000 0000

R5 = 1100 0000

R5 = 1110 0000

R5 = 1111 0000

R5 = 1111 1000

R5 = 1111 1100

R5 = 1111 1110

R5 = 1111 1111

R5 = 1000 0000   ,这不是我想要的。

有人能告诉我为什么这是因为我正在努力单独使用数据表来解决问题吗? 当我使用ledDown时,我不知道为什么它会继续生产更多的1,而不是仅仅将现有的1向右移动。 当然,它的行为应该像一个算术/2

我们非常感谢您提供任何解决方案!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    RRA的操作等于2的签名除法。 MSB被保留并转移到MSB–1中。

    不要使用字节转换,而是使用字转换,这样一切都可以正常工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    完美。 谢谢!