|
外部输入引脚P3.4边沿触发技术增加,初始化完成后,计数器的TH0和TL0的值在一个固定值上下波动,通过软件清零也只能维持一段时间0,且外部输入不能使得计数器计数
#include <STC12C5A60S2.H>
#include "LCD1602.H"
#include "Delay.H"
unsigned int ticks=0;//时钟中断计数,一直更新
unsigned int Freq_t=0;
void Timer0_Init(void)//频率计数器,当T0/P3.4为高时计数
{
TMOD = 0x15;//设置计数器0模式0001 0101
TL0 = 0x00;
TH0 = 0x00;
TF0 = 0;//清除TF0标志
TR0 = 1;//定时器0开始计时
}
void Timer1_Init(void)//10毫秒@11.y0592MHz
{
ET1 = 1;//中断控制器
AUXR = 0xFF;//定时器时钟12T模式1011 1111
TL1 = 0x00;//设置定时初始值
TH1 = 0xDC;//设定时初始值
TF1 = 0;//清除TF1标志(中断请求信号)
TR1 = 1;//定时器1开始计时(运行控制位)
}
/*定时器1中断操作函数,读取计数器0的值,计数器0清0*/
void Timer1_Routine(void) interrupt 3
{
//1s内计数高电平个数得到频率
if(ticks==1000){
Freq_t =((TH0<<8)|TL0);//读取计数器0,16位二进制
LCD_ShowNum(1,1,Freq_t,5);
Freq_t=20000;
LCD_ShowNum(1,8,Freq_t,5);
LCD_ShowNum(2,1,TH0,3);//显示计数器的值
LCD_ShowNum(2,9,TL0,3);//显示计数器的值
TL0 = 0x00;//计数器0清0
TH0 = 0x00;
ticks=0;
}
TL1 = 0x00;//重装载定时初始值
TH1 = 0xDC;//设置定时初始值.
ticks++;
} |
|