找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1298|回复: 6
打印 上一主题 下一主题
收起左侧

求助,想写一个测速器,计不准

[复制链接]
跳转到指定楼层
楼主
ID:238703 发表于 2018-1-26 22:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想写一个测速器,检测两个中断口之间的延时,以测试速度,但是输出的值不准,往往实际上一秒他会输出018,两秒他会输出032这样的无效数字



#include <reg51.h>
///---------------------------------------申明区------------------------------------------------
unsigned char num,bai,shi,ge;
sbit iobai=P2^1;
sbit ioshi=P2^2;
sbit ioge=P2^3;
unsigned char i;

unsigned char code table[]= //1-0数码管代码
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//---------------------------------------void区--------------------------------------------------
void delay5ms(void)   //误差 -0.000000000001us
{
    unsigned char a,b;
    for(b=15;b>0;b--)      
        for(a=152;a>0;a--);
}
void Timer0Interrupt(void) interrupt 1 //定时器,10ms自加1
{
    TL0=0xFF;  
TH0=0xB7;
    num++;  
}
void INIT1(void) interrupt 2
{
num=0;
}
void INIT0(void) interrupt 0 //中断
{
for(i=1000;i>0;i--)

{
P0=table[bai];
iobai=1;
delay5ms();
P0=0xff;
iobai=0;

P0=table[shi];
ioshi=1;
delay5ms();
P0=0xff;
ioshi=0;

P0= table[ge];
ioge=1;
delay5ms();
P0=0xff;
ioge=0;  
   
num=0;
}
}
//--------------------------------------------主函数区-------------------------------------------
void main(void)               
{
iobai=0;
ioshi=0;
ioge=0;  //数码管禁止亮起
num=0;
    TMOD|=0x01;            //设置定时器0为方式1
    TL0=0xFF;              //设置定时器0初值低8位
    TH0=0xB7;              //设置定时器0初值高8位
    EA = 1;
    ET0 = 1;
    TR0 = 1;//定时器设置
    IT1=1;                 //下降沿触发方式
    EX1=1;                 //外部INT1中断允许
    IT0=1;                 //下降沿触发方式
    EX0=1;                 //外部INT0中断允许
while(1)
{
bai=num/100%10;   
shi=num/10%10;
   ge=num%10;
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:238703 发表于 2018-1-26 22:07 | 只看该作者
求助,希望各位前辈帮帮我,感激不尽
回复

使用道具 举报

板凳
ID:7485 发表于 2018-1-27 09:24 | 只看该作者
INIT1和INIT0的中断信号是怎么产生的?传感器?
回复

使用道具 举报

地板
ID:238703 发表于 2018-1-27 15:28 | 只看该作者
ahshmj 发表于 2018-1-27 09:24
INIT1和INIT0的中断信号是怎么产生的?传感器?

是的,靠传感器
回复

使用道具 举报

5#
ID:238825 发表于 2018-1-27 16:05 | 只看该作者
楼主的思路就是错的!检测中断的之间的延时,中断什么时候发生爽不确定的,所以输出值不一样这是正常的。哪有这样写测速的!测速的你要么使用霍尔传感器来计算速度。要么使用其他旋转编码器测量速度。
回复

使用道具 举报

6#
ID:280221 发表于 2018-1-27 16:30 | 只看该作者
脉冲中断
回复

使用道具 举报

7#
ID:279646 发表于 2018-1-27 19:05 | 只看该作者
你这个程序写的很混乱。说实话我看不懂你这写的是什么意思。写之前你要想好测速度的算法是怎么样的。
不知道你要测什么速度。如果是转速,那应该用光电传感器或者霍尔传感器,然后设置定时器为计数器模式,把信号从T0/T1的引脚接入,然后定时1s,用脉冲数除以1s得到转速。

评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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