工具/软件:TI C/C++编译器
您好,
我一直在解决这个问题,真的需要别人的帮助。 我正在尝试使用微控制器的浮动引脚1.5 生成一个5位随机数。 我使用记录的ADC10信号的LSB并使用移位寄存器生成5位随机数。 然后将该5位随机数转换为十进制数(0-31),并将P1OUT设置为等于我获得的十进制数。 这是因为我想让WFP 1.0 到WFP 1.4 在随机的时间高一点。 问题是除了WFP 1.2 之外,所有的针脚都很高,而且保持在很高的位置,这根本不是我想要的。 我希望他们在任意时间都能高而低。
这是我的代码。 我认为我并不是真的生成一个随机数。 请帮助!
#include "msp430G2553.h"
#include <stdint.h>
void ConfigureADC(void)
{
ADC10CTL1 |= inch_5;// 从WFP读取1.5 ,浮动销
ADC10CTL0 |= SREF_1 + ADC10ON + ADC10IE
;
易失性uint8_t A0;//随机存储8位rn = 8位 //通过5位
的循环易失性uint8_t dec; //十进制值0-31
易失性uint8_t rem; //余数
易失性uint8_t base = 1; //base
void main( void )
{//
停止看门狗计时器
WDTCTL =(WDTPW | WDTHOLD);
//将范围设置为16MHz
BCSCTL1 = CALC1_16MHz;
//将DCO步进和调制设置为16MHz
DCOCTL = CALDCO_16MHz;
P1SEL || 0x40; //将WFP 1.6 的特殊功能设置为定时器模块
P1DIR |=0x5F; //设置为输出方向
P1OUT |= 0x00; //设置为WFP 1.0 On, WFP 1.1 Off
ConfigureADC();
__enable_interrupT();//
启用中断,同时(1){
ADC10CTL0|= ENC + ADC10SC; //采样和转换开始
__bis_sr_register(CPUOFF + GIE);
//生成5位ADC并转换为十进制数
while (n !=0)(当[n !=0))
{
While (ADC10CTL1和ADC10BUSY);
A0 = ADC10MEM和0x01;
IF (A0)
{// comp. if LSB is 1.
n-;
rn ^=(1<<n);
}
//如果是,则将LSB =1保存为左移
//注册RN
否则,如果(!A0)
{
n-;
rn ^=(0 <<n);
}
}
//如果不是,则将LSB =0保存为左移
//注册RN
//将5位随机数转换为十进制数
当(RN > 0)
{
REM = RN % 10;
Dec = dec + rem * base;
基数=基数* 2;
rn = rn / 10;
}
如果(!n)
{
N = 6;
}
如果( dec )
{
P1OUT =决定
;}
}
}//
ADC中断服务例程
#pragma vector = ADC10_vector
__interrupt void ADC10_ISR( void )
{
__BIC_SR_REGISTER_ON_EXIT(CPUOFF);//返回活动模式
}