找回密码
 立即注册
楼主: YangHY

第一课 序言《AI8051U的特点》

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-30 19:57:46 | 显示全部楼层
每次中断就累加:

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-30 20:03:26 | 显示全部楼层
T1引脚检测到10个脉冲就会溢出一次

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

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

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

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-30 20:25:07 | 显示全部楼层
定时器1测量INT1引脚低电平脉冲宽度

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

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

截图202601302025045389.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 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中断
}
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 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保存的值就是我们需要的实际时间!
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 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位小数
        //这样把浮点数用字符串表示出来,直接就是
        //多少毫秒了

}

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-30 20:53:24 | 显示全部楼层
编译连接下载:

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

截图202601302053186300.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-30 20:58:30 | 显示全部楼层
(float)Count_T1 是先转换为浮点数

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

%07.01f   7位整数

这样就有整有零:



截图202601302058261606.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-30 21:01:15 | 显示全部楼层
当然可以拓展到上次按下和本次按下的时间测量...........


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


好了,第十五课到此结束!
截图202601302101127990.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2026-03-03 08:35:54
已绑定手机

5

主题

1092

回帖

1374

积分

金牌会员

积分
1374
发表于 2026-1-31 21:47:08 | 显示全部楼层
今天我们继续学习第十六集 DS18B20测温

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

DS18B20简介

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

优点如下:

截图202601312147057853.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-6 03:38 , Processed in 0.114006 second(s), 76 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表