历史上的今天
今天是:2024年08月25日(星期日)
2021年08月25日 | 51单片机-输入捕获
2021-08-25 来源:eefocus
1.捕获高电平时间
我们利用定时器0的计数功能实现捕获外部引脚的高电平时间。定时器在不同用法里有不同称呼,比如我们这次是想得知某段过程持续了多长时间,用定时器的计数方式的话就叫做计数器。
我们这次选用的外部引脚还是P1.6,初始时先让该引脚输出低电平。
我们之前没有说过当TMOD低四位里的第三位GATE为1时是什么作用,这里说明一下,当这个位被置1的话,如果此时有“TR0=1;”,且P3.2必须为高电平的时候,才会触发定时器0的计数(P3.2为低电平时不会触发),也就是TL0每隔(12/11059200)秒就会加1,加到256变为0之后TH0就加1。一直加到65535就会有“TL0=255;”和“TH0=255;”,再加1就会全部变为0,这里复习以前讲过的知识。
所以我们把P1.6和P3.2连接起来,在 TR0置1时,只要P1.6输出高电平就会开启计数功能,P1.6输出低电平时就会停止计数功能。我们再用左边三个数码管显示TH0的数,右边三个显示TL0的数。
所以我们打算这样做
P1.6=0;
TR0=1;
P1.6=1; //开始计数
delay_ms(30); //延时一段时间
P1.6=0; //停止计数
代码先用软件测试一下“delay_ms(30);”到底真正花费多少时间。

所以P1.6保持了41.784ms的高电平时间。
用杜邦线把P1.6和P3.2连接起来之后,注意我们的延时时间不要超过71ms,也就是高电平持续的时间不能超过71ms,这跟定时时间一次定不了71ms一样。因为计数最高只能到65535。
2.代码
把代码下载进去,观察数码管显示的数值。
#include #include //请用杜邦线把P1.6和P3.2连接起来 void main() { LED_Init(); //初始化LED硬件模块 TMOD=0x09; //低四位 1001 BEEP=0; //先让P1.6输出低电平 TR0=1; BEEP=1; //开始计数 delay_ms(30); BEEP=0; //停止计数 LedBuff[0]=LedChar[TL0%10]; LedBuff[1]=LedChar[(TL0/10)%10]; LedBuff[2]=LedChar[(TL0/100)%10]; LedBuff[3]=0x7F&LedChar[TH0%10];//加上小数点好区分 LedBuff[4]=LedChar[(TH0/10)%10]; LedBuff[5]=LedChar[(TH0/100)%10]; while(1) { SEG_Scan();//读取TH0和TL0的值 } } 数码管显示150.109,所以 (150*256+109)*(12/11059200)= 0.0417849s 捕获到的高电平时间为41.7849ms,可以说精度相当高。 这里大家忘记为什么“150*256”的话,请回去复习本章之前的内容。 还有TMOD的第七位GATE的功能与第三位的GATE的功能一样,只不过用的是定时器1来计数,触发开启计数的引脚为P3.3而已。详细请参考《手把手教你学51单片机》文档5.2.2节
上一篇:51单片机-单独文件封装
下一篇:51单片机-数据类型强制转换
史海拾趣
|
新手求助: 自己回复别人的帖子,自己不能编辑? 也不能删除吗? 自己回复别人的帖子,自己不能编辑? 也不能删除吗? 我回复别人的问题, 由于不熟, 在插入图片时忘记按\"插入图片\"的按钮了,直接输入了图片的地址, 所以只有第一张图篇操作正确, 另外的图片成了地址的字符. 当时以为是我哪里搞错了,就又重发了几次 ...… 查看全部问答> |
|
南京招聘:有嵌入式及硬件基础知识的Delphi BCB程序员,从事监控主站开发 南京招聘:有嵌入式及硬件基础知识的Delphi BCB程序员,从事监控主站开发 要求: 1:熟悉Delphi开发环境。 2:熟练使用SQL-Server编程语言 3:了解一定的硬件知识和 ...… 查看全部问答> |
|
SEDR18系列模块是一款高效的LED驱动IC。可以直接介入110V和220V交流电,获得稳定的横流输出。输出电流稳定、输出电压范围大是SEDR18系列模块的主要特点。改变负载LED的数量,使得SEDR18模块的输出电压随之变化,则SEDR18模块的输出电流可以稳定在15 ...… 查看全部问答> |
|
众所周知,LED是将电能直接转换成光的晶体管元件,LED 背光模块(BLU)正在推动总体LED市场成长,但在未来一段时间,LED照明将引领这个市场的增长。 如何使LED将大部分能量转换为可见频谱的冷光,而不以发热的形式浪费电能,德州仪器(TI) ...… 查看全部问答> |




