数码之家

 找回密码
 立即注册
搜索
查看: 2531|回复: 4

[C51] 如何检测霍尔元件

[复制链接]
发表于 2021-3-1 22:54:17 来自手机浏览器 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一个收带轮下面有个圆磁铁,旁边固定一颗霍尔元件,收带轮旋转时,霍尔周期性感应到高低电平,当收带轮停止旋转时,霍尔可能一直是高电平,也可能一直是低电平。想写个检测收带轮停止旋转就报警的程序,可惜不会,朋友们帮帮我吧,用keil环境。
发表于 2021-3-2 01:37:20 | 显示全部楼层
我都是5v供电输出脚直接发光二极管磁铁监测,要注意磁铁极性
回复 支持 反对

使用道具 举报

发表于 2021-3-2 02:09:17 | 显示全部楼层
延时最大周期报警。
回复 支持 反对

使用道具 举报

发表于 2021-3-2 03:33:05 | 显示全部楼层
本帖最后由 wuheart 于 2021-3-2 04:13 编辑

只会复制粘贴 水平有限 加个STC ISP 下的STC8G.H头文件编译一下就可以

/**********************************************************************************************
STC8G1K08     12MHZ
         
        P5.4 检测输入  P3.3-OUT 报警输出  
**********************************************************************************************/






#include<STC8G.h>
#include<intrins.h>


#define    Y  3   //每检测时间内转速低于3转(或3个脉冲)报警  转数改这个


#define    M  10000   //检测时间内转速低于3转报警 改这个1000=1秒 10000=10秒低于3转 P3.3脚报警脚输出高电平,高于等于3转低电平,统计时间改这个

sbit OUT=P3^3;        



typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;




unsigned long   msec,sec ,temp,temp2,temp3;

void TM0_Init()
{  
        
            

  
                                   
        TMOD |= 0x04; //外部计数模式
        
        TL0 = 0xff;
        
        TH0 = 0xff;
        
        TR0 = 0; //启动定时器
        ET0 = 1; //使能定时器中断
        EA = 1;
        
        
}  


void TM1_Init()                //1000微秒@12.000MHz

        
{
        AUXR |=0x40;                //定时器时钟1T模式 0x40 1T

        TMOD &= 0x0F;                //设置定时器模式
        
        

        TL1 = 0x20;                //设置定时初值
        TH1 = 0xD1;                //设置定时初值
        TF1 = 0;                //清除TF1标志
        TR1 = 1;                //定时器1开始计时
        ET1 = 1; //使能定时器中断
        EA = 1;
        
        
}


void TM1_Isr() interrupt 3
{

        
  msec++;
        
  if (msec ==M) // 1MS*1000=1S

  {
    TR0 = 0; //关闭TIMER0
    TR1 = 0; //关闭TIMER1
    msec = 0;
    sec = 1; //秒标记
               
  }
}






void TM0_Isr() interrupt 1
{   
  
        temp2 ++;    //计转数
}  




void main ()  
{  
        OUT=0;
        P3M1=0x00;
        P3M0=0xff;
        P5M1=0xff;
        P5M0=0x00;
        
OUT=0;
sec=0;
temp3=0;   
temp2=0;   
msec=0;        
        
TM0_Init();
TM1_Init();
        


        
        

         while (1)
  {
        
    if (sec==1)
    {
  if(temp2<Y)
        {
                        
                OUT=1;
        }
                if(temp2>=Y)
                {
                OUT=0;
                }
      TH0 = 0xff;
      TL0 = 0xff;
      sec = 0;
      temp2 = 0;
                        
      TR1 = 1;
           TR0 = 1;
     
    }
               
        
   
      
  }
}


打赏

参与人数 2家元 +25 收起 理由
lzb833 + 15 精彩回帖
数码家园 + 10 熱心助人

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-2 09:28:32 | 显示全部楼层
wuheart 发表于 2021-3-2 03:33
只会复制粘贴 水平有限 加个STC ISP 下的STC8G.H头文件编译一下就可以

/******************************** ...

看懂了,CPU型号不一样,改动一下就能使用啦,我抽空测试一下,非常感谢。:praise::handshake:
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-5 21:33 , Processed in 0.374400 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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