每次中断就累加:
void Timer1_Isr(void) interrupt 3 //计数器中断服务函数
{
Count_T1 ++; //T1引脚检测到十个脉冲就会溢出一次
//计数结果,我们用ISP上的8段数码管显示出来
//不能用试验箱的数码管,因为实验箱上数码管刚好用了P35!
}
T1引脚检测到10个脉冲就会溢出一次
不能每次都触发中断,否词CPU没时间处理其他业务
系统就不稳定了。 中断其实次数越少越好
那么还要记得10次以下的,也要加上:
这次我们不能用试验箱上的数码管了,P35冲突:
计数结果,我们用ISP上的8段数码管显示出来
//不能用试验箱的数码管,因为实验箱上数码管刚好用了P35!
定时器1测量INT1引脚低电平脉冲宽度
任务2:编写INT1测量低电平时间
(由按键模拟信号,.100us的计数周期计数!)
还是用定时器计算器产生初始化函数:
这个一定要学会用:
void Timer1_Init(void) //100微秒@24.000MHz
{
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x38; //设置定时初始值
TH1 = 0xFF; //设置定时初始值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //使能定时器1中断
}
定时器1 的初始化完成后,我们在中断服务函数里要检测的是:
void Timer1_Isr(void) interrupt 3
{
static u32 count_p33 = 0;
if( P33 == 0 ) //按键按下开始计数
{
count_p33 ++ ;
}
else
{
if( count_p33>0 ) //表示之前按下了这个按键
{
Count_T1 = count_p33;
}
count_p33 =0;
}
}
变量Count_T1保存的值就是我们需要的实际时间!
这里输出是有个技巧的:
void T1_RunTask(void)
{
//SEG7_ShowLong(Cqunt_T1,10);//显示整数
SEG7_ShowString("%07.02f",((float)Count_T1)/10);
//07的意思啊保留7为整数,02就是保留2位小数
//这样把浮点数用字符串表示出来,直接就是
//多少毫秒了
}
浮点数用字符串表示出来!
编译连接下载:
我们按下松开,大约是200ms
(float)Count_T1 是先转换为浮点数
1/10 自然有小数: 然后再保留一位小数:
%07.01f 7位整数
这样就有整有零:
当然可以拓展到上次按下和本次按下的时间测量...........
计数产品出来的感应器应用:
好了,第十五课到此结束!
今天我们继续学习第十六集 DS18B20测温
这个就很传统啦,STC85C52RC试验箱上也有:
DS18B20简介
DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
优点如下: