按书上抄的一个频率计实验.
T0每2.5ms中断一次(TH0=0xfe),4次即10ms.
T1作为计数器,用来保存10ms内机器周期的个数.并显示出来.
理论分析,10ms内计到的周期数应是10ms/12/11.0592MHz=9216次,所以频率应该是921.6KHz.但程序显示的是115.1KHz.
为什么? 程序如下 proteus仿真图见附件
顺便问一下,在proteus中4060如何使用? 谢谢大侠们的回答
#include <reg51.h>
unsigned char dispbuf[4];
unsigned int period;
unsigned int timecount=0;
unsigned int count_1s;
unsigned char code table[]={0x42,0xee,0x58,0x68,0xe4,0x61,0x41,0xea,0x40,0x60};
HEX_TO_BCD(unsigned int n)
{
dispbuf[3]=n/1000;
dispbuf[2]=(n/100)%10;
dispbuf[1]=(n/10)%10;
dispbuf[0]=n%10;
}
void scandisp(void)
{
unsigned char posi=0x01;
unsigned char i,j,temp;
for(i=0;i<4;i++)
{
temp=dispbuf;
temp=table[temp];
if(i==1) { for(j=0;j<200;j++) {P2=posi;P0=temp & 0xbf;}}
else { for(j=0;j<200;j++) {P2=posi;P0=temp;}}
posi<<=1;
}
}
void INIT_TMR1INT(void)
{
TMOD=0x11;
ET1=1;
ET0=1;
EA=1;
TR0=1;
TR1=1;
}
void timer0(void) interrupt 1
{
TH0=0xf7;
if(++count_1s>4)
{
count_1s=0;
timecount=TH1*256+TL1;
TL1=0x00;
TH1=0x00;
period=timecount/10;
if((timecount%10)>4) period++;
timecount=0;
HEX_TO_BCD(period);
}
}
void main(void)
{
INIT_TMR1INT();
while(1)
{
scandisp();
}
}
proteus.rar
(2008-08-30 01:21:08, Size: 15.1 KB, Downloads: 0)
