工具/软件:Code Composer Studio
您好!
我希望生成随机二进制数、以便每次在不同频率下打开 P1.0。 同时、我希望在 P1.6上生成 PWM。
为了生成随机数、我使用 DCO 和 VLO 之间的时序差。 我使用 TA0设置 DCO、使用 TA1设置 VLO。 然后、我使用中断矢量暂停 TA0和 TA1、并在 SMCLK 中保存节拍数。 然后、我使用 IF 环路根据每次记录的节拍数 LSB 来切换 P1.0。
TA0和 TA1暂停会导致 PWM 停止工作。 此外、P1.0始终处于高电平。 您能帮我找出我所犯的错误吗?
请参阅以下代码:
//RNG
#include "msp430G2553.h"
#include
void main( void ){
WDTCTL =(WDTPW | WDTHOLD);//停止看门狗定时器
BCSCTL1 = CALBC1_16MHz;//将范围设置为16MHz
DCOCTL = CALDCO_16MHz;//将 DCO 阶跃和调制设置为16MHz
P1SEL |= 0x40;//将 P1.6的特殊功能设置为计时器模块
P1DIR |= 0x41;//将 P1.6、P1.0设置为输出方向
P1OUT |= 0x00;//将 P1设置为关
//设置 DCO
TA0CCR0 = 400;///PWM 频率40kHz
TA0CCR1 = 65;//PWM 占空比
TA0CCTL0 = CAP | CM_1 | CCIS_1 | OUTMOD_7;
TA0CTL =(TASSEL_2 | ID_0 | MC_1 | TACLR | TAIE);// SMCLK、分频器1、上数模式、清零、 启用中断
//设置 VLO
TA1CCR0 = 1200;
TA1CCTL0 = CCIE | OUTMOD_3;
TA1CTL = tassel_1 | MC_1;
_BIS_SR (GIE);//启用全局中断
while (1);//无限循环
}
// Timer0 A1中断服务例程
#pragma vector = TIMER0_A1_vector
__interrupt void Timer0_A1_ISR (void)
{
static uint8_t random = 0;//寄存器保存随机数
TA0CTL = MC_0;//暂停 TA0
TA1CTL = MC_0;//暂停 TA1
随机= TA0R;//保存节拍数 SMCLK
TA0CTL &&~TAIFG;
if (随机)
{
P1OUT = 0x01;
}
否则
{
P1OUT = 0x00;
}
}