历史上的今天
今天是:2025年01月21日(星期二)
2020年01月21日 | MSP430随机数产生器
2020-01-21 来源:eefocus
//*****************************************************************************
// MSP430-随机数的产生
// Built with IAR Embedded Workbench Version: 3.42A
// 程序功能:产生一个16位的随机数
// 原理:
// AD输入口处于悬浮状态,这样输入的是一个不确定的数字
// 转换结果的最后一位尤是如此,转换16次(也可以不是16次,
// 但最大只能是16次,为什么?)后,这16次里有X次转换结果
// 的LSB是1,则把x放在randomNUM的最高四位,第2次循环得出的
// x与第1次的异或,结果放次高四位,依次类推;为什么这样处理
// 就是让数据更”乱“更“随机”,甚至还可以不同循环里的采样率也不同
// *******************************************************
// 本人遵循技术开放、广交天下朋友的原则,该程序可由任何人
// 修改使用。如有大虾修改了更为完善的该软件,请发送一份给本
// 人。谢谢!
//*********************************************************
#include "msp430x44x.h"
unsigned char times=0;
unsigned char cyc;
unsigned int randomNUM;
unsigned int OneNums,temp;
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
unsigned int i;
P6DIR = 0;
P6SEL = 0x01;
ADC12CTL0 &= ~ENC;
ADC12CTL0 = ADC12ON+SHT0_6+REFON+MSC;
ADC12CTL1 |= ADC12SSEL0 + SHP+CONSEQ_2;
ADC12MCTL0 = INCH_0+SREF_1; //通道0
for(i=0;i<7000;i++)
{;}
ADC12IE |= 0x01;
ADC12CTL0 |= ENC;
_EINT();
ADC12CTL0 |= ADC12SC;
while(1)
{
LPM3;
if(cyc==1)//第1次循环
{
randomNUM = OneNums<<12;
temp=OneNums;
OneNums = 0;
continue;
}
if(cyc==2)//第2次循环
{
randomNUM |= (OneNums^temp)<<8;
temp=OneNums;
OneNums = 0;
continue;
}
if(cyc==3)//第3次循环
{
randomNUM |= (OneNums^temp)<<4;
temp=OneNums;
OneNums = 0;
continue;
}
if(cyc==4)//第4次循环
{
randomNUM |= OneNums^temp;
temp=0;
OneNums = 0;
cyc=0;
}
//randomNUM即为产生的16位随机数,以下程序用户自行添加
_NOP();
}//while
}
#pragma vector=ADC_VECTOR
__interrupt void ADC12chanle(void)
{
unsigned int pp=0;
if (times<16)
{
pp = ADC12MEM0 ;
times++;
//if(ADC12MEM0 & 0x01)不就oK了?为什么还要弄个局部变量pp?
if(pp & 0x01)
{
OneNums++;
}
}
else
{//一次循环,16次采样结束
cyc++;
times=0;
LPM3_EXIT;
}
}
上一篇:msp430程序升级方法
下一篇:MSP430常见问题解答
史海拾趣
|
在Wince里创建了cmnet进行GPRS拨号连接,但是连接属性里的拨号地点默认是“单位”,这样会导致拨号码前多了一个“9”,变成“9,*99***1#”,拨号连接不成功。必须手动将拨号地点改为“住宅”才行。 请问大家,如何设置能够使拨号地点默认为“住宅 ...… 查看全部问答> |
|
SESSION_POS_S *pTestpos1, *pTestpos2, *pTestpos3, *pPos; LIST *pMyList = NULL; int NodeIndex = 0; DPRINT(\"-------- lstAdd测试 -------\\n\" ...… 查看全部问答> |
|
高手解惑,关于 镜像 bib 内存映射 bootloader 的问题 我现在用 TI 的 OMAPV1030 遇到一个不解的问题 这个芯片物理地址是这样的: 0x0000 0000 - 0x0000 5FFF 24K ROM code ... 0x0C00 0000 - 0x0FFF FFFF 64M nand flash ... 0x1000 0000 - 0x13FF FFFF 64M 外部 RAM ... 0x2000 0000 - 0x200 ...… 查看全部问答> |
|
10款典型实验室电路推荐之四:ADXRS450 是一款数字输出陀螺仪,主要用于医疗、工业、仪器仪表、稳定和其它高性能应用。这款陀螺仪具有极佳的抗冲击和振动能力,适合恶劣环境下的应用。 … 查看全部问答> |




