请教一个关于 用定时器T1 计算频率宽度的问题
时间:10-02
整理:3721RD
点击:
各位大神现在有个问题
需要以一个1MS 为溢出周期的 定时器1 T1,来计算一个频率的宽度(以频率发生器为25HZ) 外部频率发生器 接入P1.1
具体思维就是设置一个变量 A ,当接收到P1.1 上升沿时 开始计数,在收到P1.1的下一次上升沿后停止计数 并且把这个变量A保存。 这个A*1MS的值就是 这一个方波的时间宽度, 请问这个C 语言该如何写呢? 我捣鼓了1周了 没想明白
需要以一个1MS 为溢出周期的 定时器1 T1,来计算一个频率的宽度(以频率发生器为25HZ) 外部频率发生器 接入P1.1
具体思维就是设置一个变量 A ,当接收到P1.1 上升沿时 开始计数,在收到P1.1的下一次上升沿后停止计数 并且把这个变量A保存。 这个A*1MS的值就是 这一个方波的时间宽度, 请问这个C 语言该如何写呢? 我捣鼓了1周了 没想明白
检测到上升沿开始启动定时器。检测到下降沿关闭定时里,计算时间就可以了
使用有双向外部中断功能的I/O口检测脉冲宽度。
这个要分情况考虑:
首先要确定你用的P1.1是用了普通了GPIO功能还是输入捕捉功能。
如果用的是GPIO功能的话,就要看你的P1.1口复位之后的状态是什么,如果复位状态是高电平,那么你的就需要在第一个低电平启动定时器,第二个低电平停止定时器,然后得出时间,就得到频率了;反之,如果复位状态是低电平,那你就需要在第一个高电平启动定时器,第二个高电平停止计时器,然后得出时间。
如果用到了该引脚的输入捕捉功能,那么只需要配置好相应的寄存器即可。得到第一个高电平的时间和第二个高电平的时间,通过相减就能得到时间差,从而得到频率!
因为我的这个频率宽 大概是40MS 如果只是检测上升和下降 也就是只检测了20MS 左右, 我担心精度不够 所以我想的 是 能够检测一个完整宽度
普通使用。
定时器1ms 一次中断, 在中断中我都以上升沿启动计数累加 在下一个上升沿 停止计数累加 关闭定时器
C不知道该如何写
单片机有捕获功能就很好弄了
好像有个软件来着
这个应该可以用计数器功能吧,一个定时器做计数器用,记录输入的脉冲个数,另一个定时器做定时器用,确定一个定时周期,剩下的就是如何计算出频率的事了