标题: 检测51单片机某个io口输入信号的高低电平时间 [打印本页]
作者: Wukaihang 时间: 2018-5-25 00:19
标题: 检测51单片机某个io口输入信号的高低电平时间
本人是个新手刚刚接触51单片机,怎么编程去计算51单片机某个io口的输入高低电平时间,比如我从P1.0口输入了一个方波信号,那么怎么通过单片机编程去检测我这个方波高电平的时间(或者说长度),还有低电平的时间(或者说长度),这个检测时间要精确到ms。
作者: 15942379927 时间: 2018-5-25 06:52
可以。当P1.0管脚变成低电平时。试着触发定时器T0,在每一次进入定时器中断的时候计数并显示就可以了
作者: ahshmj 时间: 2018-5-25 10:02
普通IO口,可以像检测按键一样的检测某个脚的状态,检测到上升沿开始计时,下降沿停止计时,读取即时数据即可。
如果使用int0、int1端口可以采用中断方式,上升沿触发中断,中断程序中启动定时器、转下降沿触发,再中断时停止计时,并读取时间数据。不过传统的AT89***系列没有”上升沿触发”功能,仅有低电平和下降沿触发。如果使用这类芯片可以使用外部的反相器实现,这个就比较麻烦了。
据我所知,STC的后来的1T单片机好像都有这个功能。
作者: devcang 时间: 2018-5-25 11:14
可以使用 外部中断+定时器
作者: hxy007 时间: 2018-5-25 12:53
外部中断加定时器了解一下
作者: cjtdyl 时间: 2018-5-25 14:06
后期STC单片机的INT0可上升沿和下降沿中断, 中断后打开定时器计时,再次中断时读取定时器,两个时间一减即为电平时长,当然还可能定时器溢出.这个在要定时器中断里处理.
作者: 一夜花草 时间: 2018-5-25 18:14
可以用单片机定时器控制
作者: zl2168 时间: 2018-5-25 22:09
本帖最后由 zl2168 于 2018-5-25 22:16 编辑
你的题目叫检测脉冲宽度,介绍你一个仿真案例
以上摘自张志良编著
《80C51单片机实用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于学习51单片机原理,程序(双解c和汇编)语句条条有注解,便于阅读理解,便于自学,可从零基础c语言开始学习。
作者: xdfl 时间: 2018-5-25 22:44
外部中断,检测到一个上升沿,定时开启(加个反相器判断上升沿)。在找一个外部中断判断下降沿关闭定时,得出高电平时间。当然要把方波同时接到两个外部中断口。
作者: vectorxu 时间: 2019-5-24 15:59
谢谢8楼,下载学习。
作者: vectorxu 时间: 2019-5-24 16:03
老大,没有原程序
作者: lele5211314 时间: 2019-5-24 18:22
利用定时器
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |