我用的是C8051F530A单片机,其中一个引脚接一个振动传感器,有振动时,引脚输入高电平;没有振动,引脚出于低电平,怎么编写C51程序处理高电平信号呢?最好有些参考程序,能有好心人帮编写程序更好。
图中,传感器相当于一个闭合开关,有振动则传感器断路,输入引脚高电平;没振动,传感器闭合,输入引脚低电平。
有好答案提高分数奖励。
我是个 菜鸟,51单片机还没怎么搞明白呢,手头正在摸索C8051F530A单片机,做一个安防报警器,好愁人啊,用的是C语言程序,我的初步信号处理方法是这样的,【事件1:高电平的宽度(也就是持续时间)需要超过预设的值】在预设的时间窗内(也就是一定的时间内),事件1发生的次数超过预设的次数,就产生报警。
知道您擅长汇编,我想擅长汇编的工程师一定擅长C语言,或者我把汇编嵌入C51程序中。
报警信号也是高低电平控制吧?高电平报警还是低电平报警?你最好也贴个图上来。
还有,有没有中文数据手册?
另外,【事件1:高电平的宽度(也就是持续时间)需要超过预设的值】
持续时间是多少?允许误差是多少?
在预设的时间窗内(也就是一定的时间内)
时间窗是多长时间?
高电平报警,这个振动报警器很简单的,
有振动,球会跳起,引脚输入高电平报警。
高电平的宽度(持续时间)先设为50ms,允许误差要求不超过1ms(相对50ms挺小就行),时间窗是5s,事件1发生次数超过3次报警。
给你个程序框架,监测和控制部分(都在定时中断函数内)你自己加。
//假设晶振12MHZ
#include "C8051F530.h"
unsigned int MSJS=0;毫秒计时器
unsigned int ZDJS=0;振动次数计数器
unsigned int TIME=0;时间窗计时器
sbit input=P0^3;信号输入
sbit input=P0^7;报警输出
void main(void)
{
P0MDIN=0XFF;//端口0输入方式配置寄存器,全部不配置为模拟输入
P0MDOUT=0X80;//端口0输出方式配置寄存器,D7推挽,其余开漏
P0SKIP=0XFF;//端口0跳过寄存器,全部跳过
P0=0X7F;
XBR0=0X00;//端口I/O 交叉开关控制0
XBR1=0X40;//端口I/O 交叉开关控制1
TMOD |= 0X10; //定时器1工作于方式1,16位定时器
TH1 = 0XFE; //定时器1定时时间=500uS
TL1 = 0X0C;
ET1 = 1; //使能定时器1中断
EA =1; //开总中断
while(1)
{
}
}
void TIMER1(void) interrupt 3 //定时器1中断函数使用默认寄存器组
{
TH1 = 0XFE; //定时器1定时时间=500uS
TL1 = 0X0C;
}