两个无符号16位数相乘(MSP430)

针对没有硬件乘法器的MSP430系列

R11 * R12 -> R15|R14
R11,R12为两无符号数;
R15,R14为乘积,其中R15为高字,R14为低字

简单思路:R12个R11累加起来就是他们的乘积

程序如下:
                CLR R14
                CLR R15
               CLRC
LOOP    ADD R11,R14              ; R11+R14-->R14
              ADC R15                        ;把进位位加到R15中
              DEC R12                        ;R12-1h
             JNZ  LOOP                      ;反复加

主要的程序虽然可以乘法功能,但是却非常耗时(最大为4*FFFFh周期)。

因而可以采用移位的方法。


参考程序如下:
 CLR R14
 CLR R15
 CLR R13
 MOV #1,R10
LOOP1 BIT R10,R11
 JZ LOOP2
 ADD R12,R14
 ADDC R13,R15
LOOP2  RLA R12
 RLC R13
 RLA R10
 JNC LOOP1

此参考程序出于魏小龙老师编写的《MSP430系列单片机接口技术及系统设计实例》

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 MSP430F5529 单片机进行串口通信的示例代码。 主控单片机(发送方)代码: ```c #include <msp430.h> void UART_Init() { // 配置串口引脚 P3SEL |= BIT3 + BIT4; // 配置波特率(假设为9600) UCA0CTL1 |= UCSWRST; UCA0CTL1 |= UCSSEL_2; // 选择 SMCLK 作为时钟源 UCA0BR0 = 6; UCA0BR1 = 0; UCA0MCTL = UCBRS_0 + UCBRF_13 + UCOS16; // 启用串口 UCA0CTL1 &= ~UCSWRST; UCA0IE |= UCRXIE; // 启用接收中断 } void UART_SendByte(unsigned char data) { while (!(UCA0IFG & UCTXIFG)); // 等待发送缓冲区空 UCA0TXBUF = data; // 发送据 } int main(void) { WDTCTL = WDTPW | WDTHOLD; // 停用看门狗定时器 UART_Init(); while (1) { UART_SendByte(0xAA); // 发送据 __delay_cycles(100000); // 延时 } } ``` 从设备单片机(接收方)代码: ```c #include <msp430.h> void UART_Init() { // 配置串口引脚 P3SEL |= BIT3 + BIT4; // 配置波特率(假设为9600) UCA0CTL1 |= UCSWRST; UCA0CTL1 |= UCSSEL_2; // 选择 SMCLK 作为时钟源 UCA0BR0 = 6; UCA0BR1 = 0; UCA0MCTL = UCBRS_0 + UCBRF_13 + UCOS16; // 启用串口 UCA0CTL1 &= ~UCSWRST; UCA0IE |= UCRXIE; // 启用接收中断 } #pragma vector=USCI_A0_VECTOR __interrupt void USCI_A0_ISR(void) { unsigned char data = UCA0RXBUF; // 接收据 // 处理接收到的据 // ... UCA0IFG &= ~UCRXIFG; // 清除接收中断标志 } int main(void) { WDTCTL = WDTPW | WDTHOLD; // 停用看门狗定时器 UART_Init(); __bis_SR_register(GIE); // 全局中断使能 while (1) { // 主循环中可以进行其他操作 // ... } } ``` 这是一个简单的示例,其中一个单片机作为发送方,另一个单片机作为接收方。两个单片机之间通过串口进行通信。您可以根据您的需求自定义据的发送和接收处理逻辑。请注意,上述代码仅供参考,请根据您的具体硬件配置和需求进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值