原创 [实例代码] 随机数

2010-6-10 11:50 2233 6 6 分类: 模拟

论坛上有人问51获取随机数的问题,个人觉得要求不高的话可以用读取定时器TL值来获取,写了个

简单的程序,经验证是可以用的

/***************************淘宝:http://quanmao.taobao.com/*********************************
程序名:    随机数
编写人:    李全茂 
编写时间:  2010年6月10日
硬件支持:  WJ4.0 51开发板,晶振12M  LCD1602
接口说明:  P0口接led
修改日志:  
  NO.1-
/********************************************************************************************
说明: 获取随机数的演示程序,  通过读取定时器TL的值作为随机数,送到P0口接的LED显示。

/************************技术论坛:http://www.wang1jin.com/bbs/ ****************************/

#include "reg51.h

// [定时/计数器函数]
//
// -----------------------------------------------------------------------------
// M1 M0 方式 说明
// 0 0 0 13位T/C,由TL低5位和TH的8位组成13位计数器
// 0 1 1 16位T/C,TL和TH共16位计数器
// 1 0 2 8位T/C,TL用于计数,当TL溢出时将TH中的值自动写入TL
// 1 1 3 两组8位T/C
// -----------------------------------------------------------------------------

/*********************************************************************************************
函数名:定时/计数器初始化函数
调  用:T_C_init();
参  数:无
返回值:无
结  果:设置SFR中T/C1和(或)T/C0相关参数
备  注:本函数控制T/C1和T/C0,不需要使用的部分可用//屏蔽
/**********************************************************************************************/
void T_C_init (void){
 TMOD = 0x20; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]
 EA = 1; //中断总开关
 
 TH1 = 200; //16位计数寄存器T1高8位(写入初值)
 TL1 = 200; //16位计数寄存器T1低8位
 ET1 = 1; //T/C1中断开关
 TR1 = 1; //T/C1启动开关
 
 //TH0 = 0x3C; //16位计数寄存器T0高8位
 //TL0 = 0xB0; //16位计数寄存器T0低8位(0x3CB0 = 50mS延时)
 //ET0 = 1; //T/C0中断开关
 //TR0 = 1; //T/C0启动开关
}

/*********************************************************************************************
函数名:delay_ms(unsigned int msec)
参  数:msec,int型,以ms为单位,
返回值:无
结  果:
备  注:不精确延时,12M晶振
/********************************************************************************************/
static void delay_ms(unsigned int msec)
{
    unsigned char TempCyc;
    while (msec--)
    {
        for (TempCyc=0; TempCyc<114; TempCyc++);
    }
}

 

void main()
{
 T_C_init(); 

 P0 = TL1; //先读取一下,这个不是必须的,根据试验每次加电后在这里读到的都是固定值
 
 while(1)
 {
  delay_ms(TL1); // 通过延时(这里延时的时间也是随机的),防止得到的随机属重复
  P0 = TL1; // 将随机数送的P0的显示
 }

}


                             FM调频发射机点击购买                                          WJ-4.0 51开发板热卖


文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条