1.计数方式时,通过引脚P34,P35对外部脉冲信号进行计数
2.当输入脉冲信号产生由1到0的下降沿时,定时器的值加1,在每个机器周期,cpu采样引脚P34,P35的输入电平,若前一个机器周期采样值为高,下一个机器周期采样值为低,则计数器加1
注意定时器值加1和计数器加1
#include "include.h"
unsigned int count_f=0;
unsigned int dat_f=0;
unsigned int count_t=0;
void Timer0Init1() //@12.000MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x06; //设置定时器模式
TL0 = 0xff; //设置定时初值
TH0 = 0xff; //设置定时重载值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1;
}
void Timer1Init(void) //1毫秒@12.000MHz
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x20; //设置定时初值
TH1 = 0xD1; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1;
EA = 1;
}
void main()
{
allint();
Timer0Init1();
Timer1Init();
//UartInit();
while(1)
{
if(dat_f>10000)
smg_display(0,dat_f/10000);
if(dat_f>1000)
smg_display(1,dat_f%10000/1000);
if(dat_f>100)
smg_display(2,dat_f%1000/100);
if(dat_f>10)
smg_display(3,dat_f%100/10);
smg_display(4,dat_f%10);
}
}
void time0() interrupt 1
{
count_f++;
}
void time1() interrupt 3
{
count_t++;
if(count_t>=1000) //1s
{
dat_f = count_f;
count_f = 0;
count_t = 0;
}
}