YangHY 发表于 2026-1-30 19:57:46

每次中断就累加:

void Timer1_Isr(void) interrupt 3                //计数器中断服务函数
{
        Count_T1 ++;                        //T1引脚检测到十个脉冲就会溢出一次

        //计数结果,我们用ISP上的8段数码管显示出来
        //不能用试验箱的数码管,因为实验箱上数码管刚好用了P35!
}

YangHY 发表于 2026-1-30 20:03:26

T1引脚检测到10个脉冲就会溢出一次

不能每次都触发中断,否词CPU没时间处理其他业务

系统就不稳定了。 中断其实次数越少越好

那么还要记得10次以下的,也要加上:

这次我们不能用试验箱上的数码管了,P35冲突:

计数结果,我们用ISP上的8段数码管显示出来
        //不能用试验箱的数码管,因为实验箱上数码管刚好用了P35!

YangHY 发表于 2026-1-30 20:25:07

定时器1测量INT1引脚低电平脉冲宽度

任务2:编写INT1测量低电平时间
(由按键模拟信号,.100us的计数周期计数!)

还是用定时器计算器产生初始化函数:

YangHY 发表于 2026-1-30 20:26:29

这个一定要学会用:

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中断
}

YangHY 发表于 2026-1-30 20:50:18

定时器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保存的值就是我们需要的实际时间!

YangHY 发表于 2026-1-30 20:51:54

这里输出是有个技巧的:

void T1_RunTask(void)
{
        //SEG7_ShowLong(Cqunt_T1,10);//显示整数       
        SEG7_ShowString("%07.02f",((float)Count_T1)/10);
        //07的意思啊保留7为整数,02就是保留2位小数
        //这样把浮点数用字符串表示出来,直接就是
        //多少毫秒了

}

浮点数用字符串表示出来!

YangHY 发表于 2026-1-30 20:53:24

编译连接下载:

我们按下松开,大约是200ms

YangHY 发表于 2026-1-30 20:58:30

(float)Count_T1 是先转换为浮点数

1/10 自然有小数: 然后再保留一位小数:

%07.01f   7位整数

这样就有整有零:



YangHY 发表于 2026-1-30 21:01:15

当然可以拓展到上次按下和本次按下的时间测量...........


计数产品出来的感应器应用:


好了,第十五课到此结束!

YangHY 发表于 2026-1-31 21:47:08

今天我们继续学习第十六集 DS18B20测温

这个就很传统啦,STC85C52RC试验箱上也有:

DS18B20简介

DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

优点如下:

页: 81 82 83 84 85 86 87 88 89 90 [91] 92 93 94 95 96 97 98 99 100
查看完整版本: 第一课 序言《AI8051U的特点》