单片机一个引脚输入高低电平,怎么编写C51程序处理信号?

我用的是C8051F530A单片机,其中一个引脚接一个振动传感器,有振动时,引脚输入高电平;没有振动,引脚出于低电平,怎么编写C51程序处理高电平信号呢?最好有些参考程序,能有好心人帮编写程序更好。
图中,传感器相当于一个闭合开关,有振动则传感器断路,输入引脚高电平;没振动,传感器闭合,输入引脚低电平。
有好答案提高分数奖励。

我用的是C8051F530A单片机,其中一个引脚接一个振动传感器,有振动时,引脚输入高电平;没有振动,引脚出于低电平,怎么编写C51程序处理高电平信号呢?最好有些参考程序,能有好心人帮编写程序更好。
有好答案提高分数奖励。

高分不高分倒是小事,我干白忙乎的事太多了。C8051F530A单片机由于有交叉开关,得知道你用哪个IO管脚检测这个输入信号才好给出参考程序,还有你没指出用C还是汇编编程。
前面没看到你的图,步骤大概如下:
MOV P0MDIN,#0FFH ;端口0输入方式配置寄存器,全部数字输入
MOV P0MDOUT,#00H ;端口0输出方式配置寄存器,全部开漏
MOV P0SKIP,#0FFH ;端口0跳过寄存器,全部跳过
MOV P0,#0FFH ;

MOV XBR0,#00H ;端口I/O 交叉开关控制0
MOV XBR1,#40H ;端口I/O 交叉开关控制1追问

我是个 菜鸟,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;

}

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答