#include<reg52.h>
#include<stdlib.h> //包含rand()随机函数的头文件
#include <stdio.h> /* prototype declarations for I/O functions */
/*------------------------------------------------------------------------------
HELLO.C
Copyright 1995-2005 Keil Software, Inc.
------------------------------------------------------------------------------*/
#ifdef MONITOR51 /* Debugging with Monitor-51 needs */
char code reserve [3] _at_ 0x23; /* space for serial interrupt if */
#endif /* Stop Exection with Serial Intr. */
/* is enabled */
unsigned char t,k,i,j,a,f,n[10];
//t是计时变量,k是按键标志,i是数组下标,f是随机数重复标志,n[10]是存放随机数的数组
void init() //初始化函数
{
t=0;
i=0;
f=0;
k=0;
TMOD=0x21; //设置定时器0,1为工作方式2:8自动重装定时器/计数器
TH0=(65536-65535)/256;
TL0=(65536-65536)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时0
EX0=1; //开外部中断0,同按键的效果一样
IT0=1; //下降沿触发
#ifndef MONITOR51
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
//TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 221; /* TH1: reload value for 1200 baud @ 16MHz */
TR1 = 1; /* TR1: timer 1 run */
TI = 1; /* TI: set TI to send first char of UART */
#endif
}
void main()
{
//unsigned char tmp_t,tmp_i;
unsigned int i,j;
init();
while(1)
{
while(k) //外部中断0触发循环
{
k=0;
P3=0xff;
srand(TL0);
i=TL0%8;
j=TL0%8;
printf("rand=%d %d\n",i,j);
}
}
}
void inter0() interrupt 0 //外部中断0
{
k=1; //按键标志置1,主函数执行取随机数
}
void time0() interrupt 1 //定时器0中断
{
TH0=(65536-65536)/256; //取低8位
TL0=(65536-65536)%256; //取高8位
}
这个是代码,思路是从定时器里取数。
|