|
发表于 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;
}
}
}
|
打赏
-
查看全部打赏
|