p1.1为高电平时T0开始计数,p1.2为高电平时T0停止计数。记录这段时间内T0所计的次数counter。程序如下,请高手指正。谢谢
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit FB=P1^0;
sbit loop1=P1^1;
sbit loop2=P1^2;
void initial(void)
{TMOD=0X05; // T1工作方式0,T0工作方式1
TH1=0Xf0; // 设定T1的定时时间
TL1=0X0c;
TH0=0X00; // 设定T0的计数初值
TL0=0X00;
IE=0X00;
TR1=1; //启动T1
TR0=0; //禁止T0
}
void delay(uint x) //延时函数
{uint i,j;
for(i=0;i<x;i++)
for(j=0;j<100;j++);
}
void main(void)
{uint temp1,temp2,counter;
initial();
for(;;) //产生周期为1000us的方波
{while(!TF1)
TF1=0;
FB=!FB;
if(loop1=1)
TR0=1; //开始计数
if(loop2=1) //停止计数
{TR0=0;
temp1=TL0;temp2=TH0;
couter=(temp2<<8)+temp1; //记录计数的次数
}
}
}
这个程序是实现什么的?
追答类似于频率计,对外部频率进行计数,然后用数码管显示频率的值
这块怎么放入中断中呢?中断不大会用。
追答void _timer1() interrupt 3
{
TR1 = 0;
TH1=0Xf0; // 设定T1的定时时间
TL1=0X0c;
FB=!FB;
TR1=1;
}
方波部分就中断自行处理。
T0计数你可以用你目前的轮询方式,或者用T0的外部中断触发计数方式