📄 定时器测发动机转速.txt
字号:
一个关于计数器和定时器的C程序
最近在用51做一个测发动机转速的电路,大致情况是这样子的
从发动机引出一个点火脉冲信号,每一个脉冲点火一次,发动机转一周
将这个电压信号引出
最后将转速数据由七段数码管显示
因为单片机电路不做其他事情,只测转速,所以用查询方式就可以了
我的方案是
将点火电压信号连到T0上作为外部脉冲
将T1设为定时器,T0设为计数器
两者同时启动,同时停止,将在定时时间内T0里的计数值提取,也就是在定时时间内外部脉冲走过的数目
按比例换算成每分多少转,然后从I/O口输出即可
大致流程如下
1,设置T1T0工作方式
2,初始化T1T0
3,启动T1T0
4,查询等待TF1是否为1,为1则执行下一步,不为1则继续等待
5,关T0T1
6,提取T0里的值并按比例转换为每分钟转数
7,转换为实际显示数值的BCD码(如实际6000转,则让从P1P2口输出0110000000000000)
8,输出至P1P2口
9,返回至第2步循环
在I/O口与数码管之间有译码锁存电路,可以将BCD码翻译为对应的十进制数显示在数码管上
我是新手,只有这么个简单的思路,有好多地方不是很合理
希望大家能批评指正,并给出C程序
#include <reg.51>
void main(void)
{ TMOD=0X16
for( ; ; )
{ TH1=(65536-60000)/256
TL1=(65536-60000)%256
TH0=0
TL0=0
TR1=1
TR0=1
do{ } while {!TF1}
TR0=0
TR1=0
.../*取计数器0里的值转化为实际十进制数的bcd码送入p1,p2口*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -